Boost logo

Boost-Commit :

From: troy_at_[hidden]
Date: 2008-06-29 10:41:34


Author: troy
Date: 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
New Revision: 46848
URL: http://svn.boost.org/trac/boost/changeset/46848

Log:
svnmerging from release 1.36.0 release branch
Added:
   branches/CMake/release/boost/accumulators/
      - copied from r46809, /branches/release/boost/accumulators/
   branches/CMake/release/boost/accumulators/accumulators.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/accumulators.hpp
   branches/CMake/release/boost/accumulators/accumulators_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/accumulators_fwd.hpp
   branches/CMake/release/boost/accumulators/framework/
      - copied from r46809, /branches/release/boost/accumulators/framework/
   branches/CMake/release/boost/accumulators/framework/accumulator_base.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/accumulator_base.hpp
   branches/CMake/release/boost/accumulators/framework/accumulator_concept.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/accumulator_concept.hpp
   branches/CMake/release/boost/accumulators/framework/accumulator_set.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/accumulator_set.hpp
   branches/CMake/release/boost/accumulators/framework/accumulators/
      - copied from r46809, /branches/release/boost/accumulators/framework/accumulators/
   branches/CMake/release/boost/accumulators/framework/accumulators/droppable_accumulator.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/accumulators/droppable_accumulator.hpp
   branches/CMake/release/boost/accumulators/framework/accumulators/external_accumulator.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/accumulators/external_accumulator.hpp
   branches/CMake/release/boost/accumulators/framework/accumulators/reference_accumulator.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/accumulators/reference_accumulator.hpp
   branches/CMake/release/boost/accumulators/framework/accumulators/value_accumulator.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/accumulators/value_accumulator.hpp
   branches/CMake/release/boost/accumulators/framework/depends_on.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/depends_on.hpp
   branches/CMake/release/boost/accumulators/framework/external.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/external.hpp
   branches/CMake/release/boost/accumulators/framework/extractor.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/extractor.hpp
   branches/CMake/release/boost/accumulators/framework/features.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/features.hpp
   branches/CMake/release/boost/accumulators/framework/parameters/
      - copied from r46809, /branches/release/boost/accumulators/framework/parameters/
   branches/CMake/release/boost/accumulators/framework/parameters/accumulator.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/parameters/accumulator.hpp
   branches/CMake/release/boost/accumulators/framework/parameters/sample.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/parameters/sample.hpp
   branches/CMake/release/boost/accumulators/framework/parameters/weight.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/parameters/weight.hpp
   branches/CMake/release/boost/accumulators/framework/parameters/weights.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/framework/parameters/weights.hpp
   branches/CMake/release/boost/accumulators/numeric/
      - copied from r46809, /branches/release/boost/accumulators/numeric/
   branches/CMake/release/boost/accumulators/numeric/detail/
      - copied from r46809, /branches/release/boost/accumulators/numeric/detail/
   branches/CMake/release/boost/accumulators/numeric/detail/function1.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/detail/function1.hpp
   branches/CMake/release/boost/accumulators/numeric/detail/function2.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/detail/function2.hpp
   branches/CMake/release/boost/accumulators/numeric/detail/function3.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/detail/function3.hpp
   branches/CMake/release/boost/accumulators/numeric/detail/function4.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/detail/function4.hpp
   branches/CMake/release/boost/accumulators/numeric/detail/function_n.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/detail/function_n.hpp
   branches/CMake/release/boost/accumulators/numeric/detail/pod_singleton.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/detail/pod_singleton.hpp
   branches/CMake/release/boost/accumulators/numeric/functional/
      - copied from r46809, /branches/release/boost/accumulators/numeric/functional/
   branches/CMake/release/boost/accumulators/numeric/functional.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/functional.hpp
   branches/CMake/release/boost/accumulators/numeric/functional/complex.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/functional/complex.hpp
   branches/CMake/release/boost/accumulators/numeric/functional/valarray.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/functional/valarray.hpp
   branches/CMake/release/boost/accumulators/numeric/functional/vector.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/functional/vector.hpp
   branches/CMake/release/boost/accumulators/numeric/functional_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/numeric/functional_fwd.hpp
   branches/CMake/release/boost/accumulators/statistics/
      - copied from r46809, /branches/release/boost/accumulators/statistics/
   branches/CMake/release/boost/accumulators/statistics.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics.hpp
   branches/CMake/release/boost/accumulators/statistics/count.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/count.hpp
   branches/CMake/release/boost/accumulators/statistics/covariance.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/covariance.hpp
   branches/CMake/release/boost/accumulators/statistics/density.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/density.hpp
   branches/CMake/release/boost/accumulators/statistics/error_of.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/error_of.hpp
   branches/CMake/release/boost/accumulators/statistics/error_of_mean.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/error_of_mean.hpp
   branches/CMake/release/boost/accumulators/statistics/extended_p_square.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/extended_p_square.hpp
   branches/CMake/release/boost/accumulators/statistics/extended_p_square_quantile.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/extended_p_square_quantile.hpp
   branches/CMake/release/boost/accumulators/statistics/kurtosis.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/kurtosis.hpp
   branches/CMake/release/boost/accumulators/statistics/max.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/max.hpp
   branches/CMake/release/boost/accumulators/statistics/mean.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/mean.hpp
   branches/CMake/release/boost/accumulators/statistics/median.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/median.hpp
   branches/CMake/release/boost/accumulators/statistics/min.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/min.hpp
   branches/CMake/release/boost/accumulators/statistics/moment.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/moment.hpp
   branches/CMake/release/boost/accumulators/statistics/p_square_cumulative_distribution.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/p_square_cumulative_distribution.hpp
   branches/CMake/release/boost/accumulators/statistics/p_square_quantile.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/p_square_quantile.hpp
   branches/CMake/release/boost/accumulators/statistics/parameters/
      - copied from r46809, /branches/release/boost/accumulators/statistics/parameters/
   branches/CMake/release/boost/accumulators/statistics/parameters/quantile_probability.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/parameters/quantile_probability.hpp
   branches/CMake/release/boost/accumulators/statistics/peaks_over_threshold.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/peaks_over_threshold.hpp
   branches/CMake/release/boost/accumulators/statistics/pot_quantile.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/pot_quantile.hpp
   branches/CMake/release/boost/accumulators/statistics/pot_tail_mean.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/pot_tail_mean.hpp
   branches/CMake/release/boost/accumulators/statistics/skewness.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/skewness.hpp
   branches/CMake/release/boost/accumulators/statistics/stats.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/stats.hpp
   branches/CMake/release/boost/accumulators/statistics/sum.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/sum.hpp
   branches/CMake/release/boost/accumulators/statistics/tail.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/tail.hpp
   branches/CMake/release/boost/accumulators/statistics/tail_mean.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/tail_mean.hpp
   branches/CMake/release/boost/accumulators/statistics/tail_quantile.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/tail_quantile.hpp
   branches/CMake/release/boost/accumulators/statistics/tail_variate.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/tail_variate.hpp
   branches/CMake/release/boost/accumulators/statistics/tail_variate_means.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/tail_variate_means.hpp
   branches/CMake/release/boost/accumulators/statistics/times2_iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/times2_iterator.hpp
   branches/CMake/release/boost/accumulators/statistics/variance.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/variance.hpp
   branches/CMake/release/boost/accumulators/statistics/variates/
      - copied from r46809, /branches/release/boost/accumulators/statistics/variates/
   branches/CMake/release/boost/accumulators/statistics/variates/covariate.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/variates/covariate.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_covariance.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_covariance.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_density.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_density.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_extended_p_square.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_extended_p_square.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_kurtosis.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_kurtosis.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_mean.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_mean.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_median.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_median.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_moment.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_moment.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_p_square_quantile.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_p_square_quantile.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_skewness.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_skewness.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_sum.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_sum.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_tail_mean.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_tail_mean.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_tail_quantile.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_tail_quantile.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_tail_variate_means.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_tail_variate_means.hpp
   branches/CMake/release/boost/accumulators/statistics/weighted_variance.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/weighted_variance.hpp
   branches/CMake/release/boost/accumulators/statistics/with_error.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics/with_error.hpp
   branches/CMake/release/boost/accumulators/statistics_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/accumulators/statistics_fwd.hpp
   branches/CMake/release/boost/asio/basic_raw_socket.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/basic_raw_socket.hpp
   branches/CMake/release/boost/asio/basic_serial_port.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/basic_serial_port.hpp
   branches/CMake/release/boost/asio/buffers_iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/buffers_iterator.hpp
   branches/CMake/release/boost/asio/detail/descriptor_ops.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/detail/descriptor_ops.hpp
   branches/CMake/release/boost/asio/detail/handler_base_from_member.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/detail/handler_base_from_member.hpp
   branches/CMake/release/boost/asio/detail/indirect_handler_queue.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/detail/indirect_handler_queue.hpp
   branches/CMake/release/boost/asio/detail/reactive_descriptor_service.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/detail/reactive_descriptor_service.hpp
   branches/CMake/release/boost/asio/detail/reactive_serial_port_service.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/detail/reactive_serial_port_service.hpp
   branches/CMake/release/boost/asio/detail/task_io_service_2lock.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/detail/task_io_service_2lock.hpp
   branches/CMake/release/boost/asio/detail/win_iocp_handle_service.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/detail/win_iocp_handle_service.hpp
   branches/CMake/release/boost/asio/detail/win_iocp_serial_port_service.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/detail/win_iocp_serial_port_service.hpp
   branches/CMake/release/boost/asio/impl/read_at.ipp
      - copied unchanged from r46809, /branches/release/boost/asio/impl/read_at.ipp
   branches/CMake/release/boost/asio/impl/serial_port_base.ipp
      - copied unchanged from r46809, /branches/release/boost/asio/impl/serial_port_base.ipp
   branches/CMake/release/boost/asio/impl/write_at.ipp
      - copied unchanged from r46809, /branches/release/boost/asio/impl/write_at.ipp
   branches/CMake/release/boost/asio/ip/icmp.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/ip/icmp.hpp
   branches/CMake/release/boost/asio/local/
      - copied from r46809, /branches/release/boost/asio/local/
   branches/CMake/release/boost/asio/local/basic_endpoint.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/local/basic_endpoint.hpp
   branches/CMake/release/boost/asio/local/connect_pair.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/local/connect_pair.hpp
   branches/CMake/release/boost/asio/local/datagram_protocol.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/local/datagram_protocol.hpp
   branches/CMake/release/boost/asio/local/stream_protocol.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/local/stream_protocol.hpp
   branches/CMake/release/boost/asio/posix/
      - copied from r46809, /branches/release/boost/asio/posix/
   branches/CMake/release/boost/asio/posix/basic_descriptor.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/posix/basic_descriptor.hpp
   branches/CMake/release/boost/asio/posix/basic_stream_descriptor.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/posix/basic_stream_descriptor.hpp
   branches/CMake/release/boost/asio/posix/descriptor_base.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/posix/descriptor_base.hpp
   branches/CMake/release/boost/asio/posix/stream_descriptor.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/posix/stream_descriptor.hpp
   branches/CMake/release/boost/asio/posix/stream_descriptor_service.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/posix/stream_descriptor_service.hpp
   branches/CMake/release/boost/asio/raw_socket_service.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/raw_socket_service.hpp
   branches/CMake/release/boost/asio/read_at.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/read_at.hpp
   branches/CMake/release/boost/asio/serial_port.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/serial_port.hpp
   branches/CMake/release/boost/asio/serial_port_base.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/serial_port_base.hpp
   branches/CMake/release/boost/asio/serial_port_service.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/serial_port_service.hpp
   branches/CMake/release/boost/asio/windows/
      - copied from r46809, /branches/release/boost/asio/windows/
   branches/CMake/release/boost/asio/windows/basic_handle.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/windows/basic_handle.hpp
   branches/CMake/release/boost/asio/windows/basic_random_access_handle.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/windows/basic_random_access_handle.hpp
   branches/CMake/release/boost/asio/windows/basic_stream_handle.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/windows/basic_stream_handle.hpp
   branches/CMake/release/boost/asio/windows/random_access_handle.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/windows/random_access_handle.hpp
   branches/CMake/release/boost/asio/windows/random_access_handle_service.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/windows/random_access_handle_service.hpp
   branches/CMake/release/boost/asio/windows/stream_handle.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/windows/stream_handle.hpp
   branches/CMake/release/boost/asio/windows/stream_handle_service.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/windows/stream_handle_service.hpp
   branches/CMake/release/boost/asio/write_at.hpp
      - copied unchanged from r46809, /branches/release/boost/asio/write_at.hpp
   branches/CMake/release/boost/bind/bind_mf2_cc.hpp
      - copied unchanged from r46809, /branches/release/boost/bind/bind_mf2_cc.hpp
   branches/CMake/release/boost/config/warning_disable.hpp
      - copied unchanged from r46809, /branches/release/boost/config/warning_disable.hpp
   branches/CMake/release/boost/functional/hash/extensions.hpp
      - copied unchanged from r46809, /branches/release/boost/functional/hash/extensions.hpp
   branches/CMake/release/boost/interprocess/anonymous_shared_memory.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/anonymous_shared_memory.hpp
   branches/CMake/release/boost/interprocess/detail/intersegment_ptr.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/detail/intersegment_ptr.hpp
   branches/CMake/release/boost/interprocess/detail/managed_multi_shared_memory.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/detail/managed_multi_shared_memory.hpp
   branches/CMake/release/boost/interprocess/detail/managed_open_or_create_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/detail/managed_open_or_create_impl.hpp
   branches/CMake/release/boost/interprocess/detail/math_functions.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/detail/math_functions.hpp
   branches/CMake/release/boost/interprocess/detail/multi_segment_services.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/detail/multi_segment_services.hpp
   branches/CMake/release/boost/interprocess/detail/segment_manager_helper.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/detail/segment_manager_helper.hpp
   branches/CMake/release/boost/interprocess/detail/utilities.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/detail/utilities.hpp
   branches/CMake/release/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp
   branches/CMake/release/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp
   branches/CMake/release/boost/interprocess/sync/math_functions.hpp
      - copied unchanged from r46809, /branches/release/boost/interprocess/sync/math_functions.hpp
   branches/CMake/release/boost/intrusive/any_hook.hpp
      - copied unchanged from r46809, /branches/release/boost/intrusive/any_hook.hpp
   branches/CMake/release/boost/intrusive/detail/any_node_and_algorithms.hpp
      - copied unchanged from r46809, /branches/release/boost/intrusive/detail/any_node_and_algorithms.hpp
   branches/CMake/release/boost/intrusive/pointer_plus_bits.hpp
      - copied unchanged from r46809, /branches/release/boost/intrusive/pointer_plus_bits.hpp
   branches/CMake/release/boost/mpi/detail/binary_buffer_iprimitive.hpp
      - copied unchanged from r46809, /branches/release/boost/mpi/detail/binary_buffer_iprimitive.hpp
   branches/CMake/release/boost/mpi/detail/binary_buffer_oprimitive.hpp
      - copied unchanged from r46809, /branches/release/boost/mpi/detail/binary_buffer_oprimitive.hpp
   branches/CMake/release/boost/ptr_container/detail/meta_functions.hpp
      - copied unchanged from r46809, /branches/release/boost/ptr_container/detail/meta_functions.hpp
   branches/CMake/release/boost/ptr_container/ptr_circular_buffer.hpp
      - copied unchanged from r46809, /branches/release/boost/ptr_container/ptr_circular_buffer.hpp
   branches/CMake/release/boost/ptr_container/ptr_inserter.hpp
      - copied unchanged from r46809, /branches/release/boost/ptr_container/ptr_inserter.hpp
   branches/CMake/release/boost/ptr_container/ptr_unordered_map.hpp
      - copied unchanged from r46809, /branches/release/boost/ptr_container/ptr_unordered_map.hpp
   branches/CMake/release/boost/ptr_container/ptr_unordered_set.hpp
      - copied unchanged from r46809, /branches/release/boost/ptr_container/ptr_unordered_set.hpp
   branches/CMake/release/boost/ptr_container/serialize_ptr_circular_buffer.hpp
      - copied unchanged from r46809, /branches/release/boost/ptr_container/serialize_ptr_circular_buffer.hpp
   branches/CMake/release/boost/ptr_container/serialize_ptr_unordered_map.hpp
      - copied unchanged from r46809, /branches/release/boost/ptr_container/serialize_ptr_unordered_map.hpp
   branches/CMake/release/boost/ptr_container/serialize_ptr_unordered_set.hpp
      - copied unchanged from r46809, /branches/release/boost/ptr_container/serialize_ptr_unordered_set.hpp
   branches/CMake/release/boost/spirit/home/
      - copied from r46809, /branches/release/boost/spirit/home/
   branches/CMake/release/boost/spirit/home/classic/
      - copied from r46809, /branches/release/boost/spirit/home/classic/
   branches/CMake/release/boost/spirit/home/classic.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/
      - copied from r46809, /branches/release/boost/spirit/home/classic/actor/
   branches/CMake/release/boost/spirit/home/classic/actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/assign_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/assign_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/assign_key_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/assign_key_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/clear_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/clear_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/decrement_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/decrement_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/erase_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/erase_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/increment_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/increment_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/insert_at_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/insert_at_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/insert_key_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/insert_key_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/push_back_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/push_back_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/push_front_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/push_front_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/ref_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/ref_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/ref_const_ref_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/ref_value_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/ref_value_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/swap_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/swap_actor.hpp
   branches/CMake/release/boost/spirit/home/classic/actor/typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/actor/typeof.hpp
   branches/CMake/release/boost/spirit/home/classic/attribute/
      - copied from r46809, /branches/release/boost/spirit/home/classic/attribute/
   branches/CMake/release/boost/spirit/home/classic/attribute.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/attribute.hpp
   branches/CMake/release/boost/spirit/home/classic/attribute/closure.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/attribute/closure.hpp
   branches/CMake/release/boost/spirit/home/classic/attribute/closure_context.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/attribute/closure_context.hpp
   branches/CMake/release/boost/spirit/home/classic/attribute/closure_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/attribute/closure_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/attribute/parametric.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/attribute/parametric.hpp
   branches/CMake/release/boost/spirit/home/classic/attribute/typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/attribute/typeof.hpp
   branches/CMake/release/boost/spirit/home/classic/core/
      - copied from r46809, /branches/release/boost/spirit/home/classic/core/
   branches/CMake/release/boost/spirit/home/classic/core.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core.hpp
   branches/CMake/release/boost/spirit/home/classic/core/assert.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/assert.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/
      - copied from r46809, /branches/release/boost/spirit/home/classic/core/composite/
   branches/CMake/release/boost/spirit/home/classic/core/composite/actions.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/actions.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/alternative.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/alternative.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/composite.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/composite.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/difference.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/difference.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/directives.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/directives.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/epsilon.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/epsilon.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/exclusive_or.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/exclusive_or.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/alternative.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/alternative.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/difference.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/difference.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/directives.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/directives.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/intersection.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/intersection.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/kleene_star.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/kleene_star.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/list.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/list.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/optional.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/optional.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/positive.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/positive.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/sequence.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/sequence.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/sequential_and.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/sequential_and.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/impl/sequential_or.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/impl/sequential_or.ipp
   branches/CMake/release/boost/spirit/home/classic/core/composite/intersection.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/intersection.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/kleene_star.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/kleene_star.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/list.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/list.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/no_actions.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/no_actions.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/operators.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/operators.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/optional.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/optional.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/positive.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/positive.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/sequence.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/sequence.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/sequential_and.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/sequential_and.hpp
   branches/CMake/release/boost/spirit/home/classic/core/composite/sequential_or.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/composite/sequential_or.hpp
   branches/CMake/release/boost/spirit/home/classic/core/config.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/config.hpp
   branches/CMake/release/boost/spirit/home/classic/core/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/core/impl/
   branches/CMake/release/boost/spirit/home/classic/core/impl/match.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/impl/match.ipp
   branches/CMake/release/boost/spirit/home/classic/core/impl/match_attr_traits.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/impl/match_attr_traits.ipp
   branches/CMake/release/boost/spirit/home/classic/core/impl/parser.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/impl/parser.ipp
   branches/CMake/release/boost/spirit/home/classic/core/match.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/match.hpp
   branches/CMake/release/boost/spirit/home/classic/core/nil.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/nil.hpp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/
      - copied from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/grammar.hpp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/impl/
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/impl/rule.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/impl/rule.ipp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/impl/static.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/impl/static.hpp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/parser_context.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/parser_context.hpp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/parser_id.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/parser_id.hpp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/rule.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/rule.hpp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/subrule.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/subrule.hpp
   branches/CMake/release/boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/core/parser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/parser.hpp
   branches/CMake/release/boost/spirit/home/classic/core/primitives/
      - copied from r46809, /branches/release/boost/spirit/home/classic/core/primitives/
   branches/CMake/release/boost/spirit/home/classic/core/primitives/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/core/primitives/impl/
   branches/CMake/release/boost/spirit/home/classic/core/primitives/impl/numerics.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/primitives/impl/numerics.ipp
   branches/CMake/release/boost/spirit/home/classic/core/primitives/impl/primitives.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/primitives/impl/primitives.ipp
   branches/CMake/release/boost/spirit/home/classic/core/primitives/numerics.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/primitives/numerics.hpp
   branches/CMake/release/boost/spirit/home/classic/core/primitives/numerics_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/primitives/numerics_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/core/primitives/primitives.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/primitives/primitives.hpp
   branches/CMake/release/boost/spirit/home/classic/core/safe_bool.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/safe_bool.hpp
   branches/CMake/release/boost/spirit/home/classic/core/scanner/
      - copied from r46809, /branches/release/boost/spirit/home/classic/core/scanner/
   branches/CMake/release/boost/spirit/home/classic/core/scanner/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/core/scanner/impl/
   branches/CMake/release/boost/spirit/home/classic/core/scanner/impl/skipper.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/scanner/impl/skipper.ipp
   branches/CMake/release/boost/spirit/home/classic/core/scanner/scanner.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/scanner/scanner.hpp
   branches/CMake/release/boost/spirit/home/classic/core/scanner/scanner_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/scanner/scanner_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/core/scanner/skipper.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/scanner/skipper.hpp
   branches/CMake/release/boost/spirit/home/classic/core/scanner/skipper_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/scanner/skipper_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/core/typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/core/typeof.hpp
   branches/CMake/release/boost/spirit/home/classic/debug/
      - copied from r46809, /branches/release/boost/spirit/home/classic/debug/
   branches/CMake/release/boost/spirit/home/classic/debug.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/debug.hpp
   branches/CMake/release/boost/spirit/home/classic/debug/debug_node.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/debug/debug_node.hpp
   branches/CMake/release/boost/spirit/home/classic/debug/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/debug/impl/
   branches/CMake/release/boost/spirit/home/classic/debug/impl/parser_names.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/debug/impl/parser_names.ipp
   branches/CMake/release/boost/spirit/home/classic/debug/minimal.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/debug/minimal.hpp
   branches/CMake/release/boost/spirit/home/classic/debug/parser_names.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/debug/parser_names.hpp
   branches/CMake/release/boost/spirit/home/classic/debug/typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/debug/typeof.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/
      - copied from r46809, /branches/release/boost/spirit/home/classic/dynamic/
   branches/CMake/release/boost/spirit/home/classic/dynamic.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/for.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/for.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/if.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/if.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/dynamic/impl/
   branches/CMake/release/boost/spirit/home/classic/dynamic/impl/conditions.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/impl/conditions.ipp
   branches/CMake/release/boost/spirit/home/classic/dynamic/impl/select.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/impl/select.ipp
   branches/CMake/release/boost/spirit/home/classic/dynamic/impl/switch.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/impl/switch.ipp
   branches/CMake/release/boost/spirit/home/classic/dynamic/lazy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/lazy.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/rule_alias.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/rule_alias.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/select.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/select.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/stored_rule.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/stored_rule.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/switch.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/switch.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/typeof.hpp
   branches/CMake/release/boost/spirit/home/classic/dynamic/while.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/dynamic/while.hpp
   branches/CMake/release/boost/spirit/home/classic/error_handling/
      - copied from r46809, /branches/release/boost/spirit/home/classic/error_handling/
   branches/CMake/release/boost/spirit/home/classic/error_handling.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/error_handling.hpp
   branches/CMake/release/boost/spirit/home/classic/error_handling/exceptions.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/error_handling/exceptions.hpp
   branches/CMake/release/boost/spirit/home/classic/error_handling/exceptions_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/error_handling/exceptions_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/error_handling/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/error_handling/impl/
   branches/CMake/release/boost/spirit/home/classic/error_handling/impl/exceptions.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/error_handling/impl/exceptions.ipp
   branches/CMake/release/boost/spirit/home/classic/error_handling/typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/error_handling/typeof.hpp
   branches/CMake/release/boost/spirit/home/classic/iterator/
      - copied from r46809, /branches/release/boost/spirit/home/classic/iterator/
   branches/CMake/release/boost/spirit/home/classic/iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator.hpp
   branches/CMake/release/boost/spirit/home/classic/iterator/file_iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator/file_iterator.hpp
   branches/CMake/release/boost/spirit/home/classic/iterator/file_iterator_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator/file_iterator_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/iterator/fixed_size_queue.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator/fixed_size_queue.hpp
   branches/CMake/release/boost/spirit/home/classic/iterator/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/iterator/impl/
   branches/CMake/release/boost/spirit/home/classic/iterator/impl/file_iterator.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator/impl/file_iterator.ipp
   branches/CMake/release/boost/spirit/home/classic/iterator/impl/position_iterator.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator/impl/position_iterator.ipp
   branches/CMake/release/boost/spirit/home/classic/iterator/multi_pass.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator/multi_pass.hpp
   branches/CMake/release/boost/spirit/home/classic/iterator/multi_pass_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator/multi_pass_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/iterator/position_iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator/position_iterator.hpp
   branches/CMake/release/boost/spirit/home/classic/iterator/position_iterator_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator/position_iterator_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/iterator/typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/iterator/typeof.hpp
   branches/CMake/release/boost/spirit/home/classic/meta/
      - copied from r46809, /branches/release/boost/spirit/home/classic/meta/
   branches/CMake/release/boost/spirit/home/classic/meta.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/meta.hpp
   branches/CMake/release/boost/spirit/home/classic/meta/as_parser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/meta/as_parser.hpp
   branches/CMake/release/boost/spirit/home/classic/meta/fundamental.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/meta/fundamental.hpp
   branches/CMake/release/boost/spirit/home/classic/meta/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/meta/impl/
   branches/CMake/release/boost/spirit/home/classic/meta/impl/fundamental.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/meta/impl/fundamental.ipp
   branches/CMake/release/boost/spirit/home/classic/meta/impl/parser_traits.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/meta/impl/parser_traits.ipp
   branches/CMake/release/boost/spirit/home/classic/meta/impl/refactoring.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/meta/impl/refactoring.ipp
   branches/CMake/release/boost/spirit/home/classic/meta/impl/traverse.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/meta/impl/traverse.ipp
   branches/CMake/release/boost/spirit/home/classic/meta/parser_traits.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/meta/parser_traits.hpp
   branches/CMake/release/boost/spirit/home/classic/meta/refactoring.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/meta/refactoring.hpp
   branches/CMake/release/boost/spirit/home/classic/meta/traverse.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/meta/traverse.hpp
   branches/CMake/release/boost/spirit/home/classic/namespace.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/namespace.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/
      - copied from r46809, /branches/release/boost/spirit/home/classic/phoenix/
   branches/CMake/release/boost/spirit/home/classic/phoenix.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/actor.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/binders.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/binders.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/casts.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/casts.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/closures.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/closures.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/composite.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/composite.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/functions.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/functions.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/new.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/new.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/operators.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/operators.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/primitives.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/primitives.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/special_ops.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/special_ops.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/statements.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/statements.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/tuple_helpers.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/tuple_helpers.hpp
   branches/CMake/release/boost/spirit/home/classic/phoenix/tuples.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/phoenix/tuples.hpp
   branches/CMake/release/boost/spirit/home/classic/symbols/
      - copied from r46809, /branches/release/boost/spirit/home/classic/symbols/
   branches/CMake/release/boost/spirit/home/classic/symbols.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/symbols.hpp
   branches/CMake/release/boost/spirit/home/classic/symbols/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/symbols/impl/
   branches/CMake/release/boost/spirit/home/classic/symbols/impl/symbols.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/symbols/impl/symbols.ipp
   branches/CMake/release/boost/spirit/home/classic/symbols/impl/tst.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/symbols/impl/tst.ipp
   branches/CMake/release/boost/spirit/home/classic/symbols/symbols.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/symbols/symbols.hpp
   branches/CMake/release/boost/spirit/home/classic/symbols/symbols_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/symbols/symbols_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/symbols/typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/symbols/typeof.hpp
   branches/CMake/release/boost/spirit/home/classic/tree/
      - copied from r46809, /branches/release/boost/spirit/home/classic/tree/
   branches/CMake/release/boost/spirit/home/classic/tree/ast.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/ast.hpp
   branches/CMake/release/boost/spirit/home/classic/tree/ast_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/ast_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/tree/common.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/common.hpp
   branches/CMake/release/boost/spirit/home/classic/tree/common_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/common_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/tree/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/tree/impl/
   branches/CMake/release/boost/spirit/home/classic/tree/impl/parse_tree_utils.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/impl/parse_tree_utils.ipp
   branches/CMake/release/boost/spirit/home/classic/tree/impl/tree_to_xml.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/impl/tree_to_xml.ipp
   branches/CMake/release/boost/spirit/home/classic/tree/parse_tree.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/parse_tree.hpp
   branches/CMake/release/boost/spirit/home/classic/tree/parse_tree_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/parse_tree_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/tree/parse_tree_utils.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/parse_tree_utils.hpp
   branches/CMake/release/boost/spirit/home/classic/tree/parsetree.dtd
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/parsetree.dtd
   branches/CMake/release/boost/spirit/home/classic/tree/tree_to_xml.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/tree_to_xml.hpp
   branches/CMake/release/boost/spirit/home/classic/tree/typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/tree/typeof.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/
      - copied from r46809, /branches/release/boost/spirit/home/classic/utility/
   branches/CMake/release/boost/spirit/home/classic/utility.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/chset.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/chset.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/chset_operators.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/chset_operators.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/confix.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/confix.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/confix_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/confix_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/distinct.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/distinct.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/distinct_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/distinct_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/escape_char.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/escape_char.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/escape_char_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/escape_char_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/flush_multi_pass.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/flush_multi_pass.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/functor_parser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/functor_parser.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/grammar_def.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/grammar_def.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/grammar_def_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/grammar_def_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/impl/
      - copied from r46809, /branches/release/boost/spirit/home/classic/utility/impl/
   branches/CMake/release/boost/spirit/home/classic/utility/impl/chset/
      - copied from r46809, /branches/release/boost/spirit/home/classic/utility/impl/chset/
   branches/CMake/release/boost/spirit/home/classic/utility/impl/chset.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/impl/chset.ipp
   branches/CMake/release/boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp
   branches/CMake/release/boost/spirit/home/classic/utility/impl/chset/range_run.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/impl/chset/range_run.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/impl/chset/range_run.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/impl/chset/range_run.ipp
   branches/CMake/release/boost/spirit/home/classic/utility/impl/chset_operators.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/impl/chset_operators.ipp
   branches/CMake/release/boost/spirit/home/classic/utility/impl/confix.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/impl/confix.ipp
   branches/CMake/release/boost/spirit/home/classic/utility/impl/escape_char.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/impl/escape_char.ipp
   branches/CMake/release/boost/spirit/home/classic/utility/impl/lists.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/impl/lists.ipp
   branches/CMake/release/boost/spirit/home/classic/utility/impl/regex.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/impl/regex.ipp
   branches/CMake/release/boost/spirit/home/classic/utility/lists.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/lists.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/lists_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/lists_fwd.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/loops.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/loops.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/regex.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/regex.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/rule_parser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/rule_parser.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/scoped_lock.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/scoped_lock.hpp
   branches/CMake/release/boost/spirit/home/classic/utility/typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/utility/typeof.hpp
   branches/CMake/release/boost/spirit/home/classic/version.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/classic/version.hpp
   branches/CMake/release/boost/spirit/home/karma/
      - copied from r46809, /branches/release/boost/spirit/home/karma/
   branches/CMake/release/boost/spirit/home/karma.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma.hpp
   branches/CMake/release/boost/spirit/home/karma/action/
      - copied from r46809, /branches/release/boost/spirit/home/karma/action/
   branches/CMake/release/boost/spirit/home/karma/action.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/action.hpp
   branches/CMake/release/boost/spirit/home/karma/action/action.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/action/action.hpp
   branches/CMake/release/boost/spirit/home/karma/action/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/action/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/auxiliary/
      - copied from r46809, /branches/release/boost/spirit/home/karma/auxiliary/
   branches/CMake/release/boost/spirit/home/karma/auxiliary.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/auxiliary.hpp
   branches/CMake/release/boost/spirit/home/karma/auxiliary/eps.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/auxiliary/eps.hpp
   branches/CMake/release/boost/spirit/home/karma/auxiliary/functor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/auxiliary/functor.hpp
   branches/CMake/release/boost/spirit/home/karma/auxiliary/functor_director.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/auxiliary/functor_director.hpp
   branches/CMake/release/boost/spirit/home/karma/auxiliary/lazy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/auxiliary/lazy.hpp
   branches/CMake/release/boost/spirit/home/karma/auxiliary/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/auxiliary/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/auxiliary/none.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/auxiliary/none.hpp
   branches/CMake/release/boost/spirit/home/karma/binary/
      - copied from r46809, /branches/release/boost/spirit/home/karma/binary/
   branches/CMake/release/boost/spirit/home/karma/binary.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/binary.hpp
   branches/CMake/release/boost/spirit/home/karma/binary/binary.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/binary/binary.hpp
   branches/CMake/release/boost/spirit/home/karma/binary/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/binary/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/binary/padding.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/binary/padding.hpp
   branches/CMake/release/boost/spirit/home/karma/char/
      - copied from r46809, /branches/release/boost/spirit/home/karma/char/
   branches/CMake/release/boost/spirit/home/karma/char.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/char.hpp
   branches/CMake/release/boost/spirit/home/karma/char/char.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/char/char.hpp
   branches/CMake/release/boost/spirit/home/karma/char/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/char/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/char/space.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/char/space.hpp
   branches/CMake/release/boost/spirit/home/karma/delimit.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/delimit.hpp
   branches/CMake/release/boost/spirit/home/karma/detail/
      - copied from r46809, /branches/release/boost/spirit/home/karma/detail/
   branches/CMake/release/boost/spirit/home/karma/detail/generate_to.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/detail/generate_to.hpp
   branches/CMake/release/boost/spirit/home/karma/detail/ostream_iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/detail/ostream_iterator.hpp
   branches/CMake/release/boost/spirit/home/karma/detail/output_iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/detail/output_iterator.hpp
   branches/CMake/release/boost/spirit/home/karma/detail/string_generate.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/detail/string_generate.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/
      - copied from r46809, /branches/release/boost/spirit/home/karma/directive/
   branches/CMake/release/boost/spirit/home/karma/directive.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/alignment_meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/alignment_meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/case_meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/case_meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/center_alignment.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/center_alignment.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/delimit.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/delimit.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/delimiter_meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/delimiter_meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/detail/
      - copied from r46809, /branches/release/boost/spirit/home/karma/directive/detail/
   branches/CMake/release/boost/spirit/home/karma/directive/detail/center_alignment_generate.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/detail/center_alignment_generate.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/detail/left_alignment_generate.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/detail/left_alignment_generate.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/detail/right_alignment_generate.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/detail/right_alignment_generate.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/left_alignment.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/left_alignment.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/right_alignment.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/right_alignment.hpp
   branches/CMake/release/boost/spirit/home/karma/directive/verbatim.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/directive/verbatim.hpp
   branches/CMake/release/boost/spirit/home/karma/domain.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/domain.hpp
   branches/CMake/release/boost/spirit/home/karma/generate.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/generate.hpp
   branches/CMake/release/boost/spirit/home/karma/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/nonterminal/
      - copied from r46809, /branches/release/boost/spirit/home/karma/nonterminal/
   branches/CMake/release/boost/spirit/home/karma/nonterminal.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/nonterminal.hpp
   branches/CMake/release/boost/spirit/home/karma/nonterminal/detail/
      - copied from r46809, /branches/release/boost/spirit/home/karma/nonterminal/detail/
   branches/CMake/release/boost/spirit/home/karma/nonterminal/detail/rule.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/nonterminal/detail/rule.hpp
   branches/CMake/release/boost/spirit/home/karma/nonterminal/grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/nonterminal/grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/nonterminal/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/nonterminal/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/nonterminal/nonterminal.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/nonterminal/nonterminal.hpp
   branches/CMake/release/boost/spirit/home/karma/nonterminal/nonterminal_director.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/nonterminal/nonterminal_director.hpp
   branches/CMake/release/boost/spirit/home/karma/nonterminal/rule.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/nonterminal/rule.hpp
   branches/CMake/release/boost/spirit/home/karma/numeric/
      - copied from r46809, /branches/release/boost/spirit/home/karma/numeric/
   branches/CMake/release/boost/spirit/home/karma/numeric.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/numeric.hpp
   branches/CMake/release/boost/spirit/home/karma/numeric/detail/
      - copied from r46809, /branches/release/boost/spirit/home/karma/numeric/detail/
   branches/CMake/release/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/numeric/detail/numeric_utils.hpp
   branches/CMake/release/boost/spirit/home/karma/numeric/int.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/numeric/int.hpp
   branches/CMake/release/boost/spirit/home/karma/numeric/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/numeric/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/numeric/numeric_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/numeric/numeric_fwd.hpp
   branches/CMake/release/boost/spirit/home/karma/numeric/real.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/numeric/real.hpp
   branches/CMake/release/boost/spirit/home/karma/numeric/real_policies.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/numeric/real_policies.hpp
   branches/CMake/release/boost/spirit/home/karma/numeric/uint.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/numeric/uint.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/
      - copied from r46809, /branches/release/boost/spirit/home/karma/operator/
   branches/CMake/release/boost/spirit/home/karma/operator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/alternative.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/alternative.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/detail/
      - copied from r46809, /branches/release/boost/spirit/home/karma/operator/detail/
   branches/CMake/release/boost/spirit/home/karma/operator/detail/alternative.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/detail/alternative.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/detail/sequence.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/detail/sequence.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/karma-alt/
      - copied from r46809, /branches/release/boost/spirit/home/karma/operator/karma-alt/
   branches/CMake/release/boost/spirit/home/karma/operator/karma-alt.zip
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/karma-alt.zip
   branches/CMake/release/boost/spirit/home/karma/operator/karma-alt/alternative.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/karma-alt/alternative.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/karma-alt/detail/
      - copied from r46809, /branches/release/boost/spirit/home/karma/operator/karma-alt/detail/
   branches/CMake/release/boost/spirit/home/karma/operator/karma-alt/detail/alternative.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/karma-alt/detail/alternative.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/kleene.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/kleene.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/list.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/list.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/optional.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/optional.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/plus.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/plus.hpp
   branches/CMake/release/boost/spirit/home/karma/operator/sequence.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/operator/sequence.hpp
   branches/CMake/release/boost/spirit/home/karma/stream/
      - copied from r46809, /branches/release/boost/spirit/home/karma/stream/
   branches/CMake/release/boost/spirit/home/karma/stream.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/stream.hpp
   branches/CMake/release/boost/spirit/home/karma/stream/detail/
      - copied from r46809, /branches/release/boost/spirit/home/karma/stream/detail/
   branches/CMake/release/boost/spirit/home/karma/stream/detail/format_manip.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/stream/detail/format_manip.hpp
   branches/CMake/release/boost/spirit/home/karma/stream/detail/iterator_ostream.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/stream/detail/iterator_ostream.hpp
   branches/CMake/release/boost/spirit/home/karma/stream/format_manip.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/stream/format_manip.hpp
   branches/CMake/release/boost/spirit/home/karma/stream/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/stream/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/stream/stream.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/stream/stream.hpp
   branches/CMake/release/boost/spirit/home/karma/string/
      - copied from r46809, /branches/release/boost/spirit/home/karma/string/
   branches/CMake/release/boost/spirit/home/karma/string.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/string.hpp
   branches/CMake/release/boost/spirit/home/karma/string/lit.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/string/lit.hpp
   branches/CMake/release/boost/spirit/home/karma/string/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/string/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/karma/what.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/karma/what.hpp
   branches/CMake/release/boost/spirit/home/lex/
      - copied from r46809, /branches/release/boost/spirit/home/lex/
   branches/CMake/release/boost/spirit/home/lex.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex.hpp
   branches/CMake/release/boost/spirit/home/lex/domain.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/domain.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/
      - copied from r46809, /branches/release/boost/spirit/home/lex/lexer/
   branches/CMake/release/boost/spirit/home/lex/lexer.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/action.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/action.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/char_token_def.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/char_token_def.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/detail/
      - copied from r46809, /branches/release/boost/spirit/home/lex/lexer/detail/
   branches/CMake/release/boost/spirit/home/lex/lexer/detail/sequence.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/detail/sequence.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexer.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexer.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexer_actions.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexer_actions.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexer_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexer_fwd.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexertl/
      - copied from r46809, /branches/release/boost/spirit/home/lex/lexer/lexertl/
   branches/CMake/release/boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexertl/lexertl_functor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexertl/lexertl_functor.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexertl/lexertl_generate_static.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexertl/lexertl_generate_static.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexertl/lexertl_iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexertl/lexertl_iterator.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexertl/lexertl_lexer.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexertl/lexertl_lexer.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexertl/lexertl_static_functor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexertl/lexertl_static_functor.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexertl/lexertl_static_lexer.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexertl/lexertl_static_lexer.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexertl/lexertl_token.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexertl/lexertl_token.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/sequence.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/sequence.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/string_token_def.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/string_token_def.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/terminal_director.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/terminal_director.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/terminal_holder.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/terminal_holder.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/token_def.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/token_def.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer/token_set.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer/token_set.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer_lexertl.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer_lexertl.hpp
   branches/CMake/release/boost/spirit/home/lex/lexer_static_lexertl.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/lexer_static_lexertl.hpp
   branches/CMake/release/boost/spirit/home/lex/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/lex/qi/
      - copied from r46809, /branches/release/boost/spirit/home/lex/qi/
   branches/CMake/release/boost/spirit/home/lex/qi/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/qi/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/lex/qi/state/
      - copied from r46809, /branches/release/boost/spirit/home/lex/qi/state/
   branches/CMake/release/boost/spirit/home/lex/qi/state/in_state.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/qi/state/in_state.hpp
   branches/CMake/release/boost/spirit/home/lex/qi/state/state_switcher.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/qi/state/state_switcher.hpp
   branches/CMake/release/boost/spirit/home/lex/qi/utility/
      - copied from r46809, /branches/release/boost/spirit/home/lex/qi/utility/
   branches/CMake/release/boost/spirit/home/lex/qi/utility/plain_token.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/qi/utility/plain_token.hpp
   branches/CMake/release/boost/spirit/home/lex/set_state.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/set_state.hpp
   branches/CMake/release/boost/spirit/home/lex/tokenize_and_parse.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/lex/tokenize_and_parse.hpp
   branches/CMake/release/boost/spirit/home/phoenix/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/
   branches/CMake/release/boost/spirit/home/phoenix.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix.hpp
   branches/CMake/release/boost/spirit/home/phoenix/algorithm.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/algorithm.hpp
   branches/CMake/release/boost/spirit/home/phoenix/bind/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/bind/
   branches/CMake/release/boost/spirit/home/phoenix/bind.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/bind.hpp
   branches/CMake/release/boost/spirit/home/phoenix/bind/bind_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/bind/bind_function.hpp
   branches/CMake/release/boost/spirit/home/phoenix/bind/bind_function_object.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/bind/bind_function_object.hpp
   branches/CMake/release/boost/spirit/home/phoenix/bind/bind_member_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/bind/bind_member_function.hpp
   branches/CMake/release/boost/spirit/home/phoenix/bind/bind_member_variable.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/bind/bind_member_variable.hpp
   branches/CMake/release/boost/spirit/home/phoenix/bind/detail/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/bind/detail/
   branches/CMake/release/boost/spirit/home/phoenix/bind/detail/bind_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/bind/detail/bind_function.hpp
   branches/CMake/release/boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/bind/detail/bind_function_object.hpp
   branches/CMake/release/boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/bind/detail/bind_member_function.hpp
   branches/CMake/release/boost/spirit/home/phoenix/bind/detail/function_ptr.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/bind/detail/function_ptr.hpp
   branches/CMake/release/boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/bind/detail/member_function_ptr.hpp
   branches/CMake/release/boost/spirit/home/phoenix/container.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/container.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/core/
   branches/CMake/release/boost/spirit/home/phoenix/core.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/actor.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/argument.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/argument.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/as_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/as_actor.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/basic_environment.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/basic_environment.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/compose.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/compose.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/composite.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/composite.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/detail/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/core/detail/
   branches/CMake/release/boost/spirit/home/phoenix/core/detail/actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/detail/actor.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/detail/basic_environment.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/detail/basic_environment.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/detail/compose.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/detail/compose.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/detail/composite.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/detail/composite.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/detail/composite_eval.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/detail/composite_eval.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/detail/composite_info.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/detail/composite_info.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/detail/function_eval.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/detail/function_eval.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/is_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/is_actor.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/limits.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/limits.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/nothing.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/nothing.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/reference.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/reference.hpp
   branches/CMake/release/boost/spirit/home/phoenix/core/value.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/core/value.hpp
   branches/CMake/release/boost/spirit/home/phoenix/detail/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/detail/
   branches/CMake/release/boost/spirit/home/phoenix/detail/local_reference.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/detail/local_reference.hpp
   branches/CMake/release/boost/spirit/home/phoenix/detail/type_deduction.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/detail/type_deduction.hpp
   branches/CMake/release/boost/spirit/home/phoenix/function/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/function/
   branches/CMake/release/boost/spirit/home/phoenix/function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/function.hpp
   branches/CMake/release/boost/spirit/home/phoenix/function/detail/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/function/detail/
   branches/CMake/release/boost/spirit/home/phoenix/function/detail/function_call.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/function/detail/function_call.hpp
   branches/CMake/release/boost/spirit/home/phoenix/function/function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/function/function.hpp
   branches/CMake/release/boost/spirit/home/phoenix/fusion/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/fusion/
   branches/CMake/release/boost/spirit/home/phoenix/fusion.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/fusion.hpp
   branches/CMake/release/boost/spirit/home/phoenix/fusion/at.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/fusion/at.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/object/
   branches/CMake/release/boost/spirit/home/phoenix/object.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/const_cast.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/const_cast.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/construct.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/construct.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/delete.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/delete.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/detail/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/object/detail/
   branches/CMake/release/boost/spirit/home/phoenix/object/detail/construct.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/detail/construct.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/detail/construct_eval.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/detail/construct_eval.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/detail/new.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/detail/new.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/detail/new_eval.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/detail/new_eval.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/dynamic_cast.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/dynamic_cast.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/new.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/new.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/reinterpret_cast.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/reinterpret_cast.hpp
   branches/CMake/release/boost/spirit/home/phoenix/object/static_cast.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/object/static_cast.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/operator/
   branches/CMake/release/boost/spirit/home/phoenix/operator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/arithmetic.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/arithmetic.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/bitwise.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/bitwise.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/comparison.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/comparison.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/detail/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/operator/detail/
   branches/CMake/release/boost/spirit/home/phoenix/operator/detail/binary_compose.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/detail/binary_compose.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/detail/binary_eval.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/detail/binary_eval.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/detail/io.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/detail/io.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_eval.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_eval.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_gen.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_gen.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_return.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/detail/mem_fun_ptr_return.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/detail/unary_compose.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/detail/unary_compose.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/detail/unary_eval.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/detail/unary_eval.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/if_else.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/if_else.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/io.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/io.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/logical.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/logical.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/member.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/member.hpp
   branches/CMake/release/boost/spirit/home/phoenix/operator/self.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/operator/self.hpp
   branches/CMake/release/boost/spirit/home/phoenix/scope/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/scope/
   branches/CMake/release/boost/spirit/home/phoenix/scope.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/scope.hpp
   branches/CMake/release/boost/spirit/home/phoenix/scope/detail/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/scope/detail/
   branches/CMake/release/boost/spirit/home/phoenix/scope/detail/local_gen.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/scope/detail/local_gen.hpp
   branches/CMake/release/boost/spirit/home/phoenix/scope/detail/local_variable.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/scope/detail/local_variable.hpp
   branches/CMake/release/boost/spirit/home/phoenix/scope/dynamic.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/scope/dynamic.hpp
   branches/CMake/release/boost/spirit/home/phoenix/scope/lambda.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/scope/lambda.hpp
   branches/CMake/release/boost/spirit/home/phoenix/scope/let.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/scope/let.hpp
   branches/CMake/release/boost/spirit/home/phoenix/scope/local_variable.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/scope/local_variable.hpp
   branches/CMake/release/boost/spirit/home/phoenix/scope/scoped_environment.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/scope/scoped_environment.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/statement/
   branches/CMake/release/boost/spirit/home/phoenix/statement.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/detail/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/statement/detail/
   branches/CMake/release/boost/spirit/home/phoenix/statement/detail/catch_all_eval.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/detail/catch_all_eval.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/detail/catch_composite.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/detail/catch_composite.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/detail/catch_eval.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/detail/catch_eval.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/detail/switch.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/detail/switch.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/detail/switch_eval.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/detail/switch_eval.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/detail/switch_eval.ipp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/detail/switch_eval.ipp
   branches/CMake/release/boost/spirit/home/phoenix/statement/do_while.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/do_while.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/for.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/for.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/if.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/if.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/sequence.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/sequence.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/switch.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/switch.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/throw.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/throw.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/try_catch.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/try_catch.hpp
   branches/CMake/release/boost/spirit/home/phoenix/statement/while.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/statement/while.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/stl/
   branches/CMake/release/boost/spirit/home/phoenix/stl.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/begin.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/begin.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/decay_array.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/decay_array.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/end.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/end.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_equal_range.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_equal_range.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_find.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_find.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_lower_bound.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_lower_bound.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove_if.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_remove_if.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_reverse.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_reverse.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_sort.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_sort.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_unique.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_unique.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_upper_bound.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/has_upper_bound.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_map.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_map.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_set.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_hash_set.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_list.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_list.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_map.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_map.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_set.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/is_std_set.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_map_fwd.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_set_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/std_hash_set_fwd.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/std_list_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/std_list_fwd.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/std_map_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/std_map_fwd.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/detail/std_set_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/detail/std_set_fwd.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/iteration.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/iteration.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/querying.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/querying.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/algorithm/transformation.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/algorithm/transformation.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/container/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/stl/container/
   branches/CMake/release/boost/spirit/home/phoenix/stl/container.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/container.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/container/container.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/container/container.hpp
   branches/CMake/release/boost/spirit/home/phoenix/stl/container/detail/
      - copied from r46809, /branches/release/boost/spirit/home/phoenix/stl/container/detail/
   branches/CMake/release/boost/spirit/home/phoenix/stl/container/detail/container.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/stl/container/detail/container.hpp
   branches/CMake/release/boost/spirit/home/phoenix/version.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/phoenix/version.hpp
   branches/CMake/release/boost/spirit/home/qi/
      - copied from r46809, /branches/release/boost/spirit/home/qi/
   branches/CMake/release/boost/spirit/home/qi.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi.hpp
   branches/CMake/release/boost/spirit/home/qi/action/
      - copied from r46809, /branches/release/boost/spirit/home/qi/action/
   branches/CMake/release/boost/spirit/home/qi/action.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/action.hpp
   branches/CMake/release/boost/spirit/home/qi/action/action.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/action/action.hpp
   branches/CMake/release/boost/spirit/home/qi/action/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/action/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/auxiliary/
      - copied from r46809, /branches/release/boost/spirit/home/qi/auxiliary/
   branches/CMake/release/boost/spirit/home/qi/auxiliary.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/auxiliary.hpp
   branches/CMake/release/boost/spirit/home/qi/auxiliary/eps.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/auxiliary/eps.hpp
   branches/CMake/release/boost/spirit/home/qi/auxiliary/functor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/auxiliary/functor.hpp
   branches/CMake/release/boost/spirit/home/qi/auxiliary/functor_director.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/auxiliary/functor_director.hpp
   branches/CMake/release/boost/spirit/home/qi/auxiliary/lazy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/auxiliary/lazy.hpp
   branches/CMake/release/boost/spirit/home/qi/auxiliary/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/auxiliary/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/auxiliary/none.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/auxiliary/none.hpp
   branches/CMake/release/boost/spirit/home/qi/auxiliary/primitives.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/auxiliary/primitives.hpp
   branches/CMake/release/boost/spirit/home/qi/binary/
      - copied from r46809, /branches/release/boost/spirit/home/qi/binary/
   branches/CMake/release/boost/spirit/home/qi/binary.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/binary.hpp
   branches/CMake/release/boost/spirit/home/qi/binary/binary.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/binary/binary.hpp
   branches/CMake/release/boost/spirit/home/qi/binary/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/binary/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/char/
      - copied from r46809, /branches/release/boost/spirit/home/qi/char/
   branches/CMake/release/boost/spirit/home/qi/char.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char.hpp
   branches/CMake/release/boost/spirit/home/qi/char/char.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char/char.hpp
   branches/CMake/release/boost/spirit/home/qi/char/char_class.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char/char_class.hpp
   branches/CMake/release/boost/spirit/home/qi/char/char_parser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char/char_parser.hpp
   branches/CMake/release/boost/spirit/home/qi/char/detail/
      - copied from r46809, /branches/release/boost/spirit/home/qi/char/detail/
   branches/CMake/release/boost/spirit/home/qi/char/detail/basic_chset.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char/detail/basic_chset.hpp
   branches/CMake/release/boost/spirit/home/qi/char/detail/get_char.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char/detail/get_char.hpp
   branches/CMake/release/boost/spirit/home/qi/char/detail/range.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char/detail/range.hpp
   branches/CMake/release/boost/spirit/home/qi/char/detail/range_functions.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char/detail/range_functions.hpp
   branches/CMake/release/boost/spirit/home/qi/char/detail/range_run.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char/detail/range_run.hpp
   branches/CMake/release/boost/spirit/home/qi/char/detail/range_run_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char/detail/range_run_impl.hpp
   branches/CMake/release/boost/spirit/home/qi/char/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/char/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/debug/
      - copied from r46809, /branches/release/boost/spirit/home/qi/debug/
   branches/CMake/release/boost/spirit/home/qi/debug.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/debug.hpp
   branches/CMake/release/boost/spirit/home/qi/debug/detail/
      - copied from r46809, /branches/release/boost/spirit/home/qi/debug/detail/
   branches/CMake/release/boost/spirit/home/qi/debug/detail/debug_handler.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/debug/detail/debug_handler.hpp
   branches/CMake/release/boost/spirit/home/qi/debug/detail/print_node_info.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/debug/detail/print_node_info.hpp
   branches/CMake/release/boost/spirit/home/qi/debug/minimal_macros.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/debug/minimal_macros.hpp
   branches/CMake/release/boost/spirit/home/qi/debug/simple_debug.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/debug/simple_debug.hpp
   branches/CMake/release/boost/spirit/home/qi/debug/simple_debug_macros.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/debug/simple_debug_macros.hpp
   branches/CMake/release/boost/spirit/home/qi/detail/
      - copied from r46809, /branches/release/boost/spirit/home/qi/detail/
   branches/CMake/release/boost/spirit/home/qi/detail/alternative_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/detail/alternative_function.hpp
   branches/CMake/release/boost/spirit/home/qi/detail/assign_to.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/detail/assign_to.hpp
   branches/CMake/release/boost/spirit/home/qi/detail/construct.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/detail/construct.hpp
   branches/CMake/release/boost/spirit/home/qi/detail/construct_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/detail/construct_fwd.hpp
   branches/CMake/release/boost/spirit/home/qi/detail/expect_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/detail/expect_function.hpp
   branches/CMake/release/boost/spirit/home/qi/detail/fail_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/detail/fail_function.hpp
   branches/CMake/release/boost/spirit/home/qi/detail/pass_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/detail/pass_function.hpp
   branches/CMake/release/boost/spirit/home/qi/detail/permute_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/detail/permute_function.hpp
   branches/CMake/release/boost/spirit/home/qi/detail/string_parse.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/detail/string_parse.hpp
   branches/CMake/release/boost/spirit/home/qi/directive/
      - copied from r46809, /branches/release/boost/spirit/home/qi/directive/
   branches/CMake/release/boost/spirit/home/qi/directive.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/directive.hpp
   branches/CMake/release/boost/spirit/home/qi/directive/lexeme.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/directive/lexeme.hpp
   branches/CMake/release/boost/spirit/home/qi/directive/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/directive/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/directive/omit.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/directive/omit.hpp
   branches/CMake/release/boost/spirit/home/qi/directive/raw.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/directive/raw.hpp
   branches/CMake/release/boost/spirit/home/qi/domain.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/domain.hpp
   branches/CMake/release/boost/spirit/home/qi/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/nonterminal/
      - copied from r46809, /branches/release/boost/spirit/home/qi/nonterminal/
   branches/CMake/release/boost/spirit/home/qi/nonterminal.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/nonterminal.hpp
   branches/CMake/release/boost/spirit/home/qi/nonterminal/detail/
      - copied from r46809, /branches/release/boost/spirit/home/qi/nonterminal/detail/
   branches/CMake/release/boost/spirit/home/qi/nonterminal/detail/error_handler.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/nonterminal/detail/error_handler.hpp
   branches/CMake/release/boost/spirit/home/qi/nonterminal/detail/rule.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/nonterminal/detail/rule.hpp
   branches/CMake/release/boost/spirit/home/qi/nonterminal/error_handler_result.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/nonterminal/error_handler_result.hpp
   branches/CMake/release/boost/spirit/home/qi/nonterminal/grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/nonterminal/grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/nonterminal/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/nonterminal/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/nonterminal/nonterminal.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/nonterminal/nonterminal.hpp
   branches/CMake/release/boost/spirit/home/qi/nonterminal/nonterminal_director.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/nonterminal/nonterminal_director.hpp
   branches/CMake/release/boost/spirit/home/qi/nonterminal/rule.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/nonterminal/rule.hpp
   branches/CMake/release/boost/spirit/home/qi/nonterminal/virtual_component_base.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/nonterminal/virtual_component_base.hpp
   branches/CMake/release/boost/spirit/home/qi/numeric/
      - copied from r46809, /branches/release/boost/spirit/home/qi/numeric/
   branches/CMake/release/boost/spirit/home/qi/numeric.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/numeric.hpp
   branches/CMake/release/boost/spirit/home/qi/numeric/detail/
      - copied from r46809, /branches/release/boost/spirit/home/qi/numeric/detail/
   branches/CMake/release/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/numeric/detail/numeric_utils.hpp
   branches/CMake/release/boost/spirit/home/qi/numeric/detail/real_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/numeric/detail/real_impl.hpp
   branches/CMake/release/boost/spirit/home/qi/numeric/int.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/numeric/int.hpp
   branches/CMake/release/boost/spirit/home/qi/numeric/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/numeric/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/numeric/numeric_utils.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/numeric/numeric_utils.hpp
   branches/CMake/release/boost/spirit/home/qi/numeric/real.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/numeric/real.hpp
   branches/CMake/release/boost/spirit/home/qi/numeric/real_policies.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/numeric/real_policies.hpp
   branches/CMake/release/boost/spirit/home/qi/numeric/uint.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/numeric/uint.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/
      - copied from r46809, /branches/release/boost/spirit/home/qi/operator/
   branches/CMake/release/boost/spirit/home/qi/operator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/alternative.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/alternative.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/and_predicate.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/and_predicate.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/difference.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/difference.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/expect.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/expect.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/kleene.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/kleene.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/list.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/list.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/not_predicate.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/not_predicate.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/optional.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/optional.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/permutation.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/permutation.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/plus.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/plus.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/sequence.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/sequence.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/sequence_base.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/sequence_base.hpp
   branches/CMake/release/boost/spirit/home/qi/operator/sequential_or.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/operator/sequential_or.hpp
   branches/CMake/release/boost/spirit/home/qi/parse.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/parse.hpp
   branches/CMake/release/boost/spirit/home/qi/skip.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/skip.hpp
   branches/CMake/release/boost/spirit/home/qi/stream/
      - copied from r46809, /branches/release/boost/spirit/home/qi/stream/
   branches/CMake/release/boost/spirit/home/qi/stream.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/stream.hpp
   branches/CMake/release/boost/spirit/home/qi/stream/detail/
      - copied from r46809, /branches/release/boost/spirit/home/qi/stream/detail/
   branches/CMake/release/boost/spirit/home/qi/stream/detail/iterator_istream.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/stream/detail/iterator_istream.hpp
   branches/CMake/release/boost/spirit/home/qi/stream/detail/match_manip.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/stream/detail/match_manip.hpp
   branches/CMake/release/boost/spirit/home/qi/stream/match_manip.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/stream/match_manip.hpp
   branches/CMake/release/boost/spirit/home/qi/stream/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/stream/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/stream/stream.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/stream/stream.hpp
   branches/CMake/release/boost/spirit/home/qi/string/
      - copied from r46809, /branches/release/boost/spirit/home/qi/string/
   branches/CMake/release/boost/spirit/home/qi/string.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/string.hpp
   branches/CMake/release/boost/spirit/home/qi/string/detail/
      - copied from r46809, /branches/release/boost/spirit/home/qi/string/detail/
   branches/CMake/release/boost/spirit/home/qi/string/detail/tst.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/string/detail/tst.hpp
   branches/CMake/release/boost/spirit/home/qi/string/lit.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/string/lit.hpp
   branches/CMake/release/boost/spirit/home/qi/string/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/string/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/qi/string/symbols.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/string/symbols.hpp
   branches/CMake/release/boost/spirit/home/qi/string/tst.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/string/tst.hpp
   branches/CMake/release/boost/spirit/home/qi/string/tst_map.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/string/tst_map.hpp
   branches/CMake/release/boost/spirit/home/qi/what.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/qi/what.hpp
   branches/CMake/release/boost/spirit/home/support/
      - copied from r46809, /branches/release/boost/spirit/home/support/
   branches/CMake/release/boost/spirit/home/support/algorithm/
      - copied from r46809, /branches/release/boost/spirit/home/support/algorithm/
   branches/CMake/release/boost/spirit/home/support/algorithm/any.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/algorithm/any.hpp
   branches/CMake/release/boost/spirit/home/support/algorithm/any_if.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/algorithm/any_if.hpp
   branches/CMake/release/boost/spirit/home/support/algorithm/any_ns.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/algorithm/any_ns.hpp
   branches/CMake/release/boost/spirit/home/support/argument.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/argument.hpp
   branches/CMake/release/boost/spirit/home/support/as_variant.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/as_variant.hpp
   branches/CMake/release/boost/spirit/home/support/ascii.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/ascii.hpp
   branches/CMake/release/boost/spirit/home/support/attribute_of.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/attribute_of.hpp
   branches/CMake/release/boost/spirit/home/support/attribute_transform.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/attribute_transform.hpp
   branches/CMake/release/boost/spirit/home/support/auxiliary/
      - copied from r46809, /branches/release/boost/spirit/home/support/auxiliary/
   branches/CMake/release/boost/spirit/home/support/auxiliary/functor_holder.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/auxiliary/functor_holder.hpp
   branches/CMake/release/boost/spirit/home/support/auxiliary/meta_function_holder.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/auxiliary/meta_function_holder.hpp
   branches/CMake/release/boost/spirit/home/support/char_class/
      - copied from r46809, /branches/release/boost/spirit/home/support/char_class/
   branches/CMake/release/boost/spirit/home/support/char_class.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/char_class.hpp
   branches/CMake/release/boost/spirit/home/support/char_class/ascii.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/char_class/ascii.hpp
   branches/CMake/release/boost/spirit/home/support/char_class/iso8859_1.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/char_class/iso8859_1.hpp
   branches/CMake/release/boost/spirit/home/support/char_class/standard.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/char_class/standard.hpp
   branches/CMake/release/boost/spirit/home/support/char_class/standard_wide.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/char_class/standard_wide.hpp
   branches/CMake/release/boost/spirit/home/support/component.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/component.hpp
   branches/CMake/release/boost/spirit/home/support/detail/
      - copied from r46809, /branches/release/boost/spirit/home/support/detail/
   branches/CMake/release/boost/spirit/home/support/detail/action_dispatch.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/action_dispatch.hpp
   branches/CMake/release/boost/spirit/home/support/detail/container.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/container.hpp
   branches/CMake/release/boost/spirit/home/support/detail/hold_any.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/hold_any.hpp
   branches/CMake/release/boost/spirit/home/support/detail/integer/
      - copied from r46809, /branches/release/boost/spirit/home/support/detail/integer/
   branches/CMake/release/boost/spirit/home/support/detail/integer/cover_operators.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/integer/cover_operators.hpp
   branches/CMake/release/boost/spirit/home/support/detail/integer/endian.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/integer/endian.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/
      - copied from r46809, /branches/release/boost/spirit/home/support/detail/lexer/
   branches/CMake/release/boost/spirit/home/support/detail/lexer/char_state_machine.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/char_state_machine.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/char_traits.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/char_traits.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/consts.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/consts.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/containers/
      - copied from r46809, /branches/release/boost/spirit/home/support/detail/lexer/containers/
   branches/CMake/release/boost/spirit/home/support/detail/lexer/containers/ptr_list.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/containers/ptr_list.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/containers/ptr_vector.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/containers/ptr_vector.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/debug.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/debug.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/generate_cpp.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/generate_cpp.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/generator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/generator.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/
      - copied from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/parser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/parser.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tokeniser/
      - copied from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tokeniser/
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_state.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_state.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tree/
      - copied from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tree/
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tree/end_node.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tree/end_node.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tree/iteration_node.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tree/iteration_node.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tree/leaf_node.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tree/leaf_node.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tree/node.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tree/node.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tree/selection_node.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tree/selection_node.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/parser/tree/sequence_node.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/parser/tree/sequence_node.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/partition/
      - copied from r46809, /branches/release/boost/spirit/home/support/detail/lexer/partition/
   branches/CMake/release/boost/spirit/home/support/detail/lexer/partition/charset.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/partition/charset.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/partition/equivset.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/partition/equivset.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/rules.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/rules.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/runtime_error.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/runtime_error.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/serialise.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/serialise.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/size_t.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/size_t.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/state_machine.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/state_machine.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/string_token.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/string_token.hpp
   branches/CMake/release/boost/spirit/home/support/detail/lexer/tokeniser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/lexer/tokeniser.hpp
   branches/CMake/release/boost/spirit/home/support/detail/math/
      - copied from r46809, /branches/release/boost/spirit/home/support/detail/math/
   branches/CMake/release/boost/spirit/home/support/detail/math/detail/
      - copied from r46809, /branches/release/boost/spirit/home/support/detail/math/detail/
   branches/CMake/release/boost/spirit/home/support/detail/math/detail/fp_traits.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/math/detail/fp_traits.hpp
   branches/CMake/release/boost/spirit/home/support/detail/math/fpclassify.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/math/fpclassify.hpp
   branches/CMake/release/boost/spirit/home/support/detail/math/nonfinite_num_facets.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/math/nonfinite_num_facets.hpp
   branches/CMake/release/boost/spirit/home/support/detail/math/signbit.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/math/signbit.hpp
   branches/CMake/release/boost/spirit/home/support/detail/to_narrow.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/to_narrow.hpp
   branches/CMake/release/boost/spirit/home/support/detail/values.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/values.hpp
   branches/CMake/release/boost/spirit/home/support/detail/what_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/detail/what_function.hpp
   branches/CMake/release/boost/spirit/home/support/iso8859_1.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iso8859_1.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/
      - copied from r46809, /branches/release/boost/spirit/home/support/iterators/
   branches/CMake/release/boost/spirit/home/support/iterators/detail/
      - copied from r46809, /branches/release/boost/spirit/home/support/iterators/detail/
   branches/CMake/release/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/combine_policies.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/combine_policies.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/first_owner_policy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/first_owner_policy.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/fixed_size_queue.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/fixed_size_queue.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/functor_input_policy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/functor_input_policy.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/lex_input_policy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/lex_input_policy.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/multi_pass.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/multi_pass.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/no_check_policy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/no_check_policy.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/look_ahead.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/look_ahead.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/multi_pass.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/multi_pass.hpp
   branches/CMake/release/boost/spirit/home/support/iterators/multi_pass_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/iterators/multi_pass_fwd.hpp
   branches/CMake/release/boost/spirit/home/support/meta_grammar/
      - copied from r46809, /branches/release/boost/spirit/home/support/meta_grammar/
   branches/CMake/release/boost/spirit/home/support/meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/meta_grammar.hpp
   branches/CMake/release/boost/spirit/home/support/meta_grammar/basic_rules.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/meta_grammar/basic_rules.hpp
   branches/CMake/release/boost/spirit/home/support/meta_grammar/basic_transforms.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/meta_grammar/basic_transforms.hpp
   branches/CMake/release/boost/spirit/home/support/meta_grammar/grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/meta_grammar/grammar.hpp
   branches/CMake/release/boost/spirit/home/support/modifier.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/modifier.hpp
   branches/CMake/release/boost/spirit/home/support/multi_pass.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/multi_pass.hpp
   branches/CMake/release/boost/spirit/home/support/nonterminal/
      - copied from r46809, /branches/release/boost/spirit/home/support/nonterminal/
   branches/CMake/release/boost/spirit/home/support/nonterminal/detail/
      - copied from r46809, /branches/release/boost/spirit/home/support/nonterminal/detail/
   branches/CMake/release/boost/spirit/home/support/nonterminal/detail/expand_arg.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/nonterminal/detail/expand_arg.hpp
   branches/CMake/release/boost/spirit/home/support/nonterminal/detail/nonterminal_fcall.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/nonterminal/detail/nonterminal_fcall.hpp
   branches/CMake/release/boost/spirit/home/support/nonterminal/locals.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/nonterminal/locals.hpp
   branches/CMake/release/boost/spirit/home/support/nonterminal/nonterminal.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/nonterminal/nonterminal.hpp
   branches/CMake/release/boost/spirit/home/support/placeholders.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/placeholders.hpp
   branches/CMake/release/boost/spirit/home/support/safe_bool.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/safe_bool.hpp
   branches/CMake/release/boost/spirit/home/support/standard.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/standard.hpp
   branches/CMake/release/boost/spirit/home/support/standard_wide.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/standard_wide.hpp
   branches/CMake/release/boost/spirit/home/support/unused.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/home/support/unused.hpp
   branches/CMake/release/boost/spirit/include/
      - copied from r46809, /branches/release/boost/spirit/include/
   branches/CMake/release/boost/spirit/include/classic.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic.hpp
   branches/CMake/release/boost/spirit/include/classic_actions.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_actions.hpp
   branches/CMake/release/boost/spirit/include/classic_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_alternative.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_alternative.hpp
   branches/CMake/release/boost/spirit/include/classic_as_parser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_as_parser.hpp
   branches/CMake/release/boost/spirit/include/classic_assert.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_assert.hpp
   branches/CMake/release/boost/spirit/include/classic_assign_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_assign_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_assign_key_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_assign_key_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_ast.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_ast.hpp
   branches/CMake/release/boost/spirit/include/classic_ast_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_ast_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_attribute.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_attribute.hpp
   branches/CMake/release/boost/spirit/include/classic_basic_chset.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_basic_chset.hpp
   branches/CMake/release/boost/spirit/include/classic_chset.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_chset.hpp
   branches/CMake/release/boost/spirit/include/classic_chset_operators.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_chset_operators.hpp
   branches/CMake/release/boost/spirit/include/classic_clear_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_clear_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_closure.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_closure.hpp
   branches/CMake/release/boost/spirit/include/classic_closure_context.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_closure_context.hpp
   branches/CMake/release/boost/spirit/include/classic_closure_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_closure_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_common.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_common.hpp
   branches/CMake/release/boost/spirit/include/classic_common_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_common_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_composite.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_composite.hpp
   branches/CMake/release/boost/spirit/include/classic_config.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_config.hpp
   branches/CMake/release/boost/spirit/include/classic_confix.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_confix.hpp
   branches/CMake/release/boost/spirit/include/classic_confix_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_confix_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_core.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_core.hpp
   branches/CMake/release/boost/spirit/include/classic_debug.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_debug.hpp
   branches/CMake/release/boost/spirit/include/classic_debug_node.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_debug_node.hpp
   branches/CMake/release/boost/spirit/include/classic_decrement_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_decrement_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_difference.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_difference.hpp
   branches/CMake/release/boost/spirit/include/classic_directives.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_directives.hpp
   branches/CMake/release/boost/spirit/include/classic_distinct.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_distinct.hpp
   branches/CMake/release/boost/spirit/include/classic_distinct_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_distinct_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_dynamic.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_dynamic.hpp
   branches/CMake/release/boost/spirit/include/classic_epsilon.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_epsilon.hpp
   branches/CMake/release/boost/spirit/include/classic_erase_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_erase_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_error_handling.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_error_handling.hpp
   branches/CMake/release/boost/spirit/include/classic_escape_char.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_escape_char.hpp
   branches/CMake/release/boost/spirit/include/classic_escape_char_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_escape_char_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_exceptions.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_exceptions.hpp
   branches/CMake/release/boost/spirit/include/classic_exceptions_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_exceptions_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_exclusive_or.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_exclusive_or.hpp
   branches/CMake/release/boost/spirit/include/classic_file_iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_file_iterator.hpp
   branches/CMake/release/boost/spirit/include/classic_file_iterator_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_file_iterator_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_fixed_size_queue.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_fixed_size_queue.hpp
   branches/CMake/release/boost/spirit/include/classic_flush_multi_pass.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_flush_multi_pass.hpp
   branches/CMake/release/boost/spirit/include/classic_for.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_for.hpp
   branches/CMake/release/boost/spirit/include/classic_functor_parser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_functor_parser.hpp
   branches/CMake/release/boost/spirit/include/classic_fundamental.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_fundamental.hpp
   branches/CMake/release/boost/spirit/include/classic_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_grammar.hpp
   branches/CMake/release/boost/spirit/include/classic_grammar_def.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_grammar_def.hpp
   branches/CMake/release/boost/spirit/include/classic_grammar_def_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_grammar_def_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_if.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_if.hpp
   branches/CMake/release/boost/spirit/include/classic_increment_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_increment_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_insert_at_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_insert_at_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_insert_key_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_insert_key_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_intersection.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_intersection.hpp
   branches/CMake/release/boost/spirit/include/classic_iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_iterator.hpp
   branches/CMake/release/boost/spirit/include/classic_kleene_star.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_kleene_star.hpp
   branches/CMake/release/boost/spirit/include/classic_lazy.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_lazy.hpp
   branches/CMake/release/boost/spirit/include/classic_list.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_list.hpp
   branches/CMake/release/boost/spirit/include/classic_lists.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_lists.hpp
   branches/CMake/release/boost/spirit/include/classic_lists_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_lists_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_loops.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_loops.hpp
   branches/CMake/release/boost/spirit/include/classic_match.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_match.hpp
   branches/CMake/release/boost/spirit/include/classic_meta.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_meta.hpp
   branches/CMake/release/boost/spirit/include/classic_minimal.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_minimal.hpp
   branches/CMake/release/boost/spirit/include/classic_multi_pass.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_multi_pass.hpp
   branches/CMake/release/boost/spirit/include/classic_multi_pass_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_multi_pass_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_nil.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_nil.hpp
   branches/CMake/release/boost/spirit/include/classic_no_actions.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_no_actions.hpp
   branches/CMake/release/boost/spirit/include/classic_numerics.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_numerics.hpp
   branches/CMake/release/boost/spirit/include/classic_numerics_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_numerics_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_operators.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_operators.hpp
   branches/CMake/release/boost/spirit/include/classic_optional.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_optional.hpp
   branches/CMake/release/boost/spirit/include/classic_parametric.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_parametric.hpp
   branches/CMake/release/boost/spirit/include/classic_parse_tree.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_parse_tree.hpp
   branches/CMake/release/boost/spirit/include/classic_parse_tree_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_parse_tree_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_parse_tree_utils.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_parse_tree_utils.hpp
   branches/CMake/release/boost/spirit/include/classic_parser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_parser.hpp
   branches/CMake/release/boost/spirit/include/classic_parser_context.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_parser_context.hpp
   branches/CMake/release/boost/spirit/include/classic_parser_id.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_parser_id.hpp
   branches/CMake/release/boost/spirit/include/classic_parser_names.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_parser_names.hpp
   branches/CMake/release/boost/spirit/include/classic_parser_traits.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_parser_traits.hpp
   branches/CMake/release/boost/spirit/include/classic_position_iterator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_position_iterator.hpp
   branches/CMake/release/boost/spirit/include/classic_position_iterator_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_position_iterator_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_positive.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_positive.hpp
   branches/CMake/release/boost/spirit/include/classic_primitives.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_primitives.hpp
   branches/CMake/release/boost/spirit/include/classic_push_back_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_push_back_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_push_front_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_push_front_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_range_run.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_range_run.hpp
   branches/CMake/release/boost/spirit/include/classic_ref_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_ref_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_ref_const_ref_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_ref_const_ref_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp
   branches/CMake/release/boost/spirit/include/classic_ref_const_ref_value_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_ref_const_ref_value_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_ref_value_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_ref_value_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_refactoring.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_refactoring.hpp
   branches/CMake/release/boost/spirit/include/classic_regex.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_regex.hpp
   branches/CMake/release/boost/spirit/include/classic_rule.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_rule.hpp
   branches/CMake/release/boost/spirit/include/classic_rule_alias.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_rule_alias.hpp
   branches/CMake/release/boost/spirit/include/classic_rule_parser.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_rule_parser.hpp
   branches/CMake/release/boost/spirit/include/classic_safe_bool.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_safe_bool.hpp
   branches/CMake/release/boost/spirit/include/classic_scanner.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_scanner.hpp
   branches/CMake/release/boost/spirit/include/classic_scanner_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_scanner_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_scoped_lock.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_scoped_lock.hpp
   branches/CMake/release/boost/spirit/include/classic_select.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_select.hpp
   branches/CMake/release/boost/spirit/include/classic_sequence.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_sequence.hpp
   branches/CMake/release/boost/spirit/include/classic_sequential_and.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_sequential_and.hpp
   branches/CMake/release/boost/spirit/include/classic_sequential_or.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_sequential_or.hpp
   branches/CMake/release/boost/spirit/include/classic_skipper.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_skipper.hpp
   branches/CMake/release/boost/spirit/include/classic_skipper_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_skipper_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_static.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_static.hpp
   branches/CMake/release/boost/spirit/include/classic_stored_rule.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_stored_rule.hpp
   branches/CMake/release/boost/spirit/include/classic_stored_rule_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_stored_rule_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_subrule.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_subrule.hpp
   branches/CMake/release/boost/spirit/include/classic_subrule_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_subrule_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_swap_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_swap_actor.hpp
   branches/CMake/release/boost/spirit/include/classic_switch.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_switch.hpp
   branches/CMake/release/boost/spirit/include/classic_symbols.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_symbols.hpp
   branches/CMake/release/boost/spirit/include/classic_symbols_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_symbols_fwd.hpp
   branches/CMake/release/boost/spirit/include/classic_traverse.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_traverse.hpp
   branches/CMake/release/boost/spirit/include/classic_tree_to_xml.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_tree_to_xml.hpp
   branches/CMake/release/boost/spirit/include/classic_typeof.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_typeof.hpp
   branches/CMake/release/boost/spirit/include/classic_utility.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_utility.hpp
   branches/CMake/release/boost/spirit/include/classic_version.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_version.hpp
   branches/CMake/release/boost/spirit/include/classic_while.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/classic_while.hpp
   branches/CMake/release/boost/spirit/include/karma.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma.hpp
   branches/CMake/release/boost/spirit/include/karma_action.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_action.hpp
   branches/CMake/release/boost/spirit/include/karma_auxiliary.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_auxiliary.hpp
   branches/CMake/release/boost/spirit/include/karma_binary.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_binary.hpp
   branches/CMake/release/boost/spirit/include/karma_char.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_char.hpp
   branches/CMake/release/boost/spirit/include/karma_delimit.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_delimit.hpp
   branches/CMake/release/boost/spirit/include/karma_directive.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_directive.hpp
   branches/CMake/release/boost/spirit/include/karma_domain.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_domain.hpp
   branches/CMake/release/boost/spirit/include/karma_generate.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_generate.hpp
   branches/CMake/release/boost/spirit/include/karma_meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_meta_grammar.hpp
   branches/CMake/release/boost/spirit/include/karma_nonterminal.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_nonterminal.hpp
   branches/CMake/release/boost/spirit/include/karma_numeric.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_numeric.hpp
   branches/CMake/release/boost/spirit/include/karma_operator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_operator.hpp
   branches/CMake/release/boost/spirit/include/karma_stream.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_stream.hpp
   branches/CMake/release/boost/spirit/include/karma_string.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_string.hpp
   branches/CMake/release/boost/spirit/include/karma_what.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/karma_what.hpp
   branches/CMake/release/boost/spirit/include/lex.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/lex.hpp
   branches/CMake/release/boost/spirit/include/lex_domain.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/lex_domain.hpp
   branches/CMake/release/boost/spirit/include/lex_lexer.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/lex_lexer.hpp
   branches/CMake/release/boost/spirit/include/lex_lexer_lexertl.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/lex_lexer_lexertl.hpp
   branches/CMake/release/boost/spirit/include/lex_lexer_static_lexertl.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/lex_lexer_static_lexertl.hpp
   branches/CMake/release/boost/spirit/include/lex_meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/lex_meta_grammar.hpp
   branches/CMake/release/boost/spirit/include/lex_set_state.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/lex_set_state.hpp
   branches/CMake/release/boost/spirit/include/lex_tokenize_and_parse.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/lex_tokenize_and_parse.hpp
   branches/CMake/release/boost/spirit/include/phoenix.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix.hpp
   branches/CMake/release/boost/spirit/include/phoenix1.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_actor.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_actor.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_binders.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_binders.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_casts.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_casts.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_closures.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_closures.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_composite.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_composite.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_functions.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_functions.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_new.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_new.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_operators.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_operators.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_primitives.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_primitives.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_special_ops.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_special_ops.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_statements.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_statements.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_tuple_helpers.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_tuple_helpers.hpp
   branches/CMake/release/boost/spirit/include/phoenix1_tuples.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix1_tuples.hpp
   branches/CMake/release/boost/spirit/include/phoenix_algorithm.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_algorithm.hpp
   branches/CMake/release/boost/spirit/include/phoenix_bind.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_bind.hpp
   branches/CMake/release/boost/spirit/include/phoenix_container.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_container.hpp
   branches/CMake/release/boost/spirit/include/phoenix_core.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_core.hpp
   branches/CMake/release/boost/spirit/include/phoenix_function.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_function.hpp
   branches/CMake/release/boost/spirit/include/phoenix_fusion.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_fusion.hpp
   branches/CMake/release/boost/spirit/include/phoenix_object.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_object.hpp
   branches/CMake/release/boost/spirit/include/phoenix_operator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_operator.hpp
   branches/CMake/release/boost/spirit/include/phoenix_scope.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_scope.hpp
   branches/CMake/release/boost/spirit/include/phoenix_statement.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_statement.hpp
   branches/CMake/release/boost/spirit/include/phoenix_stl.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_stl.hpp
   branches/CMake/release/boost/spirit/include/phoenix_version.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/phoenix_version.hpp
   branches/CMake/release/boost/spirit/include/qi.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi.hpp
   branches/CMake/release/boost/spirit/include/qi_action.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_action.hpp
   branches/CMake/release/boost/spirit/include/qi_auxiliary.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_auxiliary.hpp
   branches/CMake/release/boost/spirit/include/qi_binary.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_binary.hpp
   branches/CMake/release/boost/spirit/include/qi_char.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_char.hpp
   branches/CMake/release/boost/spirit/include/qi_debug.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_debug.hpp
   branches/CMake/release/boost/spirit/include/qi_directive.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_directive.hpp
   branches/CMake/release/boost/spirit/include/qi_domain.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_domain.hpp
   branches/CMake/release/boost/spirit/include/qi_meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_meta_grammar.hpp
   branches/CMake/release/boost/spirit/include/qi_nonterminal.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_nonterminal.hpp
   branches/CMake/release/boost/spirit/include/qi_numeric.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_numeric.hpp
   branches/CMake/release/boost/spirit/include/qi_operator.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_operator.hpp
   branches/CMake/release/boost/spirit/include/qi_parse.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_parse.hpp
   branches/CMake/release/boost/spirit/include/qi_skip.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_skip.hpp
   branches/CMake/release/boost/spirit/include/qi_stream.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_stream.hpp
   branches/CMake/release/boost/spirit/include/qi_string.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_string.hpp
   branches/CMake/release/boost/spirit/include/qi_what.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/qi_what.hpp
   branches/CMake/release/boost/spirit/include/support.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support.hpp
   branches/CMake/release/boost/spirit/include/support_any.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_any.hpp
   branches/CMake/release/boost/spirit/include/support_any_if.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_any_if.hpp
   branches/CMake/release/boost/spirit/include/support_any_ns.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_any_ns.hpp
   branches/CMake/release/boost/spirit/include/support_argument.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_argument.hpp
   branches/CMake/release/boost/spirit/include/support_as_variant.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_as_variant.hpp
   branches/CMake/release/boost/spirit/include/support_ascii.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_ascii.hpp
   branches/CMake/release/boost/spirit/include/support_attribute_of.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_attribute_of.hpp
   branches/CMake/release/boost/spirit/include/support_attribute_transform.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_attribute_transform.hpp
   branches/CMake/release/boost/spirit/include/support_basic_rules.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_basic_rules.hpp
   branches/CMake/release/boost/spirit/include/support_basic_transforms.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_basic_transforms.hpp
   branches/CMake/release/boost/spirit/include/support_char_class.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_char_class.hpp
   branches/CMake/release/boost/spirit/include/support_component.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_component.hpp
   branches/CMake/release/boost/spirit/include/support_functor_holder.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_functor_holder.hpp
   branches/CMake/release/boost/spirit/include/support_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_grammar.hpp
   branches/CMake/release/boost/spirit/include/support_iso8859_1.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_iso8859_1.hpp
   branches/CMake/release/boost/spirit/include/support_locals.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_locals.hpp
   branches/CMake/release/boost/spirit/include/support_look_ahead.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_look_ahead.hpp
   branches/CMake/release/boost/spirit/include/support_meta_function_holder.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_meta_function_holder.hpp
   branches/CMake/release/boost/spirit/include/support_meta_grammar.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_meta_grammar.hpp
   branches/CMake/release/boost/spirit/include/support_modifier.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_modifier.hpp
   branches/CMake/release/boost/spirit/include/support_multi_pass.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_multi_pass.hpp
   branches/CMake/release/boost/spirit/include/support_multi_pass_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_multi_pass_fwd.hpp
   branches/CMake/release/boost/spirit/include/support_nonterminal.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_nonterminal.hpp
   branches/CMake/release/boost/spirit/include/support_placeholders.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_placeholders.hpp
   branches/CMake/release/boost/spirit/include/support_safe_bool.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_safe_bool.hpp
   branches/CMake/release/boost/spirit/include/support_standard.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_standard.hpp
   branches/CMake/release/boost/spirit/include/support_standard_wide.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_standard_wide.hpp
   branches/CMake/release/boost/spirit/include/support_unused.hpp
      - copied unchanged from r46809, /branches/release/boost/spirit/include/support_unused.hpp
   branches/CMake/release/boost/thread/detail/thread.hpp
      - copied unchanged from r46809, /branches/release/boost/thread/detail/thread.hpp
   branches/CMake/release/boost/thread/detail/thread_heap_alloc.hpp
      - copied unchanged from r46809, /branches/release/boost/thread/detail/thread_heap_alloc.hpp
   branches/CMake/release/boost/thread/pthread/thread_heap_alloc.hpp
      - copied unchanged from r46809, /branches/release/boost/thread/pthread/thread_heap_alloc.hpp
   branches/CMake/release/boost/thread/tss.hpp
      - copied unchanged from r46809, /branches/release/boost/thread/tss.hpp
   branches/CMake/release/boost/thread/win32/thread_data.hpp
      - copied unchanged from r46809, /branches/release/boost/thread/win32/thread_data.hpp
   branches/CMake/release/boost/units/
      - copied from r46809, /branches/release/boost/units/
   branches/CMake/release/boost/units/absolute.hpp
      - copied unchanged from r46809, /branches/release/boost/units/absolute.hpp
   branches/CMake/release/boost/units/base_dimension.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_dimension.hpp
   branches/CMake/release/boost/units/base_unit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_unit.hpp
   branches/CMake/release/boost/units/base_units/
      - copied from r46809, /branches/release/boost/units/base_units/
   branches/CMake/release/boost/units/base_units/angle/
      - copied from r46809, /branches/release/boost/units/base_units/angle/
   branches/CMake/release/boost/units/base_units/angle/arcminute.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/angle/arcminute.hpp
   branches/CMake/release/boost/units/base_units/angle/arcsecond.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/angle/arcsecond.hpp
   branches/CMake/release/boost/units/base_units/angle/degree.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/angle/degree.hpp
   branches/CMake/release/boost/units/base_units/angle/gradian.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/angle/gradian.hpp
   branches/CMake/release/boost/units/base_units/angle/radian.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/angle/radian.hpp
   branches/CMake/release/boost/units/base_units/angle/revolution.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/angle/revolution.hpp
   branches/CMake/release/boost/units/base_units/angle/steradian.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/angle/steradian.hpp
   branches/CMake/release/boost/units/base_units/astronomical/
      - copied from r46809, /branches/release/boost/units/base_units/astronomical/
   branches/CMake/release/boost/units/base_units/astronomical/astronomical_unit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/astronomical/astronomical_unit.hpp
   branches/CMake/release/boost/units/base_units/astronomical/light_day.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/astronomical/light_day.hpp
   branches/CMake/release/boost/units/base_units/astronomical/light_hour.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/astronomical/light_hour.hpp
   branches/CMake/release/boost/units/base_units/astronomical/light_minute.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/astronomical/light_minute.hpp
   branches/CMake/release/boost/units/base_units/astronomical/light_second.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/astronomical/light_second.hpp
   branches/CMake/release/boost/units/base_units/astronomical/light_year.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/astronomical/light_year.hpp
   branches/CMake/release/boost/units/base_units/astronomical/parsec.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/astronomical/parsec.hpp
   branches/CMake/release/boost/units/base_units/cgs/
      - copied from r46809, /branches/release/boost/units/base_units/cgs/
   branches/CMake/release/boost/units/base_units/cgs/biot.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/cgs/biot.hpp
   branches/CMake/release/boost/units/base_units/cgs/centimeter.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/cgs/centimeter.hpp
   branches/CMake/release/boost/units/base_units/cgs/gram.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/cgs/gram.hpp
   branches/CMake/release/boost/units/base_units/imperial/
      - copied from r46809, /branches/release/boost/units/base_units/imperial/
   branches/CMake/release/boost/units/base_units/imperial/conversions.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/conversions.hpp
   branches/CMake/release/boost/units/base_units/imperial/drachm.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/drachm.hpp
   branches/CMake/release/boost/units/base_units/imperial/fluid_ounce.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/fluid_ounce.hpp
   branches/CMake/release/boost/units/base_units/imperial/foot.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/foot.hpp
   branches/CMake/release/boost/units/base_units/imperial/furlong.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/furlong.hpp
   branches/CMake/release/boost/units/base_units/imperial/gallon.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/gallon.hpp
   branches/CMake/release/boost/units/base_units/imperial/gill.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/gill.hpp
   branches/CMake/release/boost/units/base_units/imperial/grain.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/grain.hpp
   branches/CMake/release/boost/units/base_units/imperial/hundredweight.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/hundredweight.hpp
   branches/CMake/release/boost/units/base_units/imperial/inch.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/inch.hpp
   branches/CMake/release/boost/units/base_units/imperial/league.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/league.hpp
   branches/CMake/release/boost/units/base_units/imperial/mile.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/mile.hpp
   branches/CMake/release/boost/units/base_units/imperial/ounce.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/ounce.hpp
   branches/CMake/release/boost/units/base_units/imperial/pint.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/pint.hpp
   branches/CMake/release/boost/units/base_units/imperial/pound.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/pound.hpp
   branches/CMake/release/boost/units/base_units/imperial/quart.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/quart.hpp
   branches/CMake/release/boost/units/base_units/imperial/quarter.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/quarter.hpp
   branches/CMake/release/boost/units/base_units/imperial/stone.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/stone.hpp
   branches/CMake/release/boost/units/base_units/imperial/thou.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/thou.hpp
   branches/CMake/release/boost/units/base_units/imperial/ton.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/ton.hpp
   branches/CMake/release/boost/units/base_units/imperial/yard.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/imperial/yard.hpp
   branches/CMake/release/boost/units/base_units/metric/
      - copied from r46809, /branches/release/boost/units/base_units/metric/
   branches/CMake/release/boost/units/base_units/metric/angstrom.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/angstrom.hpp
   branches/CMake/release/boost/units/base_units/metric/are.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/are.hpp
   branches/CMake/release/boost/units/base_units/metric/atmosphere.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/atmosphere.hpp
   branches/CMake/release/boost/units/base_units/metric/bar.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/bar.hpp
   branches/CMake/release/boost/units/base_units/metric/barn.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/barn.hpp
   branches/CMake/release/boost/units/base_units/metric/day.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/day.hpp
   branches/CMake/release/boost/units/base_units/metric/fermi.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/fermi.hpp
   branches/CMake/release/boost/units/base_units/metric/hectare.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/hectare.hpp
   branches/CMake/release/boost/units/base_units/metric/hour.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/hour.hpp
   branches/CMake/release/boost/units/base_units/metric/knot.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/knot.hpp
   branches/CMake/release/boost/units/base_units/metric/liter.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/liter.hpp
   branches/CMake/release/boost/units/base_units/metric/micron.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/micron.hpp
   branches/CMake/release/boost/units/base_units/metric/minute.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/minute.hpp
   branches/CMake/release/boost/units/base_units/metric/mmHg.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/mmHg.hpp
   branches/CMake/release/boost/units/base_units/metric/nautical_mile.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/nautical_mile.hpp
   branches/CMake/release/boost/units/base_units/metric/ton.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/ton.hpp
   branches/CMake/release/boost/units/base_units/metric/torr.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/torr.hpp
   branches/CMake/release/boost/units/base_units/metric/year.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/metric/year.hpp
   branches/CMake/release/boost/units/base_units/si/
      - copied from r46809, /branches/release/boost/units/base_units/si/
   branches/CMake/release/boost/units/base_units/si/ampere.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/si/ampere.hpp
   branches/CMake/release/boost/units/base_units/si/candela.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/si/candela.hpp
   branches/CMake/release/boost/units/base_units/si/kelvin.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/si/kelvin.hpp
   branches/CMake/release/boost/units/base_units/si/kilogram.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/si/kilogram.hpp
   branches/CMake/release/boost/units/base_units/si/meter.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/si/meter.hpp
   branches/CMake/release/boost/units/base_units/si/mole.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/si/mole.hpp
   branches/CMake/release/boost/units/base_units/si/second.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/si/second.hpp
   branches/CMake/release/boost/units/base_units/temperature/
      - copied from r46809, /branches/release/boost/units/base_units/temperature/
   branches/CMake/release/boost/units/base_units/temperature/celsius.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/temperature/celsius.hpp
   branches/CMake/release/boost/units/base_units/temperature/conversions.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/temperature/conversions.hpp
   branches/CMake/release/boost/units/base_units/temperature/fahrenheit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/temperature/fahrenheit.hpp
   branches/CMake/release/boost/units/base_units/us/
      - copied from r46809, /branches/release/boost/units/base_units/us/
   branches/CMake/release/boost/units/base_units/us/cup.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/cup.hpp
   branches/CMake/release/boost/units/base_units/us/dram.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/dram.hpp
   branches/CMake/release/boost/units/base_units/us/fluid_dram.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/fluid_dram.hpp
   branches/CMake/release/boost/units/base_units/us/fluid_ounce.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/fluid_ounce.hpp
   branches/CMake/release/boost/units/base_units/us/foot.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/foot.hpp
   branches/CMake/release/boost/units/base_units/us/gallon.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/gallon.hpp
   branches/CMake/release/boost/units/base_units/us/gill.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/gill.hpp
   branches/CMake/release/boost/units/base_units/us/grain.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/grain.hpp
   branches/CMake/release/boost/units/base_units/us/hundredweight.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/hundredweight.hpp
   branches/CMake/release/boost/units/base_units/us/inch.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/inch.hpp
   branches/CMake/release/boost/units/base_units/us/mil.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/mil.hpp
   branches/CMake/release/boost/units/base_units/us/mile.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/mile.hpp
   branches/CMake/release/boost/units/base_units/us/minim.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/minim.hpp
   branches/CMake/release/boost/units/base_units/us/ounce.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/ounce.hpp
   branches/CMake/release/boost/units/base_units/us/pint.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/pint.hpp
   branches/CMake/release/boost/units/base_units/us/pound.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/pound.hpp
   branches/CMake/release/boost/units/base_units/us/quart.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/quart.hpp
   branches/CMake/release/boost/units/base_units/us/tablespoon.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/tablespoon.hpp
   branches/CMake/release/boost/units/base_units/us/teaspoon.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/teaspoon.hpp
   branches/CMake/release/boost/units/base_units/us/ton.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/ton.hpp
   branches/CMake/release/boost/units/base_units/us/yard.hpp
      - copied unchanged from r46809, /branches/release/boost/units/base_units/us/yard.hpp
   branches/CMake/release/boost/units/cmath.hpp
      - copied unchanged from r46809, /branches/release/boost/units/cmath.hpp
   branches/CMake/release/boost/units/config.hpp
      - copied unchanged from r46809, /branches/release/boost/units/config.hpp
   branches/CMake/release/boost/units/conversion.hpp
      - copied unchanged from r46809, /branches/release/boost/units/conversion.hpp
   branches/CMake/release/boost/units/derived_dimension.hpp
      - copied unchanged from r46809, /branches/release/boost/units/derived_dimension.hpp
   branches/CMake/release/boost/units/detail/
      - copied from r46809, /branches/release/boost/units/detail/
   branches/CMake/release/boost/units/detail/absolute_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/absolute_impl.hpp
   branches/CMake/release/boost/units/detail/cmath_boost_1_35.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/cmath_boost_1_35.hpp
   branches/CMake/release/boost/units/detail/cmath_gnu_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/cmath_gnu_impl.hpp
   branches/CMake/release/boost/units/detail/cmath_gnu_impl_boost_1_35.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/cmath_gnu_impl_boost_1_35.hpp
   branches/CMake/release/boost/units/detail/cmath_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/cmath_impl.hpp
   branches/CMake/release/boost/units/detail/cmath_msvc_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/cmath_msvc_impl.hpp
   branches/CMake/release/boost/units/detail/cmath_msvc_impl_boost_1_35.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/cmath_msvc_impl_boost_1_35.hpp
   branches/CMake/release/boost/units/detail/cmath_mwcw_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/cmath_mwcw_impl.hpp
   branches/CMake/release/boost/units/detail/cmath_mwcw_impl_boost_1_35.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/cmath_mwcw_impl_boost_1_35.hpp
   branches/CMake/release/boost/units/detail/conversion_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/conversion_impl.hpp
   branches/CMake/release/boost/units/detail/dim_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/dim_impl.hpp
   branches/CMake/release/boost/units/detail/dimension_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/dimension_impl.hpp
   branches/CMake/release/boost/units/detail/dimension_list.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/dimension_list.hpp
   branches/CMake/release/boost/units/detail/dimensionless_unit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/dimensionless_unit.hpp
   branches/CMake/release/boost/units/detail/heterogeneous_conversion.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/heterogeneous_conversion.hpp
   branches/CMake/release/boost/units/detail/linear_algebra.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/linear_algebra.hpp
   branches/CMake/release/boost/units/detail/one.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/one.hpp
   branches/CMake/release/boost/units/detail/ordinal.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/ordinal.hpp
   branches/CMake/release/boost/units/detail/prevent_redefinition.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/prevent_redefinition.hpp
   branches/CMake/release/boost/units/detail/push_front_if.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/push_front_if.hpp
   branches/CMake/release/boost/units/detail/push_front_or_add.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/push_front_or_add.hpp
   branches/CMake/release/boost/units/detail/sort.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/sort.hpp
   branches/CMake/release/boost/units/detail/static_rational_power.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/static_rational_power.hpp
   branches/CMake/release/boost/units/detail/unscale.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/unscale.hpp
   branches/CMake/release/boost/units/detail/utility.hpp
      - copied unchanged from r46809, /branches/release/boost/units/detail/utility.hpp
   branches/CMake/release/boost/units/dim.hpp
      - copied unchanged from r46809, /branches/release/boost/units/dim.hpp
   branches/CMake/release/boost/units/dimension.hpp
      - copied unchanged from r46809, /branches/release/boost/units/dimension.hpp
   branches/CMake/release/boost/units/dimensionless_quantity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/dimensionless_quantity.hpp
   branches/CMake/release/boost/units/dimensionless_type.hpp
      - copied unchanged from r46809, /branches/release/boost/units/dimensionless_type.hpp
   branches/CMake/release/boost/units/dimensionless_unit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/dimensionless_unit.hpp
   branches/CMake/release/boost/units/get_dimension.hpp
      - copied unchanged from r46809, /branches/release/boost/units/get_dimension.hpp
   branches/CMake/release/boost/units/get_system.hpp
      - copied unchanged from r46809, /branches/release/boost/units/get_system.hpp
   branches/CMake/release/boost/units/heterogeneous_system.hpp
      - copied unchanged from r46809, /branches/release/boost/units/heterogeneous_system.hpp
   branches/CMake/release/boost/units/homogeneous_system.hpp
      - copied unchanged from r46809, /branches/release/boost/units/homogeneous_system.hpp
   branches/CMake/release/boost/units/io.hpp
      - copied unchanged from r46809, /branches/release/boost/units/io.hpp
   branches/CMake/release/boost/units/is_dim.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_dim.hpp
   branches/CMake/release/boost/units/is_dimension_list.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_dimension_list.hpp
   branches/CMake/release/boost/units/is_dimensionless.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_dimensionless.hpp
   branches/CMake/release/boost/units/is_dimensionless_quantity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_dimensionless_quantity.hpp
   branches/CMake/release/boost/units/is_dimensionless_unit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_dimensionless_unit.hpp
   branches/CMake/release/boost/units/is_quantity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_quantity.hpp
   branches/CMake/release/boost/units/is_quantity_of_dimension.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_quantity_of_dimension.hpp
   branches/CMake/release/boost/units/is_quantity_of_system.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_quantity_of_system.hpp
   branches/CMake/release/boost/units/is_unit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_unit.hpp
   branches/CMake/release/boost/units/is_unit_of_dimension.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_unit_of_dimension.hpp
   branches/CMake/release/boost/units/is_unit_of_system.hpp
      - copied unchanged from r46809, /branches/release/boost/units/is_unit_of_system.hpp
   branches/CMake/release/boost/units/lambda.hpp
      - copied unchanged from r46809, /branches/release/boost/units/lambda.hpp
   branches/CMake/release/boost/units/limits.hpp
      - copied unchanged from r46809, /branches/release/boost/units/limits.hpp
   branches/CMake/release/boost/units/make_scaled_unit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/make_scaled_unit.hpp
   branches/CMake/release/boost/units/make_system.hpp
      - copied unchanged from r46809, /branches/release/boost/units/make_system.hpp
   branches/CMake/release/boost/units/operators.hpp
      - copied unchanged from r46809, /branches/release/boost/units/operators.hpp
   branches/CMake/release/boost/units/physical_dimensions/
      - copied from r46809, /branches/release/boost/units/physical_dimensions/
   branches/CMake/release/boost/units/physical_dimensions.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions.hpp
   branches/CMake/release/boost/units/physical_dimensions/absorbed_dose.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/absorbed_dose.hpp
   branches/CMake/release/boost/units/physical_dimensions/acceleration.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/acceleration.hpp
   branches/CMake/release/boost/units/physical_dimensions/action.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/action.hpp
   branches/CMake/release/boost/units/physical_dimensions/activity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/activity.hpp
   branches/CMake/release/boost/units/physical_dimensions/amount.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/amount.hpp
   branches/CMake/release/boost/units/physical_dimensions/angular_acceleration.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/angular_acceleration.hpp
   branches/CMake/release/boost/units/physical_dimensions/angular_momentum.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/angular_momentum.hpp
   branches/CMake/release/boost/units/physical_dimensions/angular_velocity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/angular_velocity.hpp
   branches/CMake/release/boost/units/physical_dimensions/area.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/area.hpp
   branches/CMake/release/boost/units/physical_dimensions/capacitance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/capacitance.hpp
   branches/CMake/release/boost/units/physical_dimensions/conductance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/conductance.hpp
   branches/CMake/release/boost/units/physical_dimensions/conductivity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/conductivity.hpp
   branches/CMake/release/boost/units/physical_dimensions/current.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/current.hpp
   branches/CMake/release/boost/units/physical_dimensions/dose_equivalent.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/dose_equivalent.hpp
   branches/CMake/release/boost/units/physical_dimensions/dynamic_viscosity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/dynamic_viscosity.hpp
   branches/CMake/release/boost/units/physical_dimensions/electric_charge.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/electric_charge.hpp
   branches/CMake/release/boost/units/physical_dimensions/electric_potential.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/electric_potential.hpp
   branches/CMake/release/boost/units/physical_dimensions/energy.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/energy.hpp
   branches/CMake/release/boost/units/physical_dimensions/energy_density.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/energy_density.hpp
   branches/CMake/release/boost/units/physical_dimensions/force.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/force.hpp
   branches/CMake/release/boost/units/physical_dimensions/frequency.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/frequency.hpp
   branches/CMake/release/boost/units/physical_dimensions/heat_capacity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/heat_capacity.hpp
   branches/CMake/release/boost/units/physical_dimensions/illuminance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/illuminance.hpp
   branches/CMake/release/boost/units/physical_dimensions/impedance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/impedance.hpp
   branches/CMake/release/boost/units/physical_dimensions/inductance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/inductance.hpp
   branches/CMake/release/boost/units/physical_dimensions/kinematic_viscosity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/kinematic_viscosity.hpp
   branches/CMake/release/boost/units/physical_dimensions/length.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/length.hpp
   branches/CMake/release/boost/units/physical_dimensions/luminance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/luminance.hpp
   branches/CMake/release/boost/units/physical_dimensions/luminous_flux.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/luminous_flux.hpp
   branches/CMake/release/boost/units/physical_dimensions/luminous_intensity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/luminous_intensity.hpp
   branches/CMake/release/boost/units/physical_dimensions/magnetic_field_intensity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/magnetic_field_intensity.hpp
   branches/CMake/release/boost/units/physical_dimensions/magnetic_flux.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/magnetic_flux.hpp
   branches/CMake/release/boost/units/physical_dimensions/magnetic_flux_density.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/magnetic_flux_density.hpp
   branches/CMake/release/boost/units/physical_dimensions/mass.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/mass.hpp
   branches/CMake/release/boost/units/physical_dimensions/mass_density.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/mass_density.hpp
   branches/CMake/release/boost/units/physical_dimensions/molar_energy.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/molar_energy.hpp
   branches/CMake/release/boost/units/physical_dimensions/molar_heat_capacity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/molar_heat_capacity.hpp
   branches/CMake/release/boost/units/physical_dimensions/moment_of_inertia.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/moment_of_inertia.hpp
   branches/CMake/release/boost/units/physical_dimensions/momentum.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/momentum.hpp
   branches/CMake/release/boost/units/physical_dimensions/permeability.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/permeability.hpp
   branches/CMake/release/boost/units/physical_dimensions/permittivity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/permittivity.hpp
   branches/CMake/release/boost/units/physical_dimensions/plane_angle.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/plane_angle.hpp
   branches/CMake/release/boost/units/physical_dimensions/power.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/power.hpp
   branches/CMake/release/boost/units/physical_dimensions/pressure.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/pressure.hpp
   branches/CMake/release/boost/units/physical_dimensions/reluctance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/reluctance.hpp
   branches/CMake/release/boost/units/physical_dimensions/resistance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/resistance.hpp
   branches/CMake/release/boost/units/physical_dimensions/resistivity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/resistivity.hpp
   branches/CMake/release/boost/units/physical_dimensions/solid_angle.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/solid_angle.hpp
   branches/CMake/release/boost/units/physical_dimensions/specific_energy.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/specific_energy.hpp
   branches/CMake/release/boost/units/physical_dimensions/specific_heat_capacity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/specific_heat_capacity.hpp
   branches/CMake/release/boost/units/physical_dimensions/specific_volume.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/specific_volume.hpp
   branches/CMake/release/boost/units/physical_dimensions/stress.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/stress.hpp
   branches/CMake/release/boost/units/physical_dimensions/surface_density.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/surface_density.hpp
   branches/CMake/release/boost/units/physical_dimensions/surface_tension.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/surface_tension.hpp
   branches/CMake/release/boost/units/physical_dimensions/temperature.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/temperature.hpp
   branches/CMake/release/boost/units/physical_dimensions/thermal_conductivity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/thermal_conductivity.hpp
   branches/CMake/release/boost/units/physical_dimensions/time.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/time.hpp
   branches/CMake/release/boost/units/physical_dimensions/torque.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/torque.hpp
   branches/CMake/release/boost/units/physical_dimensions/velocity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/velocity.hpp
   branches/CMake/release/boost/units/physical_dimensions/volume.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/volume.hpp
   branches/CMake/release/boost/units/physical_dimensions/wavenumber.hpp
      - copied unchanged from r46809, /branches/release/boost/units/physical_dimensions/wavenumber.hpp
   branches/CMake/release/boost/units/pow.hpp
      - copied unchanged from r46809, /branches/release/boost/units/pow.hpp
   branches/CMake/release/boost/units/quantity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/quantity.hpp
   branches/CMake/release/boost/units/reduce_unit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/reduce_unit.hpp
   branches/CMake/release/boost/units/scale.hpp
      - copied unchanged from r46809, /branches/release/boost/units/scale.hpp
   branches/CMake/release/boost/units/scaled_base_unit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/scaled_base_unit.hpp
   branches/CMake/release/boost/units/static_constant.hpp
      - copied unchanged from r46809, /branches/release/boost/units/static_constant.hpp
   branches/CMake/release/boost/units/static_rational.hpp
      - copied unchanged from r46809, /branches/release/boost/units/static_rational.hpp
   branches/CMake/release/boost/units/systems/
      - copied from r46809, /branches/release/boost/units/systems/
   branches/CMake/release/boost/units/systems/abstract.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/abstract.hpp
   branches/CMake/release/boost/units/systems/angle/
      - copied from r46809, /branches/release/boost/units/systems/angle/
   branches/CMake/release/boost/units/systems/angle/degrees.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/angle/degrees.hpp
   branches/CMake/release/boost/units/systems/angle/gradians.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/angle/gradians.hpp
   branches/CMake/release/boost/units/systems/angle/revolutions.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/angle/revolutions.hpp
   branches/CMake/release/boost/units/systems/cgs/
      - copied from r46809, /branches/release/boost/units/systems/cgs/
   branches/CMake/release/boost/units/systems/cgs.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs.hpp
   branches/CMake/release/boost/units/systems/cgs/acceleration.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/acceleration.hpp
   branches/CMake/release/boost/units/systems/cgs/area.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/area.hpp
   branches/CMake/release/boost/units/systems/cgs/base.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/base.hpp
   branches/CMake/release/boost/units/systems/cgs/current.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/current.hpp
   branches/CMake/release/boost/units/systems/cgs/dimensionless.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/dimensionless.hpp
   branches/CMake/release/boost/units/systems/cgs/dynamic_viscosity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/dynamic_viscosity.hpp
   branches/CMake/release/boost/units/systems/cgs/energy.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/energy.hpp
   branches/CMake/release/boost/units/systems/cgs/force.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/force.hpp
   branches/CMake/release/boost/units/systems/cgs/frequency.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/frequency.hpp
   branches/CMake/release/boost/units/systems/cgs/io.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/io.hpp
   branches/CMake/release/boost/units/systems/cgs/kinematic_viscosity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/kinematic_viscosity.hpp
   branches/CMake/release/boost/units/systems/cgs/length.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/length.hpp
   branches/CMake/release/boost/units/systems/cgs/mass.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/mass.hpp
   branches/CMake/release/boost/units/systems/cgs/mass_density.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/mass_density.hpp
   branches/CMake/release/boost/units/systems/cgs/momentum.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/momentum.hpp
   branches/CMake/release/boost/units/systems/cgs/power.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/power.hpp
   branches/CMake/release/boost/units/systems/cgs/pressure.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/pressure.hpp
   branches/CMake/release/boost/units/systems/cgs/time.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/time.hpp
   branches/CMake/release/boost/units/systems/cgs/velocity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/velocity.hpp
   branches/CMake/release/boost/units/systems/cgs/volume.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/volume.hpp
   branches/CMake/release/boost/units/systems/cgs/wavenumber.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/cgs/wavenumber.hpp
   branches/CMake/release/boost/units/systems/detail/
      - copied from r46809, /branches/release/boost/units/systems/detail/
   branches/CMake/release/boost/units/systems/detail/constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/detail/constants.hpp
   branches/CMake/release/boost/units/systems/si/
      - copied from r46809, /branches/release/boost/units/systems/si/
   branches/CMake/release/boost/units/systems/si.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si.hpp
   branches/CMake/release/boost/units/systems/si/absorbed_dose.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/absorbed_dose.hpp
   branches/CMake/release/boost/units/systems/si/acceleration.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/acceleration.hpp
   branches/CMake/release/boost/units/systems/si/action.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/action.hpp
   branches/CMake/release/boost/units/systems/si/activity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/activity.hpp
   branches/CMake/release/boost/units/systems/si/amount.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/amount.hpp
   branches/CMake/release/boost/units/systems/si/angular_acceleration.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/angular_acceleration.hpp
   branches/CMake/release/boost/units/systems/si/angular_momentum.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/angular_momentum.hpp
   branches/CMake/release/boost/units/systems/si/angular_velocity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/angular_velocity.hpp
   branches/CMake/release/boost/units/systems/si/area.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/area.hpp
   branches/CMake/release/boost/units/systems/si/base.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/base.hpp
   branches/CMake/release/boost/units/systems/si/capacitance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/capacitance.hpp
   branches/CMake/release/boost/units/systems/si/catalytic_activity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/catalytic_activity.hpp
   branches/CMake/release/boost/units/systems/si/codata/
      - copied from r46809, /branches/release/boost/units/systems/si/codata/
   branches/CMake/release/boost/units/systems/si/codata/alpha_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/alpha_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/atomic-nuclear_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/atomic-nuclear_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/deuteron_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/deuteron_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/electromagnetic_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/electromagnetic_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/electron_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/electron_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/helion_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/helion_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/muon_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/muon_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/neutron_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/neutron_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/physico-chemical_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/physico-chemical_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/proton_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/proton_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/tau_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/tau_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/triton_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/triton_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata/typedefs.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/typedefs.hpp
   branches/CMake/release/boost/units/systems/si/codata/universal_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata/universal_constants.hpp
   branches/CMake/release/boost/units/systems/si/codata_constants.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/codata_constants.hpp
   branches/CMake/release/boost/units/systems/si/conductance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/conductance.hpp
   branches/CMake/release/boost/units/systems/si/conductivity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/conductivity.hpp
   branches/CMake/release/boost/units/systems/si/current.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/current.hpp
   branches/CMake/release/boost/units/systems/si/dimensionless.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/dimensionless.hpp
   branches/CMake/release/boost/units/systems/si/dose_equivalent.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/dose_equivalent.hpp
   branches/CMake/release/boost/units/systems/si/dynamic_viscosity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/dynamic_viscosity.hpp
   branches/CMake/release/boost/units/systems/si/electric_charge.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/electric_charge.hpp
   branches/CMake/release/boost/units/systems/si/electric_potential.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/electric_potential.hpp
   branches/CMake/release/boost/units/systems/si/energy.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/energy.hpp
   branches/CMake/release/boost/units/systems/si/force.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/force.hpp
   branches/CMake/release/boost/units/systems/si/frequency.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/frequency.hpp
   branches/CMake/release/boost/units/systems/si/illuminance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/illuminance.hpp
   branches/CMake/release/boost/units/systems/si/impedance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/impedance.hpp
   branches/CMake/release/boost/units/systems/si/inductance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/inductance.hpp
   branches/CMake/release/boost/units/systems/si/io.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/io.hpp
   branches/CMake/release/boost/units/systems/si/kinematic_viscosity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/kinematic_viscosity.hpp
   branches/CMake/release/boost/units/systems/si/length.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/length.hpp
   branches/CMake/release/boost/units/systems/si/luminous_flux.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/luminous_flux.hpp
   branches/CMake/release/boost/units/systems/si/luminous_intensity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/luminous_intensity.hpp
   branches/CMake/release/boost/units/systems/si/magnetic_field_intensity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/magnetic_field_intensity.hpp
   branches/CMake/release/boost/units/systems/si/magnetic_flux.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/magnetic_flux.hpp
   branches/CMake/release/boost/units/systems/si/magnetic_flux_density.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/magnetic_flux_density.hpp
   branches/CMake/release/boost/units/systems/si/mass.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/mass.hpp
   branches/CMake/release/boost/units/systems/si/mass_density.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/mass_density.hpp
   branches/CMake/release/boost/units/systems/si/moment_of_inertia.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/moment_of_inertia.hpp
   branches/CMake/release/boost/units/systems/si/momentum.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/momentum.hpp
   branches/CMake/release/boost/units/systems/si/permeability.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/permeability.hpp
   branches/CMake/release/boost/units/systems/si/permittivity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/permittivity.hpp
   branches/CMake/release/boost/units/systems/si/plane_angle.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/plane_angle.hpp
   branches/CMake/release/boost/units/systems/si/power.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/power.hpp
   branches/CMake/release/boost/units/systems/si/prefixes.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/prefixes.hpp
   branches/CMake/release/boost/units/systems/si/pressure.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/pressure.hpp
   branches/CMake/release/boost/units/systems/si/reluctance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/reluctance.hpp
   branches/CMake/release/boost/units/systems/si/resistance.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/resistance.hpp
   branches/CMake/release/boost/units/systems/si/resistivity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/resistivity.hpp
   branches/CMake/release/boost/units/systems/si/solid_angle.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/solid_angle.hpp
   branches/CMake/release/boost/units/systems/si/surface_density.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/surface_density.hpp
   branches/CMake/release/boost/units/systems/si/surface_tension.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/surface_tension.hpp
   branches/CMake/release/boost/units/systems/si/temperature.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/temperature.hpp
   branches/CMake/release/boost/units/systems/si/time.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/time.hpp
   branches/CMake/release/boost/units/systems/si/torque.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/torque.hpp
   branches/CMake/release/boost/units/systems/si/velocity.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/velocity.hpp
   branches/CMake/release/boost/units/systems/si/volume.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/volume.hpp
   branches/CMake/release/boost/units/systems/si/wavenumber.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/si/wavenumber.hpp
   branches/CMake/release/boost/units/systems/temperature/
      - copied from r46809, /branches/release/boost/units/systems/temperature/
   branches/CMake/release/boost/units/systems/temperature/celsius.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/temperature/celsius.hpp
   branches/CMake/release/boost/units/systems/temperature/fahrenheit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/systems/temperature/fahrenheit.hpp
   branches/CMake/release/boost/units/unit.hpp
      - copied unchanged from r46809, /branches/release/boost/units/unit.hpp
   branches/CMake/release/boost/units/units_fwd.hpp
      - copied unchanged from r46809, /branches/release/boost/units/units_fwd.hpp
   branches/CMake/release/boost/unordered/
      - copied from r46809, /branches/release/boost/unordered/
   branches/CMake/release/boost/unordered/detail/
      - copied from r46809, /branches/release/boost/unordered/detail/
   branches/CMake/release/boost/unordered/detail/allocator_helpers.hpp
      - copied unchanged from r46809, /branches/release/boost/unordered/detail/allocator_helpers.hpp
   branches/CMake/release/boost/unordered/detail/config.hpp
      - copied unchanged from r46809, /branches/release/boost/unordered/detail/config.hpp
   branches/CMake/release/boost/unordered/detail/hash_table.hpp
      - copied unchanged from r46809, /branches/release/boost/unordered/detail/hash_table.hpp
   branches/CMake/release/boost/unordered/detail/hash_table_impl.hpp
      - copied unchanged from r46809, /branches/release/boost/unordered/detail/hash_table_impl.hpp
   branches/CMake/release/boost/unordered/detail/move.hpp
      - copied unchanged from r46809, /branches/release/boost/unordered/detail/move.hpp
   branches/CMake/release/boost/unordered_map.hpp
      - copied unchanged from r46809, /branches/release/boost/unordered_map.hpp
   branches/CMake/release/boost/unordered_set.hpp
      - copied unchanged from r46809, /branches/release/boost/unordered_set.hpp
Removed:
   branches/CMake/release/boost/intrusive/detail/no_exceptions_support.hpp
   branches/CMake/release/boost/intrusive/pointer_plus_2_bits.hpp
   branches/CMake/release/boost/intrusive/pointer_plus_bit.hpp
   branches/CMake/release/boost/spirit/core/composite/impl/
   branches/CMake/release/boost/spirit/core/impl/
   branches/CMake/release/boost/spirit/core/non_terminal/impl/
   branches/CMake/release/boost/spirit/core/primitives/impl/
   branches/CMake/release/boost/spirit/core/scanner/impl/
   branches/CMake/release/boost/spirit/debug/impl/
   branches/CMake/release/boost/spirit/dynamic/impl/
   branches/CMake/release/boost/spirit/error_handling/impl/
   branches/CMake/release/boost/spirit/iterator/impl/
   branches/CMake/release/boost/spirit/meta/impl/
   branches/CMake/release/boost/spirit/symbols/impl/
   branches/CMake/release/boost/spirit/tree/impl/
   branches/CMake/release/boost/spirit/utility/impl/
   branches/CMake/release/boost/thread/pthread/thread.hpp
   branches/CMake/release/boost/thread/pthread/tss.hpp
   branches/CMake/release/boost/thread/win32/thread.hpp
   branches/CMake/release/boost/thread/win32/tss.hpp
Binary files modified:
   branches/CMake/release/boost/ptr_container/serialize_ptr_container.hpp
Text files modified:
   branches/CMake/release/boost/algorithm/string.hpp | 1
   branches/CMake/release/boost/algorithm/string/classification.hpp | 4
   branches/CMake/release/boost/algorithm/string/concept.hpp | 4
   branches/CMake/release/boost/algorithm/string/detail/case_conv.hpp | 23
   branches/CMake/release/boost/algorithm/string/detail/classification.hpp | 128 +
   branches/CMake/release/boost/algorithm/string/detail/find_format.hpp | 14
   branches/CMake/release/boost/algorithm/string/detail/find_format_all.hpp | 30
   branches/CMake/release/boost/algorithm/string/detail/find_format_store.hpp | 7
   branches/CMake/release/boost/algorithm/string/detail/finder.hpp | 12
   branches/CMake/release/boost/algorithm/string/detail/formatter.hpp | 4
   branches/CMake/release/boost/algorithm/string/detail/replace_storage.hpp | 2
   branches/CMake/release/boost/algorithm/string/detail/sequence.hpp | 6
   branches/CMake/release/boost/algorithm/string/find.hpp | 2
   branches/CMake/release/boost/algorithm/string/find_format.hpp | 12
   branches/CMake/release/boost/algorithm/string/find_iterator.hpp | 24
   branches/CMake/release/boost/algorithm/string/iter_find.hpp | 8
   branches/CMake/release/boost/algorithm/string/join.hpp | 20
   branches/CMake/release/boost/algorithm/string/predicate.hpp | 38
   branches/CMake/release/boost/algorithm/string/regex.hpp | 30
   branches/CMake/release/boost/algorithm/string/trim.hpp | 48
   branches/CMake/release/boost/asio.hpp | 26
   branches/CMake/release/boost/asio/basic_io_object.hpp | 12
   branches/CMake/release/boost/asio/basic_streambuf.hpp | 8
   branches/CMake/release/boost/asio/buffer.hpp | 27
   branches/CMake/release/boost/asio/detail/consuming_buffers.hpp | 20
   branches/CMake/release/boost/asio/detail/deadline_timer_service.hpp | 13
   branches/CMake/release/boost/asio/detail/dev_poll_reactor.hpp | 127
   branches/CMake/release/boost/asio/detail/epoll_reactor.hpp | 180 +
   branches/CMake/release/boost/asio/detail/handler_queue.hpp | 10
   branches/CMake/release/boost/asio/detail/hash_map.hpp | 34
   branches/CMake/release/boost/asio/detail/kqueue_reactor.hpp | 192 +
   branches/CMake/release/boost/asio/detail/null_thread.hpp | 5
   branches/CMake/release/boost/asio/detail/old_win_sdk_compat.hpp | 5
   branches/CMake/release/boost/asio/detail/posix_thread.hpp | 5
   branches/CMake/release/boost/asio/detail/push_options.hpp | 2
   branches/CMake/release/boost/asio/detail/reactive_socket_service.hpp | 446 +++-
   branches/CMake/release/boost/asio/detail/reactor_op_queue.hpp | 209 +
   branches/CMake/release/boost/asio/detail/select_reactor.hpp | 131
   branches/CMake/release/boost/asio/detail/service_registry.hpp | 10
   branches/CMake/release/boost/asio/detail/socket_ops.hpp | 16
   branches/CMake/release/boost/asio/detail/socket_types.hpp | 2
   branches/CMake/release/boost/asio/detail/strand_service.hpp | 21
   branches/CMake/release/boost/asio/detail/task_io_service.hpp | 6
   branches/CMake/release/boost/asio/detail/timer_queue.hpp | 101
   branches/CMake/release/boost/asio/detail/timer_queue_base.hpp | 4
   branches/CMake/release/boost/asio/detail/win_iocp_io_service.hpp | 41
   branches/CMake/release/boost/asio/detail/win_iocp_socket_service.hpp | 432 +++
   branches/CMake/release/boost/asio/detail/win_thread.hpp | 73
   branches/CMake/release/boost/asio/detail/wince_thread.hpp | 5
   branches/CMake/release/boost/asio/detail/wrapped_handler.hpp | 48
   branches/CMake/release/boost/asio/error.hpp | 3
   branches/CMake/release/boost/asio/impl/read_until.ipp | 374 +++
   branches/CMake/release/boost/asio/read_until.hpp | 306 +++
   branches/CMake/release/boost/asio/ssl/detail/openssl_operation.hpp | 9
   branches/CMake/release/boost/asio/version.hpp | 2
   branches/CMake/release/boost/asio/write.hpp | 6
   branches/CMake/release/boost/assign/list_inserter.hpp | 4
   branches/CMake/release/boost/assign/list_of.hpp | 140 +
   branches/CMake/release/boost/assign/ptr_list_of.hpp | 14
   branches/CMake/release/boost/bind.hpp | 30
   branches/CMake/release/boost/detail/sp_counted_base_sync.hpp | 4
   branches/CMake/release/boost/foreach.hpp | 230 ++
   branches/CMake/release/boost/functional/detail/container_fwd.hpp | 2
   branches/CMake/release/boost/functional/detail/float_functions.hpp | 2
   branches/CMake/release/boost/functional/detail/hash_float.hpp | 81
   branches/CMake/release/boost/functional/hash.hpp | 3
   branches/CMake/release/boost/functional/hash/deque.hpp | 2
   branches/CMake/release/boost/functional/hash/hash.hpp | 184 -
   branches/CMake/release/boost/functional/hash/list.hpp | 2
   branches/CMake/release/boost/functional/hash/map.hpp | 2
   branches/CMake/release/boost/functional/hash/pair.hpp | 2
   branches/CMake/release/boost/functional/hash/set.hpp | 2
   branches/CMake/release/boost/functional/hash/vector.hpp | 2
   branches/CMake/release/boost/functional/hash_fwd.hpp | 2
   branches/CMake/release/boost/fusion/container/generation/ignore.hpp | 2
   branches/CMake/release/boost/fusion/container/vector/vector_fwd.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/detail/equal_to.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/detail/greater.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/detail/greater_equal.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/detail/less.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/detail/less_equal.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/detail/not_equal_to.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/equal_to.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/greater.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/greater_equal.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/less.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/less_equal.hpp | 2
   branches/CMake/release/boost/fusion/sequence/comparison/not_equal_to.hpp | 2
   branches/CMake/release/boost/fusion/sequence/io/detail/in.hpp | 2
   branches/CMake/release/boost/fusion/sequence/io/detail/manip.hpp | 2
   branches/CMake/release/boost/fusion/sequence/io/detail/out.hpp | 2
   branches/CMake/release/boost/fusion/sequence/io/in.hpp | 2
   branches/CMake/release/boost/fusion/sequence/io/out.hpp | 2
   branches/CMake/release/boost/fusion/support/detail/as_fusion_element.hpp | 2
   branches/CMake/release/boost/interprocess/allocators/adaptive_pool.hpp | 140
   branches/CMake/release/boost/interprocess/allocators/allocator.hpp | 29
   branches/CMake/release/boost/interprocess/allocators/cached_adaptive_pool.hpp | 83
   branches/CMake/release/boost/interprocess/allocators/cached_node_allocator.hpp | 59
   branches/CMake/release/boost/interprocess/allocators/detail/adaptive_node_pool.hpp | 368 +-
   branches/CMake/release/boost/interprocess/allocators/detail/allocator_common.hpp | 115
   branches/CMake/release/boost/interprocess/allocators/detail/node_pool.hpp | 108
   branches/CMake/release/boost/interprocess/allocators/node_allocator.hpp | 125
   branches/CMake/release/boost/interprocess/allocators/private_adaptive_pool.hpp | 127
   branches/CMake/release/boost/interprocess/allocators/private_node_allocator.hpp | 309 --
   branches/CMake/release/boost/interprocess/containers/deque.hpp | 40
   branches/CMake/release/boost/interprocess/containers/detail/flat_tree.hpp | 18
   branches/CMake/release/boost/interprocess/containers/detail/node_alloc_holder.hpp | 22
   branches/CMake/release/boost/interprocess/containers/detail/tree.hpp | 23
   branches/CMake/release/boost/interprocess/containers/flat_map.hpp | 123
   branches/CMake/release/boost/interprocess/containers/flat_set.hpp | 39
   branches/CMake/release/boost/interprocess/containers/list.hpp | 35
   branches/CMake/release/boost/interprocess/containers/map.hpp | 54
   branches/CMake/release/boost/interprocess/containers/set.hpp | 28
   branches/CMake/release/boost/interprocess/containers/slist.hpp | 19
   branches/CMake/release/boost/interprocess/containers/string.hpp | 19
   branches/CMake/release/boost/interprocess/containers/vector.hpp | 111
   branches/CMake/release/boost/interprocess/creation_tags.hpp | 22
   branches/CMake/release/boost/interprocess/detail/algorithms.hpp | 97
   branches/CMake/release/boost/interprocess/detail/config_begin.hpp | 1
   branches/CMake/release/boost/interprocess/detail/file_wrapper.hpp | 6
   branches/CMake/release/boost/interprocess/detail/managed_memory_impl.hpp | 14
   branches/CMake/release/boost/interprocess/detail/move.hpp | 32
   branches/CMake/release/boost/interprocess/detail/move_iterator.hpp | 4
   branches/CMake/release/boost/interprocess/detail/mpl.hpp | 21
   branches/CMake/release/boost/interprocess/detail/named_proxy.hpp | 20
   branches/CMake/release/boost/interprocess/detail/win32_api.hpp | 2
   branches/CMake/release/boost/interprocess/detail/workaround.hpp | 9
   branches/CMake/release/boost/interprocess/errors.hpp | 4
   branches/CMake/release/boost/interprocess/file_mapping.hpp | 38
   branches/CMake/release/boost/interprocess/indexes/map_index.hpp | 2
   branches/CMake/release/boost/interprocess/indexes/unordered_map_index.hpp | 4
   branches/CMake/release/boost/interprocess/interprocess_fwd.hpp | 12
   branches/CMake/release/boost/interprocess/ipc/message_queue.hpp | 17
   branches/CMake/release/boost/interprocess/managed_external_buffer.hpp | 30
   branches/CMake/release/boost/interprocess/managed_heap_memory.hpp | 26
   branches/CMake/release/boost/interprocess/managed_mapped_file.hpp | 82
   branches/CMake/release/boost/interprocess/managed_shared_memory.hpp | 82
   branches/CMake/release/boost/interprocess/managed_windows_shared_memory.hpp | 77
   branches/CMake/release/boost/interprocess/mapped_region.hpp | 46
   branches/CMake/release/boost/interprocess/mem_algo/detail/mem_algo_common.hpp | 105
   branches/CMake/release/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp | 16
   branches/CMake/release/boost/interprocess/mem_algo/rbtree_best_fit.hpp | 55
   branches/CMake/release/boost/interprocess/offset_ptr.hpp | 72
   branches/CMake/release/boost/interprocess/segment_manager.hpp | 99
   branches/CMake/release/boost/interprocess/shared_memory_object.hpp | 36
   branches/CMake/release/boost/interprocess/smart_ptr/detail/shared_count.hpp | 5
   branches/CMake/release/boost/interprocess/smart_ptr/enable_shared_from_this.hpp | 5
   branches/CMake/release/boost/interprocess/smart_ptr/shared_ptr.hpp | 74
   branches/CMake/release/boost/interprocess/smart_ptr/unique_ptr.hpp | 48
   branches/CMake/release/boost/interprocess/smart_ptr/weak_ptr.hpp | 5
   branches/CMake/release/boost/interprocess/sync/emulation/interprocess_condition.hpp | 29
   branches/CMake/release/boost/interprocess/sync/file_lock.hpp | 71
   branches/CMake/release/boost/interprocess/sync/interprocess_condition.hpp | 2
   branches/CMake/release/boost/interprocess/sync/interprocess_upgradable_mutex.hpp | 5
   branches/CMake/release/boost/interprocess/sync/named_condition.hpp | 32
   branches/CMake/release/boost/interprocess/sync/named_recursive_mutex.hpp | 4
   branches/CMake/release/boost/interprocess/sync/named_upgradable_mutex.hpp | 5
   branches/CMake/release/boost/interprocess/sync/scoped_lock.hpp | 17
   branches/CMake/release/boost/interprocess/sync/sharable_lock.hpp | 18
   branches/CMake/release/boost/interprocess/sync/upgradable_lock.hpp | 12
   branches/CMake/release/boost/interprocess/windows_shared_memory.hpp | 20
   branches/CMake/release/boost/intrusive/avl_set.hpp | 70
   branches/CMake/release/boost/intrusive/avltree.hpp | 31
   branches/CMake/release/boost/intrusive/avltree_algorithms.hpp | 14
   branches/CMake/release/boost/intrusive/circular_list_algorithms.hpp | 5
   branches/CMake/release/boost/intrusive/circular_slist_algorithms.hpp | 13
   branches/CMake/release/boost/intrusive/detail/avltree_node.hpp | 10
   branches/CMake/release/boost/intrusive/detail/common_slist_algorithms.hpp | 5
   branches/CMake/release/boost/intrusive/detail/ebo_functor_holder.hpp | 33
   branches/CMake/release/boost/intrusive/detail/generic_hook.hpp | 53
   branches/CMake/release/boost/intrusive/detail/hashtable_node.hpp | 56
   branches/CMake/release/boost/intrusive/detail/list_node.hpp | 6
   branches/CMake/release/boost/intrusive/detail/mpl.hpp | 20
   branches/CMake/release/boost/intrusive/detail/parent_from_member.hpp | 23
   branches/CMake/release/boost/intrusive/detail/rbtree_node.hpp | 16
   branches/CMake/release/boost/intrusive/detail/slist_node.hpp | 3
   branches/CMake/release/boost/intrusive/detail/tree_algorithms.hpp | 180 +
   branches/CMake/release/boost/intrusive/detail/tree_node.hpp | 5
   branches/CMake/release/boost/intrusive/detail/utilities.hpp | 108
   branches/CMake/release/boost/intrusive/hashtable.hpp | 1595 +++++++++++----
   branches/CMake/release/boost/intrusive/intrusive_fwd.hpp | 23
   branches/CMake/release/boost/intrusive/linear_slist_algorithms.hpp | 15
   branches/CMake/release/boost/intrusive/list.hpp | 55
   branches/CMake/release/boost/intrusive/options.hpp | 129 +
   branches/CMake/release/boost/intrusive/rbtree.hpp | 62
   branches/CMake/release/boost/intrusive/rbtree_algorithms.hpp | 13
   branches/CMake/release/boost/intrusive/set.hpp | 85
   branches/CMake/release/boost/intrusive/sg_set.hpp | 68
   branches/CMake/release/boost/intrusive/sgtree.hpp | 25
   branches/CMake/release/boost/intrusive/sgtree_algorithms.hpp | 13
   branches/CMake/release/boost/intrusive/slist.hpp | 167 +
   branches/CMake/release/boost/intrusive/splay_set.hpp | 68
   branches/CMake/release/boost/intrusive/splaytree.hpp | 25
   branches/CMake/release/boost/intrusive/splaytree_algorithms.hpp | 66
   branches/CMake/release/boost/intrusive/unordered_set.hpp | 64
   branches/CMake/release/boost/intrusive/unordered_set_hook.hpp | 115
   branches/CMake/release/boost/lambda/algorithm.hpp | 2
   branches/CMake/release/boost/lambda/bind.hpp | 2
   branches/CMake/release/boost/lambda/casts.hpp | 2
   branches/CMake/release/boost/lambda/construct.hpp | 2
   branches/CMake/release/boost/lambda/control_structures.hpp | 2
   branches/CMake/release/boost/lambda/core.hpp | 2
   branches/CMake/release/boost/lambda/detail/actions.hpp | 2
   branches/CMake/release/boost/lambda/detail/arity_code.hpp | 2
   branches/CMake/release/boost/lambda/detail/bind_functions.hpp | 2
   branches/CMake/release/boost/lambda/detail/control_constructs_common.hpp | 2
   branches/CMake/release/boost/lambda/detail/control_structures_impl.hpp | 2
   branches/CMake/release/boost/lambda/detail/function_adaptors.hpp | 2
   branches/CMake/release/boost/lambda/detail/is_instance_of.hpp | 2
   branches/CMake/release/boost/lambda/detail/lambda_config.hpp | 2
   branches/CMake/release/boost/lambda/detail/lambda_functor_base.hpp | 2
   branches/CMake/release/boost/lambda/detail/lambda_functors.hpp | 2
   branches/CMake/release/boost/lambda/detail/lambda_fwd.hpp | 2
   branches/CMake/release/boost/lambda/detail/lambda_traits.hpp | 2
   branches/CMake/release/boost/lambda/detail/member_ptr.hpp | 2
   branches/CMake/release/boost/lambda/detail/operator_actions.hpp | 2
   branches/CMake/release/boost/lambda/detail/operator_lambda_func_base.hpp | 2
   branches/CMake/release/boost/lambda/detail/operator_return_type_traits.hpp | 2
   branches/CMake/release/boost/lambda/detail/operators.hpp | 2
   branches/CMake/release/boost/lambda/detail/ret.hpp | 2
   branches/CMake/release/boost/lambda/detail/return_type_traits.hpp | 2
   branches/CMake/release/boost/lambda/detail/select_functions.hpp | 2
   branches/CMake/release/boost/lambda/exceptions.hpp | 2
   branches/CMake/release/boost/lambda/if.hpp | 2
   branches/CMake/release/boost/lambda/lambda.hpp | 2
   branches/CMake/release/boost/lambda/loops.hpp | 2
   branches/CMake/release/boost/lambda/numeric.hpp | 2
   branches/CMake/release/boost/lambda/switch.hpp | 2
   branches/CMake/release/boost/mpi/collectives/scatter.hpp | 2
   branches/CMake/release/boost/mpi/communicator.hpp | 18
   branches/CMake/release/boost/mpi/config.hpp | 5
   branches/CMake/release/boost/mpi/datatype.hpp | 26
   branches/CMake/release/boost/mpi/datatype_fwd.hpp | 2
   branches/CMake/release/boost/mpi/detail/content_oarchive.hpp | 2
   branches/CMake/release/boost/mpi/detail/forward_iprimitive.hpp | 26
   branches/CMake/release/boost/mpi/detail/forward_oprimitive.hpp | 26
   branches/CMake/release/boost/mpi/detail/forward_skeleton_iarchive.hpp | 25
   branches/CMake/release/boost/mpi/detail/forward_skeleton_oarchive.hpp | 25
   branches/CMake/release/boost/mpi/detail/ignore_skeleton_oarchive.hpp | 17
   branches/CMake/release/boost/mpi/detail/mpi_datatype_cache.hpp | 8
   branches/CMake/release/boost/mpi/detail/mpi_datatype_oarchive.hpp | 1
   branches/CMake/release/boost/mpi/detail/packed_iprimitive.hpp | 15
   branches/CMake/release/boost/mpi/detail/text_skeleton_oarchive.hpp | 5
   branches/CMake/release/boost/mpi/packed_iarchive.hpp | 46
   branches/CMake/release/boost/mpi/packed_oarchive.hpp | 37
   branches/CMake/release/boost/mpi/python/serialize.hpp | 4
   branches/CMake/release/boost/mpi/skeleton_and_content.hpp | 3
   branches/CMake/release/boost/mpi/status.hpp | 2
   branches/CMake/release/boost/ptr_container/clone_allocator.hpp | 4
   branches/CMake/release/boost/ptr_container/detail/associative_ptr_container.hpp | 256 ++
   branches/CMake/release/boost/ptr_container/detail/map_iterator.hpp | 45
   branches/CMake/release/boost/ptr_container/detail/reversible_ptr_container.hpp | 178 +
   branches/CMake/release/boost/ptr_container/detail/serialize_ptr_map_adapter.hpp | 18
   branches/CMake/release/boost/ptr_container/detail/serialize_reversible_cont.hpp | 10
   branches/CMake/release/boost/ptr_container/detail/serialize_xml_names.hpp | 6
   branches/CMake/release/boost/ptr_container/ptr_array.hpp | 29
   branches/CMake/release/boost/ptr_container/ptr_container.hpp | 6
   branches/CMake/release/boost/ptr_container/ptr_deque.hpp | 2
   branches/CMake/release/boost/ptr_container/ptr_list.hpp | 20
   branches/CMake/release/boost/ptr_container/ptr_map.hpp | 38
   branches/CMake/release/boost/ptr_container/ptr_map_adapter.hpp | 359 ++
   branches/CMake/release/boost/ptr_container/ptr_sequence_adapter.hpp | 208 +
   branches/CMake/release/boost/ptr_container/ptr_set.hpp | 44
   branches/CMake/release/boost/ptr_container/ptr_set_adapter.hpp | 217 +
   branches/CMake/release/boost/ptr_container/ptr_vector.hpp | 2
   branches/CMake/release/boost/ptr_container/serialize_ptr_array.hpp | 4
   branches/CMake/release/boost/ptr_container/serialize_ptr_vector.hpp | 2
   branches/CMake/release/boost/python/ptr.hpp | 2
   branches/CMake/release/boost/range/as_literal.hpp | 24
   branches/CMake/release/boost/range/begin.hpp | 8
   branches/CMake/release/boost/range/detail/as_literal.hpp | 4
   branches/CMake/release/boost/range/detail/implementation_help.hpp | 4
   branches/CMake/release/boost/range/end.hpp | 8
   branches/CMake/release/boost/range/iterator_range.hpp | 46
   branches/CMake/release/boost/range/sub_range.hpp | 26
   branches/CMake/release/boost/ref.hpp | 2
   branches/CMake/release/boost/spirit.hpp | 88
   branches/CMake/release/boost/spirit/actor.hpp | 123 -
   branches/CMake/release/boost/spirit/actor/assign_actor.hpp | 103
   branches/CMake/release/boost/spirit/actor/assign_key_actor.hpp | 101
   branches/CMake/release/boost/spirit/actor/clear_actor.hpp | 67
   branches/CMake/release/boost/spirit/actor/decrement_actor.hpp | 65
   branches/CMake/release/boost/spirit/actor/erase_actor.hpp | 94
   branches/CMake/release/boost/spirit/actor/increment_actor.hpp | 65
   branches/CMake/release/boost/spirit/actor/insert_at_actor.hpp | 126 -
   branches/CMake/release/boost/spirit/actor/insert_key_actor.hpp | 102
   branches/CMake/release/boost/spirit/actor/push_back_actor.hpp | 106
   branches/CMake/release/boost/spirit/actor/push_front_actor.hpp | 96
   branches/CMake/release/boost/spirit/actor/ref_actor.hpp | 74
   branches/CMake/release/boost/spirit/actor/ref_const_ref_actor.hpp | 82
   branches/CMake/release/boost/spirit/actor/ref_const_ref_const_ref_a.hpp | 91
   branches/CMake/release/boost/spirit/actor/ref_const_ref_value_actor.hpp | 82
   branches/CMake/release/boost/spirit/actor/ref_value_actor.hpp | 74
   branches/CMake/release/boost/spirit/actor/swap_actor.hpp | 90
   branches/CMake/release/boost/spirit/actor/typeof.hpp | 77
   branches/CMake/release/boost/spirit/attribute.hpp | 51
   branches/CMake/release/boost/spirit/attribute/closure.hpp | 1086 ----------
   branches/CMake/release/boost/spirit/attribute/closure_context.hpp | 64
   branches/CMake/release/boost/spirit/attribute/closure_fwd.hpp | 72
   branches/CMake/release/boost/spirit/attribute/parametric.hpp | 149 -
   branches/CMake/release/boost/spirit/attribute/typeof.hpp | 71
   branches/CMake/release/boost/spirit/core.hpp | 87
   branches/CMake/release/boost/spirit/core/assert.hpp | 48
   branches/CMake/release/boost/spirit/core/composite/actions.hpp | 132 -
   branches/CMake/release/boost/spirit/core/composite/alternative.hpp | 143 -
   branches/CMake/release/boost/spirit/core/composite/composite.hpp | 147 -
   branches/CMake/release/boost/spirit/core/composite/difference.hpp | 146 -
   branches/CMake/release/boost/spirit/core/composite/directives.hpp | 612 -----
   branches/CMake/release/boost/spirit/core/composite/epsilon.hpp | 281 --
   branches/CMake/release/boost/spirit/core/composite/exclusive_or.hpp | 147 -
   branches/CMake/release/boost/spirit/core/composite/intersection.hpp | 147 -
   branches/CMake/release/boost/spirit/core/composite/kleene_star.hpp | 105
   branches/CMake/release/boost/spirit/core/composite/list.hpp | 78
   branches/CMake/release/boost/spirit/core/composite/no_actions.hpp | 176 -
   branches/CMake/release/boost/spirit/core/composite/operators.hpp | 37
   branches/CMake/release/boost/spirit/core/composite/optional.hpp | 99
   branches/CMake/release/boost/spirit/core/composite/positive.hpp | 108
   branches/CMake/release/boost/spirit/core/composite/sequence.hpp | 138 -
   branches/CMake/release/boost/spirit/core/composite/sequential_and.hpp | 81
   branches/CMake/release/boost/spirit/core/composite/sequential_or.hpp | 159 -
   branches/CMake/release/boost/spirit/core/config.hpp | 70
   branches/CMake/release/boost/spirit/core/match.hpp | 190 -
   branches/CMake/release/boost/spirit/core/nil.hpp | 28
   branches/CMake/release/boost/spirit/core/non_terminal/grammar.hpp | 88
   branches/CMake/release/boost/spirit/core/non_terminal/parser_context.hpp | 156 -
   branches/CMake/release/boost/spirit/core/non_terminal/parser_id.hpp | 125 -
   branches/CMake/release/boost/spirit/core/non_terminal/rule.hpp | 176 -
   branches/CMake/release/boost/spirit/core/non_terminal/subrule.hpp | 305 --
   branches/CMake/release/boost/spirit/core/non_terminal/subrule_fwd.hpp | 40
   branches/CMake/release/boost/spirit/core/parser.hpp | 228 --
   branches/CMake/release/boost/spirit/core/primitives/numerics.hpp | 294 --
   branches/CMake/release/boost/spirit/core/primitives/numerics_fwd.hpp | 92
   branches/CMake/release/boost/spirit/core/primitives/primitives.hpp | 655 ------
   branches/CMake/release/boost/spirit/core/safe_bool.hpp | 66
   branches/CMake/release/boost/spirit/core/scanner/scanner.hpp | 333 ---
   branches/CMake/release/boost/spirit/core/scanner/scanner_fwd.hpp | 57
   branches/CMake/release/boost/spirit/core/scanner/skipper.hpp | 201 -
   branches/CMake/release/boost/spirit/core/scanner/skipper_fwd.hpp | 37
   branches/CMake/release/boost/spirit/core/typeof.hpp | 340 ---
   branches/CMake/release/boost/spirit/debug.hpp | 155 -
   branches/CMake/release/boost/spirit/debug/debug_node.hpp | 324 ---
   branches/CMake/release/boost/spirit/debug/minimal.hpp | 87
   branches/CMake/release/boost/spirit/debug/parser_names.hpp | 263 --
   branches/CMake/release/boost/spirit/debug/typeof.hpp | 45
   branches/CMake/release/boost/spirit/dynamic.hpp | 40
   branches/CMake/release/boost/spirit/dynamic/for.hpp | 196 -
   branches/CMake/release/boost/spirit/dynamic/if.hpp | 238 --
   branches/CMake/release/boost/spirit/dynamic/lazy.hpp | 75
   branches/CMake/release/boost/spirit/dynamic/rule_alias.hpp | 81
   branches/CMake/release/boost/spirit/dynamic/select.hpp | 246 --
   branches/CMake/release/boost/spirit/dynamic/stored_rule.hpp | 130 -
   branches/CMake/release/boost/spirit/dynamic/stored_rule_fwd.hpp | 36
   branches/CMake/release/boost/spirit/dynamic/switch.hpp | 264 --
   branches/CMake/release/boost/spirit/dynamic/typeof.hpp | 94
   branches/CMake/release/boost/spirit/dynamic/while.hpp | 198 -
   branches/CMake/release/boost/spirit/error_handling.hpp | 33
   branches/CMake/release/boost/spirit/error_handling/exceptions.hpp | 370 ---
   branches/CMake/release/boost/spirit/error_handling/exceptions_fwd.hpp | 46
   branches/CMake/release/boost/spirit/error_handling/typeof.hpp | 43
   branches/CMake/release/boost/spirit/iterator.hpp | 37
   branches/CMake/release/boost/spirit/iterator/file_iterator.hpp | 234 --
   branches/CMake/release/boost/spirit/iterator/file_iterator_fwd.hpp | 43
   branches/CMake/release/boost/spirit/iterator/fixed_size_queue.hpp | 407 ---
   branches/CMake/release/boost/spirit/iterator/multi_pass.hpp | 1312 ------------
   branches/CMake/release/boost/spirit/iterator/multi_pass_fwd.hpp | 51
   branches/CMake/release/boost/spirit/iterator/position_iterator.hpp | 438 ----
   branches/CMake/release/boost/spirit/iterator/position_iterator_fwd.hpp | 65
   branches/CMake/release/boost/spirit/iterator/typeof.hpp | 100
   branches/CMake/release/boost/spirit/meta.hpp | 40
   branches/CMake/release/boost/spirit/meta/as_parser.hpp | 118 -
   branches/CMake/release/boost/spirit/meta/fundamental.hpp | 65
   branches/CMake/release/boost/spirit/meta/parser_traits.hpp | 329 ---
   branches/CMake/release/boost/spirit/meta/refactoring.hpp | 287 --
   branches/CMake/release/boost/spirit/meta/traverse.hpp | 231 --
   branches/CMake/release/boost/spirit/phoenix.hpp | 41
   branches/CMake/release/boost/spirit/phoenix/actor.hpp | 606 -----
   branches/CMake/release/boost/spirit/phoenix/binders.hpp | 4077 ---------------------------------------
   branches/CMake/release/boost/spirit/phoenix/casts.hpp | 1481 --------------
   branches/CMake/release/boost/spirit/phoenix/closures.hpp | 450 ----
   branches/CMake/release/boost/spirit/phoenix/composite.hpp | 1433 -------------
   branches/CMake/release/boost/spirit/phoenix/functions.hpp | 771 -------
   branches/CMake/release/boost/spirit/phoenix/new.hpp | 1326 ------------
   branches/CMake/release/boost/spirit/phoenix/operators.hpp | 2214 ---------------------
   branches/CMake/release/boost/spirit/phoenix/primitives.hpp | 258 --
   branches/CMake/release/boost/spirit/phoenix/special_ops.hpp | 352 ---
   branches/CMake/release/boost/spirit/phoenix/statements.hpp | 456 ----
   branches/CMake/release/boost/spirit/phoenix/tuple_helpers.hpp | 1086 ----------
   branches/CMake/release/boost/spirit/phoenix/tuples.hpp | 1340 ------------
   branches/CMake/release/boost/spirit/symbols.hpp | 33
   branches/CMake/release/boost/spirit/symbols/symbols.hpp | 234 --
   branches/CMake/release/boost/spirit/symbols/symbols_fwd.hpp | 43
   branches/CMake/release/boost/spirit/symbols/typeof.hpp | 35
   branches/CMake/release/boost/spirit/tree/ast.hpp | 389 ---
   branches/CMake/release/boost/spirit/tree/ast_fwd.hpp | 47
   branches/CMake/release/boost/spirit/tree/common.hpp | 1588 ---------------
   branches/CMake/release/boost/spirit/tree/common_fwd.hpp | 101
   branches/CMake/release/boost/spirit/tree/parse_tree.hpp | 302 --
   branches/CMake/release/boost/spirit/tree/parse_tree_fwd.hpp | 43
   branches/CMake/release/boost/spirit/tree/parse_tree_utils.hpp | 76
   branches/CMake/release/boost/spirit/tree/tree_to_xml.hpp | 124 -
   branches/CMake/release/boost/spirit/tree/typeof.hpp | 90
   branches/CMake/release/boost/spirit/utility.hpp | 54
   branches/CMake/release/boost/spirit/utility/chset.hpp | 188 -
   branches/CMake/release/boost/spirit/utility/chset_operators.hpp | 407 ---
   branches/CMake/release/boost/spirit/utility/confix.hpp | 401 ---
   branches/CMake/release/boost/spirit/utility/confix_fwd.hpp | 44
   branches/CMake/release/boost/spirit/utility/distinct.hpp | 240 --
   branches/CMake/release/boost/spirit/utility/distinct_fwd.hpp | 41
   branches/CMake/release/boost/spirit/utility/escape_char.hpp | 189 -
   branches/CMake/release/boost/spirit/utility/escape_char_fwd.hpp | 34
   branches/CMake/release/boost/spirit/utility/flush_multi_pass.hpp | 86
   branches/CMake/release/boost/spirit/utility/functor_parser.hpp | 76
   branches/CMake/release/boost/spirit/utility/grammar_def.hpp | 312 --
   branches/CMake/release/boost/spirit/utility/grammar_def_fwd.hpp | 53
   branches/CMake/release/boost/spirit/utility/lists.hpp | 345 ---
   branches/CMake/release/boost/spirit/utility/lists_fwd.hpp | 36
   branches/CMake/release/boost/spirit/utility/loops.hpp | 326 ---
   branches/CMake/release/boost/spirit/utility/regex.hpp | 121 -
   branches/CMake/release/boost/spirit/utility/rule_parser.hpp | 1139 ----------
   branches/CMake/release/boost/spirit/utility/scoped_lock.hpp | 123 -
   branches/CMake/release/boost/spirit/utility/typeof.hpp | 153 -
   branches/CMake/release/boost/spirit/version.hpp | 42
   branches/CMake/release/boost/thread.hpp | 8
   branches/CMake/release/boost/thread/barrier.hpp | 6
   branches/CMake/release/boost/thread/detail/move.hpp | 27
   branches/CMake/release/boost/thread/detail/tss_hooks.hpp | 6
   branches/CMake/release/boost/thread/exceptions.hpp | 12
   branches/CMake/release/boost/thread/locks.hpp | 628 +++++
   branches/CMake/release/boost/thread/once.hpp | 4
   branches/CMake/release/boost/thread/pthread/condition_variable.hpp | 23
   branches/CMake/release/boost/thread/pthread/condition_variable_fwd.hpp | 27
   branches/CMake/release/boost/thread/pthread/mutex.hpp | 22
   branches/CMake/release/boost/thread/pthread/once.hpp | 9
   branches/CMake/release/boost/thread/pthread/pthread_mutex_scoped_lock.hpp | 6
   branches/CMake/release/boost/thread/pthread/recursive_mutex.hpp | 25
   branches/CMake/release/boost/thread/pthread/shared_mutex.hpp | 169 -
   branches/CMake/release/boost/thread/pthread/thread_data.hpp | 29
   branches/CMake/release/boost/thread/pthread/timespec.hpp | 14
   branches/CMake/release/boost/thread/thread.hpp | 9
   branches/CMake/release/boost/thread/thread_time.hpp | 4
   branches/CMake/release/boost/thread/win32/basic_recursive_mutex.hpp | 6
   branches/CMake/release/boost/thread/win32/basic_timed_mutex.hpp | 71
   branches/CMake/release/boost/thread/win32/condition_variable.hpp | 304 +-
   branches/CMake/release/boost/thread/win32/interlocked_read.hpp | 9
   branches/CMake/release/boost/thread/win32/mutex.hpp | 8
   branches/CMake/release/boost/thread/win32/once.hpp | 4
   branches/CMake/release/boost/thread/win32/recursive_mutex.hpp | 7
   branches/CMake/release/boost/thread/win32/shared_mutex.hpp | 32
   branches/CMake/release/boost/thread/win32/thread_heap_alloc.hpp | 243 ++
   branches/CMake/release/boost/thread/win32/thread_primitives.hpp | 116 +
   branches/CMake/release/boost/thread/xtime.hpp | 8
   branches/CMake/release/boost/tuple/detail/tuple_basic.hpp | 2
   branches/CMake/release/boost/tuple/detail/tuple_basic_no_partial_spec.hpp | 2
   branches/CMake/release/boost/tuple/tuple.hpp | 2
   branches/CMake/release/boost/tuple/tuple_comparison.hpp | 2
   branches/CMake/release/boost/tuple/tuple_io.hpp | 2
   branches/CMake/release/boost/utility/addressof.hpp | 39
   branches/CMake/release/boost/utility/enable_if.hpp | 2
   branches/CMake/release/boost/utility/value_init.hpp | 66
   branches/CMake/release/boost/version.hpp | 12
   460 files changed, 12735 insertions(+), 41531 deletions(-)

Modified: branches/CMake/release/boost/algorithm/string.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string.hpp (original)
+++ branches/CMake/release/boost/algorithm/string.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -21,6 +21,7 @@
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/find.hpp>
 #include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/join.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/algorithm/string/erase.hpp>
 #include <boost/algorithm/string/classification.hpp>

Modified: branches/CMake/release/boost/algorithm/string/classification.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/classification.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/classification.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -202,8 +202,8 @@
             BOOST_STRING_TYPENAME range_value<RangeT>::type>
         is_any_of( const RangeT& Set )
         {
- return detail::is_any_ofF<
- BOOST_STRING_TYPENAME range_value<RangeT>::type>(as_literal(Set));
+ iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_set(as_literal(Set));
+ return detail::is_any_ofF<BOOST_STRING_TYPENAME range_value<RangeT>::type>(lit_set);
         }
 
         //! is_from_range predicate

Modified: branches/CMake/release/boost/algorithm/string/concept.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/concept.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/concept.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -65,8 +65,8 @@
             void constraints()
             {
                 // Operation
- begin((*pFo)( (*pF)(i,i) ));
- end((*pFo)( (*pF)(i,i) ));
+ ::boost::begin((*pFo)( (*pF)(i,i) ));
+ ::boost::end((*pFo)( (*pF)(i,i) ));
             }
         private:
             IteratorT i;

Modified: branches/CMake/release/boost/algorithm/string/detail/case_conv.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/detail/case_conv.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/detail/case_conv.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -21,6 +21,11 @@
 
 // case conversion functors -----------------------------------------------//
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
+
             // a tolower functor
             template<typename CharT>
             struct to_lowerF : public std::unary_function<CharT, CharT>
@@ -61,6 +66,10 @@
                 const std::locale& m_Loc;
             };
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
 // algorithm implementation -------------------------------------------------------------------------
 
             // Transform a range
@@ -71,8 +80,8 @@
                 FunctorT Functor)
             {
                 return std::transform(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                     Output,
                     Functor);
             }
@@ -84,9 +93,9 @@
                 FunctorT Functor)
             {
                 std::transform(
- begin(Input),
- end(Input),
- begin(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
+ ::boost::begin(Input),
                     Functor);
             }
 
@@ -97,10 +106,10 @@
             {
                 return SequenceT(
                     make_transform_iterator(
- begin(Input),
+ ::boost::begin(Input),
                         Functor),
                     make_transform_iterator(
- end(Input),
+ ::boost::end(Input),
                         Functor));
             }
 

Modified: branches/CMake/release/boost/algorithm/string/detail/classification.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/detail/classification.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/detail/classification.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -15,7 +15,6 @@
 #include <algorithm>
 #include <functional>
 #include <locale>
-#include <set>
 
 #include <boost/range/begin.hpp>
 #include <boost/range/end.hpp>
@@ -29,6 +28,10 @@
 
 // classification functors -----------------------------------------------//
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
             // is_classified functor
             struct is_classifiedF :
                 public predicate_facade<is_classifiedF>
@@ -60,6 +63,10 @@
                 const std::locale m_Locale;
             };
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
             // is_any_of functor
             /*
                 returns true if the value is from the specified set
@@ -68,25 +75,132 @@
             struct is_any_ofF :
                 public predicate_facade<is_any_ofF<CharT> >
             {
+ private:
+ // set cannot operate on const value-type
+ typedef typename remove_const<CharT>::type set_value_type;
+ // Size of the static storage (size of pointer*2)
+ static const ::std::size_t FIXED_STORAGE_SIZE = sizeof(set_value_type*)*2;
+
+ public:
                 // Boost.Lambda support
                 template <class Args> struct sig { typedef bool type; };
 
                 // Constructor
                 template<typename RangeT>
- is_any_ofF( const RangeT& Range ) :
- m_Set( begin(Range), end(Range) ) {}
+ is_any_ofF( const RangeT& Range ) : m_Size(0)
+ {
+ // Prepare storage
+ m_Storage.m_dynSet=0;
+
+ std::size_t Size=::boost::distance(Range);
+ m_Size=Size;
+ set_value_type* Storage=0;
+
+ if(m_Size<=FIXED_STORAGE_SIZE)
+ {
+ // Use fixed storage
+ Storage=&m_Storage.m_fixSet[0];
+ }
+ else
+ {
+ // Use dynamic storage
+ m_Storage.m_dynSet=new set_value_type[m_Size];
+ Storage=m_Storage.m_dynSet;
+ }
+
+ // Use fixed storage
+ ::std::copy(::boost::begin(Range), ::boost::end(Range), Storage);
+ ::std::sort(Storage, Storage+m_Size);
+ }
+
+ // Copy constructor
+ is_any_ofF(const is_any_ofF& Other) : m_Size(Other.m_Size)
+ {
+ // Prepare storage
+ m_Storage.m_dynSet=0;
+ const set_value_type* SrcStorage=0;
+ set_value_type* DestStorage=0;
+
+ if(m_Size<=FIXED_STORAGE_SIZE)
+ {
+ // Use fixed storage
+ DestStorage=&m_Storage.m_fixSet[0];
+ SrcStorage=&Other.m_Storage.m_fixSet[0];
+ }
+ else
+ {
+ // Use dynamic storage
+ m_Storage.m_dynSet=new set_value_type[m_Size];
+ DestStorage=m_Storage.m_dynSet;
+ SrcStorage=Other.m_Storage.m_dynSet;
+ }
+
+ // Use fixed storage
+ ::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
+ }
+
+ // Destructor
+ ~is_any_ofF()
+ {
+ if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0)
+ {
+ delete m_Storage.m_dynSet;
+ }
+ }
+
+ // Assignment
+ is_any_ofF& operator=(const is_any_ofF& Other)
+ {
+ // Prepare storage
+ m_Storage.m_dynSet=0;
+ m_Size=Other.m_Size;
+ const set_value_type* SrcStorage=0;
+ set_value_type* DestStorage=0;
+
+ if(m_Size<=FIXED_STORAGE_SIZE)
+ {
+ // Use fixed storage
+ DestStorage=&m_Storage.m_fixSet[0];
+ SrcStorage=&Other.m_Storage.m_fixSet[0];
+ }
+ else
+ {
+ // Use dynamic storage
+ m_Storage.m_dynSet=new set_value_type[m_Size];
+ DestStorage=m_Storage.m_dynSet;
+ SrcStorage=Other.m_Storage.m_dynSet;
+ }
+
+ // Use fixed storage
+ ::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
+
+ return *this;
+ }
 
                 // Operation
                 template<typename Char2T>
                 bool operator()( Char2T Ch ) const
                 {
- return m_Set.find(Ch)!=m_Set.end();
+ const set_value_type* Storage=
+ (m_Size<=FIXED_STORAGE_SIZE)
+ ? &m_Storage.m_fixSet[0]
+ : m_Storage.m_dynSet;
+
+ return ::std::binary_search(Storage, Storage+m_Size, Ch);
                 }
 
             private:
- // set cannot operate on const value-type
- typedef typename remove_const<CharT>::type set_value_type;
- std::set<set_value_type> m_Set;
+ // storage
+ // The actual used storage is selected on the type
+ union
+ {
+ set_value_type* m_dynSet;
+ set_value_type m_fixSet[FIXED_STORAGE_SIZE];
+ }
+ m_Storage;
+
+ // storage size
+ ::std::size_t m_Size;
             };
 
             // is_from_range functor

Modified: branches/CMake/release/boost/algorithm/string/detail/find_format.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/detail/find_format.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/detail/find_format.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -68,17 +68,17 @@
                 if ( !M )
                 {
                     // Match not found - return original sequence
- std::copy( begin(Input), end(Input), Output );
+ std::copy( ::boost::begin(Input), ::boost::end(Input), Output );
                     return Output;
                 }
 
                 // Copy the beginning of the sequence
- std::copy( begin(Input), begin(M), Output );
+ std::copy( ::boost::begin(Input), ::boost::begin(M), Output );
                 // Format find result
                 // Copy formated result
- std::copy( begin(M.format_result()), end(M.format_result()), Output );
+ std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
                 // Copy the rest of the sequence
- std::copy( M.end(), end(Input), Output );
+ std::copy( M.end(), ::boost::end(Input), Output );
 
                 return Output;
             }
@@ -129,11 +129,11 @@
 
                 InputT Output;
                 // Copy the beginning of the sequence
- insert( Output, end(Output), begin(Input), M.begin() );
+ insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() );
                 // Copy formated result
- insert( Output, end(Output), M.format_result() );
+ insert( Output, ::boost::end(Output), M.format_result() );
                 // Copy the rest of the sequence
- insert( Output, end(Output), M.end(), end(Input) );
+ insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) );
 
                 return Output;
             }

Modified: branches/CMake/release/boost/algorithm/string/detail/find_format_all.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/detail/find_format_all.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/detail/find_format_all.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -73,7 +73,7 @@
                 store_type M( FindResult, FormatResult, Formatter );
 
                 // Initialize last match
- input_iterator_type LastMatch=begin(Input);
+ input_iterator_type LastMatch=::boost::begin(Input);
 
                 // Iterate through all matches
                 while( M )
@@ -81,15 +81,15 @@
                     // Copy the beginning of the sequence
                     std::copy( LastMatch, M.begin(), Output );
                     // Copy formated result
- std::copy( begin(M.format_result()), end(M.format_result()), Output );
+ std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
 
                     // Proceed to the next match
                     LastMatch=M.end();
- M=Finder( LastMatch, end(Input) );
+ M=Finder( LastMatch, ::boost::end(Input) );
                 }
 
                 // Copy the rest of the sequence
- std::copy( LastMatch, end(Input), Output );
+ std::copy( LastMatch, ::boost::end(Input), Output );
 
                 return Output;
             }
@@ -140,7 +140,7 @@
                 store_type M( FindResult, FormatResult, Formatter );
 
                 // Initialize last match
- input_iterator_type LastMatch=begin(Input);
+ input_iterator_type LastMatch=::boost::begin(Input);
 
                 // Output temporary
                 InputT Output;
@@ -149,17 +149,17 @@
                 while( M )
                 {
                     // Copy the beginning of the sequence
- insert( Output, end(Output), LastMatch, M.begin() );
+ insert( Output, ::boost::end(Output), LastMatch, M.begin() );
                     // Copy formated result
- insert( Output, end(Output), M.format_result() );
+ insert( Output, ::boost::end(Output), M.format_result() );
 
                     // Proceed to the next match
                     LastMatch=M.end();
- M=Finder( LastMatch, end(Input) );
+ M=Finder( LastMatch, ::boost::end(Input) );
                 }
 
                 // Copy the rest of the sequence
- insert( Output, end(Output), LastMatch, end(Input) );
+ insert( Output, ::boost::end(Output), LastMatch, ::boost::end(Input) );
 
                 return Output;
             }
@@ -213,8 +213,8 @@
                     BOOST_STRING_TYPENAME range_value<InputT>::type> Storage;
 
                 // Initialize replacement iterators
- input_iterator_type InsertIt=begin(Input);
- input_iterator_type SearchIt=begin(Input);
+ input_iterator_type InsertIt=::boost::begin(Input);
+ input_iterator_type SearchIt=::boost::begin(Input);
                 
                 while( M )
                 {
@@ -233,7 +233,7 @@
                     copy_to_storage( Storage, M.format_result() );
 
                     // Find range for a next match
- M=Finder( SearchIt, end(Input) );
+ M=Finder( SearchIt, ::boost::end(Input) );
                 }
 
                 // process the last segment
@@ -242,17 +242,17 @@
                     Input,
                     InsertIt,
                     SearchIt,
- end(Input) );
+ ::boost::end(Input) );
                 
                 if ( Storage.empty() )
                 {
                     // Truncate input
- erase( Input, InsertIt, end(Input) );
+ erase( Input, InsertIt, ::boost::end(Input) );
                 }
                 else
                 {
                     // Copy remaining data to the end of input
- insert( Input, end(Input), Storage.begin(), Storage.end() );
+ insert( Input, ::boost::end(Input), Storage.begin(), Storage.end() );
                 }
             }
 

Modified: branches/CMake/release/boost/algorithm/string/detail/find_format_store.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/detail/find_format_store.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/detail/find_format_store.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -20,6 +20,10 @@
 
 // temporary format and find result storage --------------------------------//
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512) //assignment operator could not be generated
+#endif
             template<
                 typename ForwardIteratorT,
                 typename FormatterT,
@@ -64,6 +68,9 @@
                 const formatter_type& m_Formatter;
             };
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
         } // namespace detail
     } // namespace algorithm
 } // namespace boost

Modified: branches/CMake/release/boost/algorithm/string/detail/finder.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/detail/finder.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/detail/finder.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -41,7 +41,7 @@
                 // Construction
                 template< typename SearchT >
                 first_finderF( const SearchT& Search, PredicateT Comp ) :
- m_Search(begin(Search), end(Search)), m_Comp(Comp) {}
+ m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {}
                 first_finderF(
                         search_iterator_type SearchBegin,
                         search_iterator_type SearchEnd,
@@ -108,7 +108,7 @@
                 // Construction
                 template< typename SearchT >
                 last_finderF( const SearchT& Search, PredicateT Comp ) :
- m_Search(begin(Search), end(Search)), m_Comp(Comp) {}
+ m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {}
                 last_finderF(
                         search_iterator_type SearchBegin,
                         search_iterator_type SearchEnd,
@@ -154,7 +154,7 @@
                     while( M )
                     {
                         Last=M;
- M=first_finder( end(M), End );
+ M=first_finder( ::boost::end(M), End );
                     }
 
                     return Last;
@@ -224,7 +224,7 @@
                         const SearchT& Search,
                         int Nth,
                         PredicateT Comp) :
- m_Search(begin(Search), end(Search)),
+ m_Search(::boost::begin(Search), ::boost::end(Search)),
                     m_Nth(Nth),
                     m_Comp(Comp) {}
                 nth_finderF(
@@ -279,7 +279,7 @@
                     for( unsigned int n=0; n<=N; ++n )
                     {
                         // find next match
- M=first_finder( end(M), End );
+ M=first_finder( ::boost::end(M), End );
 
                         if ( !M )
                         {
@@ -314,7 +314,7 @@
                     for( unsigned int n=1; n<=N; ++n )
                     {
                         // find next match
- M=last_finder( Begin, begin(M) );
+ M=last_finder( Begin, ::boost::begin(M) );
 
                         if ( !M )
                         {

Modified: branches/CMake/release/boost/algorithm/string/detail/formatter.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/detail/formatter.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/detail/formatter.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -39,7 +39,7 @@
             public:
                 // Construction
                 const_formatF(const RangeT& Format) :
- m_Format(begin(Format), end(Format)) {}
+ m_Format(::boost::begin(Format), ::boost::end(Format)) {}
 
                 // Operation
 #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
@@ -70,7 +70,7 @@
                 template< typename Range2T >
                 const RangeT& operator()(const Range2T& Replace) const
                 {
- return RangeT(begin(Replace), end(Replace));
+ return RangeT(::boost::begin(Replace), ::boost::end(Replace));
                 }
             };
 

Modified: branches/CMake/release/boost/algorithm/string/detail/replace_storage.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/detail/replace_storage.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/detail/replace_storage.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -46,7 +46,7 @@
                 StorageT& Storage,
                 const WhatT& What )
             {
- Storage.insert( Storage.end(), begin(What), end(What) );
+ Storage.insert( Storage.end(), ::boost::begin(What), ::boost::end(What) );
             }
 
 

Modified: branches/CMake/release/boost/algorithm/string/detail/sequence.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/detail/sequence.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/detail/sequence.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -41,7 +41,7 @@
                 BOOST_STRING_TYPENAME InputT::iterator At,
                 const InsertT& Insert )
             {
- insert( Input, At, begin(Insert), end(Insert) );
+ insert( Input, At, ::boost::begin(Insert), ::boost::end(Insert) );
             }
            
 // erase helper ---------------------------------------------------//
@@ -184,11 +184,11 @@
             {
                 if(From!=To)
                 {
- replace( Input, From, To, begin(Insert), end(Insert) );
+ replace( Input, From, To, ::boost::begin(Insert), ::boost::end(Insert) );
                 }
                 else
                 {
- insert( Input, From, begin(Insert), end(Insert) );
+ insert( Input, From, ::boost::begin(Insert), ::boost::end(Insert) );
                 }
             }
 

Modified: branches/CMake/release/boost/algorithm/string/find.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/find.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/find.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -55,7 +55,7 @@
         {
             iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));
 
- return Finder(begin(lit_input),end(lit_input));
+ return Finder(::boost::begin(lit_input),::boost::end(lit_input));
         }
 
 // find_first -----------------------------------------------//

Modified: branches/CMake/release/boost/algorithm/string/find_format.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/find_format.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/find_format.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -76,7 +76,7 @@
                 Output,
                 lit_input,
                 Formatter,
- Finder( begin(lit_input), end(lit_input) ) );
+ Finder( ::boost::begin(lit_input), ::boost::end(lit_input) ) );
         }
 
         //! Generic replace algorithm
@@ -104,7 +104,7 @@
             return detail::find_format_copy_impl(
                 Input,
                 Formatter,
- Finder(begin(Input), end(Input)));
+ Finder(::boost::begin(Input), ::boost::end(Input)));
         }
 
         //! Generic replace algorithm
@@ -137,7 +137,7 @@
             detail::find_format_impl(
                 Input,
                 Formatter,
- Finder(begin(Input), end(Input)));
+ Finder(::boost::begin(Input), ::boost::end(Input)));
         }
 
 
@@ -187,7 +187,7 @@
                 lit_input,
                 Finder,
                 Formatter,
- Finder(begin(lit_input), end(lit_input)));
+ Finder(::boost::begin(lit_input), ::boost::end(lit_input)));
         }
 
         //! Generic replace all algorithm
@@ -216,7 +216,7 @@
                 Input,
                 Finder,
                 Formatter,
- Finder( begin(Input), end(Input) ) );
+ Finder( ::boost::begin(Input), ::boost::end(Input) ) );
         }
 
         //! Generic replace all algorithm
@@ -251,7 +251,7 @@
                 Input,
                 Finder,
                 Formatter,
- Finder(begin(Input), end(Input)));
+ Finder(::boost::begin(Input), ::boost::end(Input)));
 
         }
 

Modified: branches/CMake/release/boost/algorithm/string/find_iterator.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/find_iterator.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/find_iterator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -24,7 +24,7 @@
 #include <boost/algorithm/string/detail/find_iterator.hpp>
 
 /*! \file
- Defines find iterator classes. Find iterator repeatly applies a Finder
+ Defines find iterator classes. Find iterator repeatedly applies a Finder
     to the specified input string to search for matches. Dereferencing
     the iterator yields the current match or a range between the last and the current
     match depending on the iterator used.
@@ -58,12 +58,6 @@
             // facade support
             friend class ::boost::iterator_core_access;
 
- // base type
- typedef iterator_facade<
- find_iterator<IteratorT>,
- const iterator_range<IteratorT>,
- forward_traversal_tag> facade_type;
-
         private:
         // typedefs
 
@@ -120,8 +114,8 @@
                 detail::find_iterator_base<IteratorT>(Finder,0)
             {
                 iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(Col));
- m_Match=make_iterator_range(begin(lit_col), begin(lit_col));
- m_End=end(lit_col);
+ m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
+ m_End=::boost::end(lit_col);
 
                 increment();
             }
@@ -220,12 +214,6 @@
             // facade support
             friend class ::boost::iterator_core_access;
 
- // base type
- typedef iterator_facade<
- find_iterator<IteratorT>,
- iterator_range<IteratorT>,
- forward_traversal_tag> facade_type;
-
         private:
         // typedefs
 
@@ -286,9 +274,9 @@
                 m_bEof(false)
             {
                 iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(Col));
- m_Match=make_iterator_range(begin(lit_col), begin(lit_col));
- m_Next=begin(lit_col);
- m_End=end(lit_col);
+ m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
+ m_Next=::boost::begin(lit_col);
+ m_End=::boost::end(lit_col);
 
                 increment();
             }

Modified: branches/CMake/release/boost/algorithm/string/iter_find.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/iter_find.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/iter_find.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -88,14 +88,14 @@
                     range_value<SequenceSequenceT>::type,
                 input_iterator_type> copy_range_type;
             
- input_iterator_type InputEnd=end(lit_input);
+ input_iterator_type InputEnd=::boost::end(lit_input);
 
             typedef transform_iterator<copy_range_type, find_iterator_type>
                 transform_iter_type;
     
             transform_iter_type itBegin=
                 make_transform_iterator(
- find_iterator_type( begin(lit_input), InputEnd, Finder ),
+ find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),
                     copy_range_type());
             
             transform_iter_type itEnd=
@@ -157,14 +157,14 @@
                     range_value<SequenceSequenceT>::type,
                 input_iterator_type> copy_range_type;
             
- input_iterator_type InputEnd=end(lit_input);
+ input_iterator_type InputEnd=::boost::end(lit_input);
 
             typedef transform_iterator<copy_range_type, find_iterator_type>
                 transform_iter_type;
     
             transform_iter_type itBegin=
                 make_transform_iterator(
- find_iterator_type( begin(lit_input), InputEnd, Finder ),
+ find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),
                     copy_range_type() );
 
             transform_iter_type itEnd=

Modified: branches/CMake/release/boost/algorithm/string/join.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/join.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/join.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -52,8 +52,8 @@
             typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
 
             // Parse input
- InputIteratorT itBegin=begin(Input);
- InputIteratorT itEnd=end(Input);
+ InputIteratorT itBegin=::boost::begin(Input);
+ InputIteratorT itEnd=::boost::end(Input);
 
             // Construct container to hold the result
             ResultT Result;
@@ -61,16 +61,16 @@
             // Append first element
             if(itBegin!=itEnd)
             {
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 ++itBegin;
             }
 
             for(;itBegin!=itEnd; ++itBegin)
             {
                 // Add separator
- detail::insert(Result, end(Result), as_literal(Separator));
+ detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                 // Add element
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
             }
 
             return Result;
@@ -103,8 +103,8 @@
             typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
 
             // Parse input
- InputIteratorT itBegin=begin(Input);
- InputIteratorT itEnd=end(Input);
+ InputIteratorT itBegin=::boost::begin(Input);
+ InputIteratorT itEnd=::boost::end(Input);
 
             // Construct container to hold the result
             ResultT Result;
@@ -114,7 +114,7 @@
             // Add this element
             if(itBegin!=itEnd)
             {
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 ++itBegin;
             }
 
@@ -123,9 +123,9 @@
                 if(Pred(*itBegin))
                 {
                     // Add separator
- detail::insert(Result, end(Result), as_literal(Separator));
+ detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                     // Add element
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 }
             }
 

Modified: branches/CMake/release/boost/algorithm/string/predicate.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/predicate.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/predicate.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -67,11 +67,11 @@
             typedef BOOST_STRING_TYPENAME
                 range_const_iterator<Range2T>::type Iterator2T;
 
- Iterator1T InputEnd=end(lit_input);
- Iterator2T TestEnd=end(lit_test);
+ Iterator1T InputEnd=::boost::end(lit_input);
+ Iterator2T TestEnd=::boost::end(lit_test);
 
- Iterator1T it=begin(lit_input);
- Iterator2T pit=begin(lit_test);
+ Iterator1T it=::boost::begin(lit_input);
+ Iterator2T pit=::boost::begin(lit_test);
             for(;
                 it!=InputEnd && pit!=TestEnd;
                 ++it,++pit)
@@ -151,10 +151,10 @@
 
             return detail::
                 ends_with_iter_select(
- begin(lit_input),
- end(lit_input),
- begin(lit_test),
- end(lit_test),
+ ::boost::begin(lit_input),
+ ::boost::end(lit_input),
+ ::boost::begin(lit_test),
+ ::boost::end(lit_test),
                     Comp,
                     category());
         }
@@ -225,7 +225,7 @@
             }
             
             // Use the temporary variable to make VACPP happy
- bool bResult=(first_finder(lit_test,Comp)(begin(lit_input), end(lit_input)));
+ bool bResult=(first_finder(lit_test,Comp)(::boost::begin(lit_input), ::boost::end(lit_input)));
             return bResult;
         }
 
@@ -294,11 +294,11 @@
             typedef BOOST_STRING_TYPENAME
                 range_const_iterator<Range2T>::type Iterator2T;
                 
- Iterator1T InputEnd=end(lit_input);
- Iterator2T TestEnd=end(lit_test);
+ Iterator1T InputEnd=::boost::end(lit_input);
+ Iterator2T TestEnd=::boost::end(lit_test);
 
- Iterator1T it=begin(lit_input);
- Iterator2T pit=begin(lit_test);
+ Iterator1T it=::boost::begin(lit_input);
+ Iterator2T pit=::boost::begin(lit_test);
             for(;
                 it!=InputEnd && pit!=TestEnd;
                 ++it,++pit)
@@ -376,10 +376,10 @@
             iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_arg2(as_literal(Arg2));
 
             return std::lexicographical_compare(
- begin(lit_arg1),
- end(lit_arg1),
- begin(lit_arg2),
- end(lit_arg2),
+ ::boost::begin(lit_arg1),
+ ::boost::end(lit_arg1),
+ ::boost::begin(lit_arg2),
+ ::boost::end(lit_arg2),
                 Pred);
         }
 
@@ -444,8 +444,8 @@
             typedef BOOST_STRING_TYPENAME
                 range_const_iterator<RangeT>::type Iterator1T;
 
- Iterator1T InputEnd=end(lit_input);
- for( Iterator1T It=begin(lit_input); It!=InputEnd; ++It)
+ Iterator1T InputEnd=::boost::end(lit_input);
+ for( Iterator1T It=::boost::begin(lit_input); It!=InputEnd; ++It)
             {
                 if (!Pred(*It))
                     return false;

Modified: branches/CMake/release/boost/algorithm/string/regex.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/regex.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/regex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -63,7 +63,7 @@
             iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));
 
             return regex_finder(Rx,Flags)(
- begin(lit_input), end(lit_input) );
+ ::boost::begin(lit_input), ::boost::end(lit_input) );
         }
 
 // replace_regex --------------------------------------------------------------------//
@@ -515,8 +515,8 @@
             typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
 
             // Parse input
- InputIteratorT itBegin=begin(Input);
- InputIteratorT itEnd=end(Input);
+ InputIteratorT itBegin=::boost::begin(Input);
+ InputIteratorT itEnd=::boost::end(Input);
 
             // Construct container to hold the result
             ResultT Result;
@@ -525,23 +525,23 @@
             // Roll to the first element that will be added
             while(
                 itBegin!=itEnd &&
- !regex_match(begin(*itBegin), end(*itBegin), Rx, Flags)) ++itBegin;
+ !regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;
 
             // Add this element
             if(itBegin!=itEnd)
             {
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 ++itBegin;
             }
 
             for(;itBegin!=itEnd; ++itBegin)
             {
- if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
+ if(regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
                 {
                     // Add separator
- detail::insert(Result, end(Result), as_literal(Separator));
+ detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                     // Add element
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 }
             }
 
@@ -583,8 +583,8 @@
             typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
 
             // Parse input
- InputIteratorT itBegin=begin(Input);
- InputIteratorT itEnd=end(Input);
+ InputIteratorT itBegin=::boost::begin(Input);
+ InputIteratorT itEnd=::boost::end(Input);
 
             // Construct container to hold the result
             ResultT Result;
@@ -593,23 +593,23 @@
             // Roll to the first element that will be added
             while(
                 itBegin!=itEnd &&
- !regex_match(begin(*itBegin), end(*itBegin), Rx, Flags)) ++itBegin;
+ !regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;
 
             // Add this element
             if(itBegin!=itEnd)
             {
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 ++itBegin;
             }
 
             for(;itBegin!=itEnd; ++itBegin)
             {
- if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
+ if(regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
                 {
                     // Add separator
- detail::insert(Result, end(Result), as_literal(Separator));
+ detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                     // Add element
- detail::insert(Result, end(Result), *itBegin);
+ detail::insert(Result, ::boost::end(Result), *itBegin);
                 }
             }
 

Modified: branches/CMake/release/boost/algorithm/string/trim.hpp
==============================================================================
--- branches/CMake/release/boost/algorithm/string/trim.hpp (original)
+++ branches/CMake/release/boost/algorithm/string/trim.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -67,10 +67,10 @@
 
             std::copy(
                 ::boost::algorithm::detail::trim_begin(
- begin(lit_range),
- end(lit_range),
+ ::boost::begin(lit_range),
+ ::boost::end(lit_range),
                     IsSpace ),
- end(lit_range),
+ ::boost::end(lit_range),
                 Output);
 
             return Output;
@@ -85,10 +85,10 @@
         {
             return SequenceT(
                 ::boost::algorithm::detail::trim_begin(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                     IsSpace ),
- end(Input));
+ ::boost::end(Input));
         }
 
         //! Left trim - parametric
@@ -124,10 +124,10 @@
         inline void trim_left_if(SequenceT& Input, PredicateT IsSpace)
         {
             Input.erase(
- begin(Input),
+ ::boost::begin(Input),
                 ::boost::algorithm::detail::trim_begin(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                     IsSpace));
         }
 
@@ -174,10 +174,10 @@
             iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(as_literal(Input));
          
             std::copy(
- begin(lit_range),
+ ::boost::begin(lit_range),
                 ::boost::algorithm::detail::trim_end(
- begin(lit_range),
- end(lit_range),
+ ::boost::begin(lit_range),
+ ::boost::end(lit_range),
                     IsSpace ),
                 Output );
 
@@ -192,10 +192,10 @@
         inline SequenceT trim_right_copy_if(const SequenceT& Input, PredicateT IsSpace)
         {
             return SequenceT(
- begin(Input),
+ ::boost::begin(Input),
                 ::boost::algorithm::detail::trim_end(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                     IsSpace)
                 );
         }
@@ -235,10 +235,10 @@
         {
             Input.erase(
                 ::boost::algorithm::detail::trim_end(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                     IsSpace ),
- end(Input)
+ ::boost::end(Input)
                 );
         }
 
@@ -288,13 +288,13 @@
             BOOST_STRING_TYPENAME
                 range_const_iterator<RangeT>::type TrimEnd=
                 ::boost::algorithm::detail::trim_end(
- begin(lit_range),
- end(lit_range),
+ ::boost::begin(lit_range),
+ ::boost::end(lit_range),
                     IsSpace);
 
             std::copy(
                 detail::trim_begin(
- begin(lit_range), TrimEnd, IsSpace),
+ ::boost::begin(lit_range), TrimEnd, IsSpace),
                 TrimEnd,
                 Output
                 );
@@ -312,13 +312,13 @@
             BOOST_STRING_TYPENAME
                 range_const_iterator<SequenceT>::type TrimEnd=
                     ::boost::algorithm::detail::trim_end(
- begin(Input),
- end(Input),
+ ::boost::begin(Input),
+ ::boost::end(Input),
                         IsSpace);
 
             return SequenceT(
                 detail::trim_begin(
- begin(Input),
+ ::boost::begin(Input),
                     TrimEnd,
                     IsSpace),
                 TrimEnd

Modified: branches/CMake/release/boost/asio.hpp
==============================================================================
--- branches/CMake/release/boost/asio.hpp (original)
+++ branches/CMake/release/boost/asio.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -20,6 +20,8 @@
 #include <boost/asio/basic_datagram_socket.hpp>
 #include <boost/asio/basic_deadline_timer.hpp>
 #include <boost/asio/basic_io_object.hpp>
+#include <boost/asio/basic_raw_socket.hpp>
+#include <boost/asio/basic_serial_port.hpp>
 #include <boost/asio/basic_socket_acceptor.hpp>
 #include <boost/asio/basic_socket_iostream.hpp>
 #include <boost/asio/basic_socket_streambuf.hpp>
@@ -32,6 +34,7 @@
 #include <boost/asio/buffered_stream.hpp>
 #include <boost/asio/buffered_write_stream_fwd.hpp>
 #include <boost/asio/buffered_write_stream.hpp>
+#include <boost/asio/buffers_iterator.hpp>
 #include <boost/asio/completion_condition.hpp>
 #include <boost/asio/datagram_socket_service.hpp>
 #include <boost/asio/deadline_timer_service.hpp>
@@ -49,6 +52,7 @@
 #include <boost/asio/ip/basic_resolver_iterator.hpp>
 #include <boost/asio/ip/basic_resolver_query.hpp>
 #include <boost/asio/ip/host_name.hpp>
+#include <boost/asio/ip/icmp.hpp>
 #include <boost/asio/ip/multicast.hpp>
 #include <boost/asio/ip/resolver_query_base.hpp>
 #include <boost/asio/ip/resolver_service.hpp>
@@ -58,9 +62,23 @@
 #include <boost/asio/ip/v6_only.hpp>
 #include <boost/asio/is_read_buffered.hpp>
 #include <boost/asio/is_write_buffered.hpp>
+#include <boost/asio/local/basic_endpoint.hpp>
+#include <boost/asio/local/connect_pair.hpp>
+#include <boost/asio/local/datagram_protocol.hpp>
+#include <boost/asio/local/stream_protocol.hpp>
 #include <boost/asio/placeholders.hpp>
+#include <boost/asio/posix/basic_descriptor.hpp>
+#include <boost/asio/posix/basic_stream_descriptor.hpp>
+#include <boost/asio/posix/descriptor_base.hpp>
+#include <boost/asio/posix/stream_descriptor.hpp>
+#include <boost/asio/posix/stream_descriptor_service.hpp>
+#include <boost/asio/raw_socket_service.hpp>
 #include <boost/asio/read.hpp>
+#include <boost/asio/read_at.hpp>
 #include <boost/asio/read_until.hpp>
+#include <boost/asio/serial_port.hpp>
+#include <boost/asio/serial_port_base.hpp>
+#include <boost/asio/serial_port_service.hpp>
 #include <boost/asio/socket_acceptor_service.hpp>
 #include <boost/asio/socket_base.hpp>
 #include <boost/asio/strand.hpp>
@@ -68,6 +86,14 @@
 #include <boost/asio/streambuf.hpp>
 #include <boost/asio/time_traits.hpp>
 #include <boost/asio/version.hpp>
+#include <boost/asio/windows/basic_handle.hpp>
+#include <boost/asio/windows/basic_random_access_handle.hpp>
+#include <boost/asio/windows/basic_stream_handle.hpp>
+#include <boost/asio/windows/random_access_handle.hpp>
+#include <boost/asio/windows/random_access_handle_service.hpp>
+#include <boost/asio/windows/stream_handle.hpp>
+#include <boost/asio/windows/stream_handle_service.hpp>
 #include <boost/asio/write.hpp>
+#include <boost/asio/write_at.hpp>
 
 #endif // BOOST_ASIO_HPP

Modified: branches/CMake/release/boost/asio/basic_io_object.hpp
==============================================================================
--- branches/CMake/release/boost/asio/basic_io_object.hpp (original)
+++ branches/CMake/release/boost/asio/basic_io_object.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -64,6 +64,10 @@
 
 protected:
   /// Construct a basic_io_object.
+ /**
+ * Performs:
+ * @code service.construct(implementation); @endcode
+ */
   explicit basic_io_object(boost::asio::io_service& io_service)
     : service(boost::asio::use_service<IoObjectService>(io_service))
   {
@@ -71,15 +75,19 @@
   }
 
   /// Protected destructor to prevent deletion through this type.
+ /**
+ * Performs:
+ * @code service.destroy(implementation); @endcode
+ */
   ~basic_io_object()
   {
     service.destroy(implementation);
   }
 
- // The backend service implementation.
+ /// The service associated with the I/O object.
   service_type& service;
 
- // The underlying native implementation.
+ /// The underlying implementation of the I/O object.
   implementation_type implementation;
 };
 

Modified: branches/CMake/release/boost/asio/basic_streambuf.hpp
==============================================================================
--- branches/CMake/release/boost/asio/basic_streambuf.hpp (original)
+++ branches/CMake/release/boost/asio/basic_streambuf.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -101,11 +101,9 @@
   /// Move the start of the get area by the specified number of characters.
   void consume(std::size_t n)
   {
- while (n > 0)
- {
- sbumpc();
- --n;
- }
+ if (gptr() + n > pptr())
+ n = pptr() - gptr();
+ gbump(static_cast<int>(n));
   }
 
 protected:

Modified: branches/CMake/release/boost/asio/buffer.hpp
==============================================================================
--- branches/CMake/release/boost/asio/buffer.hpp (original)
+++ branches/CMake/release/boost/asio/buffer.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -379,6 +379,33 @@
   }
 };
 
+/// An implementation of both the ConstBufferSequence and MutableBufferSequence
+/// concepts to represent a null buffer sequence.
+class null_buffers
+{
+public:
+ /// The type for each element in the list of buffers.
+ typedef mutable_buffer value_type;
+
+ /// A random-access iterator type that may be used to read elements.
+ typedef const mutable_buffer* const_iterator;
+
+ /// Get a random-access iterator to the first element.
+ const_iterator begin() const
+ {
+ return &buf_;
+ }
+
+ /// Get a random-access iterator for one past the last element.
+ const_iterator end() const
+ {
+ return &buf_;
+ }
+
+private:
+ mutable_buffer buf_;
+};
+
 #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
 namespace detail {
 

Modified: branches/CMake/release/boost/asio/detail/consuming_buffers.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/consuming_buffers.hpp (original)
+++ branches/CMake/release/boost/asio/detail/consuming_buffers.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -24,6 +24,8 @@
 #include <boost/iterator/iterator_facade.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
+#include <boost/asio/buffer.hpp>
+
 namespace boost {
 namespace asio {
 namespace detail {
@@ -198,6 +200,24 @@
   typename Buffers::const_iterator begin_remainder_;
 };
 
+// Specialisation for null_buffers to ensure that the null_buffers type is
+// always passed through to the underlying read or write operation.
+template <typename Buffer>
+class consuming_buffers<Buffer, boost::asio::null_buffers>
+ : public boost::asio::null_buffers
+{
+public:
+ consuming_buffers(const boost::asio::null_buffers&)
+ {
+ // No-op.
+ }
+
+ void consume(std::size_t)
+ {
+ // No-op.
+ }
+};
+
 } // namespace detail
 } // namespace asio
 } // namespace boost

Modified: branches/CMake/release/boost/asio/detail/deadline_timer_service.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/deadline_timer_service.hpp (original)
+++ branches/CMake/release/boost/asio/detail/deadline_timer_service.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -26,6 +26,7 @@
 #include <boost/asio/error.hpp>
 #include <boost/asio/io_service.hpp>
 #include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/handler_base_from_member.hpp>
 #include <boost/asio/detail/noncopyable.hpp>
 #include <boost/asio/detail/service_base.hpp>
 #include <boost/asio/detail/socket_ops.hpp>
@@ -154,25 +155,25 @@
   }
 
   template <typename Handler>
- class wait_handler
+ class wait_handler :
+ public handler_base_from_member<Handler>
   {
   public:
     wait_handler(boost::asio::io_service& io_service, Handler handler)
- : io_service_(io_service),
- work_(io_service),
- handler_(handler)
+ : handler_base_from_member<Handler>(handler),
+ io_service_(io_service),
+ work_(io_service)
     {
     }
 
     void operator()(const boost::system::error_code& result)
     {
- io_service_.post(detail::bind_handler(handler_, result));
+ io_service_.post(detail::bind_handler(this->handler_, result));
     }
 
   private:
     boost::asio::io_service& io_service_;
     boost::asio::io_service::work work_;
- Handler handler_;
   };
 
   // Start an asynchronous wait on the timer.

Modified: branches/CMake/release/boost/asio/detail/dev_poll_reactor.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/dev_poll_reactor.hpp (original)
+++ branches/CMake/release/boost/asio/detail/dev_poll_reactor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -54,6 +54,11 @@
   : public boost::asio::detail::service_base<dev_poll_reactor<Own_Thread> >
 {
 public:
+ // Per-descriptor data.
+ struct per_descriptor_data
+ {
+ };
+
   // Constructor.
   dev_poll_reactor(boost::asio::io_service& io_service)
     : boost::asio::detail::service_base<
@@ -116,11 +121,11 @@
     for (std::size_t i = 0; i < timer_queues_.size(); ++i)
       timer_queues_[i]->destroy_timers();
     timer_queues_.clear();
- }
+ }
 
   // Register a socket with the reactor. Returns 0 on success, system error
   // code on failure.
- int register_descriptor(socket_type descriptor)
+ int register_descriptor(socket_type, per_descriptor_data&)
   {
     return 0;
   }
@@ -128,16 +133,27 @@
   // Start a new read operation. The handler object will be invoked when the
   // given descriptor is ready to be read, or an error has occurred.
   template <typename Handler>
- void start_read_op(socket_type descriptor, Handler handler)
+ void start_read_op(socket_type descriptor, per_descriptor_data&,
+ Handler handler, bool allow_speculative_read = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!read_op_queue_.has_operation(descriptor))
- if (handler(boost::system::error_code()))
- return;
+ if (allow_speculative_read)
+ {
+ if (!read_op_queue_.has_operation(descriptor))
+ {
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = 0;
+ if (handler.perform(ec, bytes_transferred))
+ {
+ handler.complete(ec, bytes_transferred);
+ return;
+ }
+ }
+ }
 
     if (read_op_queue_.enqueue_operation(descriptor, handler))
     {
@@ -154,16 +170,27 @@
   // Start a new write operation. The handler object will be invoked when the
   // given descriptor is ready to be written, or an error has occurred.
   template <typename Handler>
- void start_write_op(socket_type descriptor, Handler handler)
+ void start_write_op(socket_type descriptor, per_descriptor_data&,
+ Handler handler, bool allow_speculative_write = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!write_op_queue_.has_operation(descriptor))
- if (handler(boost::system::error_code()))
- return;
+ if (allow_speculative_write)
+ {
+ if (!write_op_queue_.has_operation(descriptor))
+ {
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = 0;
+ if (handler.perform(ec, bytes_transferred))
+ {
+ handler.complete(ec, bytes_transferred);
+ return;
+ }
+ }
+ }
 
     if (write_op_queue_.enqueue_operation(descriptor, handler))
     {
@@ -180,7 +207,8 @@
   // Start a new exception operation. The handler object will be invoked when
   // the given descriptor has exception information, or an error has occurred.
   template <typename Handler>
- void start_except_op(socket_type descriptor, Handler handler)
+ void start_except_op(socket_type descriptor,
+ per_descriptor_data&, Handler handler)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
@@ -199,26 +227,25 @@
     }
   }
 
- // Start new write and exception operations. The handler object will be
- // invoked when the given descriptor is ready for writing or has exception
+ // Start a new write operation. The handler object will be invoked when the
   // information available, or an error has occurred.
   template <typename Handler>
- void start_write_and_except_ops(socket_type descriptor, Handler handler)
+ void start_connect_op(socket_type descriptor,
+ per_descriptor_data&, Handler handler)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- bool need_mod = write_op_queue_.enqueue_operation(descriptor, handler);
- need_mod = except_op_queue_.enqueue_operation(descriptor, handler)
- && need_mod;
- if (need_mod)
+ if (write_op_queue_.enqueue_operation(descriptor, handler))
     {
       ::pollfd& ev = add_pending_event_change(descriptor);
- ev.events = POLLOUT | POLLPRI | POLLERR | POLLHUP;
+ ev.events = POLLOUT | POLLERR | POLLHUP;
       if (read_op_queue_.has_operation(descriptor))
         ev.events |= POLLIN;
+ if (except_op_queue_.has_operation(descriptor))
+ ev.events |= POLLPRI;
       interrupter_.interrupt();
     }
   }
@@ -226,25 +253,15 @@
   // Cancel all operations associated with the given descriptor. The
   // handlers associated with the descriptor will be invoked with the
   // operation_aborted error.
- void cancel_ops(socket_type descriptor)
+ void cancel_ops(socket_type descriptor, per_descriptor_data&)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     cancel_ops_unlocked(descriptor);
   }
 
- // Enqueue cancellation of all operations associated with the given
- // descriptor. The handlers associated with the descriptor will be invoked
- // with the operation_aborted error. This function does not acquire the
- // dev_poll_reactor's mutex, and so should only be used from within a reactor
- // handler.
- void enqueue_cancel_ops_unlocked(socket_type descriptor)
- {
- pending_cancellations_.push_back(descriptor);
- }
-
   // Cancel any operations that are running against the descriptor and remove
   // its registration from the reactor.
- void close_descriptor(socket_type descriptor)
+ void close_descriptor(socket_type descriptor, per_descriptor_data&)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
@@ -314,16 +331,16 @@
 
     // Dispatch any operation cancellations that were made while the select
     // loop was not running.
- read_op_queue_.dispatch_cancellations();
- write_op_queue_.dispatch_cancellations();
- except_op_queue_.dispatch_cancellations();
+ read_op_queue_.perform_cancellations();
+ write_op_queue_.perform_cancellations();
+ except_op_queue_.perform_cancellations();
     for (std::size_t i = 0; i < timer_queues_.size(); ++i)
       timer_queues_[i]->dispatch_cancellations();
 
     // Check if the thread is supposed to stop.
     if (stop_thread_)
     {
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
       return;
     }
 
@@ -332,7 +349,7 @@
     if (!block && read_op_queue_.empty() && write_op_queue_.empty()
         && except_op_queue_.empty() && all_timer_queues_are_empty())
     {
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
       return;
     }
 
@@ -348,9 +365,9 @@
         int descriptor = pending_event_changes_[i].fd;
         boost::system::error_code ec = boost::system::error_code(
             errno, boost::asio::error::get_system_category());
- read_op_queue_.dispatch_all_operations(descriptor, ec);
- write_op_queue_.dispatch_all_operations(descriptor, ec);
- except_op_queue_.dispatch_all_operations(descriptor, ec);
+ read_op_queue_.perform_all_operations(descriptor, ec);
+ write_op_queue_.perform_all_operations(descriptor, ec);
+ except_op_queue_.perform_all_operations(descriptor, ec);
       }
     }
     pending_event_changes_.clear();
@@ -371,7 +388,7 @@
     lock.lock();
     wait_in_progress_ = false;
 
- // Block signals while dispatching operations.
+ // Block signals while performing operations.
     boost::asio::detail::signal_blocker sb;
 
     // Dispatch the waiting events.
@@ -392,17 +409,17 @@
         // Exception operations must be processed first to ensure that any
         // out-of-band data is read before normal data.
         if (events[i].events & (POLLPRI | POLLERR | POLLHUP))
- more_except = except_op_queue_.dispatch_operation(descriptor, ec);
+ more_except = except_op_queue_.perform_operation(descriptor, ec);
         else
           more_except = except_op_queue_.has_operation(descriptor);
 
         if (events[i].events & (POLLIN | POLLERR | POLLHUP))
- more_reads = read_op_queue_.dispatch_operation(descriptor, ec);
+ more_reads = read_op_queue_.perform_operation(descriptor, ec);
         else
           more_reads = read_op_queue_.has_operation(descriptor);
 
         if (events[i].events & (POLLOUT | POLLERR | POLLHUP))
- more_writes = write_op_queue_.dispatch_operation(descriptor, ec);
+ more_writes = write_op_queue_.perform_operation(descriptor, ec);
         else
           more_writes = write_op_queue_.has_operation(descriptor);
 
@@ -437,16 +454,16 @@
           {
             ec = boost::system::error_code(errno,
                 boost::asio::error::get_system_category());
- read_op_queue_.dispatch_all_operations(descriptor, ec);
- write_op_queue_.dispatch_all_operations(descriptor, ec);
- except_op_queue_.dispatch_all_operations(descriptor, ec);
+ read_op_queue_.perform_all_operations(descriptor, ec);
+ write_op_queue_.perform_all_operations(descriptor, ec);
+ except_op_queue_.perform_all_operations(descriptor, ec);
           }
         }
       }
     }
- read_op_queue_.dispatch_cancellations();
- write_op_queue_.dispatch_cancellations();
- except_op_queue_.dispatch_cancellations();
+ read_op_queue_.perform_cancellations();
+ write_op_queue_.perform_cancellations();
+ except_op_queue_.perform_cancellations();
     for (std::size_t i = 0; i < timer_queues_.size(); ++i)
     {
       timer_queues_[i]->dispatch_timers();
@@ -458,7 +475,7 @@
       cancel_ops_unlocked(pending_cancellations_[i]);
     pending_cancellations_.clear();
 
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
   }
 
   // Run the select loop in the thread.
@@ -558,16 +575,16 @@
   // destructors may make calls back into this reactor. We make a copy of the
   // vector of timer queues since the original may be modified while the lock
   // is not held.
- void cleanup_operations_and_timers(
+ void complete_operations_and_timers(
       boost::asio::detail::mutex::scoped_lock& lock)
   {
     timer_queues_for_cleanup_ = timer_queues_;
     lock.unlock();
- read_op_queue_.cleanup_operations();
- write_op_queue_.cleanup_operations();
- except_op_queue_.cleanup_operations();
+ read_op_queue_.complete_operations();
+ write_op_queue_.complete_operations();
+ except_op_queue_.complete_operations();
     for (std::size_t i = 0; i < timer_queues_for_cleanup_.size(); ++i)
- timer_queues_for_cleanup_[i]->cleanup_timers();
+ timer_queues_for_cleanup_[i]->complete_timers();
   }
 
   // Add a pending event entry for the given descriptor.

Modified: branches/CMake/release/boost/asio/detail/epoll_reactor.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/epoll_reactor.hpp (original)
+++ branches/CMake/release/boost/asio/detail/epoll_reactor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -54,6 +54,13 @@
   : public boost::asio::detail::service_base<epoll_reactor<Own_Thread> >
 {
 public:
+ // Per-descriptor data.
+ struct per_descriptor_data
+ {
+ bool allow_speculative_read;
+ bool allow_speculative_write;
+ };
+
   // Constructor.
   epoll_reactor(boost::asio::io_service& io_service)
     : boost::asio::detail::service_base<epoll_reactor<Own_Thread> >(io_service),
@@ -119,10 +126,14 @@
 
   // Register a socket with the reactor. Returns 0 on success, system error
   // code on failure.
- int register_descriptor(socket_type descriptor)
+ int register_descriptor(socket_type descriptor,
+ per_descriptor_data& descriptor_data)
   {
     // No need to lock according to epoll documentation.
 
+ descriptor_data.allow_speculative_read = true;
+ descriptor_data.allow_speculative_write = true;
+
     epoll_event ev = { 0, { 0 } };
     ev.events = 0;
     ev.data.fd = descriptor;
@@ -135,16 +146,47 @@
   // Start a new read operation. The handler object will be invoked when the
   // given descriptor is ready to be read, or an error has occurred.
   template <typename Handler>
- void start_read_op(socket_type descriptor, Handler handler)
- {
+ void start_read_op(socket_type descriptor,
+ per_descriptor_data& descriptor_data,
+ Handler handler, bool allow_speculative_read = true)
+ {
+ if (allow_speculative_read && descriptor_data.allow_speculative_read)
+ {
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = 0;
+ if (handler.perform(ec, bytes_transferred))
+ {
+ handler.complete(ec, bytes_transferred);
+ return;
+ }
+
+ // We only get one shot at a speculative read in this function.
+ allow_speculative_read = false;
+ }
+
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!read_op_queue_.has_operation(descriptor))
- if (handler(boost::system::error_code()))
+ if (!allow_speculative_read)
+ need_epoll_wait_ = true;
+ else if (!read_op_queue_.has_operation(descriptor))
+ {
+ // Speculative reads are ok as there are no queued read operations.
+ descriptor_data.allow_speculative_read = true;
+
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = 0;
+ if (handler.perform(ec, bytes_transferred))
+ {
+ handler.complete(ec, bytes_transferred);
         return;
+ }
+ }
+
+ // Speculative reads are not ok as there will be queued read operations.
+ descriptor_data.allow_speculative_read = false;
 
     if (read_op_queue_.enqueue_operation(descriptor, handler))
     {
@@ -163,7 +205,7 @@
       {
         boost::system::error_code ec(errno,
             boost::asio::error::get_system_category());
- read_op_queue_.dispatch_all_operations(descriptor, ec);
+ read_op_queue_.perform_all_operations(descriptor, ec);
       }
     }
   }
@@ -171,16 +213,47 @@
   // Start a new write operation. The handler object will be invoked when the
   // given descriptor is ready to be written, or an error has occurred.
   template <typename Handler>
- void start_write_op(socket_type descriptor, Handler handler)
- {
+ void start_write_op(socket_type descriptor,
+ per_descriptor_data& descriptor_data,
+ Handler handler, bool allow_speculative_write = true)
+ {
+ if (allow_speculative_write && descriptor_data.allow_speculative_write)
+ {
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = 0;
+ if (handler.perform(ec, bytes_transferred))
+ {
+ handler.complete(ec, bytes_transferred);
+ return;
+ }
+
+ // We only get one shot at a speculative write in this function.
+ allow_speculative_write = false;
+ }
+
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!write_op_queue_.has_operation(descriptor))
- if (handler(boost::system::error_code()))
+ if (!allow_speculative_write)
+ need_epoll_wait_ = true;
+ else if (!write_op_queue_.has_operation(descriptor))
+ {
+ // Speculative writes are ok as there are no queued write operations.
+ descriptor_data.allow_speculative_write = true;
+
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = 0;
+ if (handler.perform(ec, bytes_transferred))
+ {
+ handler.complete(ec, bytes_transferred);
         return;
+ }
+ }
+
+ // Speculative writes are not ok as there will be queued write operations.
+ descriptor_data.allow_speculative_write = false;
 
     if (write_op_queue_.enqueue_operation(descriptor, handler))
     {
@@ -199,7 +272,7 @@
       {
         boost::system::error_code ec(errno,
             boost::asio::error::get_system_category());
- write_op_queue_.dispatch_all_operations(descriptor, ec);
+ write_op_queue_.perform_all_operations(descriptor, ec);
       }
     }
   }
@@ -207,7 +280,8 @@
   // Start a new exception operation. The handler object will be invoked when
   // the given descriptor has exception information, or an error has occurred.
   template <typename Handler>
- void start_except_op(socket_type descriptor, Handler handler)
+ void start_except_op(socket_type descriptor,
+ per_descriptor_data&, Handler handler)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
@@ -231,31 +305,34 @@
       {
         boost::system::error_code ec(errno,
             boost::asio::error::get_system_category());
- except_op_queue_.dispatch_all_operations(descriptor, ec);
+ except_op_queue_.perform_all_operations(descriptor, ec);
       }
     }
   }
 
- // Start new write and exception operations. The handler object will be
- // invoked when the given descriptor is ready for writing or has exception
- // information available, or an error has occurred.
+ // Start a new write operation. The handler object will be invoked when the
+ // given descriptor is ready for writing or an error has occurred. Speculative
+ // writes are not allowed.
   template <typename Handler>
- void start_write_and_except_ops(socket_type descriptor, Handler handler)
+ void start_connect_op(socket_type descriptor,
+ per_descriptor_data& descriptor_data, Handler handler)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- bool need_mod = write_op_queue_.enqueue_operation(descriptor, handler);
- need_mod = except_op_queue_.enqueue_operation(descriptor, handler)
- && need_mod;
- if (need_mod)
+ // Speculative writes are not ok as there will be queued write operations.
+ descriptor_data.allow_speculative_write = false;
+
+ if (write_op_queue_.enqueue_operation(descriptor, handler))
     {
       epoll_event ev = { 0, { 0 } };
- ev.events = EPOLLOUT | EPOLLPRI | EPOLLERR | EPOLLHUP;
+ ev.events = EPOLLOUT | EPOLLERR | EPOLLHUP;
       if (read_op_queue_.has_operation(descriptor))
         ev.events |= EPOLLIN;
+ if (except_op_queue_.has_operation(descriptor))
+ ev.events |= EPOLLPRI;
       ev.data.fd = descriptor;
 
       int result = epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, descriptor, &ev);
@@ -265,8 +342,7 @@
       {
         boost::system::error_code ec(errno,
             boost::asio::error::get_system_category());
- write_op_queue_.dispatch_all_operations(descriptor, ec);
- except_op_queue_.dispatch_all_operations(descriptor, ec);
+ write_op_queue_.perform_all_operations(descriptor, ec);
       }
     }
   }
@@ -274,25 +350,15 @@
   // Cancel all operations associated with the given descriptor. The
   // handlers associated with the descriptor will be invoked with the
   // operation_aborted error.
- void cancel_ops(socket_type descriptor)
+ void cancel_ops(socket_type descriptor, per_descriptor_data&)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     cancel_ops_unlocked(descriptor);
   }
 
- // Enqueue cancellation of all operations associated with the given
- // descriptor. The handlers associated with the descriptor will be invoked
- // with the operation_aborted error. This function does not acquire the
- // epoll_reactor's mutex, and so should only be used from within a reactor
- // handler.
- void enqueue_cancel_ops_unlocked(socket_type descriptor)
- {
- pending_cancellations_.push_back(descriptor);
- }
-
   // Cancel any operations that are running against the descriptor and remove
   // its registration from the reactor.
- void close_descriptor(socket_type descriptor)
+ void close_descriptor(socket_type descriptor, per_descriptor_data&)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
@@ -361,16 +427,16 @@
 
     // Dispatch any operation cancellations that were made while the select
     // loop was not running.
- read_op_queue_.dispatch_cancellations();
- write_op_queue_.dispatch_cancellations();
- except_op_queue_.dispatch_cancellations();
+ read_op_queue_.perform_cancellations();
+ write_op_queue_.perform_cancellations();
+ except_op_queue_.perform_cancellations();
     for (std::size_t i = 0; i < timer_queues_.size(); ++i)
       timer_queues_[i]->dispatch_cancellations();
 
     // Check if the thread is supposed to stop.
     if (stop_thread_)
     {
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
       return;
     }
 
@@ -379,7 +445,7 @@
     if (!block && read_op_queue_.empty() && write_op_queue_.empty()
         && except_op_queue_.empty() && all_timer_queues_are_empty())
     {
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
       return;
     }
 
@@ -396,7 +462,7 @@
     lock.lock();
     wait_in_progress_ = false;
 
- // Block signals while dispatching operations.
+ // Block signals while performing operations.
     boost::asio::detail::signal_blocker sb;
 
     // Dispatch the waiting events.
@@ -417,17 +483,17 @@
         // Exception operations must be processed first to ensure that any
         // out-of-band data is read before normal data.
         if (events[i].events & (EPOLLPRI | EPOLLERR | EPOLLHUP))
- more_except = except_op_queue_.dispatch_operation(descriptor, ec);
+ more_except = except_op_queue_.perform_operation(descriptor, ec);
         else
           more_except = except_op_queue_.has_operation(descriptor);
 
         if (events[i].events & (EPOLLIN | EPOLLERR | EPOLLHUP))
- more_reads = read_op_queue_.dispatch_operation(descriptor, ec);
+ more_reads = read_op_queue_.perform_operation(descriptor, ec);
         else
           more_reads = read_op_queue_.has_operation(descriptor);
 
         if (events[i].events & (EPOLLOUT | EPOLLERR | EPOLLHUP))
- more_writes = write_op_queue_.dispatch_operation(descriptor, ec);
+ more_writes = write_op_queue_.perform_operation(descriptor, ec);
         else
           more_writes = write_op_queue_.has_operation(descriptor);
 
@@ -461,16 +527,16 @@
           {
             ec = boost::system::error_code(errno,
                 boost::asio::error::get_system_category());
- read_op_queue_.dispatch_all_operations(descriptor, ec);
- write_op_queue_.dispatch_all_operations(descriptor, ec);
- except_op_queue_.dispatch_all_operations(descriptor, ec);
+ read_op_queue_.perform_all_operations(descriptor, ec);
+ write_op_queue_.perform_all_operations(descriptor, ec);
+ except_op_queue_.perform_all_operations(descriptor, ec);
           }
         }
       }
     }
- read_op_queue_.dispatch_cancellations();
- write_op_queue_.dispatch_cancellations();
- except_op_queue_.dispatch_cancellations();
+ read_op_queue_.perform_cancellations();
+ write_op_queue_.perform_cancellations();
+ except_op_queue_.perform_cancellations();
     for (std::size_t i = 0; i < timer_queues_.size(); ++i)
     {
       timer_queues_[i]->dispatch_timers();
@@ -486,7 +552,7 @@
     need_epoll_wait_ = !read_op_queue_.empty()
       || !write_op_queue_.empty() || !except_op_queue_.empty();
 
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
   }
 
   // Run the select loop in the thread.
@@ -589,16 +655,16 @@
   // destructors may make calls back into this reactor. We make a copy of the
   // vector of timer queues since the original may be modified while the lock
   // is not held.
- void cleanup_operations_and_timers(
+ void complete_operations_and_timers(
       boost::asio::detail::mutex::scoped_lock& lock)
   {
     timer_queues_for_cleanup_ = timer_queues_;
     lock.unlock();
- read_op_queue_.cleanup_operations();
- write_op_queue_.cleanup_operations();
- except_op_queue_.cleanup_operations();
+ read_op_queue_.complete_operations();
+ write_op_queue_.complete_operations();
+ except_op_queue_.complete_operations();
     for (std::size_t i = 0; i < timer_queues_for_cleanup_.size(); ++i)
- timer_queues_for_cleanup_[i]->cleanup_timers();
+ timer_queues_for_cleanup_[i]->complete_timers();
   }
 
   // Mutex to protect access to internal data.

Modified: branches/CMake/release/boost/asio/detail/handler_queue.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/handler_queue.hpp (original)
+++ branches/CMake/release/boost/asio/detail/handler_queue.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -199,6 +199,16 @@
       this_type* h(static_cast<this_type*>(base));
       typedef handler_alloc_traits<Handler, this_type> alloc_traits;
       handler_ptr<alloc_traits> ptr(h->handler_, h);
+
+ // A sub-object of the handler may be the true owner of the memory
+ // associated with the handler. Consequently, a local copy of the handler
+ // is required to ensure that any owning sub-object remains valid until
+ // after we have deallocated the memory here.
+ Handler handler(h->handler_);
+ (void)handler;
+
+ // Free the memory associated with the handler.
+ ptr.reset();
     }
 
   private:

Modified: branches/CMake/release/boost/asio/detail/hash_map.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/hash_map.hpp (original)
+++ branches/CMake/release/boost/asio/detail/hash_map.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -44,6 +44,7 @@
 }
 #endif // defined(_WIN64)
 
+// Note: assumes K and V are POD types.
 template <typename K, typename V>
 class hash_map
   : private noncopyable
@@ -140,7 +141,7 @@
     if (it == values_.end())
     {
       buckets_[bucket].first = buckets_[bucket].last =
- values_.insert(values_.end(), v);
+ values_insert(values_.end(), v);
       return std::pair<iterator, bool>(buckets_[bucket].last, true);
     }
     iterator end = buckets_[bucket].last;
@@ -151,7 +152,7 @@
         return std::pair<iterator, bool>(it, false);
       ++it;
     }
- buckets_[bucket].last = values_.insert(end, v);
+ buckets_[bucket].last = values_insert(end, v);
     return std::pair<iterator, bool>(buckets_[bucket].last, true);
   }
 
@@ -170,7 +171,7 @@
     else if (is_last)
       --buckets_[bucket].last;
 
- values_.erase(it);
+ values_erase(it);
   }
 
   // Remove all entries from the map.
@@ -185,9 +186,36 @@
   }
 
 private:
+ // Insert an element into the values list by splicing from the spares list,
+ // if a spare is available, and otherwise by inserting a new element.
+ iterator values_insert(iterator it, const value_type& v)
+ {
+ if (spares_.empty())
+ {
+ return values_.insert(it, v);
+ }
+ else
+ {
+ spares_.front() = v;
+ values_.splice(it, spares_, spares_.begin());
+ return --it;
+ }
+ }
+
+ // Erase an element from the values list by splicing it to the spares list.
+ void values_erase(iterator it)
+ {
+ *it = value_type();
+ spares_.splice(spares_.begin(), values_, it);
+ }
+
   // The list of all values in the hash map.
   std::list<value_type> values_;
 
+ // The list of spare nodes waiting to be recycled. Assumes that POD types only
+ // are stored in the hash map.
+ std::list<value_type> spares_;
+
   // The type for a bucket in the hash table.
   struct bucket_type
   {

Modified: branches/CMake/release/boost/asio/detail/kqueue_reactor.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/kqueue_reactor.hpp (original)
+++ branches/CMake/release/boost/asio/detail/kqueue_reactor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -61,6 +61,13 @@
   : public boost::asio::detail::service_base<kqueue_reactor<Own_Thread> >
 {
 public:
+ // Per-descriptor data.
+ struct per_descriptor_data
+ {
+ bool allow_speculative_read;
+ bool allow_speculative_write;
+ };
+
   // Constructor.
   kqueue_reactor(boost::asio::io_service& io_service)
     : boost::asio::detail::service_base<
@@ -127,24 +134,58 @@
 
   // Register a socket with the reactor. Returns 0 on success, system error
   // code on failure.
- int register_descriptor(socket_type)
+ int register_descriptor(socket_type, per_descriptor_data& descriptor_data)
   {
+ descriptor_data.allow_speculative_read = true;
+ descriptor_data.allow_speculative_write = true;
+
     return 0;
   }
 
   // Start a new read operation. The handler object will be invoked when the
   // given descriptor is ready to be read, or an error has occurred.
   template <typename Handler>
- void start_read_op(socket_type descriptor, Handler handler)
- {
+ void start_read_op(socket_type descriptor,
+ per_descriptor_data& descriptor_data, Handler handler,
+ bool allow_speculative_read = true)
+ {
+ if (allow_speculative_read && descriptor_data.allow_speculative_read)
+ {
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = 0;
+ if (handler.perform(ec, bytes_transferred))
+ {
+ handler.complete(ec, bytes_transferred);
+ return;
+ }
+
+ // We only get one shot at a speculative read in this function.
+ allow_speculative_read = false;
+ }
+
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!read_op_queue_.has_operation(descriptor))
- if (handler(boost::system::error_code()))
+ if (!allow_speculative_read)
+ need_kqueue_wait_ = true;
+ else if (!read_op_queue_.has_operation(descriptor))
+ {
+ // Speculative reads are ok as there are no queued read operations.
+ descriptor_data.allow_speculative_read = true;
+
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = 0;
+ if (handler.perform(ec, bytes_transferred))
+ {
+ handler.complete(ec, bytes_transferred);
         return;
+ }
+ }
+
+ // Speculative reads are not ok as there will be queued read operations.
+ descriptor_data.allow_speculative_read = false;
 
     if (read_op_queue_.enqueue_operation(descriptor, handler))
     {
@@ -154,7 +195,7 @@
       {
         boost::system::error_code ec(errno,
             boost::asio::error::get_system_category());
- read_op_queue_.dispatch_all_operations(descriptor, ec);
+ read_op_queue_.perform_all_operations(descriptor, ec);
       }
     }
   }
@@ -162,16 +203,47 @@
   // Start a new write operation. The handler object will be invoked when the
   // given descriptor is ready to be written, or an error has occurred.
   template <typename Handler>
- void start_write_op(socket_type descriptor, Handler handler)
- {
+ void start_write_op(socket_type descriptor,
+ per_descriptor_data& descriptor_data, Handler handler,
+ bool allow_speculative_write = true)
+ {
+ if (allow_speculative_write && descriptor_data.allow_speculative_write)
+ {
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = 0;
+ if (handler.perform(ec, bytes_transferred))
+ {
+ handler.complete(ec, bytes_transferred);
+ return;
+ }
+
+ // We only get one shot at a speculative write in this function.
+ allow_speculative_write = false;
+ }
+
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
- if (!write_op_queue_.has_operation(descriptor))
- if (handler(boost::system::error_code()))
+ if (!allow_speculative_write)
+ need_kqueue_wait_ = true;
+ else if (!write_op_queue_.has_operation(descriptor))
+ {
+ // Speculative writes are ok as there are no queued write operations.
+ descriptor_data.allow_speculative_write = true;
+
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = 0;
+ if (handler.perform(ec, bytes_transferred))
+ {
+ handler.complete(ec, bytes_transferred);
         return;
+ }
+ }
+
+ // Speculative writes are not ok as there will be queued write operations.
+ descriptor_data.allow_speculative_write = false;
 
     if (write_op_queue_.enqueue_operation(descriptor, handler))
     {
@@ -181,7 +253,7 @@
       {
         boost::system::error_code ec(errno,
             boost::asio::error::get_system_category());
- write_op_queue_.dispatch_all_operations(descriptor, ec);
+ write_op_queue_.perform_all_operations(descriptor, ec);
       }
     }
   }
@@ -189,7 +261,8 @@
   // Start a new exception operation. The handler object will be invoked when
   // the given descriptor has exception information, or an error has occurred.
   template <typename Handler>
- void start_except_op(socket_type descriptor, Handler handler)
+ void start_except_op(socket_type descriptor,
+ per_descriptor_data&, Handler handler)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
@@ -207,22 +280,25 @@
       {
         boost::system::error_code ec(errno,
             boost::asio::error::get_system_category());
- except_op_queue_.dispatch_all_operations(descriptor, ec);
+ except_op_queue_.perform_all_operations(descriptor, ec);
       }
     }
   }
 
- // Start new write and exception operations. The handler object will be
- // invoked when the given descriptor is ready for writing or has exception
- // information available, or an error has occurred.
+ // Start a new write operation. The handler object will be invoked when the
+ // given descriptor is ready to be written, or an error has occurred.
   template <typename Handler>
- void start_write_and_except_ops(socket_type descriptor, Handler handler)
+ void start_connect_op(socket_type descriptor,
+ per_descriptor_data& descriptor_data, Handler handler)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
     if (shutdown_)
       return;
 
+ // Speculative writes are not ok as there will be queued write operations.
+ descriptor_data.allow_speculative_write = false;
+
     if (write_op_queue_.enqueue_operation(descriptor, handler))
     {
       struct kevent event;
@@ -231,23 +307,7 @@
       {
         boost::system::error_code ec(errno,
             boost::asio::error::get_system_category());
- write_op_queue_.dispatch_all_operations(descriptor, ec);
- }
- }
-
- if (except_op_queue_.enqueue_operation(descriptor, handler))
- {
- struct kevent event;
- if (read_op_queue_.has_operation(descriptor))
- EV_SET(&event, descriptor, EVFILT_READ, EV_ADD, 0, 0, 0);
- else
- EV_SET(&event, descriptor, EVFILT_READ, EV_ADD, EV_OOBAND, 0, 0);
- if (::kevent(kqueue_fd_, &event, 1, 0, 0, 0) == -1)
- {
- boost::system::error_code ec(errno,
- boost::asio::error::get_system_category());
- except_op_queue_.dispatch_all_operations(descriptor, ec);
- write_op_queue_.dispatch_all_operations(descriptor, ec);
+ write_op_queue_.perform_all_operations(descriptor, ec);
       }
     }
   }
@@ -255,25 +315,15 @@
   // Cancel all operations associated with the given descriptor. The
   // handlers associated with the descriptor will be invoked with the
   // operation_aborted error.
- void cancel_ops(socket_type descriptor)
+ void cancel_ops(socket_type descriptor, per_descriptor_data&)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     cancel_ops_unlocked(descriptor);
   }
 
- // Enqueue cancellation of all operations associated with the given
- // descriptor. The handlers associated with the descriptor will be invoked
- // with the operation_aborted error. This function does not acquire the
- // kqueue_reactor's mutex, and so should only be used from within a reactor
- // handler.
- void enqueue_cancel_ops_unlocked(socket_type descriptor)
- {
- pending_cancellations_.push_back(descriptor);
- }
-
   // Cancel any operations that are running against the descriptor and remove
   // its registration from the reactor.
- void close_descriptor(socket_type descriptor)
+ void close_descriptor(socket_type descriptor, per_descriptor_data&)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
 
@@ -344,16 +394,16 @@
 
     // Dispatch any operation cancellations that were made while the select
     // loop was not running.
- read_op_queue_.dispatch_cancellations();
- write_op_queue_.dispatch_cancellations();
- except_op_queue_.dispatch_cancellations();
+ read_op_queue_.perform_cancellations();
+ write_op_queue_.perform_cancellations();
+ except_op_queue_.perform_cancellations();
     for (std::size_t i = 0; i < timer_queues_.size(); ++i)
       timer_queues_[i]->dispatch_cancellations();
 
     // Check if the thread is supposed to stop.
     if (stop_thread_)
     {
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
       return;
     }
 
@@ -362,7 +412,7 @@
     if (!block && read_op_queue_.empty() && write_op_queue_.empty()
         && except_op_queue_.empty() && all_timer_queues_are_empty())
     {
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
       return;
     }
 
@@ -382,7 +432,7 @@
     lock.lock();
     wait_in_progress_ = false;
 
- // Block signals while dispatching operations.
+ // Block signals while performing operations.
     boost::asio::detail::signal_blocker sb;
 
     // Dispatch the waiting events.
@@ -402,22 +452,22 @@
         {
           boost::system::error_code error(
               events[i].data, boost::asio::error::get_system_category());
- except_op_queue_.dispatch_all_operations(descriptor, error);
- read_op_queue_.dispatch_all_operations(descriptor, error);
+ except_op_queue_.perform_all_operations(descriptor, error);
+ read_op_queue_.perform_all_operations(descriptor, error);
         }
         else if (events[i].flags & EV_OOBAND)
         {
           boost::system::error_code error;
- more_except = except_op_queue_.dispatch_operation(descriptor, error);
+ more_except = except_op_queue_.perform_operation(descriptor, error);
           if (events[i].data > 0)
- more_reads = read_op_queue_.dispatch_operation(descriptor, error);
+ more_reads = read_op_queue_.perform_operation(descriptor, error);
           else
             more_reads = read_op_queue_.has_operation(descriptor);
         }
         else
         {
           boost::system::error_code error;
- more_reads = read_op_queue_.dispatch_operation(descriptor, error);
+ more_reads = read_op_queue_.perform_operation(descriptor, error);
           more_except = except_op_queue_.has_operation(descriptor);
         }
 
@@ -433,8 +483,8 @@
         {
           boost::system::error_code error(errno,
               boost::asio::error::get_system_category());
- except_op_queue_.dispatch_all_operations(descriptor, error);
- read_op_queue_.dispatch_all_operations(descriptor, error);
+ except_op_queue_.perform_all_operations(descriptor, error);
+ read_op_queue_.perform_all_operations(descriptor, error);
         }
       }
       else if (events[i].filter == EVFILT_WRITE)
@@ -445,12 +495,12 @@
         {
           boost::system::error_code error(
               events[i].data, boost::asio::error::get_system_category());
- write_op_queue_.dispatch_all_operations(descriptor, error);
+ write_op_queue_.perform_all_operations(descriptor, error);
         }
         else
         {
           boost::system::error_code error;
- more_writes = write_op_queue_.dispatch_operation(descriptor, error);
+ more_writes = write_op_queue_.perform_operation(descriptor, error);
         }
 
         // Update the descriptor in the kqueue.
@@ -463,14 +513,14 @@
         {
           boost::system::error_code error(errno,
               boost::asio::error::get_system_category());
- write_op_queue_.dispatch_all_operations(descriptor, error);
+ write_op_queue_.perform_all_operations(descriptor, error);
         }
       }
     }
 
- read_op_queue_.dispatch_cancellations();
- write_op_queue_.dispatch_cancellations();
- except_op_queue_.dispatch_cancellations();
+ read_op_queue_.perform_cancellations();
+ write_op_queue_.perform_cancellations();
+ except_op_queue_.perform_cancellations();
     for (std::size_t i = 0; i < timer_queues_.size(); ++i)
     {
       timer_queues_[i]->dispatch_timers();
@@ -486,7 +536,7 @@
     need_kqueue_wait_ = !read_op_queue_.empty()
       || !write_op_queue_.empty() || !except_op_queue_.empty();
 
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
   }
 
   // Run the select loop in the thread.
@@ -587,16 +637,16 @@
   // destructors may make calls back into this reactor. We make a copy of the
   // vector of timer queues since the original may be modified while the lock
   // is not held.
- void cleanup_operations_and_timers(
+ void complete_operations_and_timers(
       boost::asio::detail::mutex::scoped_lock& lock)
   {
     timer_queues_for_cleanup_ = timer_queues_;
     lock.unlock();
- read_op_queue_.cleanup_operations();
- write_op_queue_.cleanup_operations();
- except_op_queue_.cleanup_operations();
+ read_op_queue_.complete_operations();
+ write_op_queue_.complete_operations();
+ except_op_queue_.complete_operations();
     for (std::size_t i = 0; i < timer_queues_for_cleanup_.size(); ++i)
- timer_queues_for_cleanup_[i]->cleanup_timers();
+ timer_queues_for_cleanup_[i]->complete_timers();
   }
 
   // Mutex to protect access to internal data.

Modified: branches/CMake/release/boost/asio/detail/null_thread.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/null_thread.hpp (original)
+++ branches/CMake/release/boost/asio/detail/null_thread.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -39,9 +39,12 @@
   : private noncopyable
 {
 public:
+ // The purpose of the thread.
+ enum purpose { internal, external };
+
   // Constructor.
   template <typename Function>
- null_thread(Function f)
+ null_thread(Function f, purpose = internal)
   {
     boost::system::system_error e(
         boost::asio::error::operation_not_supported, "thread");

Modified: branches/CMake/release/boost/asio/detail/old_win_sdk_compat.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/old_win_sdk_compat.hpp (original)
+++ branches/CMake/release/boost/asio/detail/old_win_sdk_compat.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -330,6 +330,11 @@
 # define IPV6_V6ONLY 27
 #endif
 
+// Some SDKs (e.g. Windows CE) don't define IPPROTO_ICMPV6.
+#if !defined(IPPROTO_ICMPV6)
+# define IPPROTO_ICMPV6 58
+#endif
+
 #endif // defined(BOOST_WINDOWS) || defined(__CYGWIN__)
 
 #include <boost/asio/detail/pop_options.hpp>

Modified: branches/CMake/release/boost/asio/detail/posix_thread.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/posix_thread.hpp (original)
+++ branches/CMake/release/boost/asio/detail/posix_thread.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -43,9 +43,12 @@
   : private noncopyable
 {
 public:
+ // The purpose of the thread.
+ enum purpose { internal, external };
+
   // Constructor.
   template <typename Function>
- posix_thread(Function f)
+ posix_thread(Function f, purpose = internal)
     : joined_(false)
   {
     std::auto_ptr<func_base> arg(new func<Function>(f));

Modified: branches/CMake/release/boost/asio/detail/push_options.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/push_options.hpp (original)
+++ branches/CMake/release/boost/asio/detail/push_options.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -87,8 +87,10 @@
 
 # pragma warning (disable:4103)
 # pragma warning (push)
+# pragma warning (disable:4127)
 # pragma warning (disable:4244)
 # pragma warning (disable:4355)
+# pragma warning (disable:4512)
 # 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

Modified: branches/CMake/release/boost/asio/detail/reactive_socket_service.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/reactive_socket_service.hpp (original)
+++ branches/CMake/release/boost/asio/detail/reactive_socket_service.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -26,6 +26,7 @@
 #include <boost/asio/io_service.hpp>
 #include <boost/asio/socket_base.hpp>
 #include <boost/asio/detail/bind_handler.hpp>
+#include <boost/asio/detail/handler_base_from_member.hpp>
 #include <boost/asio/detail/noncopyable.hpp>
 #include <boost/asio/detail/service_base.hpp>
 #include <boost/asio/detail/socket_holder.hpp>
@@ -84,6 +85,9 @@
 
     // The protocol associated with the socket.
     protocol_type protocol_;
+
+ // Per-descriptor data used by the reactor.
+ typename Reactor::per_descriptor_data reactor_data_;
   };
 
   // The maximum number of buffers to support in a single operation.
@@ -114,7 +118,7 @@
   {
     if (impl.socket_ != invalid_socket)
     {
- reactor_.close_descriptor(impl.socket_);
+ reactor_.close_descriptor(impl.socket_, impl.reactor_data_);
 
       if (impl.flags_ & implementation_type::internal_non_blocking)
       {
@@ -156,7 +160,7 @@
     if (sock.get() == invalid_socket)
       return ec;
 
- if (int err = reactor_.register_descriptor(sock.get()))
+ if (int err = reactor_.register_descriptor(sock.get(), impl.reactor_data_))
     {
       ec = boost::system::error_code(err,
           boost::asio::error::get_system_category());
@@ -181,7 +185,8 @@
       return ec;
     }
 
- if (int err = reactor_.register_descriptor(native_socket))
+ if (int err = reactor_.register_descriptor(
+ native_socket, impl.reactor_data_))
     {
       ec = boost::system::error_code(err,
           boost::asio::error::get_system_category());
@@ -207,7 +212,7 @@
   {
     if (is_open(impl))
     {
- reactor_.close_descriptor(impl.socket_);
+ reactor_.close_descriptor(impl.socket_, impl.reactor_data_);
 
       if (impl.flags_ & implementation_type::internal_non_blocking)
       {
@@ -243,7 +248,7 @@
       return ec;
     }
 
- reactor_.cancel_ops(impl.socket_);
+ reactor_.cancel_ops(impl.socket_, impl.reactor_data_);
     ec = boost::system::error_code();
     return ec;
   }
@@ -559,28 +564,46 @@
     }
   }
 
+ // Wait until data can be sent without blocking.
+ size_t send(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_write(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename ConstBufferSequence, typename Handler>
- class send_handler
+ class send_operation :
+ public handler_base_from_member<Handler>
   {
   public:
- send_handler(socket_type socket, boost::asio::io_service& io_service,
+ send_operation(socket_type socket, boost::asio::io_service& io_service,
         const ConstBufferSequence& buffers, socket_base::message_flags flags,
         Handler handler)
- : socket_(socket),
+ : handler_base_from_member<Handler>(handler),
+ socket_(socket),
         io_service_(io_service),
         work_(io_service),
         buffers_(buffers),
- flags_(flags),
- handler_(handler)
+ flags_(flags)
     {
     }
 
- bool operator()(const boost::system::error_code& result)
+ bool perform(boost::system::error_code& ec,
+ std::size_t& bytes_transferred)
     {
       // Check whether the operation was successful.
- if (result)
+ if (ec)
       {
- io_service_.post(bind_handler(handler_, result, 0));
+ bytes_transferred = 0;
         return true;
       }
 
@@ -598,7 +621,6 @@
       }
 
       // Send the data.
- boost::system::error_code ec;
       int bytes = socket_ops::send(socket_, bufs, i, flags_, ec);
 
       // Check if we need to run the operation again.
@@ -606,17 +628,22 @@
           || ec == boost::asio::error::try_again)
         return false;
 
- io_service_.post(bind_handler(handler_, ec, bytes < 0 ? 0 : bytes));
+ bytes_transferred = (bytes < 0 ? 0 : bytes);
       return true;
     }
 
+ void complete(const boost::system::error_code& ec,
+ std::size_t bytes_transferred)
+ {
+ io_service_.post(bind_handler(this->handler_, ec, bytes_transferred));
+ }
+
   private:
     socket_type socket_;
     boost::asio::io_service& io_service_;
     boost::asio::io_service::work work_;
     ConstBufferSequence buffers_;
     socket_base::message_flags flags_;
- Handler handler_;
   };
 
   // Start an asynchronous send. The data being sent must be valid for the
@@ -667,12 +694,59 @@
         impl.flags_ |= implementation_type::internal_non_blocking;
       }
 
- reactor_.start_write_op(impl.socket_,
- send_handler<ConstBufferSequence, Handler>(
+ reactor_.start_write_op(impl.socket_, impl.reactor_data_,
+ send_operation<ConstBufferSequence, Handler>(
             impl.socket_, this->get_io_service(), buffers, flags, handler));
     }
   }
 
+ template <typename Handler>
+ class null_buffers_operation :
+ public handler_base_from_member<Handler>
+ {
+ public:
+ null_buffers_operation(boost::asio::io_service& io_service, Handler handler)
+ : handler_base_from_member<Handler>(handler),
+ work_(io_service)
+ {
+ }
+
+ bool perform(boost::system::error_code&,
+ std::size_t& bytes_transferred)
+ {
+ bytes_transferred = 0;
+ return true;
+ }
+
+ void complete(const boost::system::error_code& ec,
+ std::size_t bytes_transferred)
+ {
+ work_.get_io_service().post(bind_handler(
+ this->handler_, ec, bytes_transferred));
+ }
+
+ private:
+ boost::asio::io_service::work work_;
+ };
+
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ reactor_.start_write_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+
   // Send a datagram to the specified endpoint. Returns the number of bytes
   // sent.
   template <typename ConstBufferSequence>
@@ -734,29 +808,48 @@
     }
   }
 
+ // Wait until data can be sent without blocking.
+ size_t send_to(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, const endpoint_type&,
+ boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_write(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename ConstBufferSequence, typename Handler>
- class send_to_handler
+ class send_to_operation :
+ public handler_base_from_member<Handler>
   {
   public:
- send_to_handler(socket_type socket, boost::asio::io_service& io_service,
+ send_to_operation(socket_type socket, boost::asio::io_service& io_service,
         const ConstBufferSequence& buffers, const endpoint_type& endpoint,
         socket_base::message_flags flags, Handler handler)
- : socket_(socket),
+ : handler_base_from_member<Handler>(handler),
+ socket_(socket),
         io_service_(io_service),
         work_(io_service),
         buffers_(buffers),
         destination_(endpoint),
- flags_(flags),
- handler_(handler)
+ flags_(flags)
     {
     }
 
- bool operator()(const boost::system::error_code& result)
+ bool perform(boost::system::error_code& ec,
+ std::size_t& bytes_transferred)
     {
       // Check whether the operation was successful.
- if (result)
+ if (ec)
       {
- io_service_.post(bind_handler(handler_, result, 0));
+ bytes_transferred = 0;
         return true;
       }
 
@@ -774,7 +867,6 @@
       }
 
       // Send the data.
- boost::system::error_code ec;
       int bytes = socket_ops::sendto(socket_, bufs, i, flags_,
           destination_.data(), destination_.size(), ec);
 
@@ -783,10 +875,16 @@
           || ec == boost::asio::error::try_again)
         return false;
 
- io_service_.post(bind_handler(handler_, ec, bytes < 0 ? 0 : bytes));
+ bytes_transferred = (bytes < 0 ? 0 : bytes);
       return true;
     }
 
+ void complete(const boost::system::error_code& ec,
+ std::size_t bytes_transferred)
+ {
+ io_service_.post(bind_handler(this->handler_, ec, bytes_transferred));
+ }
+
   private:
     socket_type socket_;
     boost::asio::io_service& io_service_;
@@ -794,7 +892,6 @@
     ConstBufferSequence buffers_;
     endpoint_type destination_;
     socket_base::message_flags flags_;
- Handler handler_;
   };
 
   // Start an asynchronous send. The data being sent must be valid for the
@@ -825,13 +922,31 @@
         impl.flags_ |= implementation_type::internal_non_blocking;
       }
 
- reactor_.start_write_op(impl.socket_,
- send_to_handler<ConstBufferSequence, Handler>(
+ reactor_.start_write_op(impl.socket_, impl.reactor_data_,
+ send_to_operation<ConstBufferSequence, Handler>(
             impl.socket_, this->get_io_service(), buffers,
             destination, flags, handler));
     }
   }
 
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send_to(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, const endpoint_type&, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ reactor_.start_write_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+
   // Receive some data from the peer. Returns the number of bytes received.
   template <typename MutableBufferSequence>
   size_t receive(implementation_type& impl,
@@ -889,7 +1004,7 @@
         return bytes_recvd;
 
       // Check for EOF.
- if (bytes_recvd == 0)
+ if (bytes_recvd == 0 && impl.protocol_.type() == SOCK_STREAM)
       {
         ec = boost::asio::error::eof;
         return 0;
@@ -907,28 +1022,48 @@
     }
   }
 
+ // Wait until data can be received without blocking.
+ size_t receive(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_read(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename MutableBufferSequence, typename Handler>
- class receive_handler
+ class receive_operation :
+ public handler_base_from_member<Handler>
   {
   public:
- receive_handler(socket_type socket, boost::asio::io_service& io_service,
- const MutableBufferSequence& buffers, socket_base::message_flags flags,
- Handler handler)
- : socket_(socket),
+ receive_operation(socket_type socket, int protocol_type,
+ boost::asio::io_service& io_service,
+ const MutableBufferSequence& buffers,
+ socket_base::message_flags flags, Handler handler)
+ : handler_base_from_member<Handler>(handler),
+ socket_(socket),
+ protocol_type_(protocol_type),
         io_service_(io_service),
         work_(io_service),
         buffers_(buffers),
- flags_(flags),
- handler_(handler)
+ flags_(flags)
     {
     }
 
- bool operator()(const boost::system::error_code& result)
+ bool perform(boost::system::error_code& ec,
+ std::size_t& bytes_transferred)
     {
       // Check whether the operation was successful.
- if (result)
+ if (ec)
       {
- io_service_.post(bind_handler(handler_, result, 0));
+ bytes_transferred = 0;
         return true;
       }
 
@@ -946,9 +1081,8 @@
       }
 
       // Receive some data.
- boost::system::error_code ec;
       int bytes = socket_ops::recv(socket_, bufs, i, flags_, ec);
- if (bytes == 0)
+ if (bytes == 0 && protocol_type_ == SOCK_STREAM)
         ec = boost::asio::error::eof;
 
       // Check if we need to run the operation again.
@@ -956,17 +1090,23 @@
           || ec == boost::asio::error::try_again)
         return false;
 
- io_service_.post(bind_handler(handler_, ec, bytes < 0 ? 0 : bytes));
+ bytes_transferred = (bytes < 0 ? 0 : bytes);
       return true;
     }
 
+ void complete(const boost::system::error_code& ec,
+ std::size_t bytes_transferred)
+ {
+ io_service_.post(bind_handler(this->handler_, ec, bytes_transferred));
+ }
+
   private:
     socket_type socket_;
+ int protocol_type_;
     boost::asio::io_service& io_service_;
     boost::asio::io_service::work work_;
     MutableBufferSequence buffers_;
     socket_base::message_flags flags_;
- Handler handler_;
   };
 
   // Start an asynchronous receive. The buffer for the data being received
@@ -1020,19 +1160,44 @@
 
       if (flags & socket_base::message_out_of_band)
       {
- reactor_.start_except_op(impl.socket_,
- receive_handler<MutableBufferSequence, Handler>(
- impl.socket_, this->get_io_service(), buffers, flags, handler));
+ reactor_.start_except_op(impl.socket_, impl.reactor_data_,
+ receive_operation<MutableBufferSequence, Handler>(
+ impl.socket_, impl.protocol_.type(),
+ this->get_io_service(), buffers, flags, handler));
       }
       else
       {
- reactor_.start_read_op(impl.socket_,
- receive_handler<MutableBufferSequence, Handler>(
- impl.socket_, this->get_io_service(), buffers, flags, handler));
+ reactor_.start_read_op(impl.socket_, impl.reactor_data_,
+ receive_operation<MutableBufferSequence, Handler>(
+ impl.socket_, impl.protocol_.type(),
+ this->get_io_service(), buffers, flags, handler));
       }
     }
   }
 
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else if (flags & socket_base::message_out_of_band)
+ {
+ reactor_.start_except_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler));
+ }
+ else
+ {
+ reactor_.start_read_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+
   // Receive a datagram with the endpoint of the sender. Returns the number of
   // bytes received.
   template <typename MutableBufferSequence>
@@ -1088,7 +1253,7 @@
       }
 
       // Check for EOF.
- if (bytes_recvd == 0)
+ if (bytes_recvd == 0 && impl.protocol_.type() == SOCK_STREAM)
       {
         ec = boost::asio::error::eof;
         return 0;
@@ -1106,30 +1271,53 @@
     }
   }
 
+ // Wait until data can be received without blocking.
+ size_t receive_from(implementation_type& impl, const null_buffers&,
+ endpoint_type& sender_endpoint, socket_base::message_flags,
+ boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_read(impl.socket_, ec);
+
+ // Reset endpoint since it can be given no sensible value at this time.
+ sender_endpoint = endpoint_type();
+
+ return 0;
+ }
+
   template <typename MutableBufferSequence, typename Handler>
- class receive_from_handler
+ class receive_from_operation :
+ public handler_base_from_member<Handler>
   {
   public:
- receive_from_handler(socket_type socket,
+ receive_from_operation(socket_type socket, int protocol_type,
         boost::asio::io_service& io_service,
         const MutableBufferSequence& buffers, endpoint_type& endpoint,
         socket_base::message_flags flags, Handler handler)
- : socket_(socket),
+ : handler_base_from_member<Handler>(handler),
+ socket_(socket),
+ protocol_type_(protocol_type),
         io_service_(io_service),
         work_(io_service),
         buffers_(buffers),
         sender_endpoint_(endpoint),
- flags_(flags),
- handler_(handler)
+ flags_(flags)
     {
     }
 
- bool operator()(const boost::system::error_code& result)
+ bool perform(boost::system::error_code& ec,
+ std::size_t& bytes_transferred)
     {
       // Check whether the operation was successful.
- if (result)
+ if (ec)
       {
- io_service_.post(bind_handler(handler_, result, 0));
+ bytes_transferred = 0;
         return true;
       }
 
@@ -1148,10 +1336,9 @@
 
       // Receive some data.
       std::size_t addr_len = sender_endpoint_.capacity();
- boost::system::error_code ec;
       int bytes = socket_ops::recvfrom(socket_, bufs, i, flags_,
           sender_endpoint_.data(), &addr_len, ec);
- if (bytes == 0)
+ if (bytes == 0 && protocol_type_ == SOCK_STREAM)
         ec = boost::asio::error::eof;
 
       // Check if we need to run the operation again.
@@ -1160,18 +1347,24 @@
         return false;
 
       sender_endpoint_.resize(addr_len);
- io_service_.post(bind_handler(handler_, ec, bytes < 0 ? 0 : bytes));
+ bytes_transferred = (bytes < 0 ? 0 : bytes);
       return true;
     }
 
+ void complete(const boost::system::error_code& ec,
+ std::size_t bytes_transferred)
+ {
+ io_service_.post(bind_handler(this->handler_, ec, bytes_transferred));
+ }
+
   private:
     socket_type socket_;
+ int protocol_type_;
     boost::asio::io_service& io_service_;
     boost::asio::io_service::work work_;
     MutableBufferSequence buffers_;
     endpoint_type& sender_endpoint_;
     socket_base::message_flags flags_;
- Handler handler_;
   };
 
   // Start an asynchronous receive. The buffer for the data being received and
@@ -1202,10 +1395,40 @@
         impl.flags_ |= implementation_type::internal_non_blocking;
       }
 
- reactor_.start_read_op(impl.socket_,
- receive_from_handler<MutableBufferSequence, Handler>(
- impl.socket_, this->get_io_service(), buffers,
- sender_endpoint, flags, handler));
+ reactor_.start_read_op(impl.socket_, impl.reactor_data_,
+ receive_from_operation<MutableBufferSequence, Handler>(
+ impl.socket_, impl.protocol_.type(), this->get_io_service(),
+ buffers, sender_endpoint, flags, handler));
+ }
+ }
+
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive_from(implementation_type& impl,
+ const null_buffers&, endpoint_type& sender_endpoint,
+ socket_base::message_flags flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ // Reset endpoint since it can be given no sensible value at this time.
+ sender_endpoint = endpoint_type();
+
+ if (flags & socket_base::message_out_of_band)
+ {
+ reactor_.start_except_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler));
+ }
+ else
+ {
+ reactor_.start_read_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler),
+ false);
+ }
     }
   }
 
@@ -1300,35 +1523,32 @@
   }
 
   template <typename Socket, typename Handler>
- class accept_handler
+ class accept_operation :
+ public handler_base_from_member<Handler>
   {
   public:
- accept_handler(socket_type socket, boost::asio::io_service& io_service,
+ accept_operation(socket_type socket, boost::asio::io_service& io_service,
         Socket& peer, const protocol_type& protocol,
         endpoint_type* peer_endpoint, bool enable_connection_aborted,
         Handler handler)
- : socket_(socket),
+ : handler_base_from_member<Handler>(handler),
+ socket_(socket),
         io_service_(io_service),
         work_(io_service),
         peer_(peer),
         protocol_(protocol),
         peer_endpoint_(peer_endpoint),
- enable_connection_aborted_(enable_connection_aborted),
- handler_(handler)
+ enable_connection_aborted_(enable_connection_aborted)
     {
     }
 
- bool operator()(const boost::system::error_code& result)
+ bool perform(boost::system::error_code& ec, std::size_t&)
     {
       // Check whether the operation was successful.
- if (result)
- {
- io_service_.post(bind_handler(handler_, result));
+ if (ec)
         return true;
- }
 
       // Accept the waiting connection.
- boost::system::error_code ec;
       socket_holder new_socket;
       std::size_t addr_len = 0;
       if (peer_endpoint_)
@@ -1364,10 +1584,14 @@
           new_socket.release();
       }
 
- io_service_.post(bind_handler(handler_, ec));
       return true;
     }
 
+ void complete(const boost::system::error_code& ec, std::size_t)
+ {
+ io_service_.post(bind_handler(this->handler_, ec));
+ }
+
   private:
     socket_type socket_;
     boost::asio::io_service& io_service_;
@@ -1376,7 +1600,6 @@
     protocol_type protocol_;
     endpoint_type* peer_endpoint_;
     bool enable_connection_aborted_;
- Handler handler_;
   };
 
   // Start an asynchronous accept. The peer and peer_endpoint objects
@@ -1410,8 +1633,8 @@
         impl.flags_ |= implementation_type::internal_non_blocking;
       }
 
- reactor_.start_read_op(impl.socket_,
- accept_handler<Socket, Handler>(
+ reactor_.start_read_op(impl.socket_, impl.reactor_data_,
+ accept_operation<Socket, Handler>(
             impl.socket_, this->get_io_service(),
             peer, impl.protocol_, peer_endpoint,
             (impl.flags_ & implementation_type::enable_connection_aborted) != 0,
@@ -1445,70 +1668,52 @@
   }
 
   template <typename Handler>
- class connect_handler
+ class connect_operation :
+ public handler_base_from_member<Handler>
   {
   public:
- connect_handler(socket_type socket, boost::shared_ptr<bool> completed,
- boost::asio::io_service& io_service, Reactor& reactor, Handler handler)
- : socket_(socket),
- completed_(completed),
+ connect_operation(socket_type socket,
+ boost::asio::io_service& io_service, Handler handler)
+ : handler_base_from_member<Handler>(handler),
+ socket_(socket),
         io_service_(io_service),
- work_(io_service),
- reactor_(reactor),
- handler_(handler)
+ work_(io_service)
     {
     }
 
- bool operator()(const boost::system::error_code& result)
+ bool perform(boost::system::error_code& ec, std::size_t&)
     {
- // Check whether a handler has already been called for the connection.
- // If it has, then we don't want to do anything in this handler.
- if (*completed_)
- return true;
-
- // Cancel the other reactor operation for the connection.
- *completed_ = true;
- reactor_.enqueue_cancel_ops_unlocked(socket_);
-
       // Check whether the operation was successful.
- if (result)
- {
- io_service_.post(bind_handler(handler_, result));
+ if (ec)
         return true;
- }
 
       // Get the error code from the connect operation.
       int connect_error = 0;
       size_t connect_error_len = sizeof(connect_error);
- boost::system::error_code ec;
       if (socket_ops::getsockopt(socket_, SOL_SOCKET, SO_ERROR,
             &connect_error, &connect_error_len, ec) == socket_error_retval)
- {
- io_service_.post(bind_handler(handler_, ec));
         return true;
- }
 
- // If connection failed then post the handler with the error code.
+ // The connection failed so the handler will be posted with an error code.
       if (connect_error)
       {
         ec = boost::system::error_code(connect_error,
             boost::asio::error::get_system_category());
- io_service_.post(bind_handler(handler_, ec));
         return true;
       }
 
- // Post the result of the successful connection operation.
- io_service_.post(bind_handler(handler_, ec));
       return true;
     }
 
+ void complete(const boost::system::error_code& ec, std::size_t)
+ {
+ io_service_.post(bind_handler(this->handler_, ec));
+ }
+
   private:
     socket_type socket_;
- boost::shared_ptr<bool> completed_;
     boost::asio::io_service& io_service_;
     boost::asio::io_service::work work_;
- Reactor& reactor_;
- Handler handler_;
   };
 
   // Start an asynchronous connect.
@@ -1552,10 +1757,9 @@
     {
       // The connection is happening in the background, and we need to wait
       // until the socket becomes writeable.
- boost::shared_ptr<bool> completed(new bool(false));
- reactor_.start_write_and_except_ops(impl.socket_,
- connect_handler<Handler>(impl.socket_, completed,
- this->get_io_service(), reactor_, handler));
+ reactor_.start_connect_op(impl.socket_, impl.reactor_data_,
+ connect_operation<Handler>(impl.socket_,
+ this->get_io_service(), handler));
     }
     else
     {

Modified: branches/CMake/release/boost/asio/detail/reactor_op_queue.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/reactor_op_queue.hpp (original)
+++ branches/CMake/release/boost/asio/detail/reactor_op_queue.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -22,6 +22,7 @@
 #include <boost/asio/detail/pop_options.hpp>
 
 #include <boost/asio/error.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
 #include <boost/asio/detail/hash_map.hpp>
 #include <boost/asio/detail/noncopyable.hpp>
 
@@ -38,36 +39,42 @@
   reactor_op_queue()
     : operations_(),
       cancelled_operations_(0),
- cleanup_operations_(0)
+ complete_operations_(0)
   {
   }
 
   // Add a new operation to the queue. Returns true if this is the only
   // operation for the given descriptor, in which case the reactor's event
   // demultiplexing function call may need to be interrupted and restarted.
- template <typename Handler>
- bool enqueue_operation(Descriptor descriptor, Handler handler)
+ template <typename Operation>
+ bool enqueue_operation(Descriptor descriptor, Operation operation)
   {
- op_base* new_op = new op<Handler>(descriptor, handler);
+ // Allocate and construct an object to wrap the handler.
+ typedef handler_alloc_traits<Operation, op<Operation> > alloc_traits;
+ raw_handler_ptr<alloc_traits> raw_ptr(operation);
+ handler_ptr<alloc_traits> ptr(raw_ptr, descriptor, operation);
 
     typedef typename operation_map::iterator iterator;
     typedef typename operation_map::value_type value_type;
     std::pair<iterator, bool> entry =
- operations_.insert(value_type(descriptor, new_op));
+ operations_.insert(value_type(descriptor, ptr.get()));
     if (entry.second)
+ {
+ ptr.release();
       return true;
+ }
 
     op_base* current_op = entry.first->second;
     while (current_op->next_)
       current_op = current_op->next_;
- current_op->next_ = new_op;
+ current_op->next_ = ptr.release();
 
     return false;
   }
 
   // Cancel all operations associated with the descriptor. Any operations
   // pending for the descriptor will be notified that they have been cancelled
- // next time dispatch_cancellations is called. Returns true if any operations
+ // next time perform_cancellations is called. Returns true if any operations
   // were cancelled, in which case the reactor's event demultiplexing function
   // may need to be interrupted and restarted.
   bool cancel_operations(Descriptor descriptor)
@@ -99,9 +106,9 @@
     return operations_.find(descriptor) != operations_.end();
   }
 
- // Dispatch the first operation corresponding to the descriptor. Returns true
+ // Perform the first operation corresponding to the descriptor. Returns true
   // if there are more operations queued for the descriptor.
- bool dispatch_operation(Descriptor descriptor,
+ bool perform_operation(Descriptor descriptor,
       const boost::system::error_code& result)
   {
     typename operation_map::iterator i = operations_.find(descriptor);
@@ -109,9 +116,9 @@
     {
       op_base* this_op = i->second;
       i->second = this_op->next_;
- this_op->next_ = cleanup_operations_;
- cleanup_operations_ = this_op;
- bool done = this_op->invoke(result);
+ this_op->next_ = complete_operations_;
+ complete_operations_ = this_op;
+ bool done = this_op->perform(result);
       if (done)
       {
         // Operation has finished.
@@ -128,8 +135,8 @@
       else
       {
         // Operation wants to be called again. Leave it at the front of the
- // queue for this descriptor, and remove from the cleanup list.
- cleanup_operations_ = this_op->next_;
+ // queue for this descriptor, and remove from the completed list.
+ complete_operations_ = this_op->next_;
         this_op->next_ = i->second;
         i->second = this_op;
         return true;
@@ -138,8 +145,8 @@
     return false;
   }
 
- // Dispatch all operations corresponding to the descriptor.
- void dispatch_all_operations(Descriptor descriptor,
+ // Perform all operations corresponding to the descriptor.
+ void perform_all_operations(Descriptor descriptor,
       const boost::system::error_code& result)
   {
     typename operation_map::iterator i = operations_.find(descriptor);
@@ -149,14 +156,14 @@
       {
         op_base* this_op = i->second;
         i->second = this_op->next_;
- this_op->next_ = cleanup_operations_;
- cleanup_operations_ = this_op;
- bool done = this_op->invoke(result);
+ this_op->next_ = complete_operations_;
+ complete_operations_ = this_op;
+ bool done = this_op->perform(result);
         if (!done)
         {
           // Operation has not finished yet, so leave at front of queue, and
- // remove from the cleanup list.
- cleanup_operations_ = this_op->next_;
+ // remove from the completed list.
+ complete_operations_ = this_op->next_;
           this_op->next_ = i->second;
           i->second = this_op;
           return;
@@ -179,15 +186,15 @@
       if (!descriptors.set(descriptor))
       {
         boost::system::error_code ec(error::fd_set_failure);
- dispatch_all_operations(descriptor, ec);
+ perform_all_operations(descriptor, ec);
       }
     }
   }
 
- // Dispatch the operations corresponding to the ready file descriptors
+ // Perform the operations corresponding to the ready file descriptors
   // contained in the given descriptor set.
   template <typename Descriptor_Set>
- void dispatch_descriptors(const Descriptor_Set& descriptors,
+ void perform_operations_for_descriptors(const Descriptor_Set& descriptors,
       const boost::system::error_code& result)
   {
     typename operation_map::iterator i = operations_.begin();
@@ -198,9 +205,9 @@
       {
         op_base* this_op = op_iter->second;
         op_iter->second = this_op->next_;
- this_op->next_ = cleanup_operations_;
- cleanup_operations_ = this_op;
- bool done = this_op->invoke(result);
+ this_op->next_ = complete_operations_;
+ complete_operations_ = this_op;
+ bool done = this_op->perform(result);
         if (done)
         {
           if (!op_iter->second)
@@ -209,8 +216,8 @@
         else
         {
           // Operation has not finished yet, so leave at front of queue, and
- // remove from the cleanup list.
- cleanup_operations_ = this_op->next_;
+ // remove from the completed list.
+ complete_operations_ = this_op->next_;
           this_op->next_ = op_iter->second;
           op_iter->second = this_op;
         }
@@ -218,28 +225,28 @@
     }
   }
 
- // Dispatch any pending cancels for operations.
- void dispatch_cancellations()
+ // Perform any pending cancels for operations.
+ void perform_cancellations()
   {
     while (cancelled_operations_)
     {
       op_base* this_op = cancelled_operations_;
       cancelled_operations_ = this_op->next_;
- this_op->next_ = cleanup_operations_;
- cleanup_operations_ = this_op;
- this_op->invoke(boost::asio::error::operation_aborted);
+ this_op->next_ = complete_operations_;
+ complete_operations_ = this_op;
+ this_op->perform(boost::asio::error::operation_aborted);
     }
   }
 
- // Destroy operations that are waiting to be cleaned up.
- void cleanup_operations()
+ // Complete all operations that are waiting to be completed.
+ void complete_operations()
   {
- while (cleanup_operations_)
+ while (complete_operations_)
     {
- op_base* next_op = cleanup_operations_->next_;
- cleanup_operations_->next_ = 0;
- cleanup_operations_->destroy();
- cleanup_operations_ = next_op;
+ op_base* next_op = complete_operations_->next_;
+ complete_operations_->next_ = 0;
+ complete_operations_->complete();
+ complete_operations_ = next_op;
     }
   }
 
@@ -254,12 +261,12 @@
       cancelled_operations_ = next_op;
     }
 
- while (cleanup_operations_)
+ while (complete_operations_)
     {
- op_base* next_op = cleanup_operations_->next_;
- cleanup_operations_->next_ = 0;
- cleanup_operations_->destroy();
- cleanup_operations_ = next_op;
+ op_base* next_op = complete_operations_->next_;
+ complete_operations_->next_ = 0;
+ complete_operations_->destroy();
+ complete_operations_ = next_op;
     }
 
     typename operation_map::iterator i = operations_.begin();
@@ -291,28 +298,40 @@
     }
 
     // Perform the operation.
- bool invoke(const boost::system::error_code& result)
+ bool perform(const boost::system::error_code& result)
+ {
+ result_ = result;
+ return perform_func_(this, result_, bytes_transferred_);
+ }
+
+ // Destroy the operation and post the handler.
+ void complete()
     {
- return invoke_func_(this, result);
+ complete_func_(this, result_, bytes_transferred_);
     }
 
     // Destroy the operation.
     void destroy()
     {
- return destroy_func_(this);
+ destroy_func_(this);
     }
 
   protected:
- typedef bool (*invoke_func_type)(op_base*,
- const boost::system::error_code&);
+ typedef bool (*perform_func_type)(op_base*,
+ boost::system::error_code&, std::size_t&);
+ typedef void (*complete_func_type)(op_base*,
+ const boost::system::error_code&, std::size_t);
     typedef void (*destroy_func_type)(op_base*);
 
     // Construct an operation for the given descriptor.
- op_base(invoke_func_type invoke_func,
+ op_base(perform_func_type perform_func, complete_func_type complete_func,
         destroy_func_type destroy_func, Descriptor descriptor)
- : invoke_func_(invoke_func),
+ : perform_func_(perform_func),
+ complete_func_(complete_func),
         destroy_func_(destroy_func),
         descriptor_(descriptor),
+ result_(),
+ bytes_transferred_(0),
         next_(0)
     {
     }
@@ -325,48 +344,94 @@
   private:
     friend class reactor_op_queue<Descriptor>;
 
- // The function to be called to dispatch the handler.
- invoke_func_type invoke_func_;
+ // The function to be called to perform the operation.
+ perform_func_type perform_func_;
 
- // The function to be called to delete the handler.
+ // The function to be called to delete the operation and post the handler.
+ complete_func_type complete_func_;
+
+ // The function to be called to delete the operation.
     destroy_func_type destroy_func_;
 
     // The descriptor associated with the operation.
     Descriptor descriptor_;
 
+ // The result of the operation.
+ boost::system::error_code result_;
+
+ // The number of bytes transferred in the operation.
+ std::size_t bytes_transferred_;
+
     // The next operation for the same file descriptor.
     op_base* next_;
   };
 
- // Adaptor class template for using handlers in operations.
- template <typename Handler>
+ // Adaptor class template for operations.
+ template <typename Operation>
   class op
     : public op_base
   {
   public:
     // Constructor.
- op(Descriptor descriptor, Handler handler)
- : op_base(&op<Handler>::invoke_handler,
- &op<Handler>::destroy_handler, descriptor),
- handler_(handler)
+ op(Descriptor descriptor, Operation operation)
+ : op_base(&op<Operation>::do_perform, &op<Operation>::do_complete,
+ &op<Operation>::do_destroy, descriptor),
+ operation_(operation)
     {
     }
 
- // Invoke the handler.
- static bool invoke_handler(op_base* base,
- const boost::system::error_code& result)
+ // Perform the operation.
+ static bool do_perform(op_base* base,
+ boost::system::error_code& result, std::size_t& bytes_transferred)
     {
- return static_cast<op<Handler>*>(base)->handler_(result);
+ return static_cast<op<Operation>*>(base)->operation_.perform(
+ result, bytes_transferred);
     }
 
- // Delete the handler.
- static void destroy_handler(op_base* base)
+ // Destroy the operation and post the handler.
+ static void do_complete(op_base* base,
+ const boost::system::error_code& result, std::size_t bytes_transferred)
     {
- delete static_cast<op<Handler>*>(base);
+ // Take ownership of the operation object.
+ typedef op<Operation> this_type;
+ this_type* this_op(static_cast<this_type*>(base));
+ typedef handler_alloc_traits<Operation, this_type> alloc_traits;
+ handler_ptr<alloc_traits> ptr(this_op->operation_, this_op);
+
+ // Make a copy of the error_code and the operation so that the memory can
+ // be deallocated before the upcall is made.
+ boost::system::error_code ec(result);
+ Operation operation(this_op->operation_);
+
+ // Free the memory associated with the operation.
+ ptr.reset();
+
+ // Make the upcall.
+ operation.complete(ec, bytes_transferred);
+ }
+
+ // Destroy the operation.
+ static void do_destroy(op_base* base)
+ {
+ // Take ownership of the operation object.
+ typedef op<Operation> this_type;
+ this_type* this_op(static_cast<this_type*>(base));
+ typedef handler_alloc_traits<Operation, this_type> alloc_traits;
+ handler_ptr<alloc_traits> ptr(this_op->operation_, this_op);
+
+ // A sub-object of the operation may be the true owner of the memory
+ // associated with the operation. Consequently, a local copy of the
+ // operation is required to ensure that any owning sub-object remains
+ // valid until after we have deallocated the memory here.
+ Operation operation(this_op->operation_);
+ (void)operation;
+
+ // Free the memory associated with the operation.
+ ptr.reset();
     }
 
   private:
- Handler handler_;
+ Operation operation_;
   };
 
   // The type for a map of operations.
@@ -378,8 +443,8 @@
   // The list of operations that have been cancelled.
   op_base* cancelled_operations_;
 
- // The list of operations to be destroyed.
- op_base* cleanup_operations_;
+ // The list of operations waiting to be completed.
+ op_base* complete_operations_;
 };
 
 } // namespace detail

Modified: branches/CMake/release/boost/asio/detail/select_reactor.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/select_reactor.hpp (original)
+++ branches/CMake/release/boost/asio/detail/select_reactor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -23,6 +23,7 @@
 #include <cstddef>
 #include <boost/config.hpp>
 #include <boost/date_time/posix_time/posix_time_types.hpp>
+#include <boost/shared_ptr.hpp>
 #include <vector>
 #include <boost/asio/detail/pop_options.hpp>
 
@@ -51,6 +52,11 @@
   : public boost::asio::detail::service_base<select_reactor<Own_Thread> >
 {
 public:
+ // Per-descriptor data.
+ struct per_descriptor_data
+ {
+ };
+
   // Constructor.
   select_reactor(boost::asio::io_service& io_service)
     : boost::asio::detail::service_base<
@@ -107,7 +113,7 @@
 
   // Register a socket with the reactor. Returns 0 on success, system error
   // code on failure.
- int register_descriptor(socket_type descriptor)
+ int register_descriptor(socket_type, per_descriptor_data&)
   {
     return 0;
   }
@@ -115,7 +121,8 @@
   // Start a new read operation. The handler object will be invoked when the
   // given descriptor is ready to be read, or an error has occurred.
   template <typename Handler>
- void start_read_op(socket_type descriptor, Handler handler)
+ void start_read_op(socket_type descriptor, per_descriptor_data&,
+ Handler handler, bool /*allow_speculative_read*/ = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     if (!shutdown_)
@@ -126,7 +133,8 @@
   // Start a new write operation. The handler object will be invoked when the
   // given descriptor is ready to be written, or an error has occurred.
   template <typename Handler>
- void start_write_op(socket_type descriptor, Handler handler)
+ void start_write_op(socket_type descriptor, per_descriptor_data&,
+ Handler handler, bool /*allow_speculative_write*/ = true)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     if (!shutdown_)
@@ -137,7 +145,8 @@
   // Start a new exception operation. The handler object will be invoked when
   // the given descriptor has exception information, or an error has occurred.
   template <typename Handler>
- void start_except_op(socket_type descriptor, Handler handler)
+ void start_except_op(socket_type descriptor,
+ per_descriptor_data&, Handler handler)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     if (!shutdown_)
@@ -145,18 +154,74 @@
         interrupter_.interrupt();
   }
 
+ // Wrapper for connect handlers to enable the handler object to be placed
+ // in both the write and the except operation queues, but ensure that only
+ // one of the handlers is called.
+ template <typename Handler>
+ class connect_handler_wrapper
+ {
+ public:
+ connect_handler_wrapper(socket_type descriptor,
+ boost::shared_ptr<bool> completed,
+ select_reactor<Own_Thread>& reactor, Handler handler)
+ : descriptor_(descriptor),
+ completed_(completed),
+ reactor_(reactor),
+ handler_(handler)
+ {
+ }
+
+ bool perform(boost::system::error_code& ec,
+ std::size_t& bytes_transferred)
+ {
+ // Check whether one of the handlers has already been called. If it has,
+ // then we don't want to do anything in this handler.
+ if (*completed_)
+ {
+ completed_.reset(); // Indicate that this handler should not complete.
+ return true;
+ }
+
+ // Cancel the other reactor operation for the connection.
+ *completed_ = true;
+ reactor_.enqueue_cancel_ops_unlocked(descriptor_);
+
+ // Call the contained handler.
+ return handler_.perform(ec, bytes_transferred);
+ }
+
+ void complete(const boost::system::error_code& ec,
+ std::size_t bytes_transferred)
+ {
+ if (completed_.get())
+ handler_.complete(ec, bytes_transferred);
+ }
+
+ private:
+ socket_type descriptor_;
+ boost::shared_ptr<bool> completed_;
+ select_reactor<Own_Thread>& reactor_;
+ Handler handler_;
+ };
+
   // Start new write and exception operations. The handler object will be
   // invoked when the given descriptor is ready for writing or has exception
- // information available, or an error has occurred.
+ // information available, or an error has occurred. The handler will be called
+ // only once.
   template <typename Handler>
- void start_write_and_except_ops(socket_type descriptor, Handler handler)
+ void start_connect_op(socket_type descriptor,
+ per_descriptor_data&, Handler handler)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     if (!shutdown_)
     {
- bool interrupt = write_op_queue_.enqueue_operation(descriptor, handler);
- interrupt = except_op_queue_.enqueue_operation(descriptor, handler)
- || interrupt;
+ boost::shared_ptr<bool> completed(new bool(false));
+ connect_handler_wrapper<Handler> wrapped_handler(
+ descriptor, completed, *this, handler);
+ bool interrupt = write_op_queue_.enqueue_operation(
+ descriptor, wrapped_handler);
+ interrupt = except_op_queue_.enqueue_operation(
+ descriptor, wrapped_handler) || interrupt;
       if (interrupt)
         interrupter_.interrupt();
     }
@@ -165,7 +230,7 @@
   // Cancel all operations associated with the given descriptor. The
   // handlers associated with the descriptor will be invoked with the
   // operation_aborted error.
- void cancel_ops(socket_type descriptor)
+ void cancel_ops(socket_type descriptor, per_descriptor_data&)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     cancel_ops_unlocked(descriptor);
@@ -174,8 +239,8 @@
   // Enqueue cancellation of all operations associated with the given
   // descriptor. The handlers associated with the descriptor will be invoked
   // with the operation_aborted error. This function does not acquire the
- // select_reactor's mutex, and so should only be used from within a reactor
- // handler.
+ // select_reactor's mutex, and so should only be used when the reactor lock is
+ // already held.
   void enqueue_cancel_ops_unlocked(socket_type descriptor)
   {
     pending_cancellations_.push_back(descriptor);
@@ -183,7 +248,7 @@
 
   // Cancel any operations that are running against the descriptor and remove
   // its registration from the reactor.
- void close_descriptor(socket_type descriptor)
+ void close_descriptor(socket_type descriptor, per_descriptor_data&)
   {
     boost::asio::detail::mutex::scoped_lock lock(mutex_);
     cancel_ops_unlocked(descriptor);
@@ -246,16 +311,16 @@
 
     // Dispatch any operation cancellations that were made while the select
     // loop was not running.
- read_op_queue_.dispatch_cancellations();
- write_op_queue_.dispatch_cancellations();
- except_op_queue_.dispatch_cancellations();
+ read_op_queue_.perform_cancellations();
+ write_op_queue_.perform_cancellations();
+ except_op_queue_.perform_cancellations();
     for (std::size_t i = 0; i < timer_queues_.size(); ++i)
       timer_queues_[i]->dispatch_cancellations();
 
     // Check if the thread is supposed to stop.
     if (stop_thread_)
     {
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
       return;
     }
 
@@ -264,7 +329,7 @@
     if (!block && read_op_queue_.empty() && write_op_queue_.empty()
         && except_op_queue_.empty() && all_timer_queues_are_empty())
     {
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
       return;
     }
 
@@ -306,15 +371,15 @@
     {
       // Exception operations must be processed first to ensure that any
       // out-of-band data is read before normal data.
- except_op_queue_.dispatch_descriptors(except_fds,
- boost::system::error_code());
- read_op_queue_.dispatch_descriptors(read_fds,
- boost::system::error_code());
- write_op_queue_.dispatch_descriptors(write_fds,
- boost::system::error_code());
- except_op_queue_.dispatch_cancellations();
- read_op_queue_.dispatch_cancellations();
- write_op_queue_.dispatch_cancellations();
+ except_op_queue_.perform_operations_for_descriptors(
+ except_fds, boost::system::error_code());
+ read_op_queue_.perform_operations_for_descriptors(
+ read_fds, boost::system::error_code());
+ write_op_queue_.perform_operations_for_descriptors(
+ write_fds, boost::system::error_code());
+ except_op_queue_.perform_cancellations();
+ read_op_queue_.perform_cancellations();
+ write_op_queue_.perform_cancellations();
     }
     for (std::size_t i = 0; i < timer_queues_.size(); ++i)
     {
@@ -327,7 +392,7 @@
       cancel_ops_unlocked(pending_cancellations_[i]);
     pending_cancellations_.clear();
 
- cleanup_operations_and_timers(lock);
+ complete_operations_and_timers(lock);
   }
 
   // Run the select loop in the thread.
@@ -412,16 +477,16 @@
   // destructors may make calls back into this reactor. We make a copy of the
   // vector of timer queues since the original may be modified while the lock
   // is not held.
- void cleanup_operations_and_timers(
+ void complete_operations_and_timers(
       boost::asio::detail::mutex::scoped_lock& lock)
   {
     timer_queues_for_cleanup_ = timer_queues_;
     lock.unlock();
- read_op_queue_.cleanup_operations();
- write_op_queue_.cleanup_operations();
- except_op_queue_.cleanup_operations();
+ read_op_queue_.complete_operations();
+ write_op_queue_.complete_operations();
+ except_op_queue_.complete_operations();
     for (std::size_t i = 0; i < timer_queues_for_cleanup_.size(); ++i)
- timer_queues_for_cleanup_[i]->cleanup_timers();
+ timer_queues_for_cleanup_[i]->complete_timers();
   }
 
   // Mutex to protect access to internal data.

Modified: branches/CMake/release/boost/asio/detail/service_registry.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/service_registry.hpp (original)
+++ branches/CMake/release/boost/asio/detail/service_registry.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -27,6 +27,12 @@
 #include <boost/asio/detail/noncopyable.hpp>
 #include <boost/asio/detail/service_id.hpp>
 
+#if defined(BOOST_NO_TYPEID)
+# if !defined(BOOST_ASIO_NO_TYPEID)
+# define BOOST_ASIO_NO_TYPEID
+# endif // !defined(BOOST_ASIO_NO_TYPEID)
+#endif // defined(BOOST_NO_TYPEID)
+
 namespace boost {
 namespace asio {
 namespace detail {
@@ -157,6 +163,7 @@
     service.id_ = &id;
   }
 
+#if !defined(BOOST_ASIO_NO_TYPEID)
   // Set a service's id.
   template <typename Service>
   void init_service_id(boost::asio::io_service::service& service,
@@ -165,6 +172,7 @@
     service.type_info_ = &typeid(Service);
     service.id_ = 0;
   }
+#endif // !defined(BOOST_ASIO_NO_TYPEID)
 
   // Check if a service matches the given id.
   static bool service_id_matches(
@@ -174,6 +182,7 @@
     return service.id_ == &id;
   }
 
+#if !defined(BOOST_ASIO_NO_TYPEID)
   // Check if a service matches the given id.
   template <typename Service>
   static bool service_id_matches(
@@ -182,6 +191,7 @@
   {
     return service.type_info_ != 0 && *service.type_info_ == typeid(Service);
   }
+#endif // !defined(BOOST_ASIO_NO_TYPEID)
 
   // Mutex to protect access to internal data.
   mutable boost::asio::detail::mutex mutex_;

Modified: branches/CMake/release/boost/asio/detail/socket_ops.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/socket_ops.hpp (original)
+++ branches/CMake/release/boost/asio/detail/socket_ops.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -176,6 +176,22 @@
   return result;
 }
 
+inline int socketpair(int af, int type, int protocol,
+ socket_type sv[2], boost::system::error_code& ec)
+{
+#if defined(BOOST_WINDOWS) || defined(__CYGWIN__)
+ (void)(af);
+ (void)(type);
+ (void)(protocol);
+ (void)(sv);
+ ec = boost::asio::error::operation_not_supported;
+ return -1;
+#else
+ clear_error(ec);
+ return error_wrapper(::socketpair(af, type, protocol, sv), ec);
+#endif
+}
+
 inline int listen(socket_type s, int backlog, boost::system::error_code& ec)
 {
   clear_error(ec);

Modified: branches/CMake/release/boost/asio/detail/socket_types.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/socket_types.hpp (original)
+++ branches/CMake/release/boost/asio/detail/socket_types.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -99,6 +99,7 @@
 # endif
 # include <sys/socket.h>
 # include <sys/uio.h>
+# include <sys/un.h>
 # include <netinet/in.h>
 # include <netinet/tcp.h>
 # include <arpa/inet.h>
@@ -176,6 +177,7 @@
 typedef ipv6_mreq in6_mreq_type;
 typedef sockaddr_in6 sockaddr_in6_type;
 typedef sockaddr_storage sockaddr_storage_type;
+typedef sockaddr_un sockaddr_un_type;
 typedef addrinfo addrinfo_type;
 typedef int ioctl_arg_type;
 typedef uint32_t u_long_type;

Modified: branches/CMake/release/boost/asio/detail/strand_service.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/strand_service.hpp (original)
+++ branches/CMake/release/boost/asio/detail/strand_service.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -20,6 +20,7 @@
 #include <boost/asio/detail/push_options.hpp>
 #include <boost/aligned_storage.hpp>
 #include <boost/assert.hpp>
+#include <boost/detail/atomic_count.hpp>
 #include <boost/intrusive_ptr.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
@@ -55,19 +56,13 @@
 #endif
     void add_ref()
     {
- boost::asio::detail::mutex::scoped_lock lock(mutex_);
       ++ref_count_;
     }
 
     void release()
     {
- boost::asio::detail::mutex::scoped_lock lock(mutex_);
- --ref_count_;
- if (ref_count_ == 0)
- {
- lock.unlock();
+ if (--ref_count_ == 0)
         delete this;
- }
     }
 
   private:
@@ -148,7 +143,7 @@
     strand_impl* prev_;
 
     // The reference count on the strand implementation.
- size_t ref_count_;
+ boost::detail::atomic_count ref_count_;
 
 #if !defined(__BORLANDC__)
     friend void intrusive_ptr_add_ref(strand_impl* p)
@@ -346,6 +341,16 @@
       this_type* h(static_cast<this_type*>(base));
       typedef handler_alloc_traits<Handler, this_type> alloc_traits;
       handler_ptr<alloc_traits> ptr(h->handler_, h);
+
+ // A sub-object of the handler may be the true owner of the memory
+ // associated with the handler. Consequently, a local copy of the handler
+ // is required to ensure that any owning sub-object remains valid until
+ // after we have deallocated the memory here.
+ Handler handler(h->handler_);
+ (void)handler;
+
+ // Free the memory associated with the handler.
+ ptr.reset();
     }
 
   private:

Modified: branches/CMake/release/boost/asio/detail/task_io_service.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/task_io_service.hpp (original)
+++ branches/CMake/release/boost/asio/detail/task_io_service.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -15,6 +15,10 @@
 # pragma once
 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
 
+#if defined(BOOST_ASIO_ENABLE_TWO_LOCK_QUEUE)
+#include <boost/asio/detail/task_io_service_2lock.hpp>
+#else // defined(BOOST_ASIO_ENABLE_TWO_LOCK_QUEUE)
+
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/io_service.hpp>
@@ -418,4 +422,6 @@
 #include <boost/system/error_code.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
+#endif // defined(BOOST_ASIO_ENABLE_TWO_LOCK_QUEUE)
+
 #endif // BOOST_ASIO_DETAIL_TASK_IO_SERVICE_HPP

Modified: branches/CMake/release/boost/asio/detail/timer_queue.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/timer_queue.hpp (original)
+++ branches/CMake/release/boost/asio/detail/timer_queue.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -27,6 +27,7 @@
 #include <boost/asio/detail/pop_options.hpp>
 
 #include <boost/asio/error.hpp>
+#include <boost/asio/detail/handler_alloc_helpers.hpp>
 #include <boost/asio/detail/hash_map.hpp>
 #include <boost/asio/detail/noncopyable.hpp>
 #include <boost/asio/detail/timer_queue_base.hpp>
@@ -51,7 +52,7 @@
     : timers_(),
       heap_(),
       cancelled_timers_(0),
- cleanup_timers_(0)
+ complete_timers_(0)
   {
   }
 
@@ -102,6 +103,8 @@
   // Get the time for the timer that is earliest in the queue.
   virtual boost::posix_time::time_duration wait_duration() const
   {
+ if (heap_.empty())
+ return boost::posix_time::pos_infin;
     return Time_Traits::to_posix_duration(
         Time_Traits::subtract(heap_[0]->time_, Time_Traits::now()));
   }
@@ -114,10 +117,10 @@
     {
       timer_base* t = heap_[0];
       remove_timer(t);
+ t->result_ = boost::system::error_code();
       t->prev_ = 0;
- t->next_ = cleanup_timers_;
- cleanup_timers_ = t;
- t->invoke(boost::system::error_code());
+ t->next_ = complete_timers_;
+ complete_timers_ = t;
     }
   }
 
@@ -153,17 +156,23 @@
     while (cancelled_timers_)
     {
       timer_base* this_timer = cancelled_timers_;
+ this_timer->result_ = boost::asio::error::operation_aborted;
       cancelled_timers_ = this_timer->next_;
- this_timer->next_ = cleanup_timers_;
- cleanup_timers_ = this_timer;
- this_timer->invoke(boost::asio::error::operation_aborted);
+ this_timer->next_ = complete_timers_;
+ complete_timers_ = this_timer;
     }
   }
 
- // Destroy timers that are waiting to be cleaned up.
- virtual void cleanup_timers()
+ // Complete any timers that are waiting to be completed.
+ virtual void complete_timers()
   {
- destroy_timer_list(cleanup_timers_);
+ while (complete_timers_)
+ {
+ timer_base* this_timer = complete_timers_;
+ complete_timers_ = this_timer->next_;
+ this_timer->next_ = 0;
+ this_timer->complete();
+ }
   }
 
   // Destroy all timers.
@@ -181,7 +190,7 @@
     heap_.clear();
     timers_.clear();
     destroy_timer_list(cancelled_timers_);
- destroy_timer_list(cleanup_timers_);
+ destroy_timer_list(complete_timers_);
   }
 
 private:
@@ -190,27 +199,27 @@
   class timer_base
   {
   public:
- // Perform the timer operation and then destroy.
- void invoke(const boost::system::error_code& result)
+ // Delete the timer and post the handler.
+ void complete()
     {
- invoke_func_(this, result);
+ complete_func_(this, result_);
     }
 
- // Destroy the timer operation.
+ // Delete the timer.
     void destroy()
     {
       destroy_func_(this);
     }
 
   protected:
- typedef void (*invoke_func_type)(timer_base*,
+ typedef void (*complete_func_type)(timer_base*,
         const boost::system::error_code&);
     typedef void (*destroy_func_type)(timer_base*);
 
     // Constructor.
- timer_base(invoke_func_type invoke_func, destroy_func_type destroy_func,
+ timer_base(complete_func_type complete_func, destroy_func_type destroy_func,
         const time_type& time, void* token)
- : invoke_func_(invoke_func),
+ : complete_func_(complete_func),
         destroy_func_(destroy_func),
         time_(time),
         token_(token),
@@ -229,13 +238,16 @@
   private:
     friend class timer_queue<Time_Traits>;
 
- // The function to be called to dispatch the handler.
- invoke_func_type invoke_func_;
+ // The function to be called to delete the timer and post the handler.
+ complete_func_type complete_func_;
 
- // The function to be called to destroy the handler.
+ // The function to be called to delete the timer.
     destroy_func_type destroy_func_;
 
- // The time when the operation should fire.
+ // The result of the timer operation.
+ boost::system::error_code result_;
+
+ // The time when the timer should fire.
     time_type time_;
 
     // The token associated with the timer.
@@ -259,23 +271,52 @@
   public:
     // Constructor.
     timer(const time_type& time, Handler handler, void* token)
- : timer_base(&timer<Handler>::invoke_handler,
+ : timer_base(&timer<Handler>::complete_handler,
           &timer<Handler>::destroy_handler, time, token),
         handler_(handler)
     {
     }
 
- // Invoke the handler and then destroy it.
- static void invoke_handler(timer_base* base,
+ // Delete the timer and post the handler.
+ static void complete_handler(timer_base* base,
         const boost::system::error_code& result)
     {
- static_cast<timer<Handler>*>(base)->handler_(result);
+ // Take ownership of the timer object.
+ typedef timer<Handler> this_type;
+ this_type* this_timer(static_cast<this_type*>(base));
+ typedef handler_alloc_traits<Handler, this_type> alloc_traits;
+ handler_ptr<alloc_traits> ptr(this_timer->handler_, this_timer);
+
+ // Make a copy of the error_code and the handler so that the memory can
+ // be deallocated before the upcall is made.
+ boost::system::error_code ec(result);
+ Handler handler(this_timer->handler_);
+
+ // Free the memory associated with the handler.
+ ptr.reset();
+
+ // Make the upcall.
+ handler(ec);
     }
 
- // Destroy the handler.
+ // Delete the timer.
     static void destroy_handler(timer_base* base)
     {
- delete static_cast<timer<Handler>*>(base);
+ // Take ownership of the timer object.
+ typedef timer<Handler> this_type;
+ this_type* this_timer(static_cast<this_type*>(base));
+ typedef handler_alloc_traits<Handler, this_type> alloc_traits;
+ handler_ptr<alloc_traits> ptr(this_timer->handler_, this_timer);
+
+ // A sub-object of the handler may be the true owner of the memory
+ // associated with the handler. Consequently, a local copy of the handler
+ // is required to ensure that any owning sub-object remains valid until
+ // after we have deallocated the memory here.
+ Handler handler(this_timer->handler_);
+ (void)handler;
+
+ // Free the memory associated with the handler.
+ ptr.reset();
     }
 
   private:
@@ -384,8 +425,8 @@
   // The list of timers to be cancelled.
   timer_base* cancelled_timers_;
 
- // The list of timers to be destroyed.
- timer_base* cleanup_timers_;
+ // The list of timers waiting to be completed.
+ timer_base* complete_timers_;
 };
 
 } // namespace detail

Modified: branches/CMake/release/boost/asio/detail/timer_queue_base.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/timer_queue_base.hpp (original)
+++ branches/CMake/release/boost/asio/detail/timer_queue_base.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -48,8 +48,8 @@
   // Dispatch any pending cancels for timers.
   virtual void dispatch_cancellations() = 0;
 
- // Destroy timers that are waiting to be cleaned up.
- virtual void cleanup_timers() = 0;
+ // Complete all timers that are waiting to be completed.
+ virtual void complete_timers() = 0;
 
   // Destroy all timers.
   virtual void destroy_timers() = 0;

Modified: branches/CMake/release/boost/asio/detail/win_iocp_io_service.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/win_iocp_io_service.hpp (original)
+++ branches/CMake/release/boost/asio/detail/win_iocp_io_service.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -150,9 +150,20 @@
   }
 
   // Register a handle with the IO completion port.
- void register_handle(HANDLE handle)
+ boost::system::error_code register_handle(
+ HANDLE handle, boost::system::error_code& ec)
   {
- ::CreateIoCompletionPort(handle, iocp_.handle, 0, 0);
+ if (::CreateIoCompletionPort(handle, iocp_.handle, 0, 0) == 0)
+ {
+ DWORD last_error = ::GetLastError();
+ ec = boost::system::error_code(last_error,
+ boost::asio::error::get_system_category());
+ }
+ else
+ {
+ ec = boost::system::error_code();
+ }
+ return ec;
   }
 
   // Run the event loop until stopped or no more work.
@@ -425,7 +436,7 @@
           {
             timer_queues_copy_[i]->dispatch_timers();
             timer_queues_copy_[i]->dispatch_cancellations();
- timer_queues_copy_[i]->cleanup_timers();
+ timer_queues_copy_[i]->complete_timers();
           }
         }
         catch (...)
@@ -505,16 +516,18 @@
       }
       else
       {
+ // Relinquish responsibility for dispatching timers. If the io_service
+ // is not being stopped then the thread will get an opportunity to
+ // reacquire timer responsibility on the next loop iteration.
+ if (dispatching_timers)
+ {
+ ::InterlockedCompareExchange(&timer_thread_, 0, this_thread_id);
+ }
+
         // The stopped_ flag is always checked to ensure that any leftover
         // interrupts from a previous run invocation are ignored.
         if (::InterlockedExchangeAdd(&stopped_, 0) != 0)
         {
- // Relinquish responsibility for dispatching timers.
- if (dispatching_timers)
- {
- ::InterlockedCompareExchange(&timer_thread_, 0, this_thread_id);
- }
-
           // Wake up next thread that is blocked on GetQueuedCompletionStatus.
           if (!::PostQueuedCompletionStatus(iocp_.handle, 0, 0, 0))
           {
@@ -637,6 +650,16 @@
       op_type* handler_op(static_cast<op_type*>(op));
       typedef handler_alloc_traits<Handler, op_type> alloc_traits;
       handler_ptr<alloc_traits> ptr(handler_op->handler_, handler_op);
+
+ // A sub-object of the handler may be the true owner of the memory
+ // associated with the handler. Consequently, a local copy of the handler
+ // is required to ensure that any owning sub-object remains valid until
+ // after we have deallocated the memory here.
+ Handler handler(handler_op->handler_);
+ (void)handler;
+
+ // Free the memory associated with the handler.
+ ptr.reset();
     }
 
     win_iocp_io_service& io_service_;

Modified: branches/CMake/release/boost/asio/detail/win_iocp_socket_service.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/win_iocp_socket_service.hpp (original)
+++ branches/CMake/release/boost/asio/detail/win_iocp_socket_service.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -24,6 +24,7 @@
 #include <boost/asio/detail/push_options.hpp>
 #include <cstring>
 #include <boost/shared_ptr.hpp>
+#include <boost/type_traits/is_same.hpp>
 #include <boost/weak_ptr.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
@@ -113,6 +114,9 @@
     endpoint_type remote_endpoint_;
   };
 
+ // The type of the reactor used for connect operations.
+ typedef detail::select_reactor<true> reactor_type;
+
   // The implementation type of the socket.
   class implementation_type
   {
@@ -156,6 +160,9 @@
     // The protocol associated with the socket.
     protocol_type protocol_;
 
+ // Per-descriptor data used by the reactor.
+ reactor_type::per_descriptor_data reactor_data_;
+
 #if defined(BOOST_ASIO_ENABLE_CANCELIO)
     // The ID of the thread from which it is safe to cancel asynchronous
     // operations. 0 means no asynchronous operations have been started yet.
@@ -169,9 +176,6 @@
     implementation_type* prev_;
   };
 
- // The type of the reactor used for connect operations.
- typedef detail::select_reactor<true> reactor_type;
-
   // The maximum number of buffers to support in a single operation.
   enum { max_buffers = 64 < max_iov_len ? 64 : max_iov_len };
 
@@ -252,7 +256,8 @@
       return ec;
 
     HANDLE sock_as_handle = reinterpret_cast<HANDLE>(sock.get());
- iocp_service_.register_handle(sock_as_handle);
+ if (iocp_service_.register_handle(sock_as_handle, ec))
+ return ec;
 
     impl.socket_ = sock.release();
     impl.flags_ = 0;
@@ -273,7 +278,8 @@
       return ec;
     }
 
- iocp_service_.register_handle(native_socket.as_handle());
+ if (iocp_service_.register_handle(native_socket.as_handle(), ec))
+ return ec;
 
     impl.socket_ = native_socket;
     impl.flags_ = 0;
@@ -302,7 +308,7 @@
             interlocked_compare_exchange_pointer(
               reinterpret_cast<void**>(&reactor_), 0, 0));
       if (reactor)
- reactor->close_descriptor(impl.socket_);
+ reactor->close_descriptor(impl.socket_, impl.reactor_data_);
 
       if (socket_ops::close(impl.socket_, ec) == socket_error_retval)
         return ec;
@@ -332,6 +338,7 @@
     if (!is_open(impl))
     {
       ec = boost::asio::error::bad_descriptor;
+ return ec;
     }
     else if (FARPROC cancel_io_ex_ptr = ::GetProcAddress(
           ::GetModuleHandleA("KERNEL32"), "CancelIoEx"))
@@ -700,6 +707,22 @@
     return bytes_transferred;
   }
 
+ // Wait until data can be sent without blocking.
+ size_t send(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_write(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename ConstBufferSequence, typename Handler>
   class send_operation
     : public operation
@@ -776,6 +799,16 @@
       op_type* handler_op(static_cast<op_type*>(op));
       typedef handler_alloc_traits<Handler, op_type> alloc_traits;
       handler_ptr<alloc_traits> ptr(handler_op->handler_, handler_op);
+
+ // A sub-object of the handler may be the true owner of the memory
+ // associated with the handler. Consequently, a local copy of the handler
+ // is required to ensure that any owning sub-object remains valid until
+ // after we have deallocated the memory here.
+ Handler handler(handler_op->handler_);
+ (void)handler;
+
+ // Free the memory associated with the handler.
+ ptr.reset();
     }
 
     boost::asio::io_service::work work_;
@@ -858,6 +891,65 @@
     }
   }
 
+ template <typename Handler>
+ class null_buffers_operation
+ {
+ public:
+ null_buffers_operation(boost::asio::io_service& io_service, Handler handler)
+ : work_(io_service),
+ handler_(handler)
+ {
+ }
+
+ bool perform(boost::system::error_code&,
+ std::size_t& bytes_transferred)
+ {
+ bytes_transferred = 0;
+ return true;
+ }
+
+ void complete(const boost::system::error_code& ec,
+ std::size_t bytes_transferred)
+ {
+ work_.get_io_service().post(bind_handler(
+ handler_, ec, bytes_transferred));
+ }
+
+ private:
+ boost::asio::io_service::work work_;
+ Handler handler_;
+ };
+
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ // Check if the reactor was already obtained from the io_service.
+ reactor_type* reactor = static_cast<reactor_type*>(
+ interlocked_compare_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), 0, 0));
+ if (!reactor)
+ {
+ reactor = &(boost::asio::use_service<reactor_type>(
+ this->get_io_service()));
+ interlocked_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), reactor);
+ }
+
+ reactor->start_write_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+
   // Send a datagram to the specified endpoint. Returns the number of bytes
   // sent.
   template <typename ConstBufferSequence>
@@ -902,6 +994,23 @@
     return bytes_transferred;
   }
 
+ // Wait until data can be sent without blocking.
+ size_t send_to(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, const endpoint_type&,
+ boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_write(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename ConstBufferSequence, typename Handler>
   class send_to_operation
     : public operation
@@ -969,6 +1078,16 @@
       op_type* handler_op(static_cast<op_type*>(op));
       typedef handler_alloc_traits<Handler, op_type> alloc_traits;
       handler_ptr<alloc_traits> ptr(handler_op->handler_, handler_op);
+
+ // A sub-object of the handler may be the true owner of the memory
+ // associated with the handler. Consequently, a local copy of the handler
+ // is required to ensure that any owning sub-object remains valid until
+ // after we have deallocated the memory here.
+ Handler handler(handler_op->handler_);
+ (void)handler;
+
+ // Free the memory associated with the handler.
+ ptr.reset();
     }
 
     boost::asio::io_service::work work_;
@@ -1038,6 +1157,36 @@
     }
   }
 
+ // Start an asynchronous wait until data can be sent without blocking.
+ template <typename Handler>
+ void async_send_to(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, const endpoint_type&, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ // Check if the reactor was already obtained from the io_service.
+ reactor_type* reactor = static_cast<reactor_type*>(
+ interlocked_compare_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), 0, 0));
+ if (!reactor)
+ {
+ reactor = &(boost::asio::use_service<reactor_type>(
+ this->get_io_service()));
+ interlocked_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), reactor);
+ }
+
+ reactor->start_write_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+
   // Receive some data from the peer. Returns the number of bytes received.
   template <typename MutableBufferSequence>
   size_t receive(implementation_type& impl,
@@ -1087,7 +1236,7 @@
           boost::asio::error::get_system_category());
       return 0;
     }
- if (bytes_transferred == 0)
+ if (bytes_transferred == 0 && impl.protocol_.type() == SOCK_STREAM)
     {
       ec = boost::asio::error::eof;
       return 0;
@@ -1097,12 +1246,28 @@
     return bytes_transferred;
   }
 
+ // Wait until data can be received without blocking.
+ size_t receive(implementation_type& impl, const null_buffers&,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_read(impl.socket_, ec);
+
+ return 0;
+ }
+
   template <typename MutableBufferSequence, typename Handler>
   class receive_operation
     : public operation
   {
   public:
- receive_operation(win_iocp_io_service& io_service,
+ receive_operation(int protocol_type, win_iocp_io_service& io_service,
         weak_cancel_token_type cancel_token,
         const MutableBufferSequence& buffers, Handler handler)
       : operation(io_service,
@@ -1110,6 +1275,7 @@
             MutableBufferSequence, Handler>::do_completion_impl,
           &receive_operation<
             MutableBufferSequence, Handler>::destroy_impl),
+ protocol_type_(protocol_type),
         work_(io_service.get_io_service()),
         cancel_token_(cancel_token),
         buffers_(buffers),
@@ -1157,7 +1323,9 @@
       }
 
       // Check for connection closed.
- else if (!ec && bytes_transferred == 0)
+ else if (!ec && bytes_transferred == 0
+ && handler_op->protocol_type_ == SOCK_STREAM
+ && !boost::is_same<MutableBufferSequence, null_buffers>::value)
       {
         ec = boost::asio::error::eof;
       }
@@ -1181,8 +1349,19 @@
       op_type* handler_op(static_cast<op_type*>(op));
       typedef handler_alloc_traits<Handler, op_type> alloc_traits;
       handler_ptr<alloc_traits> ptr(handler_op->handler_, handler_op);
+
+ // A sub-object of the handler may be the true owner of the memory
+ // associated with the handler. Consequently, a local copy of the handler
+ // is required to ensure that any owning sub-object remains valid until
+ // after we have deallocated the memory here.
+ Handler handler(handler_op->handler_);
+ (void)handler;
+
+ // Free the memory associated with the handler.
+ ptr.reset();
     }
 
+ int protocol_type_;
     boost::asio::io_service::work work_;
     weak_cancel_token_type cancel_token_;
     MutableBufferSequence buffers_;
@@ -1215,8 +1394,9 @@
     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, iocp_service_,
- impl.cancel_token_, buffers, handler);
+ int protocol_type = impl.protocol_.type();
+ handler_ptr<alloc_traits> ptr(raw_ptr, protocol_type,
+ iocp_service_, impl.cancel_token_, buffers, handler);
 
     // Copy buffers into WSABUF array.
     ::WSABUF bufs[max_buffers];
@@ -1262,6 +1442,85 @@
     }
   }
 
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive(implementation_type& impl, const null_buffers& buffers,
+ socket_base::message_flags flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else if (impl.protocol_.type() == SOCK_STREAM)
+ {
+ // For stream sockets on Windows, we may issue a 0-byte overlapped
+ // WSARecv to wait until there is data available on the socket.
+
+#if defined(BOOST_ASIO_ENABLE_CANCELIO)
+ // Update the ID of the thread from which cancellation is safe.
+ if (impl.safe_cancellation_thread_id_ == 0)
+ impl.safe_cancellation_thread_id_ = ::GetCurrentThreadId();
+ else if (impl.safe_cancellation_thread_id_ != ::GetCurrentThreadId())
+ impl.safe_cancellation_thread_id_ = ~DWORD(0);
+#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
+
+ // Allocate and construct an operation to wrap the handler.
+ typedef receive_operation<null_buffers, Handler> value_type;
+ typedef handler_alloc_traits<Handler, value_type> alloc_traits;
+ raw_handler_ptr<alloc_traits> raw_ptr(handler);
+ int protocol_type = impl.protocol_.type();
+ handler_ptr<alloc_traits> ptr(raw_ptr, protocol_type,
+ iocp_service_, impl.cancel_token_, buffers, handler);
+
+ // Issue a receive operation with an empty buffer.
+ ::WSABUF buf = { 0, 0 };
+ DWORD bytes_transferred = 0;
+ DWORD recv_flags = flags;
+ int result = ::WSARecv(impl.socket_, &buf, 1,
+ &bytes_transferred, &recv_flags, ptr.get(), 0);
+ DWORD last_error = ::WSAGetLastError();
+ if (result != 0 && last_error != WSA_IO_PENDING)
+ {
+ boost::asio::io_service::work work(this->get_io_service());
+ ptr.reset();
+ boost::system::error_code ec(last_error,
+ boost::asio::error::get_system_category());
+ iocp_service_.post(bind_handler(handler, ec, bytes_transferred));
+ }
+ else
+ {
+ ptr.release();
+ }
+ }
+ else
+ {
+ // Check if the reactor was already obtained from the io_service.
+ reactor_type* reactor = static_cast<reactor_type*>(
+ interlocked_compare_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), 0, 0));
+ if (!reactor)
+ {
+ reactor = &(boost::asio::use_service<reactor_type>(
+ this->get_io_service()));
+ interlocked_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), reactor);
+ }
+
+ if (flags & socket_base::message_out_of_band)
+ {
+ reactor->start_except_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler));
+ }
+ else
+ {
+ reactor->start_read_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+ }
+
   // Receive a datagram with the endpoint of the sender. Returns the number of
   // bytes received.
   template <typename MutableBufferSequence>
@@ -1303,7 +1562,7 @@
           boost::asio::error::get_system_category());
       return 0;
     }
- if (bytes_transferred == 0)
+ if (bytes_transferred == 0 && impl.protocol_.type() == SOCK_STREAM)
     {
       ec = boost::asio::error::eof;
       return 0;
@@ -1315,12 +1574,32 @@
     return bytes_transferred;
   }
 
+ // Wait until data can be received without blocking.
+ size_t receive_from(implementation_type& impl,
+ const null_buffers&, endpoint_type& sender_endpoint,
+ socket_base::message_flags, boost::system::error_code& ec)
+ {
+ if (!is_open(impl))
+ {
+ ec = boost::asio::error::bad_descriptor;
+ return 0;
+ }
+
+ // Wait for socket to become ready.
+ socket_ops::poll_read(impl.socket_, ec);
+
+ // Reset endpoint since it can be given no sensible value at this time.
+ sender_endpoint = endpoint_type();
+
+ return 0;
+ }
+
   template <typename MutableBufferSequence, typename Handler>
   class receive_from_operation
     : public operation
   {
   public:
- receive_from_operation(win_iocp_io_service& io_service,
+ receive_from_operation(int protocol_type, win_iocp_io_service& io_service,
         endpoint_type& endpoint, const MutableBufferSequence& buffers,
         Handler handler)
       : operation(io_service,
@@ -1328,6 +1607,7 @@
             MutableBufferSequence, Handler>::do_completion_impl,
           &receive_from_operation<
             MutableBufferSequence, Handler>::destroy_impl),
+ protocol_type_(protocol_type),
         endpoint_(endpoint),
         endpoint_size_(static_cast<int>(endpoint.capacity())),
         work_(io_service.get_io_service()),
@@ -1374,7 +1654,8 @@
       }
 
       // Check for connection closed.
- if (!ec && bytes_transferred == 0)
+ if (!ec && bytes_transferred == 0
+ && handler_op->protocol_type_ == SOCK_STREAM)
       {
         ec = boost::asio::error::eof;
       }
@@ -1401,8 +1682,19 @@
       op_type* handler_op(static_cast<op_type*>(op));
       typedef handler_alloc_traits<Handler, op_type> alloc_traits;
       handler_ptr<alloc_traits> ptr(handler_op->handler_, handler_op);
+
+ // A sub-object of the handler may be the true owner of the memory
+ // associated with the handler. Consequently, a local copy of the handler
+ // is required to ensure that any owning sub-object remains valid until
+ // after we have deallocated the memory here.
+ Handler handler(handler_op->handler_);
+ (void)handler;
+
+ // Free the memory associated with the handler.
+ ptr.reset();
     }
 
+ int protocol_type_;
     endpoint_type& endpoint_;
     int endpoint_size_;
     boost::asio::io_service::work work_;
@@ -1437,8 +1729,9 @@
     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, iocp_service_,
- sender_endp, buffers, handler);
+ int protocol_type = impl.protocol_.type();
+ handler_ptr<alloc_traits> ptr(raw_ptr, protocol_type,
+ iocp_service_, sender_endp, buffers, handler);
 
     // Copy buffers into WSABUF array.
     ::WSABUF bufs[max_buffers];
@@ -1473,6 +1766,48 @@
     }
   }
 
+ // Wait until data can be received without blocking.
+ template <typename Handler>
+ void async_receive_from(implementation_type& impl,
+ const null_buffers&, endpoint_type& sender_endpoint,
+ socket_base::message_flags flags, Handler handler)
+ {
+ if (!is_open(impl))
+ {
+ this->get_io_service().post(bind_handler(handler,
+ boost::asio::error::bad_descriptor, 0));
+ }
+ else
+ {
+ // Check if the reactor was already obtained from the io_service.
+ reactor_type* reactor = static_cast<reactor_type*>(
+ interlocked_compare_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), 0, 0));
+ if (!reactor)
+ {
+ reactor = &(boost::asio::use_service<reactor_type>(
+ this->get_io_service()));
+ interlocked_exchange_pointer(
+ reinterpret_cast<void**>(&reactor_), reactor);
+ }
+
+ // Reset endpoint since it can be given no sensible value at this time.
+ sender_endpoint = endpoint_type();
+
+ if (flags & socket_base::message_out_of_band)
+ {
+ reactor->start_except_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler));
+ }
+ else
+ {
+ reactor->start_read_op(impl.socket_, impl.reactor_data_,
+ null_buffers_operation<Handler>(this->get_io_service(), handler),
+ false);
+ }
+ }
+ }
+
   // Accept a new connection.
   template <typename Socket>
   boost::system::error_code accept(implementation_type& impl, Socket& peer,
@@ -1493,7 +1828,6 @@
 
     for (;;)
     {
- boost::system::error_code ec;
       socket_holder new_socket;
       std::size_t addr_len = 0;
       if (peer_endpoint)
@@ -1571,8 +1905,7 @@
     }
 
   private:
- static void do_completion_impl(operation* op,
- DWORD last_error, size_t bytes_transferred)
+ static void do_completion_impl(operation* op, DWORD last_error, size_t)
     {
       // Take ownership of the operation object.
       typedef accept_operation<Socket, Handler> op_type;
@@ -1715,6 +2048,16 @@
       op_type* handler_op(static_cast<op_type*>(op));
       typedef handler_alloc_traits<Handler, op_type> alloc_traits;
       handler_ptr<alloc_traits> ptr(handler_op->handler_, handler_op);
+
+ // A sub-object of the handler may be the true owner of the memory
+ // associated with the handler. Consequently, a local copy of the handler
+ // is required to ensure that any owning sub-object remains valid until
+ // after we have deallocated the memory here.
+ Handler handler(handler_op->handler_);
+ (void)handler;
+
+ // Free the memory associated with the handler.
+ ptr.reset();
     }
 
     win_iocp_io_service& io_service_;
@@ -1833,58 +2176,38 @@
   }
 
   template <typename Handler>
- class connect_handler
+ class connect_operation
   {
   public:
- connect_handler(socket_type socket, bool user_set_non_blocking,
- boost::shared_ptr<bool> completed,
- boost::asio::io_service& io_service,
- reactor_type& reactor, Handler handler)
+ connect_operation(socket_type socket, bool user_set_non_blocking,
+ boost::asio::io_service& io_service, Handler handler)
       : socket_(socket),
         user_set_non_blocking_(user_set_non_blocking),
- completed_(completed),
         io_service_(io_service),
- reactor_(reactor),
         work_(io_service),
         handler_(handler)
     {
     }
 
- bool operator()(const boost::system::error_code& result)
+ bool perform(boost::system::error_code& ec,
+ std::size_t& bytes_transferred)
     {
- // Check whether a handler has already been called for the connection.
- // If it has, then we don't want to do anything in this handler.
- if (*completed_)
- return true;
-
- // Cancel the other reactor operation for the connection.
- *completed_ = true;
- reactor_.enqueue_cancel_ops_unlocked(socket_);
-
       // Check whether the operation was successful.
- if (result)
- {
- io_service_.post(bind_handler(handler_, result));
+ if (ec)
         return true;
- }
 
       // Get the error code from the connect operation.
       int connect_error = 0;
       size_t connect_error_len = sizeof(connect_error);
- boost::system::error_code ec;
       if (socket_ops::getsockopt(socket_, SOL_SOCKET, SO_ERROR,
             &connect_error, &connect_error_len, ec) == socket_error_retval)
- {
- io_service_.post(bind_handler(handler_, ec));
         return true;
- }
 
       // If connection failed then post the handler with the error code.
       if (connect_error)
       {
         ec = boost::system::error_code(connect_error,
             boost::asio::error::get_system_category());
- io_service_.post(bind_handler(handler_, ec));
         return true;
       }
 
@@ -1893,24 +2216,23 @@
       {
         ioctl_arg_type non_blocking = 0;
         if (socket_ops::ioctl(socket_, FIONBIO, &non_blocking, ec))
- {
- io_service_.post(bind_handler(handler_, ec));
           return true;
- }
       }
 
       // Post the result of the successful connection operation.
       ec = boost::system::error_code();
- io_service_.post(bind_handler(handler_, ec));
       return true;
     }
 
+ void complete(const boost::system::error_code& ec, std::size_t)
+ {
+ io_service_.post(bind_handler(handler_, ec));
+ }
+
   private:
     socket_type socket_;
     bool user_set_non_blocking_;
- boost::shared_ptr<bool> completed_;
     boost::asio::io_service& io_service_;
- reactor_type& reactor_;
     boost::asio::io_service::work work_;
     Handler handler_;
   };
@@ -1978,11 +2300,11 @@
       // The connection is happening in the background, and we need to wait
       // until the socket becomes writeable.
       boost::shared_ptr<bool> completed(new bool(false));
- reactor->start_write_and_except_ops(impl.socket_,
- connect_handler<Handler>(
+ reactor->start_connect_op(impl.socket_, impl.reactor_data_,
+ connect_operation<Handler>(
             impl.socket_,
             (impl.flags_ & implementation_type::user_set_non_blocking) != 0,
- completed, this->get_io_service(), *reactor, handler));
+ this->get_io_service(), handler));
     }
     else
     {
@@ -2013,7 +2335,7 @@
             interlocked_compare_exchange_pointer(
               reinterpret_cast<void**>(&reactor_), 0, 0));
       if (reactor)
- reactor->close_descriptor(impl.socket_);
+ reactor->close_descriptor(impl.socket_, impl.reactor_data_);
 
       // The socket destructor must not block. If the user has changed the
       // linger option to block in the foreground, we will change it back to the

Modified: branches/CMake/release/boost/asio/detail/win_thread.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/win_thread.hpp (original)
+++ branches/CMake/release/boost/asio/detail/win_thread.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -44,17 +44,53 @@
   : private noncopyable
 {
 public:
+ // The purpose of the thread.
+ enum purpose { internal, external };
+
   // Constructor.
   template <typename Function>
- win_thread(Function f)
+ win_thread(Function f, purpose p = internal)
+ : exit_event_(0)
   {
     std::auto_ptr<func_base> arg(new func<Function>(f));
+
+ ::HANDLE entry_event = 0;
+ if (p == internal)
+ {
+ arg->entry_event_ = entry_event = ::CreateEvent(0, true, false, 0);
+ if (!entry_event)
+ {
+ DWORD last_error = ::GetLastError();
+ boost::system::system_error e(
+ boost::system::error_code(last_error,
+ boost::asio::error::get_system_category()),
+ "thread.entry_event");
+ boost::throw_exception(e);
+ }
+
+ arg->exit_event_ = exit_event_ = ::CreateEvent(0, true, false, 0);
+ if (!exit_event_)
+ {
+ DWORD last_error = ::GetLastError();
+ ::CloseHandle(entry_event);
+ boost::system::system_error e(
+ boost::system::error_code(last_error,
+ boost::asio::error::get_system_category()),
+ "thread.exit_event");
+ boost::throw_exception(e);
+ }
+ }
+
     unsigned int thread_id = 0;
     thread_ = reinterpret_cast<HANDLE>(::_beginthreadex(0, 0,
           win_thread_function, arg.get(), 0, &thread_id));
     if (!thread_)
     {
       DWORD last_error = ::GetLastError();
+ if (entry_event)
+ ::CloseHandle(entry_event);
+ if (exit_event_)
+ ::CloseHandle(exit_event_);
       boost::system::system_error e(
           boost::system::error_code(last_error,
             boost::asio::error::get_system_category()),
@@ -62,18 +98,36 @@
       boost::throw_exception(e);
     }
     arg.release();
+
+ if (entry_event)
+ {
+ ::WaitForSingleObject(entry_event, INFINITE);
+ ::CloseHandle(entry_event);
+ }
   }
 
   // Destructor.
   ~win_thread()
   {
     ::CloseHandle(thread_);
+
+ // The exit_event_ handle is deliberately allowed to leak here since it
+ // is an error for the owner of an internal thread not to join() it.
   }
 
   // Wait for the thread to exit.
   void join()
   {
- ::WaitForSingleObject(thread_, INFINITE);
+ if (exit_event_)
+ {
+ ::WaitForSingleObject(exit_event_, INFINITE);
+ ::CloseHandle(exit_event_);
+ ::TerminateThread(thread_, 0);
+ }
+ else
+ {
+ ::WaitForSingleObject(thread_, INFINITE);
+ }
   }
 
 private:
@@ -84,6 +138,8 @@
   public:
     virtual ~func_base() {}
     virtual void run() = 0;
+ ::HANDLE entry_event_;
+ ::HANDLE exit_event_;
   };
 
   template <typename Function>
@@ -106,13 +162,26 @@
   };
 
   ::HANDLE thread_;
+ ::HANDLE exit_event_;
 };
 
 inline unsigned int __stdcall win_thread_function(void* arg)
 {
   std::auto_ptr<win_thread::func_base> func(
       static_cast<win_thread::func_base*>(arg));
+
+ if (func->entry_event_)
+ ::SetEvent(func->entry_event_);
+
   func->run();
+
+ if (HANDLE exit_event = func->exit_event_)
+ {
+ func.reset();
+ ::SetEvent(exit_event);
+ ::Sleep(INFINITE);
+ }
+
   return 0;
 }
 

Modified: branches/CMake/release/boost/asio/detail/wince_thread.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/wince_thread.hpp (original)
+++ branches/CMake/release/boost/asio/detail/wince_thread.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -43,9 +43,12 @@
   : private noncopyable
 {
 public:
+ // The purpose of the thread.
+ enum purpose { internal, external };
+
   // Constructor.
   template <typename Function>
- wince_thread(Function f)
+ wince_thread(Function f, purpose = internal)
   {
     std::auto_ptr<func_base> arg(new func<Function>(f));
     DWORD thread_id = 0;

Modified: branches/CMake/release/boost/asio/detail/wrapped_handler.hpp
==============================================================================
--- branches/CMake/release/boost/asio/detail/wrapped_handler.hpp (original)
+++ branches/CMake/release/boost/asio/detail/wrapped_handler.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -128,22 +128,6 @@
   Handler handler_;
 };
 
-template <typename Dispatcher, typename Handler>
-inline void* asio_handler_allocate(std::size_t size,
- wrapped_handler<Dispatcher, Handler>* this_handler)
-{
- return boost_asio_handler_alloc_helpers::allocate(
- size, &this_handler->handler_);
-}
-
-template <typename Dispatcher, typename Handler>
-inline void asio_handler_deallocate(void* pointer, std::size_t size,
- wrapped_handler<Dispatcher, Handler>* this_handler)
-{
- boost_asio_handler_alloc_helpers::deallocate(
- pointer, size, &this_handler->handler_);
-}
-
 template <typename Handler, typename Context>
 class rewrapped_handler
 {
@@ -169,6 +153,22 @@
   Context context_;
 };
 
+template <typename Dispatcher, typename Handler>
+inline void* asio_handler_allocate(std::size_t size,
+ wrapped_handler<Dispatcher, Handler>* this_handler)
+{
+ return boost_asio_handler_alloc_helpers::allocate(
+ size, &this_handler->handler_);
+}
+
+template <typename Dispatcher, typename Handler>
+inline void asio_handler_deallocate(void* pointer, std::size_t size,
+ wrapped_handler<Dispatcher, Handler>* this_handler)
+{
+ boost_asio_handler_alloc_helpers::deallocate(
+ pointer, size, &this_handler->handler_);
+}
+
 template <typename Function, typename Dispatcher, typename Handler>
 inline void asio_handler_invoke(const Function& function,
     wrapped_handler<Dispatcher, Handler>* this_handler)
@@ -178,6 +178,22 @@
         function, this_handler->handler_));
 }
 
+template <typename Handler, typename Context>
+inline void* asio_handler_allocate(std::size_t size,
+ rewrapped_handler<Handler, Context>* this_handler)
+{
+ return boost_asio_handler_alloc_helpers::allocate(
+ size, &this_handler->context_);
+}
+
+template <typename Handler, typename Context>
+inline void asio_handler_deallocate(void* pointer, std::size_t size,
+ rewrapped_handler<Handler, Context>* this_handler)
+{
+ boost_asio_handler_alloc_helpers::deallocate(
+ pointer, size, &this_handler->context_);
+}
+
 template <typename Function, typename Handler, typename Context>
 inline void asio_handler_invoke(const Function& function,
     rewrapped_handler<Handler, Context>* this_handler)

Modified: branches/CMake/release/boost/asio/error.hpp
==============================================================================
--- branches/CMake/release/boost/asio/error.hpp (original)
+++ branches/CMake/release/boost/asio/error.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -106,6 +106,9 @@
   /// Message too long.
   message_size = BOOST_ASIO_SOCKET_ERROR(EMSGSIZE),
 
+ /// The name was too long.
+ name_too_long = BOOST_ASIO_SOCKET_ERROR(ENAMETOOLONG),
+
   /// Network is down.
   network_down = BOOST_ASIO_SOCKET_ERROR(ENETDOWN),
 

Modified: branches/CMake/release/boost/asio/impl/read_until.ipp
==============================================================================
--- branches/CMake/release/boost/asio/impl/read_until.ipp (original)
+++ branches/CMake/release/boost/asio/impl/read_until.ipp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -25,8 +25,8 @@
 #include <boost/asio/detail/pop_options.hpp>
 
 #include <boost/asio/buffer.hpp>
+#include <boost/asio/buffers_iterator.hpp>
 #include <boost/asio/detail/bind_handler.hpp>
-#include <boost/asio/detail/const_buffers_iterator.hpp>
 #include <boost/asio/detail/handler_alloc_helpers.hpp>
 #include <boost/asio/detail/handler_invoke_helpers.hpp>
 #include <boost/asio/detail/throw_error.hpp>
@@ -55,24 +55,24 @@
     // Determine the range of the data to be searched.
     typedef typename boost::asio::basic_streambuf<
       Allocator>::const_buffers_type const_buffers_type;
- typedef boost::asio::detail::const_buffers_iterator<
- const_buffers_type> iterator;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
     const_buffers_type buffers = b.data();
- iterator begin(buffers, next_search_start);
- iterator end(buffers, (std::numeric_limits<std::size_t>::max)());
+ iterator begin = iterator::begin(buffers);
+ iterator start = begin + next_search_start;
+ iterator end = iterator::end(buffers);
 
     // Look for a match.
- iterator iter = std::find(begin, end, delim);
+ iterator iter = std::find(start, end, delim);
     if (iter != end)
     {
       // Found a match. We're done.
       ec = boost::system::error_code();
- return iter.position() + 1;
+ return iter - begin + 1;
     }
     else
     {
       // No match. Next search can start with the new data.
- next_search_start = end.position();
+ next_search_start = end - begin;
     }
 
     // Check if buffer is full.
@@ -147,33 +147,33 @@
     // Determine the range of the data to be searched.
     typedef typename boost::asio::basic_streambuf<
       Allocator>::const_buffers_type const_buffers_type;
- typedef boost::asio::detail::const_buffers_iterator<
- const_buffers_type> iterator;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
     const_buffers_type buffers = b.data();
- iterator begin(buffers, next_search_start);
- iterator end(buffers, (std::numeric_limits<std::size_t>::max)());
+ iterator begin = iterator::begin(buffers);
+ iterator start = begin + next_search_start;
+ iterator end = iterator::end(buffers);
 
     // Look for a match.
     std::pair<iterator, bool> result = boost::asio::detail::partial_search(
- begin, end, delim.begin(), delim.end());
+ start, end, delim.begin(), delim.end());
     if (result.first != end)
     {
       if (result.second)
       {
         // Full match. We're done.
         ec = boost::system::error_code();
- return result.first.position() + delim.length();
+ return result.first - begin + delim.length();
       }
       else
       {
         // Partial match. Next search needs to start from beginning of match.
- next_search_start = result.first.position();
+ next_search_start = result.first - begin;
       }
     }
     else
     {
       // No match. Next search can start with the new data.
- next_search_start = end.position();
+ next_search_start = end - begin;
     }
 
     // Check if buffer is full.
@@ -213,33 +213,33 @@
     // Determine the range of the data to be searched.
     typedef typename boost::asio::basic_streambuf<
       Allocator>::const_buffers_type const_buffers_type;
- typedef boost::asio::detail::const_buffers_iterator<
- const_buffers_type> iterator;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
     const_buffers_type buffers = b.data();
- iterator begin(buffers, next_search_start);
- iterator end(buffers, (std::numeric_limits<std::size_t>::max)());
+ iterator begin = iterator::begin(buffers);
+ iterator start = begin + next_search_start;
+ iterator end = iterator::end(buffers);
 
     // Look for a match.
     boost::match_results<iterator> match_results;
- if (boost::regex_search(begin, end, match_results, expr,
+ if (boost::regex_search(start, end, match_results, expr,
           boost::match_default | boost::match_partial))
     {
       if (match_results[0].matched)
       {
         // Full match. We're done.
         ec = boost::system::error_code();
- return match_results[0].second.position();
+ return match_results[0].second - begin;
       }
       else
       {
         // Partial match. Next search needs to start from beginning of match.
- next_search_start = match_results[0].first.position();
+ next_search_start = match_results[0].first - begin;
       }
     }
     else
     {
       // No match. Next search can start with the new data.
- next_search_start = end.position();
+ next_search_start = end - begin;
     }
 
     // Check if buffer is full.
@@ -258,6 +258,73 @@
   }
 }
 
+template <typename SyncReadStream, typename Allocator, typename MatchCondition>
+std::size_t read_until(SyncReadStream& s,
+ boost::asio::basic_streambuf<Allocator>& b,
+ MatchCondition match_condition, boost::system::error_code& ec,
+ typename boost::enable_if<is_match_condition<MatchCondition> >::type*)
+{
+ std::size_t next_search_start = 0;
+ for (;;)
+ {
+ // Determine the range of the data to be searched.
+ typedef typename boost::asio::basic_streambuf<
+ Allocator>::const_buffers_type const_buffers_type;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+ const_buffers_type buffers = b.data();
+ iterator begin = iterator::begin(buffers);
+ iterator start = begin + next_search_start;
+ iterator end = iterator::end(buffers);
+
+ // Look for a match.
+ std::pair<iterator, bool> result = match_condition(start, end);
+ if (result.first != end)
+ {
+ if (result.second)
+ {
+ // Full match. We're done.
+ ec = boost::system::error_code();
+ return result.first - begin;
+ }
+ else
+ {
+ // Partial match. Next search needs to start from beginning of match.
+ next_search_start = result.first - begin;
+ }
+ }
+ else
+ {
+ // No match. Next search can start with the new data.
+ next_search_start = end - begin;
+ }
+
+ // Check if buffer is full.
+ if (b.size() == b.max_size())
+ {
+ ec = error::not_found;
+ return 0;
+ }
+
+ // Need more data.
+ std::size_t bytes_available =
+ std::min<std::size_t>(512, b.max_size() - b.size());
+ b.commit(s.read_some(b.prepare(bytes_available), ec));
+ if (ec)
+ return 0;
+ }
+}
+
+template <typename SyncReadStream, typename Allocator, typename MatchCondition>
+inline std::size_t read_until(SyncReadStream& s,
+ boost::asio::basic_streambuf<Allocator>& b, MatchCondition match_condition,
+ typename boost::enable_if<is_match_condition<MatchCondition> >::type*)
+{
+ boost::system::error_code ec;
+ std::size_t bytes_transferred = read_until(s, b, match_condition, ec);
+ boost::asio::detail::throw_error(ec);
+ return bytes_transferred;
+}
+
 namespace detail
 {
   template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
@@ -292,18 +359,18 @@
       // Determine the range of the data to be searched.
       typedef typename boost::asio::basic_streambuf<
         Allocator>::const_buffers_type const_buffers_type;
- typedef boost::asio::detail::const_buffers_iterator<
- const_buffers_type> iterator;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
       const_buffers_type buffers = streambuf_.data();
- iterator begin(buffers, next_search_start_);
- iterator end(buffers, (std::numeric_limits<std::size_t>::max)());
+ iterator begin = iterator::begin(buffers);
+ iterator start = begin + next_search_start_;
+ iterator end = iterator::end(buffers);
 
       // Look for a match.
- iterator iter = std::find(begin, end, delim_);
+ iterator iter = std::find(start, end, delim_);
       if (iter != end)
       {
         // Found a match. We're done.
- std::size_t bytes = iter.position() + 1;
+ std::size_t bytes = iter - begin + 1;
         handler_(ec, bytes);
         return;
       }
@@ -318,7 +385,7 @@
       }
 
       // Next search can start with the new data.
- next_search_start_ = end.position();
+ next_search_start_ = end - begin;
 
       // Start a new asynchronous read operation to obtain more data.
       std::size_t bytes_available =
@@ -370,11 +437,10 @@
   // Determine the range of the data to be searched.
   typedef typename boost::asio::basic_streambuf<
     Allocator>::const_buffers_type const_buffers_type;
- typedef boost::asio::detail::const_buffers_iterator<
- const_buffers_type> iterator;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
   const_buffers_type buffers = b.data();
- iterator begin(buffers, 0);
- iterator end(buffers, (std::numeric_limits<std::size_t>::max)());
+ iterator begin = iterator::begin(buffers);
+ iterator end = iterator::end(buffers);
 
   // Look for a match.
   iterator iter = std::find(begin, end, delim);
@@ -382,7 +448,7 @@
   {
     // Found a match. We're done.
     boost::system::error_code ec;
- std::size_t bytes = iter.position() + 1;
+ std::size_t bytes = iter - begin + 1;
     s.io_service().post(detail::bind_handler(handler, ec, bytes));
     return;
   }
@@ -400,7 +466,7 @@
     std::min<std::size_t>(512, b.max_size() - b.size());
   s.async_read_some(b.prepare(bytes_available),
       detail::read_until_delim_handler<AsyncReadStream, Allocator, ReadHandler>(
- s, b, delim, end.position(), handler));
+ s, b, delim, end - begin, handler));
 }
 
 namespace detail
@@ -438,34 +504,34 @@
       // Determine the range of the data to be searched.
       typedef typename boost::asio::basic_streambuf<
         Allocator>::const_buffers_type const_buffers_type;
- typedef boost::asio::detail::const_buffers_iterator<
- const_buffers_type> iterator;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
       const_buffers_type buffers = streambuf_.data();
- iterator begin(buffers, next_search_start_);
- iterator end(buffers, (std::numeric_limits<std::size_t>::max)());
+ iterator begin = iterator::begin(buffers);
+ iterator start = begin + next_search_start_;
+ iterator end = iterator::end(buffers);
 
       // Look for a match.
       std::pair<iterator, bool> result = boost::asio::detail::partial_search(
- begin, end, delim_.begin(), delim_.end());
+ start, end, delim_.begin(), delim_.end());
       if (result.first != end)
       {
         if (result.second)
         {
           // Full match. We're done.
- std::size_t bytes = result.first.position() + delim_.length();
+ std::size_t bytes = result.first - begin + delim_.length();
           handler_(ec, bytes);
           return;
         }
         else
         {
           // Partial match. Next search needs to start from beginning of match.
- next_search_start_ = result.first.position();
+ next_search_start_ = result.first - begin;
         }
       }
       else
       {
         // No match. Next search can start with the new data.
- next_search_start_ = end.position();
+ next_search_start_ = end - begin;
       }
 
       // Check if buffer is full.
@@ -528,11 +594,10 @@
   // Determine the range of the data to be searched.
   typedef typename boost::asio::basic_streambuf<
     Allocator>::const_buffers_type const_buffers_type;
- typedef boost::asio::detail::const_buffers_iterator<
- const_buffers_type> iterator;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
   const_buffers_type buffers = b.data();
- iterator begin(buffers, 0);
- iterator end(buffers, (std::numeric_limits<std::size_t>::max)());
+ iterator begin = iterator::begin(buffers);
+ iterator end = iterator::end(buffers);
 
   // Look for a match.
   std::size_t next_search_start;
@@ -544,20 +609,20 @@
     {
       // Full match. We're done.
       boost::system::error_code ec;
- std::size_t bytes = result.first.position() + delim.length();
+ std::size_t bytes = result.first - begin + delim.length();
       s.io_service().post(detail::bind_handler(handler, ec, bytes));
       return;
     }
     else
     {
       // Partial match. Next search needs to start from beginning of match.
- next_search_start = result.first.position();
+ next_search_start = result.first - begin;
     }
   }
   else
   {
     // No match. Next search can start with the new data.
- next_search_start = end.position();
+ next_search_start = end - begin;
   }
 
   // Check if buffer is full.
@@ -612,34 +677,34 @@
       // Determine the range of the data to be searched.
       typedef typename boost::asio::basic_streambuf<
         Allocator>::const_buffers_type const_buffers_type;
- typedef boost::asio::detail::const_buffers_iterator<
- const_buffers_type> iterator;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
       const_buffers_type buffers = streambuf_.data();
- iterator begin(buffers, next_search_start_);
- iterator end(buffers, (std::numeric_limits<std::size_t>::max)());
+ iterator begin = iterator::begin(buffers);
+ iterator start = begin + next_search_start_;
+ iterator end = iterator::end(buffers);
 
       // Look for a match.
       boost::match_results<iterator> match_results;
- if (boost::regex_search(begin, end, match_results, expr_,
+ if (boost::regex_search(start, end, match_results, expr_,
             boost::match_default | boost::match_partial))
       {
         if (match_results[0].matched)
         {
           // Full match. We're done.
- std::size_t bytes = match_results[0].second.position();
+ std::size_t bytes = match_results[0].second - begin;
           handler_(ec, bytes);
           return;
         }
         else
         {
           // Partial match. Next search needs to start from beginning of match.
- next_search_start_ = match_results[0].first.position();
+ next_search_start_ = match_results[0].first - begin;
         }
       }
       else
       {
         // No match. Next search can start with the new data.
- next_search_start_ = end.position();
+ next_search_start_ = end - begin;
       }
 
       // Check if buffer is full.
@@ -702,11 +767,10 @@
   // Determine the range of the data to be searched.
   typedef typename boost::asio::basic_streambuf<
     Allocator>::const_buffers_type const_buffers_type;
- typedef boost::asio::detail::const_buffers_iterator<
- const_buffers_type> iterator;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
   const_buffers_type buffers = b.data();
- iterator begin(buffers, 0);
- iterator end(buffers, (std::numeric_limits<std::size_t>::max)());
+ iterator begin = iterator::begin(buffers);
+ iterator end = iterator::end(buffers);
 
   // Look for a match.
   std::size_t next_search_start;
@@ -718,20 +782,20 @@
     {
       // Full match. We're done.
       boost::system::error_code ec;
- std::size_t bytes = match_results[0].second.position();
+ std::size_t bytes = match_results[0].second - begin;
       s.io_service().post(detail::bind_handler(handler, ec, bytes));
       return;
     }
     else
     {
       // Partial match. Next search needs to start from beginning of match.
- next_search_start = match_results[0].first.position();
+ next_search_start = match_results[0].first - begin;
     }
   }
   else
   {
     // No match. Next search can start with the new data.
- next_search_start = end.position();
+ next_search_start = end - begin;
   }
 
   // Check if buffer is full.
@@ -750,6 +814,182 @@
         s, b, expr, next_search_start, handler));
 }
 
+namespace detail
+{
+ template <typename AsyncReadStream, typename Allocator,
+ typename MatchCondition, typename ReadHandler>
+ class read_until_match_handler
+ {
+ public:
+ read_until_match_handler(AsyncReadStream& stream,
+ boost::asio::basic_streambuf<Allocator>& streambuf,
+ MatchCondition match_condition, std::size_t next_search_start,
+ ReadHandler handler)
+ : stream_(stream),
+ streambuf_(streambuf),
+ match_condition_(match_condition),
+ next_search_start_(next_search_start),
+ handler_(handler)
+ {
+ }
+
+ void operator()(const boost::system::error_code& ec,
+ std::size_t bytes_transferred)
+ {
+ // Check for errors.
+ if (ec)
+ {
+ std::size_t bytes = 0;
+ handler_(ec, bytes);
+ return;
+ }
+
+ // Commit received data to streambuf's get area.
+ streambuf_.commit(bytes_transferred);
+
+ // Determine the range of the data to be searched.
+ typedef typename boost::asio::basic_streambuf<
+ Allocator>::const_buffers_type const_buffers_type;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+ const_buffers_type buffers = streambuf_.data();
+ iterator begin = iterator::begin(buffers);
+ iterator start = begin + next_search_start_;
+ iterator end = iterator::end(buffers);
+
+ // Look for a match.
+ std::pair<iterator, bool> result = match_condition_(start, end);
+ if (result.first != end)
+ {
+ if (result.second)
+ {
+ // Full match. We're done.
+ std::size_t bytes = result.first - begin;
+ handler_(ec, bytes);
+ return;
+ }
+ else
+ {
+ // Partial match. Next search needs to start from beginning of match.
+ next_search_start_ = result.first - begin;
+ }
+ }
+ else
+ {
+ // No match. Next search can start with the new data.
+ next_search_start_ = end - begin;
+ }
+
+ // Check if buffer is full.
+ if (streambuf_.size() == streambuf_.max_size())
+ {
+ std::size_t bytes = 0;
+ boost::system::error_code ec(error::not_found);
+ handler_(ec, bytes);
+ return;
+ }
+
+ // Start a new asynchronous read operation to obtain more data.
+ std::size_t bytes_available =
+ std::min<std::size_t>(512, streambuf_.max_size() - streambuf_.size());
+ stream_.async_read_some(streambuf_.prepare(bytes_available), *this);
+ }
+
+ //private:
+ AsyncReadStream& stream_;
+ boost::asio::basic_streambuf<Allocator>& streambuf_;
+ MatchCondition match_condition_;
+ std::size_t next_search_start_;
+ ReadHandler handler_;
+ };
+
+ template <typename AsyncReadStream, typename Allocator,
+ typename MatchCondition, typename ReadHandler>
+ inline void* asio_handler_allocate(std::size_t size,
+ read_until_match_handler<AsyncReadStream,
+ Allocator, MatchCondition, ReadHandler>* this_handler)
+ {
+ return boost_asio_handler_alloc_helpers::allocate(
+ size, &this_handler->handler_);
+ }
+
+ template <typename AsyncReadStream, typename Allocator,
+ typename MatchCondition, typename ReadHandler>
+ inline void asio_handler_deallocate(void* pointer, std::size_t size,
+ read_until_match_handler<AsyncReadStream,
+ Allocator, MatchCondition, ReadHandler>* this_handler)
+ {
+ boost_asio_handler_alloc_helpers::deallocate(
+ pointer, size, &this_handler->handler_);
+ }
+
+ template <typename Function, typename AsyncReadStream, typename Allocator,
+ typename MatchCondition, typename ReadHandler>
+ inline void asio_handler_invoke(const Function& function,
+ read_until_match_handler<AsyncReadStream,
+ Allocator, MatchCondition, ReadHandler>* this_handler)
+ {
+ boost_asio_handler_invoke_helpers::invoke(
+ function, &this_handler->handler_);
+ }
+} // namespace detail
+
+template <typename AsyncReadStream, typename Allocator,
+ typename MatchCondition, typename ReadHandler>
+void async_read_until(AsyncReadStream& s,
+ boost::asio::basic_streambuf<Allocator>& b,
+ MatchCondition match_condition, ReadHandler handler,
+ typename boost::enable_if<is_match_condition<MatchCondition> >::type*)
+{
+ // Determine the range of the data to be searched.
+ typedef typename boost::asio::basic_streambuf<
+ Allocator>::const_buffers_type const_buffers_type;
+ typedef boost::asio::buffers_iterator<const_buffers_type> iterator;
+ const_buffers_type buffers = b.data();
+ iterator begin = iterator::begin(buffers);
+ iterator end = iterator::end(buffers);
+
+ // Look for a match.
+ std::size_t next_search_start;
+ std::pair<iterator, bool> result = match_condition(begin, end);
+ if (result.first != end)
+ {
+ if (result.second)
+ {
+ // Full match. We're done.
+ boost::system::error_code ec;
+ std::size_t bytes = result.first - begin;
+ s.io_service().post(detail::bind_handler(handler, ec, bytes));
+ return;
+ }
+ else
+ {
+ // Partial match. Next search needs to start from beginning of match.
+ next_search_start = result.first - begin;
+ }
+ }
+ else
+ {
+ // No match. Next search can start with the new data.
+ next_search_start = end - begin;
+ }
+
+ // Check if buffer is full.
+ if (b.size() == b.max_size())
+ {
+ boost::system::error_code ec(error::not_found);
+ s.io_service().post(detail::bind_handler(handler, ec, 0));
+ return;
+ }
+
+ // Start a new asynchronous read operation to obtain more data.
+ std::size_t bytes_available =
+ std::min<std::size_t>(512, b.max_size() - b.size());
+ s.async_read_some(b.prepare(bytes_available),
+ detail::read_until_match_handler<
+ AsyncReadStream, Allocator, MatchCondition, ReadHandler>(
+ s, b, match_condition, next_search_start, handler));
+}
+
 } // namespace asio
 } // namespace boost
 

Modified: branches/CMake/release/boost/asio/read_until.hpp
==============================================================================
--- branches/CMake/release/boost/asio/read_until.hpp (original)
+++ branches/CMake/release/boost/asio/read_until.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -21,6 +21,9 @@
 #include <cstddef>
 #include <boost/config.hpp>
 #include <boost/regex.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <string>
 #include <boost/asio/detail/pop_options.hpp>
 
@@ -30,6 +33,36 @@
 namespace boost {
 namespace asio {
 
+namespace detail
+{
+ template <typename T>
+ struct has_result_type
+ {
+ struct big { char a[100]; };
+ template <typename U> static big helper(U, ...);
+ template <typename U> static char helper(U, typename U::result_type* = 0);
+ static const T& ref();
+ enum { value = (sizeof((helper)((ref)())) == 1) };
+ };
+} // namespace detail
+
+/// Type trait used to determine whether a type can be used as a match condition
+/// function with read_until and async_read_until.
+template <typename T>
+struct is_match_condition
+{
+#if defined(GENERATING_DOCUMENTATION)
+ /// The value member is true if the type may be used as a match condition.
+ static const bool value;
+#else
+ enum
+ {
+ value = boost::is_function<typename boost::remove_pointer<T>::type>::value
+ || detail::has_result_type<T>::value
+ };
+#endif
+};
+
 /**
  * @defgroup read_until boost::asio::read_until
  */
@@ -243,6 +276,158 @@
     boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
     boost::system::error_code& ec);
 
+/// Read data into a streambuf until a function object indicates a match.
+/**
+ * This function is used to read data into the specified streambuf until a
+ * user-defined match condition function object, when applied to the data
+ * contained in the streambuf, indicates a successful match. The call will
+ * block until one of the following conditions is true:
+ *
+ * @li The match condition function object returns a std::pair where the second
+ * element evaluates to true.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the match condition function object already indicates
+ * a match, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param match_condition The function object to be called to determine whether
+ * a match exists. The signature of the function object must be:
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
+ * @endcode
+ * where @c iterator represents the type:
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
+ * @endcode
+ * The iterator parameters @c begin and @c end define the range of bytes to be
+ * scanned to determine whether there is a match. The @c first member of the
+ * return value is an iterator marking one-past-the-end of the bytes that have
+ * been consumed by the match function. This iterator is used to calculate the
+ * @c begin parameter for any subsequent invocation of the match condition. The
+ * @c second member of the return value is true if a match has been found, false
+ * otherwise.
+ *
+ * @returns The number of bytes in the streambuf's get area that have been fully
+ * consumed by the match function.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @note The default implementation of the @c is_match_condition type trait
+ * evaluates to true for function pointers and function objects with a
+ * @c result_type typedef. It must be specialised for other user-defined
+ * function objects.
+ *
+ * @par Examples
+ * To read data into a streambuf until whitespace is encountered:
+ * @code typedef boost::asio::buffers_iterator<
+ * boost::asio::streambuf::const_buffers_type> iterator;
+ *
+ * std::pair<iterator, bool>
+ * match_whitespace(iterator begin, iterator end)
+ * {
+ * iterator i = begin;
+ * while (i != end)
+ * if (std::isspace(*i++))
+ * return std::make_pair(i, true);
+ * return std::make_pair(i, false);
+ * }
+ * ...
+ * boost::asio::streambuf b;
+ * boost::asio::read_until(s, b, match_whitespace);
+ * @endcode
+ *
+ * To read data into a streambuf until a matching character is found:
+ * @code class match_char
+ * {
+ * public:
+ * explicit match_char(char c) : c_(c) {}
+ *
+ * template <typename Iterator>
+ * std::pair<Iterator, bool> operator()(
+ * Iterator begin, Iterator end) const
+ * {
+ * Iterator i = begin;
+ * while (i != end)
+ * if (c_ == *i++)
+ * return std::make_pair(i, true);
+ * return std::make_pair(i, false);
+ * }
+ *
+ * private:
+ * char c_;
+ * };
+ *
+ * namespace asio {
+ * template <> struct is_match_condition<match_char>
+ * : public boost::true_type {};
+ * } // namespace asio
+ * ...
+ * boost::asio::streambuf b;
+ * boost::asio::read_until(s, b, match_char('a'));
+ * @endcode
+ */
+template <typename SyncReadStream, typename Allocator, typename MatchCondition>
+std::size_t read_until(SyncReadStream& s,
+ boost::asio::basic_streambuf<Allocator>& b, MatchCondition match_condition,
+ typename boost::enable_if<is_match_condition<MatchCondition> >::type* = 0);
+
+/// Read data into a streambuf until a function object indicates a match.
+/**
+ * This function is used to read data into the specified streambuf until a
+ * user-defined match condition function object, when applied to the data
+ * contained in the streambuf, indicates a successful match. The call will
+ * block until one of the following conditions is true:
+ *
+ * @li The match condition function object returns a std::pair where the second
+ * element evaluates to true.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * read_some function. If the match condition function object already indicates
+ * a match, the function returns immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the SyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param match_condition The function object to be called to determine whether
+ * a match exists. The signature of the function object must be:
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
+ * @endcode
+ * where @c iterator represents the type:
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
+ * @endcode
+ * The iterator parameters @c begin and @c end define the range of bytes to be
+ * scanned to determine whether there is a match. The @c first member of the
+ * return value is an iterator marking one-past-the-end of the bytes that have
+ * been consumed by the match function. This iterator is used to calculate the
+ * @c begin parameter for any subsequent invocation of the match condition. The
+ * @c second member of the return value is true if a match has been found, false
+ * otherwise.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes in the streambuf's get area that have been fully
+ * consumed by the match function. Returns 0 if an error occurred.
+ *
+ * @note The default implementation of the @c is_match_condition type trait
+ * evaluates to true for function pointers and function objects with a
+ * @c result_type typedef. It must be specialised for other user-defined
+ * function objects.
+ */
+template <typename SyncReadStream, typename Allocator, typename MatchCondition>
+std::size_t read_until(SyncReadStream& s,
+ boost::asio::basic_streambuf<Allocator>& b,
+ MatchCondition match_condition, boost::system::error_code& ec,
+ typename boost::enable_if<is_match_condition<MatchCondition> >::type* = 0);
+
 /*@}*/
 /**
 * @defgroup async_read_until boost::asio::async_read_until
@@ -442,6 +627,127 @@
     boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
     ReadHandler handler);
 
+/// Start an asynchronous operation to read data into a streambuf until a
+/// function object indicates a match.
+/**
+ * This function is used to asynchronously read data into the specified
+ * streambuf until a user-defined match condition function object, when applied
+ * to the data contained in the streambuf, indicates a successful match. The
+ * function call always returns immediately. The asynchronous operation will
+ * continue until one of the following conditions is true:
+ *
+ * @li The match condition function object returns a std::pair where the second
+ * element evaluates to true.
+ *
+ * @li An error occurred.
+ *
+ * This operation is implemented in terms of zero or more calls to the stream's
+ * async_read_some function. If the match condition function object already
+ * indicates a match, the operation completes immediately.
+ *
+ * @param s The stream from which the data is to be read. The type must support
+ * the AsyncReadStream concept.
+ *
+ * @param b A streambuf object into which the data will be read.
+ *
+ * @param match_condition The function object to be called to determine whether
+ * a match exists. The signature of the function object must be:
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
+ * @endcode
+ * where @c iterator represents the type:
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
+ * @endcode
+ * The iterator parameters @c begin and @c end define the range of bytes to be
+ * scanned to determine whether there is a match. The @c first member of the
+ * return value is an iterator marking one-past-the-end of the bytes that have
+ * been consumed by the match function. This iterator is used to calculate the
+ * @c begin parameter for any subsequent invocation of the match condition. The
+ * @c second member of the return value is true if a match has been found, false
+ * otherwise.
+ *
+ * @param handler The handler to be called when the read operation completes.
+ * Copies will be made of the handler as required. The function signature of the
+ * handler must be:
+ * @code void handler(
+ * // Result of operation.
+ * const boost::system::error_code& error,
+ *
+ * // The number of bytes in the streambuf's get
+ * // area that have been fully consumed by the
+ * // match function. O if an error occurred.
+ * std::size_t bytes_transferred
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation of
+ * the handler will be performed in a manner equivalent to using
+ * boost::asio::io_service::post().
+ *
+ * @note The default implementation of the @c is_match_condition type trait
+ * evaluates to true for function pointers and function objects with a
+ * @c result_type typedef. It must be specialised for other user-defined
+ * function objects.
+ *
+ * @par Examples
+ * To asynchronously read data into a streambuf until whitespace is encountered:
+ * @code typedef boost::asio::buffers_iterator<
+ * boost::asio::streambuf::const_buffers_type> iterator;
+ *
+ * std::pair<iterator, bool>
+ * match_whitespace(iterator begin, iterator end)
+ * {
+ * iterator i = begin;
+ * while (i != end)
+ * if (std::isspace(*i++))
+ * return std::make_pair(i, true);
+ * return std::make_pair(i, false);
+ * }
+ * ...
+ * void handler(const boost::system::error_code& e, std::size_t size);
+ * ...
+ * boost::asio::streambuf b;
+ * boost::asio::async_read_until(s, b, match_whitespace, handler);
+ * @endcode
+ *
+ * To asynchronously read data into a streambuf until a matching character is
+ * found:
+ * @code class match_char
+ * {
+ * public:
+ * explicit match_char(char c) : c_(c) {}
+ *
+ * template <typename Iterator>
+ * std::pair<Iterator, bool> operator()(
+ * Iterator begin, Iterator end) const
+ * {
+ * Iterator i = begin;
+ * while (i != end)
+ * if (c_ == *i++)
+ * return std::make_pair(i, true);
+ * return std::make_pair(i, false);
+ * }
+ *
+ * private:
+ * char c_;
+ * };
+ *
+ * namespace asio {
+ * template <> struct is_match_condition<match_char>
+ * : public boost::true_type {};
+ * } // namespace asio
+ * ...
+ * void handler(const boost::system::error_code& e, std::size_t size);
+ * ...
+ * boost::asio::streambuf b;
+ * boost::asio::async_read_until(s, b, match_char('a'), handler);
+ * @endcode
+ */
+template <typename AsyncReadStream, typename Allocator,
+ typename MatchCondition, typename ReadHandler>
+void async_read_until(AsyncReadStream& s,
+ boost::asio::basic_streambuf<Allocator>& b,
+ MatchCondition match_condition, ReadHandler handler,
+ typename boost::enable_if<is_match_condition<MatchCondition> >::type* = 0);
+
 /*@}*/
 
 } // namespace asio

Modified: branches/CMake/release/boost/asio/ssl/detail/openssl_operation.hpp
==============================================================================
--- branches/CMake/release/boost/asio/ssl/detail/openssl_operation.hpp (original)
+++ branches/CMake/release/boost/asio/ssl/detail/openssl_operation.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -169,14 +169,11 @@
       ((::SSL_get_shutdown( session_ ) & SSL_SENT_SHUTDOWN) ==
             SSL_SENT_SHUTDOWN);
 
- if (is_shut_down_sent && is_shut_down_received && is_operation_done)
+ if (is_shut_down_sent && is_shut_down_received && is_operation_done && !is_write_needed)
       // SSL connection is shut down cleanly
       return handler_(boost::system::error_code(), 1);
 
- if (is_shut_down_received && !is_write_needed)
- return handler_(boost::asio::error::eof, 0);
-
- if (is_shut_down_received)
+ if (is_shut_down_received && !is_operation_done)
       // Shutdown has been requested, while we were reading or writing...
       // abort our action...
       return handler_(boost::asio::error::shut_down, 0);
@@ -226,7 +223,7 @@
 
         return start();
       }
- else if (is_read_needed)
+ else if (is_read_needed || (is_shut_down_sent && !is_shut_down_received))
       {
         return read_();
       }

Modified: branches/CMake/release/boost/asio/version.hpp
==============================================================================
--- branches/CMake/release/boost/asio/version.hpp (original)
+++ branches/CMake/release/boost/asio/version.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -18,6 +18,6 @@
 // BOOST_ASIO_VERSION % 100 is the sub-minor version
 // BOOST_ASIO_VERSION / 100 % 1000 is the minor version
 // BOOST_ASIO_VERSION / 100000 is the major version
-#define BOOST_ASIO_VERSION 100000 // 1.0.0
+#define BOOST_ASIO_VERSION 100100 // 1.1.0
 
 #endif // BOOST_ASIO_VERSION_HPP

Modified: branches/CMake/release/boost/asio/write.hpp
==============================================================================
--- branches/CMake/release/boost/asio/write.hpp (original)
+++ branches/CMake/release/boost/asio/write.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -167,7 +167,7 @@
 std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers,
     CompletionCondition completion_condition, boost::system::error_code& ec);
 
-/// Write a certain amount of data to a stream before returning.
+/// Write all of the supplied data to a stream before returning.
 /**
  * This function is used to write a certain number of bytes of data to a stream.
  * The call will block until one of the following conditions is true:
@@ -283,7 +283,7 @@
  */
 /*@{*/
 
-/// Start an asynchronous operation to write of all of the supplied data to a
+/// Start an asynchronous operation to write all of the supplied data to a
 /// stream.
 /**
  * This function is used to asynchronously write a certain number of bytes of
@@ -406,7 +406,7 @@
 void async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
     CompletionCondition completion_condition, WriteHandler handler);
 
-/// Start an asynchronous operation to write a certain amount of data to a
+/// Start an asynchronous operation to write all of the supplied data to a
 /// stream.
 /**
  * This function is used to asynchronously write a certain number of bytes of

Modified: branches/CMake/release/boost/assign/list_inserter.hpp
==============================================================================
--- branches/CMake/release/boost/assign/list_inserter.hpp (original)
+++ branches/CMake/release/boost/assign/list_inserter.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -203,10 +203,6 @@
         template< class Nullary_function >
         list_inserter& operator=( const assign_detail::fun_repeater<Nullary_function>& r )
         {
- //BOOST_STATIC_ASSERT( function_traits<Nullary_function>::arity == 0 );
- //BOOST_STATIC_ASSERT( is_convertible< BOOST_DEDUCED_TYPENAME function_traits<
- // Nullary_function>::result_type >,T>::value );
-
             return operator,( r );
         }
         

Modified: branches/CMake/release/boost/assign/list_of.hpp
==============================================================================
--- branches/CMake/release/boost/assign/list_of.hpp (original)
+++ branches/CMake/release/boost/assign/list_of.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -17,8 +17,7 @@
 #endif
 
 #include <boost/assign/assignment_exception.hpp>
-#include <boost/range/begin.hpp>
-#include <boost/range/end.hpp>
+#include <boost/range/iterator_range.hpp>
 #include <boost/config.hpp>
 #include <boost/tuple/tuple.hpp>
 #include <boost/type_traits/remove_const.hpp>
@@ -110,9 +109,23 @@
 
 
     
- template< class DerivedTAssign >
+ template< class DerivedTAssign, class Iterator >
     class converter
     {
+ public: // Range operations
+ typedef Iterator iterator;
+ typedef Iterator const_iterator;
+
+ iterator begin() const
+ {
+ return static_cast<const DerivedTAssign*>(this)->begin();
+ }
+
+ iterator end() const
+ {
+ return static_cast<const DerivedTAssign*>(this)->end();
+ }
+
     public:
 
         template< class Container >
@@ -138,18 +151,16 @@
 #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
 // old Dinkumware doesn't support iterator type as template
             Container result;
- BOOST_DEDUCED_TYPENAME DerivedTAssign::iterator
- it = static_cast<const DerivedTAssign*>(this)->begin(),
- end = static_cast<const DerivedTAssign*>(this)->end();
- while( it != end )
+ iterator it = begin(),
+ e = end();
+ while( it != e )
             {
                 result.insert( result.end(), *it );
                 ++it;
             }
             return result;
 #else
- return Container( static_cast<const DerivedTAssign*>(this)->begin(),
- static_cast<const DerivedTAssign*>(this)->end() );
+ return Container( begin(), end() );
 #endif
         }
 
@@ -167,10 +178,9 @@
             if( sz < static_cast<const DerivedTAssign*>(this)->size() )
                 throw assign::assignment_exception( "array initialized with too many elements" );
             std::size_t n = 0;
- BOOST_DEDUCED_TYPENAME DerivedTAssign::iterator
- i = static_cast<const DerivedTAssign*>(this)->begin(),
- end = static_cast<const DerivedTAssign*>(this)->end();
- for( ; i != end; ++i, ++n )
+ iterator i = begin(),
+ e = end();
+ for( ; i != e; ++i, ++n )
                 ar[n] = *i;
             for( ; n < sz; ++n )
                 ar[n] = value_type();
@@ -181,10 +191,9 @@
         Adapter convert_to_adapter( const Adapter* = 0 ) const
         {
             Adapter a;
- BOOST_DEDUCED_TYPENAME DerivedTAssign::iterator
- i = static_cast<const DerivedTAssign*>(this)->begin(),
- end = static_cast<const DerivedTAssign*>(this)->end();
- for( ; i != end; ++i )
+ iterator i = begin(),
+ e = end();
+ for( ; i != e; ++i )
                 a.push( *i );
             return a;
         }
@@ -234,6 +243,86 @@
             return convert( &a, array_type_tag() );
         }
     };
+
+ template< class T, class I, class Range >
+ inline bool operator==( const converter<T,I>& l, const Range& r )
+ {
+ return ::boost::iterator_range_detail::equal( l, r );
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator==( const Range& l, const converter<T,I>& r )
+ {
+ return r == l;
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator!=( const converter<T,I>& l, const Range& r )
+ {
+ return !( l == r );
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator!=( const Range& l, const converter<T,I>& r )
+ {
+ return !( l == r );
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator<( const converter<T,I>& l, const Range& r )
+ {
+ return ::boost::iterator_range_detail::less_than( l, r );
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator<( const Range& l, const converter<T,I>& r )
+ {
+ return ::boost::iterator_range_detail::less_than( l, r );
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator>( const converter<T,I>& l, const Range& r )
+ {
+ return r < l;
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator>( const Range& l, const converter<T,I>& r )
+ {
+ return r < l;
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator<=( const converter<T,I>& l, const Range& r )
+ {
+ return !( l > r );
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator<=( const Range& l, const converter<T,I>& r )
+ {
+ return !( l > r );
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator>=( const converter<T,I>& l, const Range& r )
+ {
+ return !( l < r );
+ }
+
+ template< class T, class I, class Range >
+ inline bool operator>=( const Range& l, const converter<T,I>& r )
+ {
+ return !( l < r );
+ }
+
+ template< class T, class I, class Elem, class Traits >
+ inline std::basic_ostream<Elem,Traits>&
+ operator<<( std::basic_ostream<Elem, Traits>& Os,
+ const converter<T,I>& r )
+ {
+ return Os << ::boost::make_iterator_range( r.begin(), r.end() );
+ }
     
     /////////////////////////////////////////////////////////////////////////
     // Part 1: flexible, but inefficient interface
@@ -241,17 +330,17 @@
 
     template< class T >
     class generic_list :
- public converter< generic_list< BOOST_DEDUCED_TYPENAME assign_decay<T>::type > >
+ public converter< generic_list< BOOST_DEDUCED_TYPENAME assign_decay<T>::type >,
+ BOOST_DEDUCED_TYPENAME std::deque<BOOST_DEDUCED_TYPENAME
+ assign_decay<T>::type>::iterator >
     {
- typedef converter< generic_list< BOOST_DEDUCED_TYPENAME assign_decay<T>::type > >
- base_type;
         typedef BOOST_DEDUCED_TYPENAME assign_decay<T>::type Ty;
         typedef std::deque<Ty> impl_type;
         mutable impl_type values_;
         
     public:
         typedef BOOST_DEDUCED_TYPENAME impl_type::iterator iterator;
- typedef BOOST_DEDUCED_TYPENAME impl_type::const_iterator const_iterator;
+ typedef iterator const_iterator;
         typedef BOOST_DEDUCED_TYPENAME impl_type::value_type value_type;
         typedef BOOST_DEDUCED_TYPENAME impl_type::size_type size_type;
         typedef BOOST_DEDUCED_TYPENAME impl_type::difference_type difference_type;
@@ -347,7 +436,7 @@
             return this-> BOOST_NESTED_TEMPLATE convert_to_container<Container>();
         }
     };
-
+
     /////////////////////////////////////////////////////////////////////////
     // Part 2: efficient, but inconvenient interface
     /////////////////////////////////////////////////////////////////////////
@@ -411,16 +500,15 @@
     
     template< class T, int N >
     struct static_generic_list :
- public converter< static_generic_list<T,N> >
+ public converter< static_generic_list<T,N>, assign_reference<T>* >
     {
     private:
- typedef converter< static_generic_list<T,N> > base_class;
- typedef T internal_value_type;
+ typedef T internal_value_type;
 
     public:
         typedef assign_reference<internal_value_type> value_type;
         typedef value_type* iterator;
- typedef const value_type* const_iterator;
+ typedef value_type* const_iterator;
         typedef std::size_t size_type;
         typedef std::ptrdiff_t difference_type;
 

Modified: branches/CMake/release/boost/assign/ptr_list_of.hpp
==============================================================================
--- branches/CMake/release/boost/assign/ptr_list_of.hpp (original)
+++ branches/CMake/release/boost/assign/ptr_list_of.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -16,7 +16,7 @@
 # pragma once
 #endif
 
-#include <boost/assign/assignment_exception.hpp>
+#include <boost/assign/list_of.hpp>
 #include <boost/type_traits/remove_const.hpp>
 #include <boost/type_traits/remove_reference.hpp>
 #include <boost/type_traits/is_reference.hpp>
@@ -41,7 +41,9 @@
     /////////////////////////////////////////////////////////////////////////
 
     template< class T >
- class generic_ptr_list
+ class generic_ptr_list :
+ public converter< generic_ptr_list<T>,
+ BOOST_DEDUCED_TYPENAME boost::ptr_vector<T>::iterator >
     {
     protected:
         typedef boost::ptr_vector<T> impl_type;
@@ -50,7 +52,7 @@
         
     public:
         typedef BOOST_DEDUCED_TYPENAME impl_type::iterator iterator;
- typedef BOOST_DEDUCED_TYPENAME impl_type::const_iterator const_iterator;
+ typedef iterator const_iterator;
         typedef BOOST_DEDUCED_TYPENAME impl_type::value_type value_type;
         typedef BOOST_DEDUCED_TYPENAME impl_type::size_type size_type;
         typedef BOOST_DEDUCED_TYPENAME impl_type::difference_type difference_type;
@@ -58,12 +60,6 @@
         generic_ptr_list() : values_( 32u )
         { }
 
- /*
- generic_ptr_list( const generic_ptr_list& r )
- {
- values_.swap(r.values_);
- }*/
-
         generic_ptr_list( release_type r ) : values_(r)
         { }
 

Modified: branches/CMake/release/boost/bind.hpp
==============================================================================
--- branches/CMake/release/boost/bind.hpp (original)
+++ branches/CMake/release/boost/bind.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -248,6 +248,9 @@
     }
 };
 
+struct logical_and;
+struct logical_or;
+
 template< class A1, class A2 > class list2: private storage2< A1, A2 >
 {
 private:
@@ -294,6 +297,26 @@
         unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
     }
 
+ template<class A> bool operator()( type<bool>, logical_and & /*f*/, A & a, int )
+ {
+ return a[ base_type::a1_ ] && a[ base_type::a2_ ];
+ }
+
+ template<class A> bool operator()( type<bool>, logical_and const & /*f*/, A & a, int ) const
+ {
+ return a[ base_type::a1_ ] && a[ base_type::a2_ ];
+ }
+
+ template<class A> bool operator()( type<bool>, logical_or & /*f*/, A & a, int )
+ {
+ return a[ base_type::a1_ ] || a[ base_type::a2_ ];
+ }
+
+ template<class A> bool operator()( type<bool>, logical_or const & /*f*/, A & a, int ) const
+ {
+ return a[ base_type::a1_ ] || a[ base_type::a2_ ];
+ }
+
     template<class V> void accept(V & v) const
     {
         base_type::accept(v);
@@ -1158,6 +1181,9 @@
 BOOST_BIND_OPERATOR( >, greater )
 BOOST_BIND_OPERATOR( >=, greater_equal )
 
+BOOST_BIND_OPERATOR( &&, logical_and )
+BOOST_BIND_OPERATOR( ||, logical_or )
+
 #undef BOOST_BIND_OPERATOR
 
 #if defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3)
@@ -1542,6 +1568,7 @@
 #define BOOST_BIND_MF_CC
 
 #include <boost/bind/bind_mf_cc.hpp>
+#include <boost/bind/bind_mf2_cc.hpp>
 
 #undef BOOST_BIND_MF_NAME
 #undef BOOST_BIND_MF_CC
@@ -1552,6 +1579,7 @@
 #define BOOST_BIND_MF_CC __cdecl
 
 #include <boost/bind/bind_mf_cc.hpp>
+#include <boost/bind/bind_mf2_cc.hpp>
 
 #undef BOOST_BIND_MF_NAME
 #undef BOOST_BIND_MF_CC
@@ -1564,6 +1592,7 @@
 #define BOOST_BIND_MF_CC __stdcall
 
 #include <boost/bind/bind_mf_cc.hpp>
+#include <boost/bind/bind_mf2_cc.hpp>
 
 #undef BOOST_BIND_MF_NAME
 #undef BOOST_BIND_MF_CC
@@ -1576,6 +1605,7 @@
 #define BOOST_BIND_MF_CC __fastcall
 
 #include <boost/bind/bind_mf_cc.hpp>
+#include <boost/bind/bind_mf2_cc.hpp>
 
 #undef BOOST_BIND_MF_NAME
 #undef BOOST_BIND_MF_CC

Modified: branches/CMake/release/boost/detail/sp_counted_base_sync.hpp
==============================================================================
--- branches/CMake/release/boost/detail/sp_counted_base_sync.hpp (original)
+++ branches/CMake/release/boost/detail/sp_counted_base_sync.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -18,6 +18,10 @@
 #include <boost/detail/sp_typeinfo.hpp>
 #include <limits.h>
 
+#if defined( __ia64__ ) && defined( __INTEL_COMPILER )
+# include <ia64intrin.h>
+#endif
+
 namespace boost
 {
 

Modified: branches/CMake/release/boost/foreach.hpp
==============================================================================
--- branches/CMake/release/boost/foreach.hpp (original)
+++ branches/CMake/release/boost/foreach.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -42,7 +42,7 @@
   || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \
   || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \
   || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x570)) \
- || BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+ || BOOST_WORKAROUND(__DECCXX_VER, <= 60590042)
 # define BOOST_FOREACH_NO_RVALUE_DETECTION
 # endif
 // Some compilers do not correctly implement the lvalue/rvalue conversion
@@ -69,7 +69,10 @@
 #include <boost/noncopyable.hpp>
 #include <boost/range/end.hpp>
 #include <boost/range/begin.hpp>
+#include <boost/range/rend.hpp>
+#include <boost/range/rbegin.hpp>
 #include <boost/range/iterator.hpp>
+#include <boost/range/reverse_iterator.hpp>
 #include <boost/type_traits/is_array.hpp>
 #include <boost/type_traits/is_const.hpp>
 #include <boost/type_traits/is_abstract.hpp>
@@ -202,15 +205,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // Define some utilities for assessing the properties of expressions
 //
-typedef char yes_type;
-typedef char (&no_type)[2];
-yes_type is_true(boost::mpl::true_ *);
-no_type is_true(boost::mpl::false_ *);
-
-// Extracts the desired property from the expression without evaluating it
-#define BOOST_FOREACH_PROTECT(expr) \
- (static_cast<boost::mpl::bool_<1 == sizeof(boost::foreach_detail_::is_true(expr))> *>(0))
-
 template<typename Bool1, typename Bool2>
 inline boost::mpl::and_<Bool1, Bool2> *and_(Bool1 *, Bool2 *) { return 0; }
 
@@ -368,6 +362,37 @@
>::type type;
 };
 
+
+template<typename T, typename C = boost::mpl::false_>
+struct foreach_reverse_iterator
+{
+ // **** READ THIS IF YOUR COMPILE BREAKS HERE ****
+ //
+ // There is an ambiguity about how to iterate over arrays of char and wchar_t.
+ // Should the last array element be treated as a null terminator to be skipped, or
+ // is it just like any other element in the array? To fix the problem, you must
+ // say which behavior you want.
+ //
+ // To treat the container as a null-terminated string, merely cast it to a
+ // char const *, as in BOOST_FOREACH( char ch, (char const *)"hello" ) ...
+ //
+ // To treat the container as an array, use boost::as_array() in <boost/range/as_array.hpp>,
+ // as in BOOST_FOREACH( char ch, boost::as_array("hello") ) ...
+ #if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ BOOST_MPL_ASSERT_MSG( (!is_char_array<T>::value), IS_THIS_AN_ARRAY_OR_A_NULL_TERMINATED_STRING, (T&) );
+ #endif
+
+ // If the type is a pointer to a null terminated string (as opposed
+ // to an array type), there is no ambiguity.
+ typedef BOOST_DEDUCED_TYPENAME wrap_cstr<T>::type container;
+
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::eval_if<
+ C
+ , range_reverse_iterator<container const>
+ , range_reverse_iterator<container>
+ >::type type;
+};
+
 template<typename T, typename C = boost::mpl::false_>
 struct foreach_reference
   : iterator_reference<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
@@ -386,7 +411,11 @@
 ///////////////////////////////////////////////////////////////////////////////
 // set_false
 //
-inline bool set_false(bool &b) { return b = false; }
+inline bool set_false(bool &b)
+{
+ b = false;
+ return false;
+}
 
 ///////////////////////////////////////////////////////////////////////////////
 // to_ptr
@@ -441,17 +470,20 @@
     typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<
         boost::mpl::or_<boost::is_abstract<T>, boost::is_array<T> >, private_type_, T
>::type value_type;
- operator value_type();
- operator T &() const;
+ operator value_type() { return *reinterpret_cast<value_type *>(this); } // never called
+ operator T &() const { return *reinterpret_cast<T *>(const_cast<rvalue_probe *>(this)); } // never called
 };
 
 template<typename T>
-rvalue_probe<T> const make_probe(T const &t);
+rvalue_probe<T> const make_probe(T const &)
+{
+ return rvalue_probe<T>();
+}
 
 # define BOOST_FOREACH_IS_RVALUE(COL) \
     boost::foreach_detail_::and_( \
         boost::foreach_detail_::not_(boost::foreach_detail_::is_array_(COL)) \
- , BOOST_FOREACH_PROTECT(boost::foreach_detail_::is_rvalue_( \
+ , (true ? 0 : boost::foreach_detail_::is_rvalue_( \
             (true ? boost::foreach_detail_::make_probe(COL) : (COL)), 0)))
 
 #elif defined(BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION)
@@ -717,9 +749,124 @@
     return *auto_any_cast<iter_t, boost::mpl::false_>(cur);
 }
 
+/////////////////////////////////////////////////////////////////////////////
+// rbegin
+//
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
+rbegin(auto_any_t col, type2type<T, C> *, boost::mpl::true_ *) // rvalue
+{
+ return boost::rbegin(auto_any_cast<T, C>(col));
+}
+
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
+rbegin(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
+{
+ typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
+ typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iterator;
+ return iterator(boost::rbegin(derefof(auto_any_cast<type *, boost::mpl::false_>(col))));
+}
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+template<typename T>
+auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>
+rbegin(auto_any_t col, type2type<T, const_> *, bool *)
+{
+ return boost::rbegin(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get());
+}
+#endif
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template<typename T, typename C>
+inline auto_any<reverse_iterator<T *> >
+rbegin(auto_any_t col, type2type<T *, C> *, boost::mpl::true_ *) // null-terminated C-style strings
+{
+ T *p = auto_any_cast<T *, boost::mpl::false_>(col);
+ while(0 != *p)
+ ++p;
+ return reverse_iterator<T *>(p);
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// rend
+//
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
+rend(auto_any_t col, type2type<T, C> *, boost::mpl::true_ *) // rvalue
+{
+ return boost::rend(auto_any_cast<T, C>(col));
+}
+
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
+rend(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
+{
+ typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
+ typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iterator;
+ return iterator(boost::rend(derefof(auto_any_cast<type *, boost::mpl::false_>(col))));
+}
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+template<typename T>
+auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>
+rend(auto_any_t col, type2type<T, const_> *, bool *)
+{
+ return boost::rend(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get());
+}
+#endif
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template<typename T, typename C>
+inline auto_any<reverse_iterator<T *> >
+rend(auto_any_t col, type2type<T *, C> *, boost::mpl::true_ *) // null-terminated C-style strings
+{
+ return reverse_iterator<T *>(auto_any_cast<T *, boost::mpl::false_>(col));
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// rdone
+//
+template<typename T, typename C>
+inline bool rdone(auto_any_t cur, auto_any_t end, type2type<T, C> *)
+{
+ typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iter_t;
+ return auto_any_cast<iter_t, boost::mpl::false_>(cur) == auto_any_cast<iter_t, boost::mpl::false_>(end);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// rnext
+//
+template<typename T, typename C>
+inline void rnext(auto_any_t cur, type2type<T, C> *)
+{
+ typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iter_t;
+ ++auto_any_cast<iter_t, boost::mpl::false_>(cur);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// rderef
+//
+template<typename T, typename C>
+inline BOOST_DEDUCED_TYPENAME foreach_reference<T, C>::type
+rderef(auto_any_t cur, type2type<T, C> *)
+{
+ typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iter_t;
+ return *auto_any_cast<iter_t, boost::mpl::false_>(cur);
+}
+
 } // namespace foreach_detail_
 } // namespace boost
 
+// Suppress a bogus code analysis warning on vc8+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# define BOOST_FOREACH_SUPPRESS_WARNINGS() __pragma(warning(suppress:6001))
+#else
+# define BOOST_FOREACH_SUPPRESS_WARNINGS()
+#endif
+
 // A sneaky way to get the type of the collection without evaluating the expression
 #define BOOST_FOREACH_TYPEOF(COL) \
     (true ? 0 : boost::foreach_detail_::encode_type(COL, boost::foreach_detail_::is_const_(COL)))
@@ -745,7 +892,7 @@
 
 // No variable is needed to track the rvalue-ness of the collection expression
 # define BOOST_FOREACH_PREAMBLE() \
- /**/
+ BOOST_FOREACH_SUPPRESS_WARNINGS()
 
 // Evaluate the collection expression
 # define BOOST_FOREACH_EVALUATE(COL) \
@@ -763,6 +910,7 @@
 
 // Declare a variable to track the rvalue-ness of the collection expression
 # define BOOST_FOREACH_PREAMBLE() \
+ BOOST_FOREACH_SUPPRESS_WARNINGS() \
     if (bool _foreach_is_rvalue = false) {} else
 
 // Evaluate the collection expression, and detect if it is an lvalue or and rvalue
@@ -788,7 +936,7 @@
 
 // No variable is needed to track the rvalue-ness of the collection expression
 # define BOOST_FOREACH_PREAMBLE() \
- /**/
+ BOOST_FOREACH_SUPPRESS_WARNINGS()
 
 // Evaluate the collection expression
 # define BOOST_FOREACH_EVALUATE(COL) \
@@ -808,7 +956,7 @@
 
 // No variable is needed to track the rvalue-ness of the collection expression
 # define BOOST_FOREACH_PREAMBLE() \
- /**/
+ BOOST_FOREACH_SUPPRESS_WARNINGS()
 
 // Evaluate the collection expression
 # define BOOST_FOREACH_EVALUATE(COL) \
@@ -853,6 +1001,34 @@
         _foreach_cur \
       , BOOST_FOREACH_TYPEOF(COL))
 
+#define BOOST_FOREACH_RBEGIN(COL) \
+ boost::foreach_detail_::rbegin( \
+ _foreach_col \
+ , BOOST_FOREACH_TYPEOF(COL) \
+ , BOOST_FOREACH_SHOULD_COPY(COL))
+
+#define BOOST_FOREACH_REND(COL) \
+ boost::foreach_detail_::rend( \
+ _foreach_col \
+ , BOOST_FOREACH_TYPEOF(COL) \
+ , BOOST_FOREACH_SHOULD_COPY(COL))
+
+#define BOOST_FOREACH_RDONE(COL) \
+ boost::foreach_detail_::rdone( \
+ _foreach_cur \
+ , _foreach_end \
+ , BOOST_FOREACH_TYPEOF(COL))
+
+#define BOOST_FOREACH_RNEXT(COL) \
+ boost::foreach_detail_::rnext( \
+ _foreach_cur \
+ , BOOST_FOREACH_TYPEOF(COL))
+
+#define BOOST_FOREACH_RDEREF(COL) \
+ boost::foreach_detail_::rderef( \
+ _foreach_cur \
+ , BOOST_FOREACH_TYPEOF(COL))
+
 ///////////////////////////////////////////////////////////////////////////////
 // BOOST_FOREACH
 //
@@ -890,4 +1066,22 @@
         if (boost::foreach_detail_::set_false(_foreach_continue)) {} else \
         for (VAR = BOOST_FOREACH_DEREF(COL); !_foreach_continue; _foreach_continue = true)
 
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_REVERSE_FOREACH
+//
+// For iterating over collections in reverse order. In
+// all other respects, BOOST_REVERSE_FOREACH is like
+// BOOST_FOREACH.
+//
+#define BOOST_REVERSE_FOREACH(VAR, COL) \
+ BOOST_FOREACH_PREAMBLE() \
+ if (boost::foreach_detail_::auto_any_t _foreach_col = BOOST_FOREACH_CONTAIN(COL)) {} else \
+ if (boost::foreach_detail_::auto_any_t _foreach_cur = BOOST_FOREACH_RBEGIN(COL)) {} else \
+ if (boost::foreach_detail_::auto_any_t _foreach_end = BOOST_FOREACH_REND(COL)) {} else \
+ for (bool _foreach_continue = true; \
+ _foreach_continue && !BOOST_FOREACH_RDONE(COL); \
+ _foreach_continue ? BOOST_FOREACH_RNEXT(COL) : (void)0) \
+ if (boost::foreach_detail_::set_false(_foreach_continue)) {} else \
+ for (VAR = BOOST_FOREACH_RDEREF(COL); !_foreach_continue; _foreach_continue = true)
+
 #endif

Modified: branches/CMake/release/boost/functional/detail/container_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/functional/detail/container_fwd.hpp (original)
+++ branches/CMake/release/boost/functional/detail/container_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/CMake/release/boost/functional/detail/float_functions.hpp
==============================================================================
--- branches/CMake/release/boost/functional/detail/float_functions.hpp (original)
+++ branches/CMake/release/boost/functional/detail/float_functions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/CMake/release/boost/functional/detail/hash_float.hpp
==============================================================================
--- branches/CMake/release/boost/functional/detail/hash_float.hpp (original)
+++ branches/CMake/release/boost/functional/detail/hash_float.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
@@ -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,19 +50,47 @@
 // 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
 
+// On OpenBSD, numeric_limits is not reliable for long doubles, but
+// the macros defined in <float.h> are.
+
+#if defined(__OpenBSD__)
+#include <float.h>
+#endif
+
 namespace boost
 {
     namespace hash_detail
     {
+ template <class T>
+ struct limits : std::numeric_limits<T> {};
+
+#if defined(__OpenBSD__)
+ template <>
+ struct limits<long double>
+ : std::numeric_limits<long double>
+ {
+ static long double epsilon() {
+ return LDBL_EPSILON;
+ }
+
+ static long double (max)() {
+ return LDBL_MAX;
+ }
+
+ static long double (min)() {
+ return LDBL_MIN;
+ }
+
+ BOOST_STATIC_CONSTANT(int, digits = LDBL_MANT_DIG);
+ BOOST_STATIC_CONSTANT(int, max_exponent = LDBL_MAX_EXP);
+ BOOST_STATIC_CONSTANT(int, min_exponent = LDBL_MIN_EXP);
+ };
+#endif // __OpenBSD__
+
         inline void hash_float_combine(std::size_t& seed, std::size_t value)
         {
             seed ^= value + (seed<<6) + (seed>>2);
@@ -107,29 +135,28 @@
             // sign with the exponent.
             if(v < 0) {
                 v = -v;
- exp += std::numeric_limits<T>::max_exponent -
- std::numeric_limits<T>::min_exponent;
+ exp += limits<T>::max_exponent -
+ limits<T>::min_exponent;
             }
 
             // The result of frexp is always between 0.5 and 1, so its
             // top bit will always be 1. Subtract by 0.5 to remove that.
             v -= T(0.5);
             v = boost::hash_detail::call_ldexp(v,
- std::numeric_limits<std::size_t>::digits + 1);
+ limits<std::size_t>::digits + 1);
             std::size_t seed = static_cast<std::size_t>(v);
             v -= seed;
 
             // ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1;
             std::size_t const length
- = (std::numeric_limits<T>::digits *
- boost::static_log2<std::numeric_limits<T>::radix>::value
- - 1)
- / std::numeric_limits<std::size_t>::digits;
+ = (limits<T>::digits *
+ boost::static_log2<limits<T>::radix>::value - 1)
+ / limits<std::size_t>::digits;
 
             for(std::size_t i = 0; i != length; ++i)
             {
                 v = boost::hash_detail::call_ldexp(v,
- std::numeric_limits<std::size_t>::digits);
+ limits<std::size_t>::digits);
                 std::size_t part = static_cast<std::size_t>(v);
                 v -= part;
                 hash_float_combine(seed, part);
@@ -160,28 +187,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/CMake/release/boost/functional/hash.hpp
==============================================================================
--- branches/CMake/release/boost/functional/hash.hpp (original)
+++ branches/CMake/release/boost/functional/hash.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the 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,3 +8,4 @@
 // issue 6.18.
 
 #include <boost/functional/hash/hash.hpp>
+

Modified: branches/CMake/release/boost/functional/hash/deque.hpp
==============================================================================
--- branches/CMake/release/boost/functional/hash/deque.hpp (original)
+++ branches/CMake/release/boost/functional/hash/deque.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/CMake/release/boost/functional/hash/hash.hpp
==============================================================================
--- branches/CMake/release/boost/functional/hash/hash.hpp (original)
+++ branches/CMake/release/boost/functional/hash/hash.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
@@ -46,8 +46,8 @@
 #endif
     
 #if defined(BOOST_HAS_LONG_LONG)
- std::size_t hash_value(long long);
- std::size_t hash_value(unsigned long long);
+ std::size_t hash_value(boost::long_long_type);
+ std::size_t hash_value(boost::ulong_long_type);
 #endif
 
 #if !BOOST_WORKAROUND(__DMC__, <= 0x848)
@@ -195,12 +195,12 @@
 #endif
 
 #if defined(BOOST_HAS_LONG_LONG)
- inline std::size_t hash_value(long long v)
+ inline std::size_t hash_value(boost::long_long_type v)
     {
         return hash_detail::hash_value_signed(v);
     }
 
- inline std::size_t hash_value(unsigned long long v)
+ inline std::size_t hash_value(boost::ulong_long_type v)
     {
         return hash_detail::hash_value_unsigned(v);
     }
@@ -518,176 +518,12 @@
 }
 
 #endif // BOOST_FUNCTIONAL_HASH_HASH_HPP
-////////////////////////////////////////////////////////////////////////////////
+
+// Include this outside of the include guards in case the file is included
+// twice - once with BOOST_HASH_NO_EXTENSIONS defined, and then with it
+// undefined.
 
 #if !defined(BOOST_HASH_NO_EXTENSIONS) \
     && !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP)
-#define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP
-
-namespace boost
-{
-
-#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
- namespace hash_detail
- {
- template <bool IsArray>
- struct call_hash_impl
- {
- template <class T>
- struct inner
- {
- static std::size_t call(T const& v)
- {
- using namespace boost;
- return hash_value(v);
- }
- };
- };
-
- template <>
- struct call_hash_impl<true>
- {
- template <class Array>
- struct inner
- {
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- static std::size_t call(Array const& v)
-#else
- static std::size_t call(Array& v)
-#endif
- {
- const int size = sizeof(v) / sizeof(*v);
- return boost::hash_range(v, v + size);
- }
- };
- };
-
- template <class T>
- struct call_hash
- : public call_hash_impl<boost::is_array<T>::value>
- ::BOOST_NESTED_TEMPLATE inner<T>
- {
- };
- }
-#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
- template <class T> struct hash
- : std::unary_function<T, std::size_t>
- {
-#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
- std::size_t operator()(T const& val) const
- {
- return hash_value(val);
- }
-#else
- std::size_t operator()(T const& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
-#endif
- };
-
-#if BOOST_WORKAROUND(__DMC__, <= 0x848)
- template <class T, unsigned int n> struct hash<T[n]>
- : std::unary_function<T[n], std::size_t>
- {
- std::size_t operator()(const T* val) const
- {
- return boost::hash_range(val, val+n);
- }
- };
-#endif
-
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
- // On compilers without partial specialization, boost::hash<T>
- // has already been declared to deal with pointers, so just
- // need to supply the non-pointer version.
-
- namespace hash_detail
- {
- template <bool IsPointer>
- struct hash_impl;
-
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
- template <>
- struct hash_impl<false>
- {
- template <class T>
- struct inner
- : std::unary_function<T, std::size_t>
- {
-#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
- std::size_t operator()(T const& val) const
- {
- return hash_value(val);
- }
-#else
- std::size_t operator()(T const& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
-#endif
- };
- };
-
-#else // Visual C++ 6.5
-
- // There's probably a more elegant way to Visual C++ 6.5 to work
- // but I don't know what it is.
-
- template <bool IsConst>
- struct hash_impl_msvc
- {
- template <class T>
- struct inner
- : public std::unary_function<T, std::size_t>
- {
- std::size_t operator()(T const& val) const
- {
- return hash_detail::call_hash<T const>::call(val);
- }
-
- std::size_t operator()(T& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
- };
- };
-
- template <>
- struct hash_impl_msvc<true>
- {
- template <class T>
- struct inner
- : public std::unary_function<T, std::size_t>
- {
- std::size_t operator()(T& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
- };
- };
-
- template <class T>
- struct hash_impl_msvc2
- : public hash_impl_msvc<boost::is_const<T>::value>
- ::BOOST_NESTED_TEMPLATE inner<T> {};
-
- template <>
- struct hash_impl<false>
- {
- template <class T>
- struct inner : public hash_impl_msvc2<T> {};
- };
-
-#endif // Visual C++ 6.5
- }
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-}
-
+#include <boost/functional/hash/extensions.hpp>
 #endif
-

Modified: branches/CMake/release/boost/functional/hash/list.hpp
==============================================================================
--- branches/CMake/release/boost/functional/hash/list.hpp (original)
+++ branches/CMake/release/boost/functional/hash/list.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/CMake/release/boost/functional/hash/map.hpp
==============================================================================
--- branches/CMake/release/boost/functional/hash/map.hpp (original)
+++ branches/CMake/release/boost/functional/hash/map.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/CMake/release/boost/functional/hash/pair.hpp
==============================================================================
--- branches/CMake/release/boost/functional/hash/pair.hpp (original)
+++ branches/CMake/release/boost/functional/hash/pair.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/CMake/release/boost/functional/hash/set.hpp
==============================================================================
--- branches/CMake/release/boost/functional/hash/set.hpp (original)
+++ branches/CMake/release/boost/functional/hash/set.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/CMake/release/boost/functional/hash/vector.hpp
==============================================================================
--- branches/CMake/release/boost/functional/hash/vector.hpp (original)
+++ branches/CMake/release/boost/functional/hash/vector.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/CMake/release/boost/functional/hash_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/functional/hash_fwd.hpp (original)
+++ branches/CMake/release/boost/functional/hash_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/CMake/release/boost/fusion/container/generation/ignore.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/container/generation/ignore.hpp (original)
+++ branches/CMake/release/boost/fusion/container/generation/ignore.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 /*=============================================================================
     Copyright (c) 2001 Doug Gregor
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/container/vector/vector_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/container/vector/vector_fwd.hpp (original)
+++ branches/CMake/release/boost/fusion/container/vector/vector_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/detail/equal_to.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/detail/equal_to.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/detail/equal_to.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/detail/greater.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/detail/greater.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/detail/greater.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/detail/greater_equal.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/detail/greater_equal.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/detail/greater_equal.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/detail/less.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/detail/less.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/detail/less.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/detail/less_equal.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/detail/less_equal.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/detail/less_equal.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/detail/not_equal_to.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/detail/not_equal_to.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/detail/not_equal_to.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/equal_to.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/equal_to.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/equal_to.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/greater.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/greater.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/greater.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/greater_equal.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/greater_equal.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/greater_equal.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/less.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/less.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/less.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/less_equal.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/less_equal.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/less_equal.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/comparison/not_equal_to.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/comparison/not_equal_to.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/comparison/not_equal_to.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/io/detail/in.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/io/detail/in.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/io/detail/in.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 1999-2003 Jeremiah Willcock
     Copyright (c) 2001-2006 Joel de Guzman
 

Modified: branches/CMake/release/boost/fusion/sequence/io/detail/manip.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/io/detail/manip.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/io/detail/manip.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 /*=============================================================================
     Copyright (c) 1999-2003 Jeremiah Willcock
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/fusion/sequence/io/detail/out.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/io/detail/out.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/io/detail/out.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 1999-2003 Jeremiah Willcock
     Copyright (c) 2001-2006 Joel de Guzman
 

Modified: branches/CMake/release/boost/fusion/sequence/io/in.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/io/in.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/io/in.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 1999-2003 Jeremiah Willcock
     Copyright (c) 2001-2006 Joel de Guzman
 

Modified: branches/CMake/release/boost/fusion/sequence/io/out.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/sequence/io/out.hpp (original)
+++ branches/CMake/release/boost/fusion/sequence/io/out.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 1999-2003 Jeremiah Willcock
     Copyright (c) 2001-2006 Joel de Guzman
 

Modified: branches/CMake/release/boost/fusion/support/detail/as_fusion_element.hpp
==============================================================================
--- branches/CMake/release/boost/fusion/support/detail/as_fusion_element.hpp (original)
+++ branches/CMake/release/boost/fusion/support/detail/as_fusion_element.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 /*=============================================================================
- Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2006 Joel de Guzman
 
     Distributed under the Boost Software License, Version 1.0. (See accompanying

Modified: branches/CMake/release/boost/interprocess/allocators/adaptive_pool.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/allocators/adaptive_pool.hpp (original)
+++ branches/CMake/release/boost/interprocess/allocators/adaptive_pool.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -26,6 +26,7 @@
 #include <boost/interprocess/allocators/detail/adaptive_node_pool.hpp>
 #include <boost/interprocess/exceptions.hpp>
 #include <boost/interprocess/allocators/detail/allocator_common.hpp>
+#include <boost/interprocess/detail/mpl.hpp>
 #include <memory>
 #include <algorithm>
 #include <cstddef>
@@ -43,14 +44,14 @@
 template < unsigned int Version
          , class T
          , class SegmentManager
- , std::size_t NodesPerChunk
- , std::size_t MaxFreeChunks
+ , std::size_t NodesPerBlock
+ , std::size_t MaxFreeBlocks
          , unsigned char OverheadPercent
>
 class adaptive_pool_base
    : public node_pool_allocation_impl
    < adaptive_pool_base
- < Version, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent>
+ < Version, T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent>
    , Version
    , T
    , SegmentManager
@@ -60,11 +61,20 @@
    typedef typename SegmentManager::void_pointer void_pointer;
    typedef SegmentManager segment_manager;
    typedef adaptive_pool_base
- <Version, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> self_t;
- typedef detail::shared_adaptive_node_pool
- < SegmentManager, sizeof(T), NodesPerChunk, MaxFreeChunks, OverheadPercent> node_pool_t;
- typedef typename detail::
- pointer_to_other<void_pointer, node_pool_t>::type node_pool_ptr;
+ <Version, T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> self_t;
+
+ /// @cond
+
+ template <int dummy>
+ struct node_pool
+ {
+ typedef detail::shared_adaptive_node_pool
+ < SegmentManager, sizeof_value<T>::value, NodesPerBlock, MaxFreeBlocks, OverheadPercent> type;
+
+ static type *get(void *p)
+ { return static_cast<type*>(p); }
+ };
+ /// @endcond
 
    BOOST_STATIC_ASSERT((Version <=2));
 
@@ -95,7 +105,7 @@
    template<class T2>
    struct rebind
    {
- typedef adaptive_pool_base<Version, T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ typedef adaptive_pool_base<Version, T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    /// @cond
@@ -105,8 +115,6 @@
    adaptive_pool_base& operator=
       (const adaptive_pool_base<Version2, T2, SegmentManager2, N2, F2, O2>&);
 
- //!Not assignable from other adaptive_pool_base
- adaptive_pool_base& operator=(const adaptive_pool_base&);
    /// @endcond
 
    public:
@@ -114,14 +122,22 @@
    //!pool. Increments the reference count of the associated node pool.
    //!Can throw boost::interprocess::bad_alloc
    adaptive_pool_base(segment_manager *segment_mngr)
- : mp_node_pool(detail::get_or_create_node_pool<node_pool_t>(segment_mngr)) { }
+ : mp_node_pool(detail::get_or_create_node_pool<typename node_pool<0>::type>(segment_mngr)) { }
 
    //!Copy constructor from other adaptive_pool_base. Increments the reference
    //!count of the associated node pool. Never throws
    adaptive_pool_base(const adaptive_pool_base &other)
       : mp_node_pool(other.get_node_pool())
    {
- mp_node_pool->inc_ref_count();
+ node_pool<0>::get(detail::get_pointer(mp_node_pool))->inc_ref_count();
+ }
+
+ //!Assignment from other adaptive_pool_base
+ adaptive_pool_base& operator=(const adaptive_pool_base &other)
+ {
+ adaptive_pool_base c(other);
+ swap(*this, c);
+ return *this;
    }
 
    //!Copy constructor from related adaptive_pool_base. If not present, constructs
@@ -129,23 +145,23 @@
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
    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())) { }
+ (const adaptive_pool_base<Version, T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other)
+ : mp_node_pool(detail::get_or_create_node_pool<typename node_pool<0>::type>(other.get_segment_manager())) { }
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
    ~adaptive_pool_base()
- { detail::destroy_node_pool_if_last_link(detail::get_pointer(mp_node_pool)); }
+ { detail::destroy_node_pool_if_last_link(node_pool<0>::get(detail::get_pointer(mp_node_pool))); }
 
    //!Returns a pointer to the node pool.
    //!Never throws
- node_pool_t* get_node_pool() const
+ void* 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(); }
+ { return node_pool<0>::get(detail::get_pointer(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.
@@ -154,28 +170,28 @@
 
    /// @cond
    private:
- node_pool_ptr mp_node_pool;
+ void_pointer 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)
+template<unsigned int V, class T, class S, std::size_t NPC, std::size_t F, unsigned char OP> inline
+bool operator==(const adaptive_pool_base<V, T, S, NPC, F, OP> &alloc1,
+ const adaptive_pool_base<V, T, S, NPC, 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)
+template<unsigned int V, class T, class S, std::size_t NPC, std::size_t F, unsigned char OP> inline
+bool operator!=(const adaptive_pool_base<V, T, S, NPC, F, OP> &alloc1,
+ const adaptive_pool_base<V, T, S, NPC, 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
+ , std::size_t NodesPerBlock = 64
+ , std::size_t MaxFreeBlocks = 2
          , unsigned char OverheadPercent = 5
>
 class adaptive_pool_v1
@@ -183,19 +199,19 @@
          < 1
          , T
          , SegmentManager
- , NodesPerChunk
- , MaxFreeChunks
+ , NodesPerBlock
+ , MaxFreeBlocks
          , OverheadPercent
>
 {
    public:
    typedef detail::adaptive_pool_base
- < 1, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> base_t;
+ < 1, T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> base_t;
 
    template<class T2>
    struct rebind
    {
- typedef adaptive_pool_v1<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ typedef adaptive_pool_v1<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    adaptive_pool_v1(SegmentManager *segment_mngr)
@@ -204,7 +220,7 @@
 
    template<class T2>
    adaptive_pool_v1
- (const adaptive_pool_v1<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ (const adaptive_pool_v1<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other)
       : base_t(other)
    {}
 };
@@ -220,17 +236,17 @@
 //!
 //!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
+//!group. NodesPerBlock is the number of nodes allocated at once when the allocator
+//!needs runs out of nodes. MaxFreeBlocks is the maximum number of totally free blocks
+//!that the adaptive node pool will hold. The rest of the totally free blocks 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
+ , std::size_t NodesPerBlock
+ , std::size_t MaxFreeBlocks
          , unsigned char OverheadPercent
>
 class adaptive_pool
@@ -239,8 +255,8 @@
          < 2
          , T
          , SegmentManager
- , NodesPerChunk
- , MaxFreeChunks
+ , NodesPerBlock
+ , MaxFreeBlocks
          , OverheadPercent
>
    /// @endcond
@@ -248,14 +264,14 @@
 
    #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
    typedef detail::adaptive_pool_base
- < 2, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> base_t;
+ < 2, T, SegmentManager, NodesPerBlock, MaxFreeBlocks, 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;
+ typedef adaptive_pool<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    adaptive_pool(SegmentManager *segment_mngr)
@@ -264,7 +280,7 @@
 
    template<class T2>
    adaptive_pool
- (const adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ (const adaptive_pool<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other)
       : base_t(other)
    {}
 
@@ -287,7 +303,7 @@
    template<class T2>
    struct rebind
    {
- typedef adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ typedef adaptive_pool<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    private:
@@ -299,7 +315,7 @@
 
    //!Not assignable from
    //!other adaptive_pool
- adaptive_pool& operator=(const adaptive_pool&);
+ //adaptive_pool& operator=(const adaptive_pool&);
 
    public:
    //!Constructor from a segment manager. If not present, constructs a node
@@ -316,7 +332,7 @@
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
    adaptive_pool
- (const adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other);
+ (const adaptive_pool<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other);
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
@@ -324,7 +340,7 @@
 
    //!Returns a pointer to the node pool.
    //!Never throws
- node_pool_t* get_node_pool() const;
+ void* get_node_pool() const;
 
    //!Returns the segment manager.
    //!Never throws
@@ -342,9 +358,9 @@
    //!Never throws
    void deallocate(const pointer &ptr, size_type count);
 
- //!Deallocates all free chunks
+ //!Deallocates all free blocks
    //!of the pool
- void deallocate_free_chunks();
+ void deallocate_free_blocks();
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
    //!different memory segment, the result is undefined.
@@ -358,9 +374,9 @@
    //!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);
+ //!Copy construct an object.
+ //!Throws if T's copy constructor throws
+ void construct(const pointer &ptr, const_reference v);
 
    //!Destroys object. Throws if object's
    //!destructor throws
@@ -377,7 +393,7 @@
                          size_type preferred_size,
                          size_type &received_size, const pointer &reuse = 0);
 
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -386,11 +402,11 @@
    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
+ //!contiguous block
    //!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
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -403,7 +419,7 @@
    //!Throws boost::interprocess::bad_alloc if there is no enough memory
    pointer allocate_one();
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -416,7 +432,7 @@
    //!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
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -430,15 +446,15 @@
 
 //!Equality test for same type
 //!of adaptive_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);
+template<class T, class S, std::size_t NodesPerBlock, std::size_t F, unsigned char OP> inline
+bool operator==(const adaptive_pool<T, S, NodesPerBlock, F, OP> &alloc1,
+ const adaptive_pool<T, S, NodesPerBlock, F, OP> &alloc2);
 
 //!Inequality test for same type
 //!of adaptive_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);
+template<class T, class S, std::size_t NodesPerBlock, std::size_t F, unsigned char OP> inline
+bool operator!=(const adaptive_pool<T, S, NodesPerBlock, F, OP> &alloc1,
+ const adaptive_pool<T, S, NodesPerBlock, F, OP> &alloc2);
 
 #endif
 

Modified: branches/CMake/release/boost/interprocess/allocators/allocator.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/allocators/allocator.hpp (original)
+++ branches/CMake/release/boost/interprocess/allocators/allocator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -48,15 +48,17 @@
 template<class T, class SegmentManager>
 class allocator
 {
+ public:
+ //Segment manager
+ typedef SegmentManager segment_manager;
+ typedef typename SegmentManager::void_pointer void_pointer;
+
    /// @cond
    private:
 
    //Self type
    typedef allocator<T, SegmentManager> self_t;
 
- //Segment manager
- typedef SegmentManager segment_manager;
-
    //Pointer to void
    typedef typename segment_manager::void_pointer aux_pointer_t;
 
@@ -106,8 +108,6 @@
       <typename SegmentManager::
          multiallocation_chain
       , T> multiallocation_chain;
-// typedef typename SegmentManager::
-// multiallocation_chain multiallocation_chain;
 
    /// @endcond
 
@@ -153,7 +153,7 @@
    //!Deallocates memory previously allocated.
    //!Never throws
    void deallocate(const pointer &ptr, size_type)
- { mp_mngr->deallocate(detail::get_pointer(ptr)); }
+ { mp_mngr->deallocate((void*)detail::get_pointer(ptr)); }
 
    //!Returns the number of elements that could be allocated.
    //!Never throws
@@ -183,7 +183,7 @@
          (command, limit_size, preferred_size, received_size, detail::get_pointer(reuse));
    }
 
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -196,7 +196,7 @@
    }
 
    //!Allocates n_elements elements, each one of size elem_sizes[i]in a
- //!contiguous chunk
+ //!contiguous block
    //!of memory. The elements must be deallocated
    multiallocation_iterator allocate_many(const size_type *elem_sizes, size_type n_elements)
    {
@@ -204,7 +204,7 @@
          (mp_mngr->allocate_many(elem_sizes, n_elements, sizeof(T)));
    }
 
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -219,7 +219,7 @@
    pointer allocate_one()
    { return this->allocate(1); }
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -234,7 +234,7 @@
    void deallocate_one(const pointer &p)
    { return this->deallocate(p, 1); }
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -253,10 +253,15 @@
    const_pointer address(const_reference value) const
    { return const_pointer(boost::addressof(value)); }
 
+ //!Copy construct an object
+ //!Throws if T's copy constructor throws
+ void construct(const pointer &ptr, const_reference v)
+ { new((void*)detail::get_pointer(ptr)) value_type(v); }
+
    //!Default construct an object.
    //!Throws if T's default constructor throws
    void construct(const pointer &ptr)
- { new(detail::get_pointer(ptr)) value_type; }
+ { new((void*)detail::get_pointer(ptr)) value_type; }
 
    //!Destroys object. Throws if object's
    //!destructor throws

Modified: branches/CMake/release/boost/interprocess/allocators/cached_adaptive_pool.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/allocators/cached_adaptive_pool.hpp (original)
+++ branches/CMake/release/boost/interprocess/allocators/cached_adaptive_pool.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -21,6 +21,7 @@
 #include <boost/interprocess/interprocess_fwd.hpp>
 #include <boost/interprocess/allocators/detail/adaptive_node_pool.hpp>
 #include <boost/interprocess/allocators/detail/allocator_common.hpp>
+#include <boost/interprocess/detail/utilities.hpp>
 #include <boost/interprocess/detail/workaround.hpp>
 #include <boost/interprocess/detail/version_type.hpp>
 #include <boost/interprocess/allocators/detail/node_tools.hpp>
@@ -38,8 +39,8 @@
 
 template < class T
          , class SegmentManager
- , std::size_t NodesPerChunk = 64
- , std::size_t MaxFreeChunks = 2
+ , std::size_t NodesPerBlock = 64
+ , std::size_t MaxFreeBlocks = 2
          , unsigned char OverheadPercent = 5
>
 class cached_adaptive_pool_v1
@@ -47,9 +48,9 @@
          < T
          , detail::shared_adaptive_node_pool
             < SegmentManager
- , sizeof(T)
- , NodesPerChunk
- , MaxFreeChunks
+ , sizeof_value<T>::value
+ , NodesPerBlock
+ , MaxFreeBlocks
             , OverheadPercent
>
          , 1>
@@ -59,9 +60,9 @@
          < T
          , detail::shared_adaptive_node_pool
             < SegmentManager
- , sizeof(T)
- , NodesPerChunk
- , MaxFreeChunks
+ , sizeof_value<T>::value
+ , NodesPerBlock
+ , MaxFreeBlocks
             , OverheadPercent
>
          , 1> base_t;
@@ -70,7 +71,7 @@
    struct rebind
    {
       typedef cached_adaptive_pool_v1
- <T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ <T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    cached_adaptive_pool_v1(SegmentManager *segment_mngr,
@@ -81,7 +82,7 @@
    template<class T2>
    cached_adaptive_pool_v1
       (const cached_adaptive_pool_v1
- <T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ <T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other)
       : base_t(other)
    {}
 };
@@ -100,17 +101,17 @@
 //!memory segment. But also caches some nodes privately to
 //!avoid some synchronization overhead.
 //!
-//!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
+//!NodesPerBlock is the minimum number of nodes of nodes allocated at once when
+//!the allocator needs runs out of nodes. MaxFreeBlocks is the maximum number of totally free blocks
+//!that the adaptive node pool will hold. The rest of the totally free blocks 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
+ , std::size_t NodesPerBlock
+ , std::size_t MaxFreeBlocks
          , unsigned char OverheadPercent
>
 class cached_adaptive_pool
@@ -119,9 +120,9 @@
          < T
          , detail::shared_adaptive_node_pool
             < SegmentManager
- , sizeof(T)
- , NodesPerChunk
- , MaxFreeChunks
+ , sizeof_value<T>::value
+ , NodesPerBlock
+ , MaxFreeBlocks
             , OverheadPercent
>
          , 2>
@@ -134,9 +135,9 @@
          < T
          , detail::shared_adaptive_node_pool
             < SegmentManager
- , sizeof(T)
- , NodesPerChunk
- , MaxFreeChunks
+ , sizeof_value<T>::value
+ , NodesPerBlock
+ , MaxFreeBlocks
             , OverheadPercent
>
          , 2> base_t;
@@ -148,7 +149,7 @@
    struct rebind
    {
       typedef cached_adaptive_pool
- <T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ <T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    cached_adaptive_pool(SegmentManager *segment_mngr,
@@ -158,7 +159,7 @@
 
    template<class T2>
    cached_adaptive_pool
- (const cached_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ (const cached_adaptive_pool<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other)
       : base_t(other)
    {}
 
@@ -181,7 +182,7 @@
    template<class T2>
    struct rebind
    {
- typedef cached_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ typedef cached_adaptive_pool<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    private:
@@ -210,7 +211,7 @@
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
    cached_adaptive_pool
- (const cached_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other);
+ (const cached_adaptive_pool<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other);
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
@@ -236,9 +237,9 @@
    //!Never throws
    void deallocate(const pointer &ptr, size_type count);
 
- //!Deallocates all free chunks
+ //!Deallocates all free blocks
    //!of the pool
- void deallocate_free_chunks();
+ void deallocate_free_blocks();
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
    //!different memory segment, the result is undefined.
@@ -252,9 +253,9 @@
    //!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);
+ //!Copy construct an object.
+ //!Throws if T's copy constructor throws
+ void construct(const pointer &ptr, const_reference v);
 
    //!Destroys object. Throws if object's
    //!destructor throws
@@ -271,7 +272,7 @@
                          size_type preferred_size,
                          size_type &received_size, const pointer &reuse = 0);
 
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -280,11 +281,11 @@
    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
+ //!contiguous block
    //!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
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -297,7 +298,7 @@
    //!Throws boost::interprocess::bad_alloc if there is no enough memory
    pointer allocate_one();
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -310,7 +311,7 @@
    //!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
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -331,15 +332,15 @@
 
 //!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);
+template<class T, class S, std::size_t NodesPerBlock, std::size_t F, std::size_t OP> inline
+bool operator==(const cached_adaptive_pool<T, S, NodesPerBlock, F, OP> &alloc1,
+ const cached_adaptive_pool<T, S, NodesPerBlock, 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);
+template<class T, class S, std::size_t NodesPerBlock, std::size_t F, std::size_t OP> inline
+bool operator!=(const cached_adaptive_pool<T, S, NodesPerBlock, F, OP> &alloc1,
+ const cached_adaptive_pool<T, S, NodesPerBlock, F, OP> &alloc2);
 
 #endif
 

Modified: branches/CMake/release/boost/interprocess/allocators/cached_node_allocator.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/allocators/cached_node_allocator.hpp (original)
+++ branches/CMake/release/boost/interprocess/allocators/cached_node_allocator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -22,6 +22,7 @@
 #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/detail/utilities.hpp>
 #include <boost/interprocess/detail/version_type.hpp>
 #include <boost/interprocess/allocators/detail/node_tools.hpp>
 #include <cstddef>
@@ -39,15 +40,15 @@
 
 template < class T
          , class SegmentManager
- , std::size_t NodesPerChunk = 64
+ , std::size_t NodesPerBlock = 64
>
 class cached_node_allocator_v1
    : public detail::cached_allocator_impl
          < T
          , detail::shared_node_pool
             < SegmentManager
- , sizeof(T)
- , NodesPerChunk
+ , sizeof_value<T>::value
+ , NodesPerBlock
>
          , 1>
 {
@@ -56,8 +57,8 @@
          < T
          , detail::shared_node_pool
             < SegmentManager
- , sizeof(T)
- , NodesPerChunk
+ , sizeof_value<T>::value
+ , NodesPerBlock
>
          , 1> base_t;
 
@@ -65,7 +66,7 @@
    struct rebind
    {
       typedef cached_node_allocator_v1
- <T2, SegmentManager, NodesPerChunk> other;
+ <T2, SegmentManager, NodesPerBlock> other;
    };
 
    cached_node_allocator_v1(SegmentManager *segment_mngr,
@@ -76,7 +77,7 @@
    template<class T2>
    cached_node_allocator_v1
       (const cached_node_allocator_v1
- <T2, SegmentManager, NodesPerChunk> &other)
+ <T2, SegmentManager, NodesPerBlock> &other)
       : base_t(other)
    {}
 };
@@ -87,7 +88,7 @@
 
 template < class T
          , class SegmentManager
- , std::size_t NodesPerChunk
+ , std::size_t NodesPerBlock
>
 class cached_node_allocator
    /// @cond
@@ -95,8 +96,8 @@
          < T
          , detail::shared_node_pool
             < SegmentManager
- , sizeof(T)
- , NodesPerChunk
+ , sizeof_value<T>::value
+ , NodesPerBlock
>
          , 2>
    /// @endcond
@@ -108,8 +109,8 @@
          < T
          , detail::shared_node_pool
             < SegmentManager
- , sizeof(T)
- , NodesPerChunk
+ , sizeof_value<T>::value
+ , NodesPerBlock
>
          , 2> base_t;
 
@@ -119,7 +120,7 @@
    template<class T2>
    struct rebind
    {
- typedef cached_node_allocator<T2, SegmentManager, NodesPerChunk> other;
+ typedef cached_node_allocator<T2, SegmentManager, NodesPerBlock> other;
    };
 
    cached_node_allocator(SegmentManager *segment_mngr,
@@ -129,7 +130,7 @@
 
    template<class T2>
    cached_node_allocator
- (const cached_node_allocator<T2, SegmentManager, NodesPerChunk> &other)
+ (const cached_node_allocator<T2, SegmentManager, NodesPerBlock> &other)
       : base_t(other)
    {}
 
@@ -181,7 +182,7 @@
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
    cached_node_allocator
- (const cached_node_allocator<T2, SegmentManager, NodesPerChunk> &other);
+ (const cached_node_allocator<T2, SegmentManager, NodesPerBlock> &other);
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
@@ -207,9 +208,9 @@
    //!Never throws
    void deallocate(const pointer &ptr, size_type count);
 
- //!Deallocates all free chunks
+ //!Deallocates all free blocks
    //!of the pool
- void deallocate_free_chunks();
+ void deallocate_free_blocks();
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
    //!different memory segment, the result is undefined.
@@ -225,7 +226,7 @@
 
    //!Default construct an object.
    //!Throws if T's default constructor throws
- void construct(const pointer &ptr);
+ void construct(const pointer &ptr, const_reference v);
 
    //!Destroys object. Throws if object's
    //!destructor throws
@@ -242,7 +243,7 @@
                          size_type preferred_size,
                          size_type &received_size, const pointer &reuse = 0);
 
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -251,11 +252,11 @@
    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
+ //!contiguous block
    //!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
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -268,7 +269,7 @@
    //!Throws boost::interprocess::bad_alloc if there is no enough memory
    pointer allocate_one();
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -281,7 +282,7 @@
    //!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
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -302,15 +303,15 @@
 
 //!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);
+template<class T, class S, std::size_t NPC> inline
+bool operator==(const cached_node_allocator<T, S, NPC> &alloc1,
+ const cached_node_allocator<T, S, NPC> &alloc2);
 
 //!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);
+template<class T, class S, std::size_t NPC> inline
+bool operator!=(const cached_node_allocator<T, S, NPC> &alloc1,
+ const cached_node_allocator<T, S, NPC> &alloc2);
 
 #endif
 

Modified: branches/CMake/release/boost/interprocess/allocators/detail/adaptive_node_pool.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/allocators/detail/adaptive_node_pool.hpp (original)
+++ branches/CMake/release/boost/interprocess/allocators/detail/adaptive_node_pool.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -49,7 +49,7 @@
    private_adaptive_node_pool_impl &operator=(const private_adaptive_node_pool_impl &);
 
    typedef typename SegmentManagerBase::void_pointer void_pointer;
-
+ static const std::size_t PayloadPerAllocation = SegmentManagerBase::PayloadPerAllocation;
    public:
    typedef typename node_slist<void_pointer>::node_t node_t;
    typedef typename node_slist<void_pointer>::node_slist_t free_nodes_t;
@@ -71,18 +71,18 @@
       std::size_t hdr_offset;
    };
 
- struct chunk_info_t
+ struct block_info_t
       :
          public hdr_offset_holder,
          public multiset_hook_t
    {
- //An intrusive list of free node from this chunk
+ //An intrusive list of free node from this block
       free_nodes_t free_nodes;
- friend bool operator <(const chunk_info_t &l, const chunk_info_t &r)
+ friend bool operator <(const block_info_t &l, const block_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.
+ //so that highest address fully free blocks 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();
@@ -90,11 +90,11 @@
       }
    };
    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;
+ <block_info_t, bi::base_hook<multiset_hook_t> >::type block_multiset_t;
+ typedef typename block_multiset_t::iterator block_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 HdrSize = ((sizeof(block_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)
@@ -102,13 +102,15 @@
       //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 elements_per_subblock = (dividend - 1)/divisor + 1;
       std::size_t candidate_power_of_2 =
- upper_power_of_2(elements_per_subchunk*real_node_size + HdrOffsetSize);
+ upper_power_of_2(elements_per_subblock*real_node_size + HdrOffsetSize);
       bool overhead_satisfied = false;
+ //Now calculate the wors-case overhead for a subblock
+ const std::size_t max_subblock_overhead = HdrSize + PayloadPerAllocation;
       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;
+ elements_per_subblock = (candidate_power_of_2 - max_subblock_overhead)/real_node_size;
+ const std::size_t overhead_size = candidate_power_of_2 - elements_per_subblock*real_node_size;
          if(overhead_size*100/candidate_power_of_2 < overhead_percent){
             overhead_satisfied = true;
          }
@@ -119,18 +121,30 @@
       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;
+ static void calculate_num_subblocks
+ (std::size_t alignment, std::size_t real_node_size, std::size_t elements_per_block
+ ,std::size_t &num_subblocks, std::size_t &real_num_node, std::size_t overhead_percent)
+ {
+ std::size_t elements_per_subblock = (alignment - HdrOffsetSize)/real_node_size;
+ std::size_t possible_num_subblock = (elements_per_block - 1)/elements_per_subblock + 1;
+ std::size_t hdr_subblock_elements = (alignment - HdrSize - PayloadPerAllocation)/real_node_size;
+ while(((possible_num_subblock-1)*elements_per_subblock + hdr_subblock_elements) < elements_per_block){
+ ++possible_num_subblock;
+ }
+ elements_per_subblock = (alignment - HdrOffsetSize)/real_node_size;
+ bool overhead_satisfied = false;
+ while(!overhead_satisfied){
+ const std::size_t total_data = (elements_per_subblock*(possible_num_subblock-1) + hdr_subblock_elements)*real_node_size;
+ const std::size_t total_size = alignment*possible_num_subblock;
+ if((total_size - total_data)*100/total_size < overhead_percent){
+ overhead_satisfied = true;
+ }
+ else{
+ ++possible_num_subblock;
+ }
       }
- num_subchunks = possible_num_subchunk;
- real_num_node = (possible_num_subchunk-1)*elements_per_subchunk + hdr_subchunk_elements;
+ num_subblocks = possible_num_subblock;
+ real_num_node = (possible_num_subblock-1)*elements_per_subblock + hdr_subblock_elements;
    }
 
    public:
@@ -140,27 +154,27 @@
    //!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
+ , std::size_t nodes_per_block, std::size_t max_free_blocks
       , unsigned char overhead_percent
       )
- : m_max_free_chunks(max_free_chunks)
+ : m_max_free_blocks(max_free_blocks)
    , 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_num_subchunks(0)
+ , m_real_block_alignment(calculate_alignment(overhead_percent, m_real_node_size))
+ //This is the real number of nodes per block
+ , m_num_subblocks(0)
    , m_real_num_node(0)
       //General purpose allocator
    , mp_segment_mngr_base(segment_mngr_base)
- , m_chunk_multiset()
- , m_totally_free_chunks(0)
+ , m_block_multiset()
+ , m_totally_free_blocks(0)
    {
- calculate_num_subchunks(m_real_chunk_alignment, m_real_node_size, nodes_per_chunk, m_num_subchunks, m_real_num_node);
+ calculate_num_subblocks(m_real_block_alignment, m_real_node_size, nodes_per_block, m_num_subblocks, m_real_num_node, overhead_percent);
    }
 
- //!Destructor. Deallocates all allocated chunks. Never throws
+ //!Destructor. Deallocates all allocated blocks. Never throws
    ~private_adaptive_node_pool_impl()
    { priv_clear(); }
 
@@ -176,8 +190,8 @@
    {
       priv_invariants();
       //If there are no free nodes we allocate a new block
- if (m_chunk_multiset.empty()){
- priv_alloc_chunk(1);
+ if (m_block_multiset.empty()){
+ priv_alloc_block(1);
       }
       //We take the first free node the multiset can't be empty
       return priv_take_first_node();
@@ -186,11 +200,11 @@
    //!Deallocates an array pointed by ptr. Never throws
    void deallocate_node(void *pElem)
    {
- this->priv_reinsert_nodes_in_chunk
+ this->priv_reinsert_nodes_in_block
          (multiallocation_iterator::create_simple_range(pElem));
- //Update free chunk count
- if(m_totally_free_chunks > m_max_free_chunks){
- this->priv_deallocate_free_chunks(m_max_free_chunks);
+ //Update free block count
+ if(m_totally_free_blocks > m_max_free_blocks){
+ this->priv_deallocate_free_blocks(m_max_free_blocks);
       }
       priv_invariants();
    }
@@ -201,17 +215,32 @@
    {
       try{
          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);
+ std::size_t i = 0;
+ while(i != n){
+ //If there are no free nodes we allocate all needed blocks
+ if (m_block_multiset.empty()){
+ priv_alloc_block(((n - i) - 1)/m_real_num_node + 1);
             }
- nodes.push_front(priv_take_first_node());
+ free_nodes_t &free_nodes = m_block_multiset.begin()->free_nodes;
+ const std::size_t free_nodes_count_before = free_nodes.size();
+ if(free_nodes_count_before == m_real_num_node){
+ --m_totally_free_blocks;
+ }
+ const std::size_t num_elems = ((n-i) < free_nodes_count_before) ? (n-i) : free_nodes_count_before;
+ for(std::size_t j = 0; j != num_elems; ++j){
+ void *new_node = &free_nodes.front();
+ free_nodes.pop_front();
+ nodes.push_back(new_node);
+ }
+
+ if(free_nodes.empty()){
+ m_block_multiset.erase(m_block_multiset.begin());
+ }
+ i += num_elems;
          }
       }
       catch(...){
          this->deallocate_nodes(nodes, nodes.size());
- this->priv_deallocate_free_chunks(m_max_free_chunks);
          throw;
       }
       priv_invariants();
@@ -245,20 +274,20 @@
    //!Deallocates the nodes pointed by the multiallocation iterator. Never throws
    void deallocate_nodes(multiallocation_iterator it)
    {
- this->priv_reinsert_nodes_in_chunk(it);
- if(m_totally_free_chunks > m_max_free_chunks){
- this->priv_deallocate_free_chunks(m_max_free_chunks);
+ this->priv_reinsert_nodes_in_block(it);
+ if(m_totally_free_blocks > m_max_free_blocks){
+ this->priv_deallocate_free_blocks(m_max_free_blocks);
       }
    }
 
- void deallocate_free_chunks()
- { this->priv_deallocate_free_chunks(0); }
+ void deallocate_free_blocks()
+ { this->priv_deallocate_free_blocks(0); }
 
    std::size_t num_free_nodes()
    {
- typedef typename chunk_multiset_t::const_iterator citerator;
+ typedef typename block_multiset_t::const_iterator citerator;
       std::size_t count = 0;
- citerator it (m_chunk_multiset.begin()), itend(m_chunk_multiset.end());
+ citerator it (m_block_multiset.begin()), itend(m_block_multiset.end());
       for(; it != itend; ++it){
          count += it->free_nodes.size();
       }
@@ -267,76 +296,80 @@
 
    void swap(private_adaptive_node_pool_impl &other)
    {
- assert(m_max_free_chunks == other.m_max_free_chunks);
+ assert(m_max_free_blocks == other.m_max_free_blocks);
       assert(m_real_node_size == other.m_real_node_size);
- assert(m_real_chunk_alignment == other.m_real_chunk_alignment);
+ assert(m_real_block_alignment == other.m_real_block_alignment);
       assert(m_real_num_node == other.m_real_num_node);
       std::swap(mp_segment_mngr_base, other.mp_segment_mngr_base);
- std::swap(m_totally_free_chunks, other.m_totally_free_chunks);
- m_chunk_multiset.swap(other.m_chunk_multiset);
+ std::swap(m_totally_free_blocks, other.m_totally_free_blocks);
+ m_block_multiset.swap(other.m_block_multiset);
    }
 
+ //Deprecated, use deallocate_free_blocks
+ void deallocate_free_chunks()
+ { this->priv_deallocate_free_blocks(0); }
+
    private:
- void priv_deallocate_free_chunks(std::size_t max_free_chunks)
+ void priv_deallocate_free_blocks(std::size_t max_free_blocks)
    {
       priv_invariants();
       //Now check if we've reached the free nodes limit
- //and check if we have free chunks. If so, deallocate as much
+ //and check if we have free blocks. If so, deallocate as much
       //as we can to stay below the limit
- for( chunk_iterator itend = m_chunk_multiset.end()
- ; m_totally_free_chunks > max_free_chunks
- ; --m_totally_free_chunks
+ for( block_iterator itend = m_block_multiset.end()
+ ; m_totally_free_blocks > max_free_blocks
+ ; --m_totally_free_blocks
          ){
- assert(!m_chunk_multiset.empty());
- chunk_iterator it = itend;
+ assert(!m_block_multiset.empty());
+ block_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));
+ m_block_multiset.erase_and_dispose
+ (it, block_destroyer(this));
       }
    }
 
- void priv_reinsert_nodes_in_chunk(multiallocation_iterator it)
+ void priv_reinsert_nodes_in_block(multiallocation_iterator it)
    {
       multiallocation_iterator itend;
- chunk_iterator chunk_it(m_chunk_multiset.end());
+ block_iterator block_it(m_block_multiset.end());
       while(it != itend){
          void *pElem = &*it;
          ++it;
          priv_invariants();
- chunk_info_t *chunk_info = this->priv_chunk_from_node(pElem);
- assert(chunk_info->free_nodes.size() < m_real_num_node);
+ block_info_t *block_info = this->priv_block_from_node(pElem);
+ assert(block_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);
+ block_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;
+ block_iterator this_block(block_multiset_t::s_iterator_to(*block_info));
+ block_iterator next_block(this_block);
+ ++next_block;
 
- //Cache the free nodes from the chunk
- std::size_t this_chunk_free_nodes = this_chunk->free_nodes.size();
+ //Cache the free nodes from the block
+ std::size_t this_block_free_nodes = this_block->free_nodes.size();
 
- if(this_chunk_free_nodes == 1){
- m_chunk_multiset.insert(m_chunk_multiset.begin(), *chunk_info);
+ if(this_block_free_nodes == 1){
+ m_block_multiset.insert(m_block_multiset.begin(), *block_info);
          }
          else{
- chunk_iterator next_chunk(this_chunk);
- ++next_chunk;
- if(next_chunk != chunk_it){
- 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);
+ block_iterator next_block(this_block);
+ ++next_block;
+ if(next_block != block_it){
+ std::size_t next_free_nodes = next_block->free_nodes.size();
+ if(this_block_free_nodes > next_free_nodes){
+ //Now move the block to the new position
+ m_block_multiset.erase(this_block);
+ m_block_multiset.insert(*block_info);
                }
             }
          }
- //Update free chunk count
- if(this_chunk_free_nodes == m_real_num_node){
- ++m_totally_free_chunks;
+ //Update free block count
+ if(this_block_free_nodes == m_real_num_node){
+ ++m_totally_free_blocks;
          }
          priv_invariants();
       }
@@ -344,40 +377,40 @@
 
    node_t *priv_take_first_node()
    {
- assert(m_chunk_multiset.begin() != m_chunk_multiset.end());
+ assert(m_block_multiset.begin() != m_block_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;
+ free_nodes_t &free_nodes = m_block_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());
+ m_block_multiset.erase(m_block_multiset.begin());
       }
       else if(free_nodes_count == m_real_num_node){
- --m_totally_free_chunks;
+ --m_totally_free_blocks;
       }
       priv_invariants();
       return first_node;
    }
 
- class chunk_destroyer;
- friend class chunk_destroyer;
+ class block_destroyer;
+ friend class block_destroyer;
 
- class chunk_destroyer
+ class block_destroyer
    {
       public:
- chunk_destroyer(const private_adaptive_node_pool_impl *impl)
+ block_destroyer(const private_adaptive_node_pool_impl *impl)
          : mp_impl(impl)
       {}
 
- void operator()(typename chunk_multiset_t::pointer to_deallocate)
+ void operator()(typename block_multiset_t::pointer to_deallocate)
       {
          std::size_t free_nodes = to_deallocate->free_nodes.size();
          (void)free_nodes;
          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));
+ hdr_offset_holder *hdr_off_holder = mp_impl->priv_first_subblock_from_block((block_info_t*)detail::get_pointer(to_deallocate));
          mp_impl->mp_segment_mngr_base->deallocate(hdr_off_holder);
       }
       const private_adaptive_node_pool_impl *mp_impl;
@@ -389,12 +422,12 @@
    #ifdef BOOST_INTERPROCESS_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS
    #undef BOOST_INTERPROCESS_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS
    {
- //We iterate through the chunk list to free the memory
- chunk_iterator it(m_chunk_multiset.begin()),
- itend(m_chunk_multiset.end()), to_deallocate;
+ //We iterate through the block list to free the memory
+ block_iterator it(m_block_multiset.begin()),
+ itend(m_block_multiset.end()), to_deallocate;
       if(it != itend){
          for(++it; it != itend; ++it){
- chunk_iterator prev(it);
+ block_iterator prev(it);
             --prev;
             std::size_t sp = prev->free_nodes.size(),
                         si = it->free_nodes.size();
@@ -405,35 +438,35 @@
 
       {
          //Check that the total free nodes are correct
- it = m_chunk_multiset.begin();
- itend = m_chunk_multiset.end();
+ it = m_block_multiset.begin();
+ itend = m_block_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);
+ assert(total_free_nodes >= m_totally_free_blocks*m_real_num_node);
       }
 
       {
- //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;
+ //Check that the total totally free blocks are correct
+ it = m_block_multiset.begin();
+ itend = m_block_multiset.end();
+ std::size_t total_free_blocks = 0;
          for(; it != itend; ++it){
- total_free_chunks += (it->free_nodes.size() == m_real_num_node);
+ total_free_blocks += (it->free_nodes.size() == m_real_num_node);
          }
- assert(total_free_chunks == m_totally_free_chunks);
+ assert(total_free_blocks == m_totally_free_blocks);
       }
       {
       //Check that header offsets are correct
- it = m_chunk_multiset.begin();
+ it = m_block_multiset.begin();
       for(; it != itend; ++it){
- 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){
+ hdr_offset_holder *hdr_off_holder = priv_first_subblock_from_block(&*it);
+ for(std::size_t i = 0, max = m_num_subblocks; 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);
+ assert(0 == ((std::size_t)hdr_off_holder & (m_real_block_alignment - 1)));
+ assert(0 == (hdr_off_holder->hdr_offset & (m_real_block_alignment - 1)));
+ hdr_off_holder = (hdr_offset_holder *)((char*)hdr_off_holder + m_real_block_alignment);
          }
       }
       }
@@ -446,72 +479,72 @@
    void priv_clear()
    {
       #ifndef NDEBUG
- chunk_iterator it = m_chunk_multiset.begin();
- chunk_iterator itend = m_chunk_multiset.end();
+ block_iterator it = m_block_multiset.begin();
+ block_iterator itend = m_block_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(num_free_nodes == m_totally_free_chunks);
+ assert(num_free_nodes == m_totally_free_blocks);
       #endif
       priv_invariants();
- m_chunk_multiset.clear_and_dispose
- (chunk_destroyer(this));
- m_totally_free_chunks = 0;
+ m_block_multiset.clear_and_dispose
+ (block_destroyer(this));
+ m_totally_free_blocks = 0;
    }
 
- chunk_info_t *priv_chunk_from_node(void *node) const
+ block_info_t *priv_block_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*)((std::size_t)node & std::size_t(~(m_real_block_alignment - 1)));
+ assert(0 == ((std::size_t)hdr_off_holder & (m_real_block_alignment - 1)));
+ assert(0 == (hdr_off_holder->hdr_offset & (m_real_block_alignment - 1)));
+ block_info_t *block = (block_info_t *)(((char*)hdr_off_holder) + hdr_off_holder->hdr_offset);
+ assert(block->hdr_offset == 0);
+ return block;
    }
 
- hdr_offset_holder *priv_first_subchunk_from_chunk(chunk_info_t *chunk) const
+ hdr_offset_holder *priv_first_subblock_from_block(block_info_t *block) 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)));
+ (((char*)block) - (m_num_subblocks-1)*m_real_block_alignment);
+ assert(hdr_off_holder->hdr_offset == std::size_t((char*)block - (char*)hdr_off_holder));
+ assert(0 == ((std::size_t)hdr_off_holder & (m_real_block_alignment - 1)));
+ assert(0 == (hdr_off_holder->hdr_offset & (m_real_block_alignment - 1)));
       return hdr_off_holder;
    }
 
- //!Allocates a several chunks of nodes. Can throw boost::interprocess::bad_alloc
- void priv_alloc_chunk(std::size_t n)
+ //!Allocates a several blocks of nodes. Can throw boost::interprocess::bad_alloc
+ void priv_alloc_block(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;
+ std::size_t real_block_size = m_real_block_alignment*m_num_subblocks - SegmentManagerBase::PayloadPerAllocation;
+ std::size_t elements_per_subblock = (m_real_block_alignment - HdrOffsetSize)/m_real_node_size;
+ std::size_t hdr_subblock_elements = (m_real_block_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));
+ (mp_segment_mngr_base->allocate_aligned(real_block_size, m_real_block_alignment));
          if(!mem_address) throw std::bad_alloc();
- ++m_totally_free_chunks;
+ ++m_totally_free_blocks;
 
- //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;
+ //First initialize header information on the last subblock
+ char *hdr_addr = mem_address + m_real_block_alignment*(m_num_subblocks-1);
+ block_info_t *c_info = new(hdr_addr)block_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){
+ for( std::size_t subblock = 0, maxsubblock = m_num_subblocks - 1
+ ; subblock < maxsubblock
+ ; ++subblock, mem_address += m_real_block_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){
+ for(std::size_t i = 0; i < elements_per_subblock; ++i){
                prev_insert_pos = c_info->free_nodes.insert_after(prev_insert_pos, *new (pNode) node_t);
                pNode += m_real_node_size;
             }
@@ -520,13 +553,13 @@
             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){
+ for(std::size_t i = 0; i < hdr_subblock_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);
+ //Insert the block after the free node list is full
+ m_block_multiset.insert(m_block_multiset.end(), *c_info);
       }
    }
 
@@ -534,25 +567,25 @@
    typedef typename pointer_to_other
       <void_pointer, segment_manager_base_type>::type segment_mngr_base_ptr_t;
 
- const std::size_t m_max_free_chunks;
+ const std::size_t m_max_free_blocks;
    const std::size_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
- 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_block_alignment;
+ std::size_t m_num_subblocks;
+ //This is the real number of nodes per block
    //const
    std::size_t m_real_num_node;
    segment_mngr_base_ptr_t mp_segment_mngr_base;//Segment manager
- chunk_multiset_t m_chunk_multiset; //Intrusive chunk list
- std::size_t m_totally_free_chunks; //Free chunks
+ block_multiset_t m_block_multiset; //Intrusive block list
+ std::size_t m_totally_free_blocks; //Free blocks
 };
 
 template< class SegmentManager
         , std::size_t NodeSize
- , std::size_t NodesPerChunk
- , std::size_t MaxFreeChunks
+ , std::size_t NodesPerBlock
+ , std::size_t MaxFreeBlocks
         , unsigned char OverheadPercent
>
 class private_adaptive_node_pool
@@ -569,11 +602,14 @@
    public:
    typedef SegmentManager segment_manager;
 
- static const std::size_t nodes_per_chunk = NodesPerChunk;
+ static const std::size_t nodes_per_block = NodesPerBlock;
+
+ //Deprecated, use node_per_block
+ static const std::size_t nodes_per_chunk = NodesPerBlock;
 
    //!Constructor from a segment manager. Never throws
    private_adaptive_node_pool(segment_manager *segment_mngr)
- : base_t(segment_mngr, NodeSize, NodesPerChunk, MaxFreeChunks, OverheadPercent)
+ : base_t(segment_mngr, NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent)
    {}
 
    //!Returns the segment manager. Never throws
@@ -584,22 +620,22 @@
 //!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
+//!nodes allocated per block (NodesPerBlock) are known at compile time
 template< class SegmentManager
         , std::size_t NodeSize
- , std::size_t NodesPerChunk
- , std::size_t MaxFreeChunks
+ , std::size_t NodesPerBlock
+ , std::size_t MaxFreeBlocks
         , unsigned char OverheadPercent
>
 class shared_adaptive_node_pool
    : public detail::shared_pool_impl
       < private_adaptive_node_pool
- <SegmentManager, NodeSize, NodesPerChunk, MaxFreeChunks, OverheadPercent>
+ <SegmentManager, NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent>
>
 {
    typedef detail::shared_pool_impl
       < private_adaptive_node_pool
- <SegmentManager, NodeSize, NodesPerChunk, MaxFreeChunks, OverheadPercent>
+ <SegmentManager, NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent>
> base_t;
    public:
    shared_adaptive_node_pool(SegmentManager *segment_mgnr)

Modified: branches/CMake/release/boost/interprocess/allocators/detail/allocator_common.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/allocators/detail/allocator_common.hpp (original)
+++ branches/CMake/release/boost/interprocess/allocators/detail/allocator_common.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -294,7 +294,7 @@
          (command, limit_size, preferred_size, received_size, detail::get_pointer(reuse));
    }
 
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -307,7 +307,7 @@
    }
 
    //!Allocates n_elements elements, each one of size elem_sizes[i]in a
- //!contiguous chunk
+ //!contiguous block
    //!of memory. The elements must be deallocated
    multiallocation_iterator allocate_many(const size_type *elem_sizes, size_type n_elements)
    {
@@ -315,7 +315,7 @@
          (this->derived()->get_segment_manager()->allocate_many(elem_sizes, n_elements, sizeof(T)));
    }
 
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -342,7 +342,12 @@
    //!Default construct an object.
    //!Throws if T's default constructor throws
    void construct(const pointer &ptr)
- { new(detail::get_pointer(ptr)) value_type; }
+ { new((void*)detail::get_pointer(ptr)) value_type; }
+
+ //!Copy construct an object
+ //!Throws if T's copy constructor throws
+ void construct(const pointer &ptr, const_reference v)
+ { new((void*)detail::get_pointer(ptr)) value_type(v); }
 
    //!Destroys object. Throws if object's
    //!destructor throws
@@ -386,64 +391,94 @@
    typedef typename SegmentManager::
       multiallocation_chain multiallocation_chain;
 
+ template <int Dummy>
+ struct node_pool
+ {
+ typedef typename Derived::template node_pool<0>::type type;
+ static type *get(void *p)
+ { return static_cast<type*>(p); }
+ };
+
    public:
    //!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;
+ typedef typename node_pool<0>::type node_pool_t;
+ node_pool_t *pool = node_pool<0>::get(this->derived()->get_node_pool());
       if(count > this->max_size())
          throw bad_alloc();
       else if(Version == 1 && count == 1)
- return pointer(static_cast<value_type*>(this->derived()->get_node_pool()->allocate_node()));
+ return pointer(static_cast<value_type*>
+ (pool->allocate_node()));
       else
          return pointer(static_cast<value_type*>
- (this->derived()->get_node_pool()->get_segment_manager()->allocate(sizeof(T)*count)));
+ (pool->get_segment_manager()->allocate(sizeof(T)*count)));
    }
 
    //!Deallocate allocated memory. Never throws
    void deallocate(const pointer &ptr, size_type count)
    {
       (void)count;
+ typedef typename node_pool<0>::type node_pool_t;
+ node_pool_t *pool = node_pool<0>::get(this->derived()->get_node_pool());
       if(Version == 1 && count == 1)
- this->derived()->get_node_pool()->deallocate_node(detail::get_pointer(ptr));
+ pool->deallocate_node(detail::get_pointer(ptr));
       else
- this->derived()->get_node_pool()->get_segment_manager()->deallocate(detail::get_pointer(ptr));
+ pool->get_segment_manager()->deallocate((void*)detail::get_pointer(ptr));
    }
 
    //!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 pointer(static_cast<value_type*>(this->derived()->get_node_pool()->allocate_node())); }
+ {
+ typedef typename node_pool<0>::type node_pool_t;
+ node_pool_t *pool = node_pool<0>::get(this->derived()->get_node_pool());
+ return pointer(static_cast<value_type*>(pool->allocate_node()));
+ }
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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)
- { return multiallocation_iterator(this->derived()->get_node_pool()->allocate_nodes(num_elements)); }
+ {
+ typedef typename node_pool<0>::type node_pool_t;
+ node_pool_t *pool = node_pool<0>::get(this->derived()->get_node_pool());
+ return multiallocation_iterator(pool->allocate_nodes(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)
- { this->derived()->get_node_pool()->deallocate_node(detail::get_pointer(p)); }
+ {
+ typedef typename node_pool<0>::type node_pool_t;
+ node_pool_t *pool = node_pool<0>::get(this->derived()->get_node_pool());
+ pool->deallocate_node(detail::get_pointer(p));
+ }
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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)
- { this->derived()->get_node_pool()->deallocate_nodes(it.base()); }
+ { node_pool<0>::get(this->derived()->get_node_pool())->deallocate_nodes(it.base()); }
 
- //!Deallocates all free chunks of the pool
+ //!Deallocates all free blocks of the pool
+ void deallocate_free_blocks()
+ { node_pool<0>::get(this->derived()->get_node_pool())->deallocate_free_blocks(); }
+
+ //!Deprecated, use deallocate_free_blocks.
+ //!Deallocates all free chunks of the pool.
    void deallocate_free_chunks()
- { this->derived()->get_node_pool()->deallocate_free_chunks(); }
+ { node_pool<0>::get(this->derived()->get_node_pool())->deallocate_free_blocks(); }
 };
 
 template<class T, class NodePool, unsigned int Version>
@@ -536,7 +571,7 @@
          m_cache.cached_deallocation(detail::get_pointer(ptr));
       }
       else{
- this->get_segment_manager()->deallocate(detail::get_pointer(ptr));
+ this->get_segment_manager()->deallocate((void*)detail::get_pointer(ptr));
       }
    }
 
@@ -546,7 +581,7 @@
    pointer allocate_one()
    { return pointer(static_cast<value_type*>(this->m_cache.cached_allocation())); }
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -561,7 +596,7 @@
    void deallocate_one(const pointer &p)
    { this->m_cache.cached_deallocation(detail::get_pointer(p)); }
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -570,9 +605,9 @@
    void deallocate_individual(multiallocation_iterator it)
    { m_cache.cached_deallocation(it.base()); }
 
- //!Deallocates all free chunks of the pool
- void deallocate_free_chunks()
- { m_cache.get_node_pool()->deallocate_free_chunks(); }
+ //!Deallocates all free blocks of the pool
+ void deallocate_free_blocks()
+ { m_cache.get_node_pool()->deallocate_free_blocks(); }
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
    //!different shared memory segments, the result is undefined.
@@ -586,6 +621,10 @@
    void deallocate_cache()
    { m_cache.deallocate_all_cached_nodes(); }
 
+ //!Deprecated use deallocate_free_blocks.
+ void deallocate_free_chunks()
+ { m_cache.get_node_pool()->deallocate_free_blocks(); }
+
    /// @cond
    private:
    cache_impl<node_pool_t> m_cache;
@@ -609,7 +648,7 @@
 //!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
+//!nodes allocated per block (NodesPerBlock) are known at compile time
 template<class private_node_allocator_t>
 class shared_pool_impl
    : public private_node_allocator_t
@@ -631,7 +670,7 @@
       : private_node_allocator_t(segment_mngr)
    {}
 
- //!Destructor. Deallocates all allocated chunks. Never throws
+ //!Destructor. Deallocates all allocated blocks. Never throws
    ~shared_pool_impl()
    {}
 
@@ -700,24 +739,24 @@
       private_node_allocator_t::deallocate_nodes(it);
    }
 
- //!Deallocates all the free chunks of memory. Never throws
- void deallocate_free_chunks()
+ //!Deallocates all the free blocks of memory. Never throws
+ void deallocate_free_blocks()
    {
       //-----------------------
       boost::interprocess::scoped_lock<mutex_type> guard(m_header);
       //-----------------------
- private_node_allocator_t::deallocate_free_chunks();
+ private_node_allocator_t::deallocate_free_blocks();
    }
 
    //!Deallocates all used memory from the common pool.
    //!Precondition: all nodes allocated from this pool should
    //!already be deallocated. Otherwise, undefined behavior. Never throws
- void purge_chunks()
+ void purge_blocks()
    {
       //-----------------------
       boost::interprocess::scoped_lock<mutex_type> guard(m_header);
       //-----------------------
- private_node_allocator_t::purge_chunks();
+ private_node_allocator_t::purge_blocks();
    }
 
    //!Increments internal reference count and returns new count. Never throws
@@ -739,6 +778,24 @@
       return --m_header.m_usecount;
    }
 
+ //!Deprecated, use deallocate_free_blocks.
+ void deallocate_free_chunks()
+ {
+ //-----------------------
+ boost::interprocess::scoped_lock<mutex_type> guard(m_header);
+ //-----------------------
+ private_node_allocator_t::deallocate_free_blocks();
+ }
+
+ //!Deprecated, use purge_blocks.
+ void purge_chunks()
+ {
+ //-----------------------
+ boost::interprocess::scoped_lock<mutex_type> guard(m_header);
+ //-----------------------
+ private_node_allocator_t::purge_blocks();
+ }
+
    private:
    //!This struct includes needed data and derives from
    //!interprocess_mutex to allow EBO when using null_mutex

Modified: branches/CMake/release/boost/interprocess/allocators/detail/node_pool.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/allocators/detail/node_pool.hpp (original)
+++ branches/CMake/release/boost/interprocess/allocators/detail/node_pool.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -60,30 +60,30 @@
    typedef typename bi::make_slist
       < node_t, bi::base_hook<slist_hook_t>
       , bi::linear<true>
- , bi::constant_time_size<false> >::type chunkslist_t;
+ , bi::constant_time_size<false> >::type blockslist_t;
    public:
 
    //!Segment manager typedef
    typedef SegmentManagerBase segment_manager_base_type;
 
    //!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_nodes_per_chunk(nodes_per_chunk)
+ private_node_pool_impl(segment_manager_base_type *segment_mngr_base, std::size_t node_size, std::size_t nodes_per_block)
+ : m_nodes_per_block(nodes_per_block)
    , 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()
+ , m_blocklist()
    , m_freelist()
       //Debug node count
    , m_allocated(0)
    {}
 
- //!Destructor. Deallocates all allocated chunks. Never throws
+ //!Destructor. Deallocates all allocated blocks. Never throws
    ~private_node_pool_impl()
- { this->purge_chunks(); }
+ { this->purge_blocks(); }
 
    std::size_t get_real_num_node() const
- { return m_nodes_per_chunk; }
+ { return m_nodes_per_block; }
 
    //!Returns the segment manager. Never throws
    segment_manager_base_type* get_segment_manager_base()const
@@ -94,7 +94,7 @@
    {
       //If there are no free nodes we allocate a new block
       if (m_freelist.empty())
- priv_alloc_chunk();
+ priv_alloc_block();
       //We take the first free node
       node_t *n = (node_t*)&m_freelist.front();
       m_freelist.pop_front();
@@ -173,36 +173,36 @@
       }
    }
 
- //!Deallocates all the free chunks of memory. Never throws
- void deallocate_free_chunks()
+ //!Deallocates all the free blocks of memory. Never throws
+ void deallocate_free_blocks()
    {
       typedef typename free_nodes_t::iterator nodelist_iterator;
- typename chunkslist_t::iterator bit(m_chunklist.before_begin()),
- it(m_chunklist.begin()),
- itend(m_chunklist.end());
+ typename blockslist_t::iterator bit(m_blocklist.before_begin()),
+ it(m_blocklist.begin()),
+ itend(m_blocklist.end());
       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);
+ (m_real_node_size*m_nodes_per_block, alignment_of<node_t>::value);
 
       while(it != itend){
- //Collect all the nodes from the chunk pointed by it
+ //Collect all the nodes from the block 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, blocksize);
+ const void *addr = get_block_from_hook(&*it, blocksize);
 
          m_freelist.remove_and_dispose_if
             (is_between(addr, blocksize), push_in_list(free_nodes, last_it));
 
- //If the number of nodes is equal to m_nodes_per_chunk
+ //If the number of nodes is equal to m_nodes_per_block
          //this means that the block can be deallocated
- if(free_nodes.size() == m_nodes_per_chunk){
+ if(free_nodes.size() == m_nodes_per_block){
             //Unlink the nodes
             free_nodes.clear();
- it = m_chunklist.erase_after(bit);
+ it = m_blocklist.erase_after(bit);
             mp_segment_mngr_base->deallocate((void*)addr);
          }
          //Otherwise, insert them in the backup list, since the
@@ -240,20 +240,20 @@
 
    //!Deallocates all used memory. Precondition: all nodes allocated from this pool should
    //!already be deallocated. Otherwise, undefined behaviour. Never throws
- void purge_chunks()
+ void purge_blocks()
    {
       //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;
+ (m_real_node_size*m_nodes_per_block, alignment_of<node_t>::value);
+ typename blockslist_t::iterator
+ it(m_blocklist.begin()), itend(m_blocklist.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(), blocksize);
- m_chunklist.pop_front();
- mp_segment_mngr_base->deallocate(addr);
+ while(!m_blocklist.empty()){
+ void *addr = get_block_from_hook(&m_blocklist.front(), blocksize);
+ m_blocklist.pop_front();
+ mp_segment_mngr_base->deallocate((void*)addr);
       }
       //Just clear free node list
       m_freelist.clear();
@@ -262,7 +262,7 @@
    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_blocklist.swap(other.m_blocklist);
       m_freelist.swap(other.m_freelist);
       std::swap(m_allocated, other.m_allocated);
    }
@@ -305,36 +305,44 @@
       const char * end_;
    };
 
- //!Allocates a chunk of nodes. Can throw boost::interprocess::bad_alloc
- void priv_alloc_chunk()
+ //!Allocates a block of nodes. Can throw boost::interprocess::bad_alloc
+ void priv_alloc_block()
    {
       //We allocate a new NodeBlock and put it as first
       //element in the free Node list
       std::size_t blocksize =
- detail::get_rounded_size(m_real_node_size*m_nodes_per_chunk, alignment_of<node_t>::value);
+ detail::get_rounded_size(m_real_node_size*m_nodes_per_block, 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, blocksize));
+ m_blocklist.push_front(get_block_hook(pBlock, blocksize));
 
       //We initialize all Nodes in Node Block to insert
       //them in the free Node list
- for(std::size_t i = 0; i < m_nodes_per_chunk; ++i, pNode += m_real_node_size){
+ for(std::size_t i = 0; i < m_nodes_per_block; ++i, pNode += m_real_node_size){
          m_freelist.push_front(*new (pNode) node_t);
       }
    }
 
+ //!Deprecated, use deallocate_free_blocks
+ void deallocate_free_chunks()
+ { this->deallocate_free_blocks(); }
+
+ //!Deprecated, use purge_blocks
+ void purge_chunks()
+ { this->purge_blocks(); }
+
    private:
- //!Returns a reference to the chunk hook placed in the end of the chunk
- static inline node_t & get_chunk_hook (void *chunk, std::size_t blocksize)
+ //!Returns a reference to the block hook placed in the end of the block
+ static inline node_t & get_block_hook (void *block, std::size_t blocksize)
    {
       return *static_cast<node_t*>(
- static_cast<void*>((detail::char_ptr_cast(chunk) + blocksize)));
+ static_cast<void*>((detail::char_ptr_cast(block) + 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, std::size_t blocksize)
+ //!Returns the starting address of the block reference to the block hook placed in the end of the block
+ inline void *get_block_from_hook (node_t *hook, std::size_t blocksize)
    {
       return static_cast<void*>((detail::char_ptr_cast(hook) - blocksize));
    }
@@ -343,10 +351,10 @@
    typedef typename pointer_to_other
       <void_pointer, segment_manager_base_type>::type segment_mngr_base_ptr_t;
 
- const std::size_t m_nodes_per_chunk;
+ const std::size_t m_nodes_per_block;
    const std::size_t m_real_node_size;
    segment_mngr_base_ptr_t mp_segment_mngr_base; //Segment manager
- chunkslist_t m_chunklist; //Intrusive container of chunks
+ blockslist_t m_blocklist; //Intrusive container of blocks
    free_nodes_t m_freelist; //Intrusive container of free nods
    std::size_t m_allocated; //Used nodes for debugging
 };
@@ -355,8 +363,8 @@
 //!Pooled shared memory allocator using single segregated storage. 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 >
+//!nodes allocated per block (NodesPerBlock) are known at compile time
+template< class SegmentManager, std::size_t NodeSize, std::size_t NodesPerBlock >
 class private_node_pool
    //Inherit from the implementation to avoid template bloat
    : public private_node_pool_impl<typename SegmentManager::segment_manager_base_type>
@@ -370,11 +378,13 @@
    public:
    typedef SegmentManager segment_manager;
 
- static const std::size_t nodes_per_chunk = NodesPerChunk;
+ static const std::size_t nodes_per_block = NodesPerBlock;
+ //Deprecated, use nodes_per_block
+ static const std::size_t nodes_per_chunk = NodesPerBlock;
 
    //!Constructor from a segment manager. Never throws
    private_node_pool(segment_manager *segment_mngr)
- : base_t(segment_mngr, NodeSize, NodesPerChunk)
+ : base_t(segment_mngr, NodeSize, NodesPerBlock)
    {}
 
    //!Returns the segment manager. Never throws
@@ -386,24 +396,24 @@
 //!Pooled shared memory allocator using single segregated storage. 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
+//!nodes allocated per block (NodesPerBlock) 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
+//!nodes allocated per block (NodesPerBlock) are known at compile time
 template< class SegmentManager
         , std::size_t NodeSize
- , std::size_t NodesPerChunk
+ , std::size_t NodesPerBlock
>
 class shared_node_pool
    : public detail::shared_pool_impl
       < private_node_pool
- <SegmentManager, NodeSize, NodesPerChunk>
+ <SegmentManager, NodeSize, NodesPerBlock>
>
 {
    typedef detail::shared_pool_impl
       < private_node_pool
- <SegmentManager, NodeSize, NodesPerChunk>
+ <SegmentManager, NodeSize, NodesPerBlock>
> base_t;
    public:
    shared_node_pool(SegmentManager *segment_mgnr)

Modified: branches/CMake/release/boost/interprocess/allocators/node_allocator.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/allocators/node_allocator.hpp (original)
+++ branches/CMake/release/boost/interprocess/allocators/node_allocator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -43,12 +43,12 @@
 template < unsigned int Version
          , class T
          , class SegmentManager
- , std::size_t NodesPerChunk
+ , std::size_t NodesPerBlock
>
 class node_allocator_base
    : public node_pool_allocation_impl
    < node_allocator_base
- < Version, T, SegmentManager, NodesPerChunk>
+ < Version, T, SegmentManager, NodesPerBlock>
    , Version
    , T
    , SegmentManager
@@ -58,11 +58,20 @@
    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;
+ <Version, T, SegmentManager, NodesPerBlock> self_t;
+
+ /// @cond
+
+ template <int dummy>
+ struct node_pool
+ {
+ typedef detail::shared_node_pool
+ < SegmentManager, sizeof_value<T>::value, NodesPerBlock> type;
+
+ static type *get(void *p)
+ { return static_cast<type*>(p); }
+ };
+ /// @endcond
 
    BOOST_STATIC_ASSERT((Version <=2));
 
@@ -93,7 +102,7 @@
    template<class T2>
    struct rebind
    {
- typedef node_allocator_base<Version, T2, SegmentManager, NodesPerChunk> other;
+ typedef node_allocator_base<Version, T2, SegmentManager, NodesPerBlock> other;
    };
 
    /// @cond
@@ -104,7 +113,7 @@
       (const node_allocator_base<Version2, T2, SegmentManager2, N2>&);
 
    //!Not assignable from other node_allocator_base
- node_allocator_base& operator=(const node_allocator_base&);
+ //node_allocator_base& operator=(const node_allocator_base&);
    /// @endcond
 
    public:
@@ -112,14 +121,14 @@
    //!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)) { }
+ : mp_node_pool(detail::get_or_create_node_pool<typename node_pool<0>::type>(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();
+ node_pool<0>::get(detail::get_pointer(mp_node_pool))->inc_ref_count();
    }
 
    //!Copy constructor from related node_allocator_base. If not present, constructs
@@ -127,23 +136,31 @@
    //!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())) { }
+ (const node_allocator_base<Version, T2, SegmentManager, NodesPerBlock> &other)
+ : mp_node_pool(detail::get_or_create_node_pool<typename node_pool<0>::type>(other.get_segment_manager())) { }
+
+ //!Assignment from other node_allocator_base
+ node_allocator_base& operator=(const node_allocator_base &other)
+ {
+ node_allocator_base c(other);
+ swap(*this, c);
+ return *this;
+ }
 
    //!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)); }
+ { detail::destroy_node_pool_if_last_link(node_pool<0>::get(detail::get_pointer(mp_node_pool))); }
 
    //!Returns a pointer to the node pool.
    //!Never throws
- node_pool_t* get_node_pool() const
+ void* 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(); }
+ { return node_pool<0>::get(detail::get_pointer(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.
@@ -152,44 +169,44 @@
 
    /// @cond
    private:
- node_pool_ptr mp_node_pool;
+ void_pointer 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)
+template<unsigned int V, class T, class S, std::size_t NPC> inline
+bool operator==(const node_allocator_base<V, T, S, NPC> &alloc1,
+ const node_allocator_base<V, T, S, NPC> &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)
+template<unsigned int V, class T, class S, std::size_t NPC> inline
+bool operator!=(const node_allocator_base<V, T, S, NPC> &alloc1,
+ const node_allocator_base<V, T, S, NPC> &alloc2)
    { return alloc1.get_node_pool() != alloc2.get_node_pool(); }
 
 template < class T
          , class SegmentManager
- , std::size_t NodesPerChunk = 64
+ , std::size_t NodesPerBlock = 64
>
 class node_allocator_v1
    : public node_allocator_base
          < 1
          , T
          , SegmentManager
- , NodesPerChunk
+ , NodesPerBlock
>
 {
    public:
    typedef detail::node_allocator_base
- < 1, T, SegmentManager, NodesPerChunk> base_t;
+ < 1, T, SegmentManager, NodesPerBlock> base_t;
 
    template<class T2>
    struct rebind
    {
- typedef node_allocator_v1<T2, SegmentManager, NodesPerChunk> other;
+ typedef node_allocator_v1<T2, SegmentManager, NodesPerBlock> other;
    };
 
    node_allocator_v1(SegmentManager *segment_mngr)
@@ -198,7 +215,7 @@
 
    template<class T2>
    node_allocator_v1
- (const node_allocator_v1<T2, SegmentManager, NodesPerChunk> &other)
+ (const node_allocator_v1<T2, SegmentManager, NodesPerBlock> &other)
       : base_t(other)
    {}
 };
@@ -213,11 +230,11 @@
 //!placing the allocator in shared memory, memory mapped-files, etc...
 //!This node allocator shares a segregated storage between all instances
 //!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
+//!group. NodesPerBlock 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
+ , std::size_t NodesPerBlock
>
 class node_allocator
    /// @cond
@@ -225,21 +242,21 @@
          < 2
          , T
          , SegmentManager
- , NodesPerChunk
+ , NodesPerBlock
>
    /// @endcond
 {
 
    #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
    typedef detail::node_allocator_base
- < 2, T, SegmentManager, NodesPerChunk> base_t;
+ < 2, T, SegmentManager, NodesPerBlock> base_t;
    public:
    typedef detail::version_type<node_allocator, 2> version;
 
    template<class T2>
    struct rebind
    {
- typedef node_allocator<T2, SegmentManager, NodesPerChunk> other;
+ typedef node_allocator<T2, SegmentManager, NodesPerBlock> other;
    };
 
    node_allocator(SegmentManager *segment_mngr)
@@ -248,7 +265,7 @@
 
    template<class T2>
    node_allocator
- (const node_allocator<T2, SegmentManager, NodesPerChunk> &other)
+ (const node_allocator<T2, SegmentManager, NodesPerBlock> &other)
       : base_t(other)
    {}
 
@@ -271,7 +288,7 @@
    template<class T2>
    struct rebind
    {
- typedef node_allocator<T2, SegmentManager, NodesPerChunk> other;
+ typedef node_allocator<T2, SegmentManager, NodesPerBlock> other;
    };
 
    private:
@@ -283,7 +300,7 @@
 
    //!Not assignable from
    //!other node_allocator
- node_allocator& operator=(const node_allocator&);
+ //node_allocator& operator=(const node_allocator&);
 
    public:
    //!Constructor from a segment manager. If not present, constructs a node
@@ -300,7 +317,7 @@
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
    node_allocator
- (const node_allocator<T2, SegmentManager, NodesPerChunk> &other);
+ (const node_allocator<T2, SegmentManager, NodesPerBlock> &other);
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
@@ -308,7 +325,7 @@
 
    //!Returns a pointer to the node pool.
    //!Never throws
- node_pool_t* get_node_pool() const;
+ void* get_node_pool() const;
 
    //!Returns the segment manager.
    //!Never throws
@@ -326,9 +343,9 @@
    //!Never throws
    void deallocate(const pointer &ptr, size_type count);
 
- //!Deallocates all free chunks
+ //!Deallocates all free blocks
    //!of the pool
- void deallocate_free_chunks();
+ void deallocate_free_blocks();
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
    //!different memory segment, the result is undefined.
@@ -342,9 +359,9 @@
    //!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);
+ //!Copy construct an object.
+ //!Throws if T's copy constructor throws
+ void construct(const pointer &ptr, const_reference v);
 
    //!Destroys object. Throws if object's
    //!destructor throws
@@ -361,7 +378,7 @@
                          size_type preferred_size,
                          size_type &received_size, const pointer &reuse = 0);
 
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -370,11 +387,11 @@
    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
+ //!contiguous block
    //!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
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -387,7 +404,7 @@
    //!Throws boost::interprocess::bad_alloc if there is no enough memory
    pointer allocate_one();
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -400,7 +417,7 @@
    //!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
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -414,15 +431,15 @@
 
 //!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);
+template<class T, class S, std::size_t NPC> inline
+bool operator==(const node_allocator<T, S, NPC> &alloc1,
+ const node_allocator<T, S, NPC> &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);
+template<class T, class S, std::size_t NPC> inline
+bool operator!=(const node_allocator<T, S, NPC> &alloc1,
+ const node_allocator<T, S, NPC> &alloc2);
 
 #endif
 

Modified: branches/CMake/release/boost/interprocess/allocators/private_adaptive_pool.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/allocators/private_adaptive_pool.hpp (original)
+++ branches/CMake/release/boost/interprocess/allocators/private_adaptive_pool.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -42,31 +42,34 @@
 template < unsigned int Version
          , class T
          , class SegmentManager
- , std::size_t NodesPerChunk
- , std::size_t MaxFreeChunks
+ , std::size_t NodesPerBlock
+ , std::size_t MaxFreeBlocks
          , unsigned char OverheadPercent
>
 class private_adaptive_pool_base
    : public node_pool_allocation_impl
- < private_adaptive_pool_base < Version, T, SegmentManager, NodesPerChunk
- , MaxFreeChunks, OverheadPercent>
+ < private_adaptive_pool_base < Version, T, SegmentManager, NodesPerBlock
+ , MaxFreeBlocks, OverheadPercent>
    , Version
    , T
    , SegmentManager
>
 {
+ public:
+ //Segment manager
+ typedef SegmentManager segment_manager;
+ typedef typename SegmentManager::void_pointer void_pointer;
+
    /// @cond
    private:
- typedef typename SegmentManager::void_pointer void_pointer;
- typedef SegmentManager segment_manager;
    typedef private_adaptive_pool_base
- < Version, T, SegmentManager, NodesPerChunk
- , MaxFreeChunks, OverheadPercent> self_t;
+ < Version, T, SegmentManager, NodesPerBlock
+ , MaxFreeBlocks, OverheadPercent> self_t;
    typedef detail::private_adaptive_node_pool
       <SegmentManager
- , sizeof(T)
- , NodesPerChunk
- , MaxFreeChunks
+ , sizeof_value<T>::value
+ , NodesPerBlock
+ , MaxFreeBlocks
       , OverheadPercent
> node_pool_t;
 
@@ -100,10 +103,26 @@
    struct rebind
    {
       typedef private_adaptive_pool_base
- <Version, T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ <Version, T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    /// @cond
+
+ template <int dummy>
+ struct node_pool
+ {
+ typedef detail::private_adaptive_node_pool
+ <SegmentManager
+ , sizeof_value<T>::value
+ , NodesPerBlock
+ , MaxFreeBlocks
+ , OverheadPercent
+ > type;
+
+ static type *get(void *p)
+ { return static_cast<type*>(p); }
+ };
+
    private:
    //!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>
@@ -129,7 +148,7 @@
    template<class T2>
    private_adaptive_pool_base
       (const private_adaptive_pool_base
- <Version, T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ <Version, T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other)
       : m_node_pool(other.get_segment_manager())
    {}
 
@@ -157,21 +176,21 @@
 };
 
 //!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)
+template<unsigned int V, class T, class S, std::size_t NodesPerBlock, std::size_t F, unsigned char OP> inline
+bool operator==(const private_adaptive_pool_base<V, T, S, NodesPerBlock, F, OP> &alloc1,
+ const private_adaptive_pool_base<V, T, S, NodesPerBlock, 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)
+template<unsigned int V, class T, class S, std::size_t NodesPerBlock, std::size_t F, unsigned char OP> inline
+bool operator!=(const private_adaptive_pool_base<V, T, S, NodesPerBlock, F, OP> &alloc1,
+ const private_adaptive_pool_base<V, T, S, NodesPerBlock, F, OP> &alloc2)
 { return &alloc1 != &alloc2; }
 
 template < class T
          , class SegmentManager
- , std::size_t NodesPerChunk = 64
- , std::size_t MaxFreeChunks = 2
+ , std::size_t NodesPerBlock = 64
+ , std::size_t MaxFreeBlocks = 2
          , unsigned char OverheadPercent = 5
>
 class private_adaptive_pool_v1
@@ -179,19 +198,19 @@
          < 1
          , T
          , SegmentManager
- , NodesPerChunk
- , MaxFreeChunks
+ , NodesPerBlock
+ , MaxFreeBlocks
          , OverheadPercent
>
 {
    public:
    typedef detail::private_adaptive_pool_base
- < 1, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> base_t;
+ < 1, T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> base_t;
 
    template<class T2>
    struct rebind
    {
- typedef private_adaptive_pool_v1<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ typedef private_adaptive_pool_v1<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    private_adaptive_pool_v1(SegmentManager *segment_mngr)
@@ -200,7 +219,7 @@
 
    template<class T2>
    private_adaptive_pool_v1
- (const private_adaptive_pool_v1<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ (const private_adaptive_pool_v1<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other)
       : base_t(other)
    {}
 };
@@ -215,17 +234,17 @@
 //!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
+//!NodesPerBlock is the minimum number of nodes of nodes allocated at once when
+//!the allocator needs runs out of nodes. MaxFreeBlocks is the maximum number of totally free blocks
+//!that the adaptive node pool will hold. The rest of the totally free blocks 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
+ , std::size_t NodesPerBlock
+ , std::size_t MaxFreeBlocks
          , unsigned char OverheadPercent
>
 class private_adaptive_pool
@@ -234,8 +253,8 @@
          < 2
          , T
          , SegmentManager
- , NodesPerChunk
- , MaxFreeChunks
+ , NodesPerBlock
+ , MaxFreeBlocks
          , OverheadPercent
>
    /// @endcond
@@ -243,7 +262,7 @@
 
    #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
    typedef detail::private_adaptive_pool_base
- < 2, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> base_t;
+ < 2, T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> base_t;
    public:
    typedef detail::version_type<private_adaptive_pool, 2> version;
 
@@ -251,7 +270,7 @@
    struct rebind
    {
       typedef private_adaptive_pool
- <T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ <T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    private_adaptive_pool(SegmentManager *segment_mngr)
@@ -260,7 +279,7 @@
 
    template<class T2>
    private_adaptive_pool
- (const private_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ (const private_adaptive_pool<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other)
       : base_t(other)
    {}
 
@@ -284,7 +303,7 @@
    struct rebind
    {
       typedef private_adaptive_pool
- <T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ <T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> other;
    };
 
    private:
@@ -313,7 +332,7 @@
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
    private_adaptive_pool
- (const private_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other);
+ (const private_adaptive_pool<T2, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> &other);
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
@@ -339,9 +358,9 @@
    //!Never throws
    void deallocate(const pointer &ptr, size_type count);
 
- //!Deallocates all free chunks
+ //!Deallocates all free blocks
    //!of the pool
- void deallocate_free_chunks();
+ void deallocate_free_blocks();
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
    //!different memory segment, the result is undefined.
@@ -355,9 +374,9 @@
    //!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);
+ //!Copy construct an object.
+ //!Throws if T's copy constructor throws
+ void construct(const pointer &ptr, const_reference v);
 
    //!Destroys object. Throws if object's
    //!destructor throws
@@ -374,7 +393,7 @@
                          size_type preferred_size,
                          size_type &received_size, const pointer &reuse = 0);
 
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -383,11 +402,11 @@
    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
+ //!contiguous block
    //!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
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -400,7 +419,7 @@
    //!Throws boost::interprocess::bad_alloc if there is no enough memory
    pointer allocate_one();
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -413,7 +432,7 @@
    //!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
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -427,15 +446,15 @@
 
 //!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);
+template<class T, class S, std::size_t NodesPerBlock, std::size_t F, unsigned char OP> inline
+bool operator==(const private_adaptive_pool<T, S, NodesPerBlock, F, OP> &alloc1,
+ const private_adaptive_pool<T, S, NodesPerBlock, 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);
+template<class T, class S, std::size_t NodesPerBlock, std::size_t F, unsigned char OP> inline
+bool operator!=(const private_adaptive_pool<T, S, NodesPerBlock, F, OP> &alloc1,
+ const private_adaptive_pool<T, S, NodesPerBlock, F, OP> &alloc2);
 
 #endif
 

Modified: branches/CMake/release/boost/interprocess/allocators/private_node_allocator.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/allocators/private_node_allocator.hpp (original)
+++ branches/CMake/release/boost/interprocess/allocators/private_node_allocator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -7,211 +7,6 @@
 // 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 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 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
- 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, segment_manager>::type segment_mngr_ptr_t;
- typedef private_node_allocator
- <T, SegmentManager, NodesPerChunk> self_t;
- typedef detail::private_node_pool
- <SegmentManager, sizeof(T), NodesPerChunk> priv_node_pool_t;
- /// @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;
-
- //!Obtains node_allocator from other node_allocator
- template<class T2>
- struct rebind
- {
- typedef private_node_allocator<T2, SegmentManager, NodesPerChunk> other;
- };
-
- /// @cond
- private:
- //!Not assignable from related private_node_allocator
- template<class T2, class MemoryAlgorithm2, std::size_t N2>
- private_node_allocator& operator=
- (const private_node_allocator<T2, MemoryAlgorithm2, N2>&);
-
- //!Not assignable from other private_node_allocator
- private_node_allocator& operator=(const private_node_allocator&);
- /// @endcond
-
- public:
-
- //!Constructor from a segment manager
- private_node_allocator(segment_manager *segment_mngr)
- : m_node_pool(segment_mngr){}
-
- //!Copy constructor from other private_node_allocator. Never throws
- private_node_allocator(const private_node_allocator &other)
- : m_node_pool(other.get_segment_manager()){}
-
- //!Copy constructor from related private_node_allocator. Never throws.
- template<class T2>
- private_node_allocator
- (const private_node_allocator<T2, SegmentManager, NodesPerChunk> &other)
- : m_node_pool(other.get_segment_manager())
- {}
-
- //!Destructor, frees all used memory. Never throws
- ~private_node_allocator()
- {}
-
- //!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()->get_size()/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 > this->max_size())
- throw bad_alloc();
- 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)
- {
- 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.
- 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...
-
- //!Returns address of mutable object.
- //!Never throws
- pointer address(reference value) const
- { return pointer(boost::addressof(value)); }
-
- //!Returns address of non mutable object.
- //!Never throws
- const_pointer address(const_reference value) const
- { return const_pointer(boost::addressof(value)); }
-
- //!Default construct an object.
- //!Throws if T's default constructor throws
- void construct(const pointer &ptr)
- { new(detail::get_pointer(ptr)) value_type; }
-
- //!Destroys object. Throws if object's
- //!destructor throws
- void destroy(const pointer &ptr)
- { BOOST_ASSERT(ptr != 0); (*ptr).~value_type(); }
-
- /// @cond
- private:
- priv_node_pool_t m_node_pool;
- /// @endcond
-};
-
-//!Equality test for same type of private_node_allocator
-template<class T, class S, std::size_t NodesPerChunk> inline
-bool operator==(const private_node_allocator<T, S, NodesPerChunk> &alloc1,
- const private_node_allocator<T, S, NodesPerChunk> &alloc2)
-{ return &alloc1 == &alloc2; }
-
-//!Inequality test for same type of private_node_allocator
-template<class T, class S, std::size_t NodesPerChunk> inline
-bool operator!=(const private_node_allocator<T, S, NodesPerChunk> &alloc1,
- const private_node_allocator<T, S, NodesPerChunk> &alloc2)
-{
- return &alloc1 != &alloc2;
-}
-
-} //namespace interprocess {
-} //namespace boost {
-
-#include <boost/interprocess/detail/config_end.hpp>
-
-#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
@@ -247,26 +42,29 @@
 template < unsigned int Version
          , class T
          , class SegmentManager
- , std::size_t NodesPerChunk
+ , std::size_t NodesPerBlock
>
 class private_node_allocator_base
    : public node_pool_allocation_impl
- < private_node_allocator_base < Version, T, SegmentManager, NodesPerChunk>
+ < private_node_allocator_base < Version, T, SegmentManager, NodesPerBlock>
    , Version
    , T
    , SegmentManager
>
 {
+ public:
+ //Segment manager
+ typedef SegmentManager segment_manager;
+ typedef typename SegmentManager::void_pointer void_pointer;
+
    /// @cond
    private:
- typedef typename SegmentManager::void_pointer void_pointer;
- typedef SegmentManager segment_manager;
    typedef private_node_allocator_base
- < Version, T, SegmentManager, NodesPerChunk> self_t;
+ < Version, T, SegmentManager, NodesPerBlock> self_t;
    typedef detail::private_node_pool
       <SegmentManager
- , sizeof(T)
- , NodesPerChunk
+ , sizeof_value<T>::value
+ , NodesPerBlock
> node_pool_t;
 
    BOOST_STATIC_ASSERT((Version <=2));
@@ -299,10 +97,23 @@
    struct rebind
    {
       typedef private_node_allocator_base
- <Version, T2, SegmentManager, NodesPerChunk> other;
+ <Version, T2, SegmentManager, NodesPerBlock> other;
    };
 
    /// @cond
+ template <int dummy>
+ struct node_pool
+ {
+ typedef detail::private_node_pool
+ <SegmentManager
+ , sizeof_value<T>::value
+ , NodesPerBlock
+ > type;
+
+ static type *get(void *p)
+ { return static_cast<type*>(p); }
+ };
+
    private:
    //!Not assignable from related private_node_allocator_base
    template<unsigned int Version2, class T2, class MemoryAlgorithm2, std::size_t N2>
@@ -328,7 +139,7 @@
    template<class T2>
    private_node_allocator_base
       (const private_node_allocator_base
- <Version, T2, SegmentManager, NodesPerChunk> &other)
+ <Version, T2, SegmentManager, NodesPerBlock> &other)
       : m_node_pool(other.get_segment_manager())
    {}
 
@@ -356,37 +167,37 @@
 };
 
 //!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)
+template<unsigned int V, class T, class S, std::size_t NPC> inline
+bool operator==(const private_node_allocator_base<V, T, S, NPC> &alloc1,
+ const private_node_allocator_base<V, T, S, NPC> &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)
+template<unsigned int V, class T, class S, std::size_t NPC> inline
+bool operator!=(const private_node_allocator_base<V, T, S, NPC> &alloc1,
+ const private_node_allocator_base<V, T, S, NPC> &alloc2)
 { return &alloc1 != &alloc2; }
 
 template < class T
          , class SegmentManager
- , std::size_t NodesPerChunk = 64
+ , std::size_t NodesPerBlock = 64
>
 class private_node_allocator_v1
    : public private_node_allocator_base
          < 1
          , T
          , SegmentManager
- , NodesPerChunk
+ , NodesPerBlock
>
 {
    public:
    typedef detail::private_node_allocator_base
- < 1, T, SegmentManager, NodesPerChunk> base_t;
+ < 1, T, SegmentManager, NodesPerBlock> base_t;
 
    template<class T2>
    struct rebind
    {
- typedef private_node_allocator_v1<T2, SegmentManager, NodesPerChunk> other;
+ typedef private_node_allocator_v1<T2, SegmentManager, NodesPerBlock> other;
    };
 
    private_node_allocator_v1(SegmentManager *segment_mngr)
@@ -395,7 +206,7 @@
 
    template<class T2>
    private_node_allocator_v1
- (const private_node_allocator_v1<T2, SegmentManager, NodesPerChunk> &other)
+ (const private_node_allocator_v1<T2, SegmentManager, NodesPerBlock> &other)
       : base_t(other)
    {}
 };
@@ -408,11 +219,11 @@
 //!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
+//!This allocator has its own node pool. NodesPerBlock 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
+ , std::size_t NodesPerBlock
>
 class private_node_allocator
    /// @cond
@@ -420,14 +231,14 @@
          < 2
          , T
          , SegmentManager
- , NodesPerChunk
+ , NodesPerBlock
>
    /// @endcond
 {
 
    #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
    typedef detail::private_node_allocator_base
- < 2, T, SegmentManager, NodesPerChunk> base_t;
+ < 2, T, SegmentManager, NodesPerBlock> base_t;
    public:
    typedef detail::version_type<private_node_allocator, 2> version;
 
@@ -435,7 +246,7 @@
    struct rebind
    {
       typedef private_node_allocator
- <T2, SegmentManager, NodesPerChunk> other;
+ <T2, SegmentManager, NodesPerBlock> other;
    };
 
    private_node_allocator(SegmentManager *segment_mngr)
@@ -444,7 +255,7 @@
 
    template<class T2>
    private_node_allocator
- (const private_node_allocator<T2, SegmentManager, NodesPerChunk> &other)
+ (const private_node_allocator<T2, SegmentManager, NodesPerBlock> &other)
       : base_t(other)
    {}
 
@@ -468,7 +279,7 @@
    struct rebind
    {
       typedef private_node_allocator
- <T2, SegmentManager, NodesPerChunk> other;
+ <T2, SegmentManager, NodesPerBlock> other;
    };
 
    private:
@@ -497,7 +308,7 @@
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
    private_node_allocator
- (const private_node_allocator<T2, SegmentManager, NodesPerChunk> &other);
+ (const private_node_allocator<T2, SegmentManager, NodesPerBlock> &other);
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
@@ -523,9 +334,9 @@
    //!Never throws
    void deallocate(const pointer &ptr, size_type count);
 
- //!Deallocates all free chunks
+ //!Deallocates all free blocks
    //!of the pool
- void deallocate_free_chunks();
+ void deallocate_free_blocks();
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
    //!different memory segment, the result is undefined.
@@ -539,9 +350,9 @@
    //!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);
+ //!Copy construct an object.
+ //!Throws if T's copy constructor throws
+ void construct(const pointer &ptr, const_reference v);
 
    //!Destroys object. Throws if object's
    //!destructor throws
@@ -558,7 +369,7 @@
                          size_type preferred_size,
                          size_type &received_size, const pointer &reuse = 0);
 
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -567,11 +378,11 @@
    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
+ //!contiguous block
    //!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
+ //!Allocates many elements of size elem_size in a contiguous block
    //!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
@@ -584,7 +395,7 @@
    //!Throws boost::interprocess::bad_alloc if there is no enough memory
    pointer allocate_one();
 
- //!Allocates many elements of size == 1 in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -597,7 +408,7 @@
    //!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
+ //!Allocates many elements of size == 1 in a contiguous block
    //!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
@@ -611,15 +422,15 @@
 
 //!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);
+template<class T, class S, std::size_t NodesPerBlock, std::size_t F, unsigned char OP> inline
+bool operator==(const private_node_allocator<T, S, NodesPerBlock, F, OP> &alloc1,
+ const private_node_allocator<T, S, NodesPerBlock, 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);
+template<class T, class S, std::size_t NodesPerBlock, std::size_t F, unsigned char OP> inline
+bool operator!=(const private_node_allocator<T, S, NodesPerBlock, F, OP> &alloc1,
+ const private_node_allocator<T, S, NodesPerBlock, F, OP> &alloc2);
 
 #endif
 

Modified: branches/CMake/release/boost/interprocess/containers/deque.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/deque.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/deque.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -580,7 +580,7 @@
    { this->swap(mx.get()); }
    #else
    deque(deque &&x)
- : Base(x))
+ : Base(detail::move_impl(x))
    { this->swap(x); }
    #endif
 
@@ -658,7 +658,7 @@
    void push_back(const value_type& t)
    {
       if (this->members_.m_finish.m_cur != this->members_.m_finish.m_last - 1) {
- new(detail::get_pointer(this->members_.m_finish.m_cur))value_type(t);
+ new((void*)detail::get_pointer(this->members_.m_finish.m_cur))value_type(t);
          ++this->members_.m_finish.m_cur;
       }
       else
@@ -669,7 +669,7 @@
    void push_back(const detail::moved_object<value_type> &mt)
    {
       if (this->members_.m_finish.m_cur != this->members_.m_finish.m_last - 1) {
- new(detail::get_pointer(this->members_.m_finish.m_cur))value_type(mt);
+ new((void*)detail::get_pointer(this->members_.m_finish.m_cur))value_type(mt);
          ++this->members_.m_finish.m_cur;
       }
       else
@@ -679,18 +679,18 @@
    void push_back(value_type &&mt)
    {
       if (this->members_.m_finish.m_cur != this->members_.m_finish.m_last - 1) {
- new(detail::get_pointer(this->members_.m_finish.m_cur))value_type(move(mt));
+ new((void*)detail::get_pointer(this->members_.m_finish.m_cur))value_type(detail::move_impl(mt));
          ++this->members_.m_finish.m_cur;
       }
       else
- this->priv_push_back_aux(move(mt));
+ this->priv_push_back_aux(detail::move_impl(mt));
    }
    #endif
 
    void push_front(const value_type& t)
    {
       if (this->members_.m_start.m_cur != this->members_.m_start.m_first) {
- new(detail::get_pointer(this->members_.m_start.m_cur)- 1)value_type(t);
+ new((void*)(detail::get_pointer(this->members_.m_start.m_cur)- 1))value_type(t);
          --this->members_.m_start.m_cur;
       }
       else
@@ -701,7 +701,7 @@
    void push_front(const detail::moved_object<value_type> &mt)
    {
       if (this->members_.m_start.m_cur != this->members_.m_start.m_first) {
- new(detail::get_pointer(this->members_.m_start.m_cur)- 1)value_type(mt);
+ new((void*)(detail::get_pointer(this->members_.m_start.m_cur)- 1))value_type(mt);
          --this->members_.m_start.m_cur;
       }
       else
@@ -711,11 +711,11 @@
    void push_front(value_type &&mt)
    {
       if (this->members_.m_start.m_cur != this->members_.m_start.m_first) {
- new(detail::get_pointer(this->members_.m_start.m_cur)- 1)value_type(move(mt));
+ new((void*)(detail::get_pointer(this->members_.m_start.m_cur)- 1))value_type(detail::move_impl(mt));
          --this->members_.m_start.m_cur;
       }
       else
- this->priv_push_front_aux(move(mt));
+ this->priv_push_front_aux(detail::move_impl(mt));
    }
    #endif
 
@@ -777,17 +777,17 @@
    iterator insert(iterator position, value_type &&mx)
    {
       if (position.m_cur == this->members_.m_start.m_cur) {
- this->push_front(move(mx));
+ this->push_front(detail::move_impl(mx));
          return this->members_.m_start;
       }
       else if (position.m_cur == this->members_.m_finish.m_cur) {
- this->push_back(move(mx));
+ this->push_back(detail::move_impl(mx));
          iterator tmp = this->members_.m_finish;
          --tmp;
          return tmp;
       }
       else {
- return this->priv_insert_aux(position, move(mx));
+ return this->priv_insert_aux(position, detail::move_impl(mx));
       }
    }
    #endif
@@ -824,13 +824,13 @@
          this->priv_reserve_elements_at_back(new_size);
 
          while(n--){
- //T default_constructed = move(T());
+ //T default_constructed = detail::move_impl(T());
             T default_constructed;
 /* if(boost::is_scalar<T>::value){
                //Value initialization
                new(&default_constructed)T();
             }*/
- this->push_back(move(default_constructed));
+ this->push_back(detail::move_impl(default_constructed));
          }
       }
    }
@@ -1217,7 +1217,7 @@
       this->priv_reserve_map_at_back();
       *(this->members_.m_finish.m_node + 1) = this->priv_allocate_node();
       BOOST_TRY {
- new(detail::get_pointer(this->members_.m_finish.m_cur))value_type(t);
+ new((void*)detail::get_pointer(this->members_.m_finish.m_cur))value_type(t);
          this->members_.m_finish.priv_set_node(this->members_.m_finish.m_node + 1);
          this->members_.m_finish.m_cur = this->members_.m_finish.m_first;
       }
@@ -1235,7 +1235,7 @@
       this->priv_reserve_map_at_back();
       *(this->members_.m_finish.m_node + 1) = this->priv_allocate_node();
       BOOST_TRY {
- new(detail::get_pointer(this->members_.m_finish.m_cur))value_type(mt);
+ new((void*)detail::get_pointer(this->members_.m_finish.m_cur))value_type(mt);
          this->members_.m_finish.priv_set_node(this->members_.m_finish.m_node + 1);
          this->members_.m_finish.m_cur = this->members_.m_finish.m_first;
       }
@@ -1251,7 +1251,7 @@
       this->priv_reserve_map_at_back();
       *(this->members_.m_finish.m_node + 1) = this->priv_allocate_node();
       BOOST_TRY {
- new(detail::get_pointer(this->members_.m_finish.m_cur))value_type(move(mt));
+ new((void*)detail::get_pointer(this->members_.m_finish.m_cur))value_type(detail::move_impl(mt));
          this->members_.m_finish.priv_set_node(this->members_.m_finish.m_node + 1);
          this->members_.m_finish.m_cur = this->members_.m_finish.m_first;
       }
@@ -1271,7 +1271,7 @@
       BOOST_TRY {
          this->members_.m_start.priv_set_node(this->members_.m_start.m_node - 1);
          this->members_.m_start.m_cur = this->members_.m_start.m_last - 1;
- new(detail::get_pointer(this->members_.m_start.m_cur))value_type(t);
+ new((void*)detail::get_pointer(this->members_.m_start.m_cur))value_type(t);
       }
       BOOST_CATCH(...){
          ++this->members_.m_start;
@@ -1289,7 +1289,7 @@
       BOOST_TRY {
          this->members_.m_start.priv_set_node(this->members_.m_start.m_node - 1);
          this->members_.m_start.m_cur = this->members_.m_start.m_last - 1;
- new(detail::get_pointer(this->members_.m_start.m_cur))value_type(mt);
+ new((void*)detail::get_pointer(this->members_.m_start.m_cur))value_type(mt);
       }
       BOOST_CATCH(...){
          ++this->members_.m_start;
@@ -1306,7 +1306,7 @@
       BOOST_TRY {
          this->members_.m_start.priv_set_node(this->members_.m_start.m_node - 1);
          this->members_.m_start.m_cur = this->members_.m_start.m_last - 1;
- new(detail::get_pointer(this->members_.m_start.m_cur))value_type(move(mt));
+ new((void*)detail::get_pointer(this->members_.m_start.m_cur))value_type(detail::move_impl(mt));
       }
       BOOST_CATCH(...){
          ++this->members_.m_start;

Modified: branches/CMake/release/boost/interprocess/containers/detail/flat_tree.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/detail/flat_tree.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/detail/flat_tree.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -135,11 +135,11 @@
 
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    flat_tree(const detail::moved_object<flat_tree> &x)
- : m_data(move(x.get().m_data))
+ : m_data(detail::move_impl(x.get().m_data))
    { }
    #else
    flat_tree(flat_tree &&x)
- : m_data(move(x.m_data))
+ : m_data(detail::move_impl(x.m_data))
    { }
    #endif
 
@@ -151,10 +151,10 @@
 
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    flat_tree& operator=(const detail::moved_object<flat_tree>& mx)
- { m_data = move(mx.get().m_data); return *this; }
+ { m_data = detail::move_impl(mx.get().m_data); return *this; }
    #else
    flat_tree& operator=(flat_tree &&mx)
- { m_data = move(mx.m_data); return *this; }
+ { m_data = detail::move_impl(mx.m_data); return *this; }
    #endif
 
    public:
@@ -250,7 +250,7 @@
       insert_commit_data data;
       std::pair<iterator,bool> ret = priv_insert_unique_prepare(mval, data);
       if(ret.second){
- ret.first = priv_insert_commit(data, move(mval));
+ ret.first = priv_insert_commit(data, detail::move_impl(mval));
       }
       return ret;
    }
@@ -275,7 +275,7 @@
    iterator insert_equal(value_type && mval)
    {
       iterator i = this->upper_bound(KeyOfValue()(mval));
- i = this->m_data.m_vect.insert(i, move(mval));
+ i = this->m_data.m_vect.insert(i, detail::move_impl(mval));
       return i;
    }
    #endif
@@ -306,7 +306,7 @@
       insert_commit_data data;
       std::pair<iterator,bool> ret = priv_insert_unique_prepare(pos, mval, data);
       if(ret.second){
- ret.first = priv_insert_commit(data, move(mval));
+ ret.first = priv_insert_commit(data, detail::move_impl(mval));
       }
       return ret.first;
    }
@@ -331,7 +331,7 @@
    {
       insert_commit_data data;
       priv_insert_equal_prepare(pos, mval, data);
- return priv_insert_commit(data, move(mval));
+ return priv_insert_commit(data, detail::move_impl(mval));
    }
    #endif
 
@@ -547,7 +547,7 @@
    template<class Convertible>
    iterator priv_insert_commit
       (insert_commit_data &commit_data, Convertible &&convertible)
- { return this->m_data.m_vect.insert(commit_data.position, forward<Convertible>(convertible)); }
+ { return this->m_data.m_vect.insert(commit_data.position, detail::forward_impl<Convertible>(convertible)); }
    #endif
 
    template <class RanIt>

Modified: branches/CMake/release/boost/interprocess/containers/detail/node_alloc_holder.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/detail/node_alloc_holder.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/detail/node_alloc_holder.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -88,11 +88,11 @@
 
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    node_alloc_holder(const detail::moved_object<node_alloc_holder> &other)
- : members_(move(other.get().node_alloc()))
+ : members_(detail::move_impl(other.get().node_alloc()))
    { this->swap(other.get()); }
    #else
    node_alloc_holder(node_alloc_holder &&other)
- : members_(move(other.node_alloc()))
+ : members_(detail::move_impl(other.node_alloc()))
    { this->swap(other); }
    #endif
 
@@ -145,15 +145,15 @@
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    template<class Convertible>
    static void construct(const NodePtr &ptr, const Convertible &value)
- { new(detail::get_pointer(ptr)) Node(value); }
+ { new((void*)detail::get_pointer(ptr)) Node(value); }
    #else
    template<class Convertible>
    static void construct(const NodePtr &ptr, Convertible &&value)
- { new(detail::get_pointer(ptr)) Node(forward<Convertible>(value)); }
+ { new((void*)detail::get_pointer(ptr)) Node(detail::forward_impl<Convertible>(value)); }
    #endif
 
    static void construct(const NodePtr &ptr)
- { new(detail::get_pointer(ptr)) Node(); }
+ { new((void*)detail::get_pointer(ptr)) Node(); }
 
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    template<class Convertible1, class Convertible2>
@@ -169,9 +169,9 @@
       new(static_cast<hook_type*>(nodeptr))hook_type();
       //Now construct pair members_holder
       value_type *valueptr = &nodeptr->m_data;
- new((void*)&valueptr->first) first_type(move(value.get().first));
+ new((void*)&valueptr->first) first_type(detail::move_impl(value.get().first));
       BOOST_TRY{
- new((void*)&valueptr->second) second_type(move(value.get().second));
+ new((void*)&valueptr->second) second_type(detail::move_impl(value.get().second));
       }
       BOOST_CATCH(...){
          valueptr->first.~first_type();
@@ -194,9 +194,9 @@
       new(static_cast<hook_type*>(nodeptr))hook_type();
       //Now construct pair members_holder
       value_type *valueptr = &nodeptr->m_data;
- new((void*)&valueptr->first) first_type(move(value.first));
+ new((void*)&valueptr->first) first_type(detail::move_impl(value.first));
       BOOST_TRY{
- new((void*)&valueptr->second) second_type(move(value.second));
+ new((void*)&valueptr->second) second_type(detail::move_impl(value.second));
       }
       BOOST_CATCH(...){
          valueptr->first.~first_type();
@@ -226,7 +226,7 @@
    {
       NodePtr p = this->allocate_one();
       Deallocator node_deallocator(p, this->node_alloc());
- self_t::construct(p, forward<Convertible>(x));
+ self_t::construct(p, detail::forward_impl<Convertible>(x));
       node_deallocator.release();
       return (p);
    }
@@ -275,7 +275,7 @@
    {
       typedef typename NodeAlloc::multiallocation_iterator multiallocation_iterator;
 
- //Try to allocate memory in a single chunk
+ //Try to allocate memory in a single block
       multiallocation_iterator itbeg =
          this->node_alloc().allocate_individual(n), itend, itold;
       int constructed = 0;

Modified: branches/CMake/release/boost/interprocess/containers/detail/tree.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/detail/tree.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/detail/tree.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -109,7 +109,7 @@
    #else
    template<class Convertible>
    rbtree_node(Convertible &&conv)
- : m_data(forward<Convertible>(conv)){}
+ : m_data(detail::forward_impl<Convertible>(conv)){}
    #endif
 
    rbtree_node &operator=(const rbtree_node &other)
@@ -130,7 +130,7 @@
    { m_data = v; }
 
    public:
- #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
+ #if !defined(BOOST_INTERPROCESS_RVALUE_REFERENCE)
 
    template<class Convertible>
    static void construct(node_type *ptr, const Convertible &value)
@@ -149,11 +149,11 @@
       new((void*)ptr) hack_node_t(value);
    }
 
- #else
+ #elif !defined(BOOST_INTERPROCESS_RVALUE_PAIR)
 
    template<class Convertible>
    static void construct(node_type *ptr, Convertible &&value)
- { new(ptr) node_type(forward<Convertible>(value)); }
+ { new(ptr) node_type(detail::forward_impl<Convertible>(value)); }
 
    template<class Convertible1, class Convertible2>
    static void construct(node_type *ptr,
@@ -167,19 +167,18 @@
 
       new((void*)ptr) hack_node_t(value);
    }
-
    #endif
 };
 
 }//namespace detail {
-
+#if !defined(BOOST_INTERPROCESS_RVALUE_REFERENCE) || !defined(BOOST_INTERPROCESS_RVALUE_PAIR)
 template<class T, class VoidPointer>
 struct has_own_construct_from_it
    < boost::interprocess::detail::rbtree_node<T, VoidPointer> >
 {
    static const bool value = true;
 };
-
+#endif
 namespace detail {
 
 template<class A, class ValueCompare>
@@ -578,7 +577,7 @@
    iterator insert_unique_commit
       (MovableConvertible && mv, insert_commit_data &data)
    {
- NodePtr tmp = AllocHolder::create_node(forward<MovableConvertible>(mv));
+ NodePtr tmp = AllocHolder::create_node(detail::forward_impl<MovableConvertible>(mv));
       iiterator it(this->icont().insert_unique_commit(*tmp, data));
       return iterator(it);
    }
@@ -618,7 +617,7 @@
       if(!ret.second)
          return ret;
       return std::pair<iterator,bool>
- (this->insert_unique_commit(forward<MovableConvertible>(mv), data), true);
+ (this->insert_unique_commit(detail::forward_impl<MovableConvertible>(mv), data), true);
    }
    #endif
 
@@ -654,7 +653,7 @@
          this->insert_unique_check(hint, KeyOfValue()(mv), data);
       if(!ret.second)
          return ret.first;
- return this->insert_unique_commit(forward<MovableConvertible>(mv), data);
+ return this->insert_unique_commit(detail::forward_impl<MovableConvertible>(mv), data);
    }
    #endif
 
@@ -691,7 +690,7 @@
    template<class MovableConvertible>
    iterator insert_equal(MovableConvertible &&mv)
    {
- NodePtr p(AllocHolder::create_node(forward<MovableConvertible>(mv)));
+ NodePtr p(AllocHolder::create_node(detail::forward_impl<MovableConvertible>(mv)));
       return iterator(this->icont().insert_equal(this->icont().end(), *p));
    }
    #endif
@@ -713,7 +712,7 @@
    template<class MovableConvertible>
    iterator insert_equal(const_iterator hint, MovableConvertible &&mv)
    {
- NodePtr p(AllocHolder::create_node(move(mv)));
+ NodePtr p(AllocHolder::create_node(detail::move_impl(mv)));
       return iterator(this->icont().insert_equal(hint.get(), *p));
    }
    #endif

Modified: branches/CMake/release/boost/interprocess/containers/flat_map.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/flat_map.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/flat_map.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -70,6 +70,14 @@
 {
    /// @cond
    private:
+ //This is the tree that we should store if pair was movable
+ typedef detail::flat_tree<Key,
+ std::pair<Key, T>,
+ detail::select1st< std::pair<Key, T> >,
+ Pred,
+ Alloc> tree_t;
+
+ #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    //This is the real tree stored here. It's based on a movable pair
    typedef detail::flat_tree<Key,
                            detail::pair<Key, T>,
@@ -77,15 +85,10 @@
                            Pred,
                            typename Alloc::template
                               rebind<detail::pair<Key, T> >::other> impl_tree_t;
+ #else
+ typedef tree_t impl_tree_t;
+ #endif
 
- //This is the tree that we should store if pair was movable
- typedef detail::flat_tree<Key,
- std::pair<Key, T>,
- detail::select1st< std::pair<Key, T> >,
- Pred,
- Alloc> tree_t;
-
-// tree_t m_flat_tree; // flat tree representing flat_map
    impl_tree_t m_flat_tree; // flat tree representing flat_map
 
    typedef typename impl_tree_t::value_type impl_value_type;
@@ -101,19 +104,23 @@
    typedef typename impl_tree_t::allocator_type impl_allocator_type;
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    typedef detail::moved_object<impl_value_type> impl_moved_value_type;
- #else
- typedef impl_value_type&& impl_moved_value_type;
    #endif
 
+ #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    template<class D, class S>
    static D &force(const S &s)
- { return *const_cast<D*>((reinterpret_cast<const D*>(&s))); }
-
- #ifdef BOOST_INTERPROCESS_RVALUE_REFERENCE
- template<class D, class S>
- static D &&force(S &&s)
- { return reinterpret_cast<D&&>(s); }
+ { return *((D*)(void*)(const void*)(&s)); }
+ #else
+ //For rvalue-aware compilers, just forward
+ template<class Type>
+ static const Type &force(const Type &t)
+ { return t; }
+
+ template<class Type>
+ static Type &force(Type &t)
+ { return t; }
    #endif
+
    /// @endcond
 
    public:
@@ -168,11 +175,11 @@
    //! <b>Postcondition</b>: x is emptied.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    flat_map(const detail::moved_object<flat_map<Key,T,Pred,Alloc> >& x)
- : m_flat_tree(move(x.get().m_flat_tree)) {}
+ : m_flat_tree(detail::move_impl(x.get().m_flat_tree)) {}
 
    #else
    flat_map(flat_map<Key,T,Pred,Alloc> && x)
- : m_flat_tree(move(x.m_flat_tree)) {}
+ : m_flat_tree(detail::move_impl(x.m_flat_tree)) {}
    #endif
 
    //! <b>Effects</b>: Makes *this a copy of x.
@@ -189,10 +196,10 @@
    //! <b>Postcondition</b>: x is emptied.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    flat_map<Key,T,Pred,Alloc>& operator=(const detail::moved_object<flat_map<Key, T, Pred, Alloc> >& mx)
- { m_flat_tree = move(mx.get().m_flat_tree); return *this; }
+ { m_flat_tree = detail::move_impl(mx.get().m_flat_tree); return *this; }
    #else
    flat_map<Key,T,Pred,Alloc>& operator=(flat_map<Key, T, Pred, Alloc> && mx)
- { m_flat_tree = move(mx.m_flat_tree); return *this; }
+ { m_flat_tree = detail::move_impl(mx.m_flat_tree); return *this; }
    #endif
 
    //! <b>Effects</b>: Returns the comparison object out
@@ -210,7 +217,7 @@
       { return value_compare(force<key_compare>(m_flat_tree.key_comp())); }
 
    //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the object’s constructor.
+ //! was passed to the object's constructor.
    //!
    //! <b>Complexity</b>: Constant.
    allocator_type get_allocator() const
@@ -315,7 +322,7 @@
       { return m_flat_tree.max_size(); }
 
    //! Effects: If there is no key equivalent to x in the flat_map, inserts
- //! value_type(move(x), T()) into the flat_map (the key is move-constructed)
+ //! value_type(detail::move_impl(x), T()) into the flat_map (the key is move-constructed)
    //!
    //! Returns: A reference to the mapped_type corresponding to x in *this.
    //!
@@ -342,7 +349,7 @@
       iterator i = lower_bound(k);
       // i->first is greater than or equivalent to k.
       if (i == end() || key_comp()(k, (*i).first))
- i = insert(i, value_type(k, move(T())));
+ i = insert(i, value_type(k, detail::move_impl(T())));
       return (*i).second;
    }
    #else
@@ -358,7 +365,7 @@
       iterator i = lower_bound(k);
       // i->first is greater than or equivalent to k.
       if (i == end() || key_comp()(k, (*i).first))
- i = insert(i, value_type(forward<key_type>(k), move(T())));
+ i = insert(i, value_type(detail::forward_impl<key_type>(k), detail::move_impl(T())));
       return (*i).second;
    }
    #endif
@@ -418,8 +425,7 @@
          m_flat_tree.insert_unique(force<impl_moved_value_type>(x))); }
    #else
    std::pair<iterator,bool> insert(value_type &&x)
- { return force<std::pair<iterator,bool> >(
- m_flat_tree.insert_unique(force<impl_moved_value_type>(move(x)))); }
+ { return m_flat_tree.insert_unique(detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Inserts a copy of x in the container if and only if there is
@@ -452,8 +458,7 @@
          m_flat_tree.insert_unique(force<impl_iterator>(position), force<impl_moved_value_type>(x))); }
    #else
    iterator insert(iterator position, value_type &&x)
- { return force<iterator>(
- m_flat_tree.insert_unique(force<impl_iterator>(position), force<impl_moved_value_type>(move(x)))); }
+ { return m_flat_tree.insert_unique(position, detail::move_impl(x)); }
    #endif
 
    //! <b>Requires</b>: i, j are not iterators into *this.
@@ -479,8 +484,8 @@
    //!
    //! <b>Note</b>: Invalidates elements with keys
    //! not less than the erased element.
- void erase(const_iterator position)
- { m_flat_tree.erase(force<impl_const_iterator>(position)); }
+ iterator erase(const_iterator position)
+ { return force<iterator>(m_flat_tree.erase(force<impl_const_iterator>(position))); }
 
    //! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
    //!
@@ -499,8 +504,8 @@
    //!
    //! <b>Complexity</b>: Logarithmic search time plus erasure time
    //! linear to the elements with bigger keys.
- void erase(const_iterator first, const_iterator last)
- { m_flat_tree.erase(force<impl_const_iterator>(first), force<impl_const_iterator>(last)); }
+ iterator erase(const_iterator first, const_iterator last)
+ { return force<iterator>(m_flat_tree.erase(force<impl_const_iterator>(first), force<impl_const_iterator>(last))); }
 
    //! <b>Effects</b>: erase(a.begin(),a.end()).
    //!
@@ -715,6 +720,12 @@
 {
    /// @cond
    private:
+ typedef detail::flat_tree<Key,
+ std::pair<Key, T>,
+ detail::select1st< std::pair<Key, T> >,
+ Pred,
+ Alloc> tree_t;
+ #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    //This is the real tree stored here. It's based on a movable pair
    typedef detail::flat_tree<Key,
                            detail::pair<Key, T>,
@@ -722,13 +733,10 @@
                            Pred,
                            typename Alloc::template
                               rebind<detail::pair<Key, T> >::other> impl_tree_t;
+ #else
+ typedef tree_t impl_tree_t;
+ #endif
 
- typedef detail::flat_tree<Key,
- std::pair<Key, T>,
- detail::select1st< std::pair<Key, T> >,
- Pred,
- Alloc> tree_t;
-// tree_t m_flat_tree; // flat tree representing flat_multimap
    impl_tree_t m_flat_tree; // flat tree representing flat_map
 
    typedef typename impl_tree_t::value_type impl_value_type;
@@ -744,18 +752,21 @@
    typedef typename impl_tree_t::allocator_type impl_allocator_type;
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    typedef detail::moved_object<impl_value_type> impl_moved_value_type;
- #else
- typedef impl_value_type&& impl_moved_value_type;
    #endif
 
+ #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    template<class D, class S>
    static D &force(const S &s)
    { return *const_cast<D*>((reinterpret_cast<const D*>(&s))); }
-
- #ifdef BOOST_INTERPROCESS_RVALUE_REFERENCE
- template<class D, class S>
- static D &&force(S &&s)
- { return reinterpret_cast<D&&>(s); }
+ #else
+ //For rvalue-aware compilers, just forward
+ template<class Type>
+ static const Type &force(const Type &t)
+ { return t; }
+
+ template<class Type>
+ static Type &force(Type &t)
+ { return t; }
    #endif
    /// @endcond
 
@@ -812,10 +823,10 @@
    //! <b>Postcondition</b>: x is emptied.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    flat_multimap(const detail::moved_object<flat_multimap<Key,T,Pred,Alloc> >& x)
- : m_flat_tree(move(x.get().m_flat_tree)) { }
+ : m_flat_tree(detail::move_impl(x.get().m_flat_tree)) { }
    #else
    flat_multimap(flat_multimap<Key,T,Pred,Alloc> && x)
- : m_flat_tree(move(x.m_flat_tree)) { }
+ : m_flat_tree(detail::move_impl(x.m_flat_tree)) { }
    #endif
 
    //! <b>Effects</b>: Makes *this a copy of x.
@@ -831,11 +842,11 @@
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    flat_multimap<Key,T,Pred,Alloc>&
    operator=(const detail::moved_object<flat_multimap<Key,T,Pred,Alloc> >& mx)
- { m_flat_tree = move(mx.get().m_flat_tree); return *this; }
+ { m_flat_tree = detail::move_impl(mx.get().m_flat_tree); return *this; }
    #else
    flat_multimap<Key,T,Pred,Alloc>&
    operator=(flat_multimap<Key,T,Pred,Alloc> && mx)
- { m_flat_tree = move(mx.m_flat_tree); return *this; }
+ { m_flat_tree = detail::move_impl(mx.m_flat_tree); return *this; }
    #endif
 
    //! <b>Effects</b>: Returns the comparison object out
@@ -853,7 +864,7 @@
       { return value_compare(force<key_compare>(m_flat_tree.key_comp())); }
 
    //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the object’s constructor.
+ //! was passed to the object's constructor.
    //!
    //! <b>Complexity</b>: Constant.
    allocator_type get_allocator() const
@@ -1002,7 +1013,7 @@
       { return force<iterator>(m_flat_tree.insert_equal(force<impl_moved_value_type>(x))); }
    #else
    iterator insert(value_type &&x)
- { return force<iterator>(m_flat_tree.insert_equal(force<impl_moved_value_type>(move(x)))); }
+ { return m_flat_tree.insert_equal(detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Inserts a copy of x in the container.
@@ -1035,7 +1046,7 @@
       { return force<iterator>(m_flat_tree.insert_equal(force<impl_iterator>(position), force<impl_moved_value_type>(x))); }
    #else
    iterator insert(iterator position, value_type &&x)
- { return force<iterator>(m_flat_tree.insert_equal(force<impl_iterator>(position), force<impl_moved_value_type>(move(x)))); }
+ { return m_flat_tree.insert_equal(force<impl_iterator>(position), detail::move_impl(x)); }
    #endif
 
    //! <b>Requires</b>: i, j are not iterators into *this.
@@ -1060,8 +1071,8 @@
    //!
    //! <b>Note</b>: Invalidates elements with keys
    //! not less than the erased element.
- void erase(const_iterator position)
- { m_flat_tree.erase(force<impl_const_iterator>(position)); }
+ iterator erase(const_iterator position)
+ { return force<iterator>(m_flat_tree.erase(force<impl_const_iterator>(position))); }
 
    //! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
    //!
@@ -1080,8 +1091,8 @@
    //!
    //! <b>Complexity</b>: Logarithmic search time plus erasure time
    //! linear to the elements with bigger keys.
- void erase(const_iterator first, const_iterator last)
- { m_flat_tree.erase(force<impl_const_iterator>(first), force<impl_const_iterator>(last)); }
+ iterator erase(const_iterator first, const_iterator last)
+ { return force<iterator>(m_flat_tree.erase(force<impl_const_iterator>(first), force<impl_const_iterator>(last))); }
 
    //! <b>Effects</b>: erase(a.begin(),a.end()).
    //!

Modified: branches/CMake/release/boost/interprocess/containers/flat_set.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/flat_set.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/flat_set.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -117,10 +117,10 @@
    //! <b>Postcondition</b>: x is emptied.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    flat_set(const detail::moved_object<flat_set<T,Pred,Alloc> >& mx)
- : m_flat_tree(move(mx.get().m_flat_tree)) {}
+ : m_flat_tree(detail::move_impl(mx.get().m_flat_tree)) {}
    #else
    flat_set(flat_set<T,Pred,Alloc> && mx)
- : m_flat_tree(move(mx.m_flat_tree)) {}
+ : m_flat_tree(detail::move_impl(mx.m_flat_tree)) {}
    #endif
 
    //! <b>Effects</b>: Makes *this a copy of x.
@@ -134,11 +134,11 @@
    //! <b>Complexity</b>: Linear in x.size().
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    flat_set<T,Pred,Alloc>& operator=(const detail::moved_object<flat_set<T, Pred, Alloc> > &mx)
- { m_flat_tree = move(mx.get().m_flat_tree); return *this; }
+ { m_flat_tree = detail::move_impl(mx.get().m_flat_tree); return *this; }
 
    #else
    flat_set<T,Pred,Alloc>& operator=(flat_set<T, Pred, Alloc> &&mx)
- { m_flat_tree = move(mx.m_flat_tree); return *this; }
+ { m_flat_tree = detail::move_impl(mx.m_flat_tree); return *this; }
 
    #endif
 
@@ -157,7 +157,7 @@
       { return m_flat_tree.key_comp(); }
 
    //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the object’s constructor.
+ //! was passed to the object's constructor.
    //!
    //! <b>Complexity</b>: Constant.
    allocator_type get_allocator() const
@@ -314,7 +314,7 @@
       { return m_flat_tree.insert_unique(x); }
    #else
    std::pair<iterator,bool> insert(value_type && x)
- { return m_flat_tree.insert_unique(move(x)); }
+ { return m_flat_tree.insert_unique(detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Inserts a copy of x in the container if and only if there is
@@ -345,7 +345,7 @@
       { return m_flat_tree.insert_unique(position, x); }
    #else
    iterator insert(iterator position, value_type && x)
- { return m_flat_tree.insert_unique(position, move(x)); }
+ { return m_flat_tree.insert_unique(position, detail::move_impl(x)); }
    #endif
 
    //! <b>Requires</b>: i, j are not iterators into *this.
@@ -588,6 +588,17 @@
                       const flat_multiset<T,Pred,Alloc>& y);
 /// @endcond
 
+//! flat_multiset is a Sorted Associative Container that stores objects of type Key.
+//! flat_multiset is a Simple Associative Container, meaning that its value type,
+//! as well as its key type, is Key.
+//! flat_Multiset can store multiple copies of the same key value.
+//!
+//! flat_multiset is similar to std::multiset but it's implemented like an ordered vector.
+//! This means that inserting a new element into a flat_multiset invalidates
+//! previous iterators and references
+//!
+//! Erasing an element of a flat_multiset invalidates iterators and references
+//! pointing to elements that come after (their keys are equal or bigger) the erased element.
 template <class T, class Pred, class Alloc>
 class flat_multiset
 {
@@ -633,10 +644,10 @@
 
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    flat_multiset(const detail::moved_object<flat_multiset<T,Pred,Alloc> >& x)
- : m_flat_tree(move(x.get().m_flat_tree)) {}
+ : m_flat_tree(detail::move_impl(x.get().m_flat_tree)) {}
    #else
    flat_multiset(flat_multiset<T,Pred,Alloc> && x)
- : m_flat_tree(move(x.m_flat_tree)) {}
+ : m_flat_tree(detail::move_impl(x.m_flat_tree)) {}
    #endif
 
    flat_multiset<T,Pred,Alloc>& operator=(const flat_multiset<T,Pred,Alloc>& x)
@@ -644,10 +655,10 @@
 
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    flat_multiset<T,Pred,Alloc>& operator=(const detail::moved_object<flat_multiset<T,Pred,Alloc> >& mx)
- { m_flat_tree = move(mx.get().m_flat_tree); return *this; }
+ { m_flat_tree = detail::move_impl(mx.get().m_flat_tree); return *this; }
    #else
    flat_multiset<T,Pred,Alloc>& operator=(flat_multiset<T,Pred,Alloc> && mx)
- { m_flat_tree = move(mx.m_flat_tree); return *this; }
+ { m_flat_tree = detail::move_impl(mx.m_flat_tree); return *this; }
    #endif
 
    //! <b>Effects</b>: Returns the comparison object out
@@ -665,7 +676,7 @@
       { return m_flat_tree.key_comp(); }
 
    //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the object’s constructor.
+ //! was passed to the object's constructor.
    //!
    //! <b>Complexity</b>: Constant.
    allocator_type get_allocator() const
@@ -814,7 +825,7 @@
       { return m_flat_tree.insert_equal(x); }
    #else
    iterator insert(value_type && x)
- { return m_flat_tree.insert_equal(move(x)); }
+ { return m_flat_tree.insert_equal(detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Inserts a copy of x in the container.
@@ -845,7 +856,7 @@
       { return m_flat_tree.insert_equal(position, x); }
    #else
    iterator insert(iterator position, value_type && x)
- { return m_flat_tree.insert_equal(position, move(x)); }
+ { return m_flat_tree.insert_equal(position, detail::move_impl(x)); }
    #endif
 
    //! <b>Requires</b>: i, j are not iterators into *this.

Modified: branches/CMake/release/boost/interprocess/containers/list.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/list.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/list.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -93,7 +93,7 @@
    #else
    template<class Convertible>
    list_node(Convertible &&conv)
- : m_data(forward<Convertible>(conv))
+ : m_data(detail::forward_impl<Convertible>(conv))
    {}
    #endif
 
@@ -323,7 +323,7 @@
    {}
 
 // list(size_type n)
-// : AllocHolder(move(allocator_type()))
+// : AllocHolder(detail::move_impl(allocator_type()))
 // { this->resize(n); }
 
    //! <b>Effects</b>: Constructs a list that will use a copy of allocator a
@@ -355,11 +355,11 @@
    //! <b>Complexity</b>: Constant.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    list(const detail::moved_object<list> &x)
- : AllocHolder(move((AllocHolder&)x.get()))
+ : AllocHolder(detail::move_impl((AllocHolder&)x.get()))
    {}
    #else
    list(list &&x)
- : AllocHolder(move((AllocHolder&)x))
+ : AllocHolder(detail::move_impl((AllocHolder&)x))
    {}
    #endif
 
@@ -518,7 +518,7 @@
    { this->insert(this->begin(), x); }
    #else
    void push_front(T &&x)
- { this->insert(this->begin(), move(x)); }
+ { this->insert(this->begin(), detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Removes the last element from the list.
@@ -539,7 +539,7 @@
    { this->insert(this->end(), x); }
    #else
    void push_back (T &&x)
- { this->insert(this->end(), move(x)); }
+ { this->insert(this->end(), detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Removes the first element from the list.
@@ -610,7 +610,7 @@
    //! <b>Complexity</b>: Linear to the difference between size() and new_size.
    void resize(size_type new_size, const T& x)
    {
- iterator i = this->begin(), iend = this->end();
+ iterator iend = this->end();
       size_type len = this->size();
       
       if(len > new_size){
@@ -633,15 +633,26 @@
    //! <b>Complexity</b>: Linear to the difference between size() and new_size.
    void resize(size_type new_size)
    {
- iterator i = this->begin(), iend = this->end();
+ iterator iend = this->end();
       size_type len = this->size();
       
       if(len > new_size){
          size_type to_erase = len - new_size;
- while(to_erase--){
- --iend;
+ iterator ifirst;
+ if(to_erase < len/2u){
+ ifirst = iend;
+ while(to_erase--){
+ --ifirst;
+ }
          }
- this->erase(iend, this->end());
+ else{
+ ifirst = this->begin();
+ size_type to_skip = len - to_erase;
+ while(to_skip--){
+ ++ifirst;
+ }
+ }
+ this->erase(ifirst, iend);
       }
       else{
          this->priv_create_and_insert_nodes(this->end(), new_size - len);
@@ -763,7 +774,7 @@
    #else
    iterator insert(iterator p, T &&x)
    {
- NodePtr tmp = AllocHolder::create_node(move(x));
+ NodePtr tmp = AllocHolder::create_node(detail::move_impl(x));
       return iterator(this->icont().insert(p.get(), *tmp));
    }
    #endif

Modified: branches/CMake/release/boost/interprocess/containers/map.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/map.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/map.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -8,7 +8,7 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 //
-// This file comes from SGI's stl_map/stl_multimap files. Modified by Ion Gazta�ga 2004.
+// This file comes from SGI's stl_map/stl_multimap files. Modified by Ion Gaztanaga.
 // Renaming, isolating and porting to generic algorithms. Pointer typedef
 // set to allocator::pointer to allow placing it in shared memory.
 //
@@ -166,11 +166,11 @@
    //! <b>Postcondition</b>: x is emptied.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    map(const detail::moved_object<map<Key,T,Pred,Alloc> >& x)
- : m_tree(move(x.get().m_tree))
+ : m_tree(detail::move_impl(x.get().m_tree))
    {}
    #else
    map(map<Key,T,Pred,Alloc> &&x)
- : m_tree(move(x.m_tree))
+ : m_tree(detail::move_impl(x.m_tree))
    {}
    #endif
 
@@ -185,10 +185,10 @@
    //! <b>Complexity</b>: Constant.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    map<Key,T,Pred,Alloc>& operator=(const detail::moved_object<map<Key,T,Pred,Alloc> >& x)
- { m_tree = move(x.get().m_tree); return *this; }
+ { m_tree = detail::move_impl(x.get().m_tree); return *this; }
    #else
    map<Key,T,Pred,Alloc>& operator=(map<Key,T,Pred,Alloc> &&x)
- { m_tree = move(x.m_tree); return *this; }
+ { m_tree = detail::move_impl(x.m_tree); return *this; }
    #endif
 
    //! <b>Effects</b>: Returns the comparison object out
@@ -206,7 +206,7 @@
    { return value_compare(m_tree.key_comp()); }
 
    //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the objects constructor.
+ //! was passed to the object's constructor.
    //!
    //! <b>Complexity</b>: Constant.
    allocator_type get_allocator() const
@@ -322,14 +322,14 @@
       iterator i = lower_bound(k);
       // i->first is greater than or equivalent to k.
       if (i == end() || key_comp()(k, (*i).first)){
- value_type val(k, move(T()));
- i = insert(i, move(val));
+ value_type val(k, detail::move_impl(T()));
+ i = insert(i, detail::move_impl(val));
       }
       return (*i).second;
    }
 
    //! Effects: If there is no key equivalent to x in the map, inserts
- //! value_type(move(x), T()) into the map (the key is move-constructed)
+ //! value_type(detail::move_impl(x), T()) into the map (the key is move-constructed)
    //!
    //! Returns: A reference to the mapped_type corresponding to x in *this.
    //!
@@ -342,8 +342,8 @@
       iterator i = lower_bound(k);
       // i->first is greater than or equivalent to k.
       if (i == end() || key_comp()(k, (*i).first)){
- value_type val(k, move(T()));
- i = insert(i, move(val));
+ value_type val(k, detail::move_impl(T()));
+ i = insert(i, detail::move_impl(val));
       }
       return (*i).second;
    }
@@ -355,8 +355,8 @@
       iterator i = lower_bound(k);
       // i->first is greater than or equivalent to k.
       if (i == end() || key_comp()(k, (*i).first)){
- value_type val(move(k), move(T()));
- i = insert(i, move(val));
+ value_type val(detail::move_impl(k), detail::move_impl(T()));
+ i = insert(i, detail::move_impl(val));
       }
       return (*i).second;
    }
@@ -364,7 +364,7 @@
 
 /*
    //! Effects: If there is no key equivalent to x in the map, inserts
- //! value_type(move(x), T()) into the map (the key is move-constructed)
+ //! value_type(detail::move_impl(x), T()) into the map (the key is move-constructed)
    //!
    //! Returns: A reference to the mapped_type corresponding to x in *this.
    //!
@@ -379,8 +379,8 @@
       iterator i = lower_bound(k);
       // i->first is greater than or equivalent to k.
       if (i == end() || key_comp()(k, (*i).first)){
- value_type val(k, move(T()));
- i = insert(i, move(val));
+ value_type val(k, detail::move_impl(T()));
+ i = insert(i, detail::move_impl(val));
       }
       return (*i).second;
    }
@@ -449,7 +449,7 @@
    { return m_tree.insert_unique(x); }
    #else
    std::pair<iterator,bool> insert(std::pair<key_type, mapped_type> &&x)
- { return m_tree.insert_unique(move(x)); }
+ { return m_tree.insert_unique(detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Move constructs a new value from x if and only if there is
@@ -465,7 +465,7 @@
    { return m_tree.insert_unique(x); }
    #else
    std::pair<iterator,bool> insert(value_type &&x)
- { return m_tree.insert_unique(move(x)); }
+ { return m_tree.insert_unique(detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Inserts a copy of x in the container if and only if there is
@@ -494,7 +494,7 @@
    { return m_tree.insert_unique(position, x); }
    #else
    iterator insert(iterator position, std::pair<key_type, mapped_type> &&x)
- { return m_tree.insert_unique(position, move(x)); }
+ { return m_tree.insert_unique(position, detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Inserts a copy of x in the container.
@@ -517,7 +517,7 @@
    { return m_tree.insert_unique(position, x); }
    #else
    iterator insert(iterator position, value_type &&x)
- { return m_tree.insert_unique(position, move(x)); }
+ { return m_tree.insert_unique(position, detail::move_impl(x)); }
    #endif
 
    //! <b>Requires</b>: i, j are not iterators into *this.
@@ -813,11 +813,11 @@
    //! <b>Postcondition</b>: x is emptied.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    multimap(const detail::moved_object<multimap<Key,T,Pred,Alloc> >& x)
- : m_tree(move(x.get().m_tree))
+ : m_tree(detail::move_impl(x.get().m_tree))
    {}
    #else
    multimap(multimap<Key,T,Pred,Alloc> && x)
- : m_tree(move(x.m_tree))
+ : m_tree(detail::move_impl(x.m_tree))
    {}
    #endif
 
@@ -834,11 +834,11 @@
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    multimap<Key,T,Pred,Alloc>&
    operator=(const detail::moved_object<multimap<Key,T,Pred,Alloc> >& x)
- { m_tree = move(x.get().m_tree); return *this; }
+ { m_tree = detail::move_impl(x.get().m_tree); return *this; }
    #else
    multimap<Key,T,Pred,Alloc>&
    operator=(multimap<Key,T,Pred,Alloc> && x)
- { m_tree = move(x.m_tree); return *this; }
+ { m_tree = detail::move_impl(x.m_tree); return *this; }
    #endif
 
    //! <b>Effects</b>: Returns the comparison object out
@@ -856,7 +856,7 @@
    { return value_compare(m_tree.key_comp()); }
 
    //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the objects constructor.
+ //! was passed to the object's constructor.
    //!
    //! <b>Complexity</b>: Constant.
    allocator_type get_allocator() const
@@ -1006,7 +1006,7 @@
    { return m_tree.insert_equal(x); }
    #else
    iterator insert(std::pair<key_type, mapped_type> && x)
- { return m_tree.insert_equal(move(x)); }
+ { return m_tree.insert_equal(detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Inserts a copy of x in the container.
@@ -1044,7 +1044,7 @@
    { return m_tree.insert_equal(position, x); }
    #else
    iterator insert(iterator position, std::pair<key_type, mapped_type> && x)
- { return m_tree.insert_equal(position, move(x)); }
+ { return m_tree.insert_equal(position, detail::move_impl(x)); }
    #endif
 
    //! <b>Requires</b>: i, j are not iterators into *this.

Modified: branches/CMake/release/boost/interprocess/containers/set.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/set.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/set.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -143,11 +143,11 @@
    //! <b>Postcondition</b>: x is emptied.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    set(const detail::moved_object<set<T,Pred,Alloc> >& x)
- : m_tree(move(x.get().m_tree))
+ : m_tree(detail::move_impl(x.get().m_tree))
    {}
    #else
    set(set<T,Pred,Alloc> &&x)
- : m_tree(move(x.m_tree))
+ : m_tree(detail::move_impl(x.m_tree))
    {}
    #endif
 
@@ -162,10 +162,10 @@
    //! <b>Complexity</b>: Constant.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    set<T,Pred,Alloc>& operator=(const detail::moved_object<set<T, Pred, Alloc> >& x)
- { m_tree = move(x.get().m_tree); return *this; }
+ { m_tree = detail::move_impl(x.get().m_tree); return *this; }
    #else
    set<T,Pred,Alloc>& operator=(set<T, Pred, Alloc> &&x)
- { m_tree = move(x.m_tree); return *this; }
+ { m_tree = detail::move_impl(x.m_tree); return *this; }
    #endif
 
    //! <b>Effects</b>: Returns the comparison object out
@@ -183,7 +183,7 @@
    { return m_tree.key_comp(); }
 
    //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the object’s constructor.
+ //! was passed to the object's constructor.
    //!
    //! <b>Complexity</b>: Constant.
    allocator_type get_allocator() const
@@ -334,7 +334,7 @@
    { return m_tree.insert_unique(x); }
    #else
    std::pair<iterator,bool> insert(value_type &&x)
- { return m_tree.insert_unique(move(x)); }
+ { return m_tree.insert_unique(detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Inserts a copy of x in the container if and only if there is
@@ -360,7 +360,7 @@
    { return m_tree.insert_unique(p, x); }
    #else
    iterator insert(const_iterator p, value_type &&x)
- { return m_tree.insert_unique(p, move(x)); }
+ { return m_tree.insert_unique(p, detail::move_impl(x)); }
    #endif
 
    //! <b>Requires</b>: i, j are not iterators into *this.
@@ -632,11 +632,11 @@
    //! <b>Postcondition</b>: x is emptied.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    multiset(const detail::moved_object<multiset<T,Pred,Alloc> >& x)
- : m_tree(move(x.get().m_tree))
+ : m_tree(detail::move_impl(x.get().m_tree))
    {}
    #else
    multiset(multiset<T,Pred,Alloc> &&x)
- : m_tree(move(x.m_tree))
+ : m_tree(detail::move_impl(x.m_tree))
    {}
    #endif
 
@@ -651,10 +651,10 @@
    //! <b>Complexity</b>: Constant.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    multiset<T,Pred,Alloc>& operator=(const detail::moved_object<multiset<T,Pred,Alloc> >& x)
- { m_tree = move(x.get().m_tree); return *this; }
+ { m_tree = detail::move_impl(x.get().m_tree); return *this; }
    #else
    multiset<T,Pred,Alloc>& operator=(multiset<T,Pred,Alloc> &&x)
- { m_tree = move(x.m_tree); return *this; }
+ { m_tree = detail::move_impl(x.m_tree); return *this; }
    #endif
 
    //! <b>Effects</b>: Returns the comparison object out
@@ -672,7 +672,7 @@
    { return m_tree.key_comp(); }
 
    //! <b>Effects</b>: Returns a copy of the Allocator that
- //! was passed to the object’s constructor.
+ //! was passed to the object's constructor.
    //!
    //! <b>Complexity</b>: Constant.
    allocator_type get_allocator() const
@@ -818,7 +818,7 @@
    { return m_tree.insert_equal(x); }
    #else
    iterator insert(value_type && x)
- { return m_tree.insert_equal(move(x)); }
+ { return m_tree.insert_equal(detail::move_impl(x)); }
    #endif
 
    //! <b>Effects</b>: Inserts a copy of x in the container.
@@ -845,7 +845,7 @@
    { return m_tree.insert_equal(p, x); }
    #else
    iterator insert(const_iterator p, value_type && x)
- { return m_tree.insert_equal(p, move(x)); }
+ { return m_tree.insert_equal(p, detail::move_impl(x)); }
    #endif
 
    //! <b>Requires</b>: i, j are not iterators into *this.

Modified: branches/CMake/release/boost/interprocess/containers/slist.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/slist.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/slist.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -87,7 +87,7 @@
    #else
    template<class Convertible>
    slist_node(Convertible &&value)
- : m_data(forward<Convertible>(value)){}
+ : m_data(detail::forward_impl<Convertible>(value)){}
    #endif
 
    T m_data;
@@ -321,7 +321,7 @@
    {}
 
 // explicit slist(size_type n)
-// : AllocHolder(move(allocator_type()))
+// : AllocHolder(detail::move_impl(allocator_type()))
 // { this->resize(n); }
 
    //! <b>Effects</b>: Constructs a list that will use a copy of allocator a
@@ -367,11 +367,11 @@
    //! <b>Complexity</b>: Constant.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    slist(const detail::moved_object<slist> &x)
- : AllocHolder(move((AllocHolder&)x.get()))
+ : AllocHolder(detail::move_impl((AllocHolder&)x.get()))
    {}
    #else
    slist(slist &&x)
- : AllocHolder(move((AllocHolder&)x))
+ : AllocHolder(detail::move_impl((AllocHolder&)x))
    {}
    #endif
 
@@ -594,7 +594,7 @@
    { this->icont().push_front(*this->create_node(x)); }
    #else
    void push_front(T && x)
- { this->icont().push_front(*this->create_node(move(x))); }
+ { this->icont().push_front(*this->create_node(detail::move_impl(x))); }
    #endif
 
    //! <b>Effects</b>: Removes the first element from the list.
@@ -659,7 +659,7 @@
    { return iterator(this->icont().insert_after(prev_pos.get(), *this->create_node(x))); }
    #else
    iterator insert_after(iterator prev_pos, value_type && x)
- { return iterator(this->icont().insert_after(prev_pos.get(), *this->create_node(move(x)))); }
+ { return iterator(this->icont().insert_after(prev_pos.get(), *this->create_node(detail::move_impl(x)))); }
    #endif
 
    //! <b>Requires</b>: prev_pos must be a valid iterator of *this.
@@ -717,7 +717,7 @@
    { return this->insert_after(previous(p), x); }
    #else
    iterator insert(iterator p, value_type && x)
- { return this->insert_after(previous(p), move(x)); }
+ { return this->insert_after(previous(p), detail::move_impl(x)); }
    #endif
 
    //! <b>Requires</b>: p must be a valid iterator of *this.
@@ -1426,7 +1426,8 @@
 // Specialization of insert_iterator so that insertions will be constant
 // time rather than linear time.
 
-//iG
+///@cond
+
 //Ummm, I don't like to define things in namespace std, but
 //there is no other way
 namespace std {
@@ -1464,7 +1465,7 @@
 
 } //namespace std;
 
-
+///@endcond
 
 #include <boost/interprocess/detail/config_end.hpp>
 

Modified: branches/CMake/release/boost/interprocess/containers/string.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/string.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/string.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -281,7 +281,7 @@
       (void)limit_size;
       (void)reuse;
       if(!(command & allocate_new))
- return std::pair<pointer, bool>(0, 0);
+ return std::pair<pointer, bool>(pointer(0), 0);
       received_size = preferred_size;
       return std::make_pair(this->alloc().allocate(received_size), false);
    }
@@ -308,7 +308,7 @@
    }
 
    void construct(pointer p, const value_type &value = value_type())
- { new(detail::get_pointer(p)) value_type(value); }
+ { new((void*)detail::get_pointer(p)) value_type(value); }
 
    void destroy(pointer p, size_type n)
    {
@@ -520,8 +520,9 @@
    /// @endcond
 
    public: // Constructor, destructor, assignment.
-
+ /// @cond
    struct reserve_t {};
+ /// @endcond
 
    basic_string(reserve_t, std::size_t n,
                const allocator_type& a = allocator_type())
@@ -551,11 +552,11 @@
    //! <b>Complexity</b>: Constant.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_string(const detail::moved_object<basic_string>& s)
- : base_t(move((base_t&)s.get()))
+ : base_t(detail::move_impl((base_t&)s.get()))
    {}
    #else
    basic_string(basic_string && s)
- : base_t(move((base_t&)s))
+ : base_t(detail::move_impl((base_t&)s))
    {}
    #endif
 
@@ -1940,7 +1941,7 @@
           const basic_string<CharT,Traits,A>& y)
 {
    mx += y;
- return move(mx);
+ return detail::move_impl(mx);
 }
 #endif
 
@@ -1994,7 +1995,7 @@
           basic_string<CharT,Traits,A> && my)
 {
    typedef typename basic_string<CharT,Traits,A>::size_type size_type;
- return move(my.get().replace(size_type(0), size_type(0), s));
+ return detail::move_impl(my.get().replace(size_type(0), size_type(0), s));
 }
 #endif
 
@@ -2061,7 +2062,7 @@
           const CharT* s)
 {
    mx += s;
- return move(mx);
+ return detail::move_impl(mx);
 }
 #endif
 
@@ -2093,7 +2094,7 @@
 operator+(basic_string<CharT,Traits,A> && mx, const CharT c)
 {
    mx += c;
- return move(mx);
+ return detail::move_impl(mx);
 }
 #endif
 

Modified: branches/CMake/release/boost/interprocess/containers/vector.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/containers/vector.hpp (original)
+++ branches/CMake/release/boost/interprocess/containers/vector.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -288,7 +288,7 @@
       (void)limit_size;
       (void)reuse;
       if(!(command & allocate_new))
- return std::pair<pointer, bool>(0, 0);
+ return std::pair<pointer, bool>(pointer(0), 0);
       received_size = preferred_size;
       return std::make_pair(this->alloc().allocate(received_size), false);
    }
@@ -301,8 +301,8 @@
                          const pointer &reuse,
                          allocator_v2)
    {
- return this->alloc().allocation_command(command, limit_size, preferred_size,
- received_size, reuse);
+ return this->alloc().allocation_command
+ (command, limit_size, preferred_size, received_size, reuse);
    }
 
    size_type next_capacity(size_type additional_objects) const
@@ -434,7 +434,10 @@
    //This is the optimized move iterator for copy constructors
    //so that std::copy and similar can use memcpy
    typedef typename detail::if_c
- <base_t::trivial_copy
+ <base_t::trivial_copy
+ #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
+ || !is_movable<value_type>::value
+ #endif
       ,T*
       ,detail::move_iterator<T*>
>::type copy_move_it;
@@ -443,6 +446,9 @@
    //so that std::uninitialized_copy and similar can use memcpy
    typedef typename detail::if_c
       <base_t::trivial_assign
+ #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
+ || !is_movable<value_type>::value
+ #endif
       ,T*
       ,detail::move_iterator<T*>
>::type assign_move_it;
@@ -491,7 +497,7 @@
    { this->swap(mx.get()); }
    #else
    vector(vector<T, A> && mx)
- : base_t(mx)
+ : base_t(detail::move_impl(mx))
    { this->swap(mx); }
    #endif
 
@@ -859,7 +865,7 @@
    {
       if (this->members_.m_size < this->members_.m_capacity){
          //There is more memory, just construct a new object at the end
- new(detail::get_pointer(this->members_.m_start) + this->members_.m_size)value_type(x);
+ new((void*)(detail::get_pointer(this->members_.m_start) + this->members_.m_size))value_type(x);
          ++this->members_.m_size;
       }
       else{
@@ -878,7 +884,7 @@
    {
       if (this->members_.m_size < this->members_.m_capacity){
          //There is more memory, just construct a new object at the end
- new(detail::get_pointer(this->members_.m_start + this->members_.m_size))value_type(mx);
+ new((void*)detail::get_pointer(this->members_.m_start + this->members_.m_size))value_type(mx);
          ++this->members_.m_size;
       }
       else{
@@ -890,11 +896,11 @@
    {
       if (this->members_.m_size < this->members_.m_capacity){
          //There is more memory, just construct a new object at the end
- new(detail::get_pointer(this->members_.m_start + this->members_.m_size))value_type(move(mx));
+ new((void*)detail::get_pointer(this->members_.m_start + this->members_.m_size))value_type(detail::move_impl(mx));
          ++this->members_.m_size;
       }
       else{
- this->insert(this->end(), move(mx));
+ this->insert(this->end(), detail::move_impl(mx));
       }
    }
    #endif
@@ -1101,7 +1107,7 @@
          T *ptr = detail::get_pointer(this->members_.m_start + this->members_.m_size);
          while(n--){
             //Default construct
- new(ptr++)T();
+ new((void*)ptr++)T();
             ++this->members_.m_size;
          }
       }
@@ -1148,8 +1154,15 @@
          }
          else{
             size_type received_size;
- this->alloc().allocation_command(shrink_in_place, this->size(), this->capacity()
- ,received_size, this->members_.m_start);
+ if(this->alloc().allocation_command
+ ( shrink_in_place | nothrow_allocation
+ , this->capacity(), this->size()
+ , received_size, this->members_.m_start).first){
+ this->members_.m_capacity = received_size;
+ #ifdef BOOST_INTERPROCESS_VECTOR_ALLOC_STATS
+ ++this->num_shrink;
+ #endif
+ }
          }
       }
    }
@@ -1241,9 +1254,9 @@
          std::uninitialized_copy(copy_move_it(old_finish - n), copy_move_it(old_finish), old_finish);
          this->members_.m_size += n;
          //Copy previous to last objects to the initialized end
- std::copy_backward(assign_move_it(detail::get_pointer(pos)), assign_move_it(old_finish - n), old_finish);
+ std::copy_backward(assign_move_it(pos), assign_move_it(old_finish - n), old_finish);
          //Insert new objects in the pos
- std::copy(first, last, detail::get_pointer(pos));
+ std::copy(first, last, pos);
       }
       else {
          //The new elements don't fit in the [pos, end()) range. Copy
@@ -1254,12 +1267,12 @@
          this->members_.m_size += n - elems_after;
          //Copy old [pos, end()) elements to the uninitialized memory
          std::uninitialized_copy
- ( copy_move_it(detail::get_pointer(pos))
+ ( copy_move_it(pos)
             , copy_move_it(old_finish)
             , detail::get_pointer(this->members_.m_start) + this->members_.m_size);
          this->members_.m_size += elems_after;
          //Copy first new elements in pos
- std::copy(first, mid, detail::get_pointer(pos));
+ std::copy(first, mid, pos);
       }
    }
 
@@ -1277,7 +1290,7 @@
       //the start of the new buffer
       new_finish = std::uninitialized_copy
          ( copy_move_it(detail::get_pointer(this->members_.m_start))
- , copy_move_it(detail::get_pointer(pos))
+ , copy_move_it(pos)
          , old_finish = new_finish);
       construted_values_destroyer.increment_size(new_finish - old_finish);
       //Initialize new objects, starting from previous point
@@ -1287,9 +1300,9 @@
       //Initialize from the rest of the old buffer,
       //starting from previous point
       new_finish = std::uninitialized_copy
- ( copy_move_it(detail::get_pointer(pos))
+ ( copy_move_it(pos)
          , copy_move_it(detail::get_pointer(this->members_.m_start) + this->members_.m_size)
- , detail::get_pointer(new_finish));
+ , new_finish);
 
       //All construction successful, disable rollbacks
       construted_values_destroyer.release();
@@ -1345,13 +1358,11 @@
          //Copy first old values before pos, after that the
          //new objects
          boost::interprocess::uninitialized_copy_copy
- (copy_move_it(old_start), copy_move_it(detail::get_pointer(pos)), first, last, detail::get_pointer(new_start));
+ (copy_move_it(old_start), copy_move_it(pos), first, last, new_start);
          UCopiedArrayDestructor new_values_destroyer(new_start, elemsbefore);
          //Now initialize the rest of memory with the last old values
          std::uninitialized_copy
- ( copy_move_it(detail::get_pointer(pos))
- , copy_move_it(old_finish)
- , detail::get_pointer(new_start) + elemsbefore + n);
+ (copy_move_it(pos), copy_move_it(old_finish), new_start + elemsbefore + n);
          //All new elements correctly constructed, avoid new element destruction
          new_values_destroyer.release();
          this->members_.m_size = old_size + n;
@@ -1376,17 +1387,13 @@
          //Copy first old values before pos, after that the
          //new objects
          boost::interprocess::uninitialized_copy_copy
- ( copy_move_it(old_start)
- , copy_move_it(detail::get_pointer(pos))
- , first, last, detail::get_pointer(new_start));
+ (copy_move_it(old_start), copy_move_it(pos), first, last, new_start);
          UCopiedArrayDestructor new_values_destroyer(new_start, elemsbefore);
          size_type raw_gap = s_before - (elemsbefore + n);
          //Now initialize the rest of s_before memory with the
          //first of elements after new values
          std::uninitialized_copy
- ( copy_move_it(detail::get_pointer(pos))
- , copy_move_it(detail::get_pointer(pos) + raw_gap)
- , detail::get_pointer(new_start) + elemsbefore + n);
+ (copy_move_it(pos), copy_move_it(pos + raw_gap), new_start + elemsbefore + n);
          //All new elements correctly constructed, avoid new element destruction
          new_values_destroyer.release();
          //All new elements correctly constructed, avoid old element destruction
@@ -1394,7 +1401,7 @@
          //Update size since we have a contiguous buffer
          this->members_.m_size = old_size + s_before;
          //Now copy remaining last objects in the old buffer begin
- T *to_destroy = std::copy(assign_move_it(detail::get_pointer(pos) + raw_gap), assign_move_it(old_finish), old_start);
+ T *to_destroy = std::copy(assign_move_it(pos + raw_gap), assign_move_it(old_finish), old_start);
          //Now destroy redundant elements except if they were moved and
          //they have trivial destructor after move
          size_type n_destroy = old_finish - to_destroy;
@@ -1460,24 +1467,22 @@
             //Copy the first part of old_begin to raw_mem
             T *start_n = old_start + difference_type(s_before);
             std::uninitialized_copy
- ( copy_move_it(old_start)
- , copy_move_it(start_n)
- , detail::get_pointer(new_start));
+ (copy_move_it(old_start), copy_move_it(start_n), new_start);
             //The buffer is all constructed until old_end,
             //release destroyer and update size
             old_values_destroyer.release();
             this->members_.m_size = old_size + s_before;
             //Now copy the second part of old_begin overwriting himself
- T* next = std::copy(assign_move_it(start_n), assign_move_it(detail::get_pointer(pos)), old_start);
+ T* next = std::copy(assign_move_it(start_n), assign_move_it(pos), old_start);
             if(do_after){
                //Now copy the new_beg elements
- std::copy(first, before_end, detail::get_pointer(next));
+ std::copy(first, before_end, next);
             }
             else{
                //Now copy the all the new elements
- T* move_start = std::copy(first, last, detail::get_pointer(next));
+ T* move_start = std::copy(first, last, next);
                //Now displace old_end elements
- T* move_end = std::copy(assign_move_it(detail::get_pointer(pos)), assign_move_it(old_finish), detail::get_pointer(move_start));
+ T* move_end = std::copy(assign_move_it(pos), assign_move_it(old_finish), move_start);
                //Destroy remaining moved elements from old_end except if
                //they have trivial destructor after being moved
                difference_type n_destroy = s_before - n;
@@ -1513,9 +1518,7 @@
             size_type n_new_init = difference_type(s_before) - elemsbefore;
             std::advance(mid, n_new_init);
             boost::interprocess::uninitialized_copy_copy
- ( copy_move_it(old_start)
- , copy_move_it(detail::get_pointer(pos))
- , first, mid, detail::get_pointer(new_start));
+ (copy_move_it(old_start), copy_move_it(pos), first, mid, new_start);
             //The buffer is all constructed until old_end,
             //release destroyer and update size
             old_values_destroyer.release();
@@ -1529,7 +1532,7 @@
                //Copy all new elements
                T* move_start = std::copy(mid, last, old_start);
                //Displace old_end
- T* move_end = std::copy(copy_move_it(detail::get_pointer(pos)), copy_move_it(old_finish), detail::get_pointer(move_start));
+ T* move_end = std::copy(copy_move_it(pos), copy_move_it(old_finish), move_start);
                //Destroy remaining moved elements from old_end except if they
                //have trivial destructor after being moved
                difference_type n_destroy = s_before - n;
@@ -1584,14 +1587,12 @@
                //First copy the part of old_end raw_mem
                T* finish_n = old_finish - difference_type(n_after);
                std::uninitialized_copy
- ( copy_move_it(detail::get_pointer(finish_n))
- , copy_move_it(old_finish)
- , old_finish);
+ (copy_move_it(finish_n), copy_move_it(old_finish), old_finish);
                this->members_.m_size += n_after;
                //Displace the rest of old_end to the new position
- std::copy_backward(assign_move_it(detail::get_pointer(pos)), assign_move_it(detail::get_pointer(finish_n)), old_finish);
+ std::copy_backward(assign_move_it(pos), assign_move_it(finish_n), old_finish);
                //Now overwrite with new_end
- std::copy(first, last, detail::get_pointer(pos));
+ std::copy(first, last, pos);
             }
             else {
                //The raw_mem from end will divide new_end part
@@ -1610,13 +1611,10 @@
                std::advance(mid, elemsafter);
                //First initialize data in raw memory
                boost::interprocess::uninitialized_copy_copy
- ( mid, last
- , copy_move_it(detail::get_pointer(pos))
- , copy_move_it(old_finish)
- , old_finish);
+ ( mid, last, copy_move_it(pos), copy_move_it(old_finish), old_finish);
                this->members_.m_size += n_after;
                //Now copy the part of new_end over constructed elements
- std::copy(first, mid, detail::get_pointer(pos));
+ std::copy(first, mid, pos);
             }
          }
       }
@@ -1727,8 +1725,9 @@
          //Backup old buffer data
          size_type old_offset = old_start - detail::get_pointer(ret.first);
          size_type first_count = min_value(n, old_offset);
- FwdIt mid = boost::interprocess::n_uninitialized_copy_n
+ boost::interprocess::uninitialized_copy_n
             (first, first_count, detail::get_pointer(ret.first));
+ FwdIt mid = first + first_count;
 
          if(old_offset > n){
             //All old elements will be destroyed by "old_values_destroyer"
@@ -1742,12 +1741,13 @@
             this->members_.m_size = first_count + old_size;
             //Now overwrite the old values
             size_type second_count = min_value(old_size, n - first_count);
- mid = copy_n(mid, second_count, old_start);
+ copy_n(mid, second_count, old_start);
+ mid += second_count;
             
             //Check if we still have to append elements in the
             //uninitialized end
             if(second_count == old_size){
- boost::interprocess::n_uninitialized_copy_n
+ boost::interprocess::uninitialized_copy_n
                   ( mid
                   , n - first_count - second_count
                   , old_start + old_size);
@@ -1801,9 +1801,10 @@
    public:
    unsigned int num_expand_fwd;
    unsigned int num_expand_bwd;
+ unsigned int num_shrink;
    unsigned int num_alloc;
    void reset_alloc_stats()
- { num_expand_fwd = num_expand_bwd = num_alloc = 0; }
+ { num_expand_fwd = num_expand_bwd = num_alloc = 0, num_shrink = 0; }
    #endif
    /// @endcond
 };

Modified: branches/CMake/release/boost/interprocess/creation_tags.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/creation_tags.hpp (original)
+++ branches/CMake/release/boost/interprocess/creation_tags.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -26,20 +26,36 @@
 struct open_only_t {};
 
 //!Tag to indicate that the resource must
+//!be only opened for reading
+struct open_read_only_t {};
+
+//!Tag to indicate that the resource must
+//!be only opened for reading
+struct open_copy_on_write_t {};
+
+//!Tag to indicate that the resource must
 //!be created. If already created, it must be opened.
 struct open_or_create_t {};
 
 //!Value to indicate that the resource must
 //!be only created
-static const create_only_t create_only = create_only_t();
+static const create_only_t create_only = create_only_t();
 
 //!Value to indicate that the resource must
 //!be only opened
-static const open_only_t open_only = open_only_t();
+static const open_only_t open_only = open_only_t();
+
+//!Value to indicate that the resource must
+//!be only opened for reading
+static const open_read_only_t open_read_only = open_read_only_t();
 
 //!Value to indicate that the resource must
 //!be created. If already created, it must be opened.
-static const open_or_create_t open_or_create = open_or_create_t();
+static const open_or_create_t open_or_create = open_or_create_t();
+
+//!Value to indicate that the resource must
+//!be only opened for reading
+static const open_copy_on_write_t open_copy_on_write = open_copy_on_write_t();
 
 namespace detail {
 

Modified: branches/CMake/release/boost/interprocess/detail/algorithms.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/detail/algorithms.hpp (original)
+++ branches/CMake/release/boost/interprocess/detail/algorithms.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -20,12 +20,18 @@
 #include <boost/interprocess/detail/config_begin.hpp>
 #include <boost/interprocess/detail/workaround.hpp>
 #include <boost/interprocess/detail/iterators.hpp>
-#include <boost/get_pointer.hpp>
+#include <boost/interprocess/detail/type_traits.hpp>
+#include <boost/type_traits/has_trivial_copy.hpp>
+#include <boost/type_traits/has_trivial_assign.hpp>
 #include <boost/detail/no_exceptions_support.hpp>
+#include <boost/get_pointer.hpp>
+#include <cstring>
 
 namespace boost {
 namespace interprocess {
 
+#if !defined(BOOST_INTERPROCESS_RVALUE_REFERENCE) || !defined(BOOST_INTERPROCESS_RVALUE_PAIR)
+
 template<class T>
 struct has_own_construct_from_it
 {
@@ -43,7 +49,7 @@
 template<class T, class InpIt>
 inline void construct_in_place_impl(T* dest, const InpIt &source, detail::false_)
 {
- new(dest)T(*source);
+ new((void*)dest)T(*source);
 }
 
 } //namespace detail {
@@ -55,25 +61,81 @@
    detail::construct_in_place_impl(dest, source, boolean_t());
 }
 
+#else
+template<class T, class InpIt>
+inline void construct_in_place(T* dest, InpIt source)
+{ new((void*)dest)T(*source); }
+#endif
+
 template<class T, class U, class D>
 inline void construct_in_place(T *dest, default_construct_iterator<U, D>)
 {
- new(dest)T();
+ new((void*)dest)T();
 }
 
+
+template<class InIt, class OutIt>
+struct optimize_assign
+{
+ static const bool value = false;
+};
+
+template<class T>
+struct optimize_assign<const T*, T*>
+{
+ static const bool value = boost::has_trivial_assign<T>::value;
+};
+
+template<class T>
+struct optimize_assign<T*, T*>
+ : public optimize_assign<const T*, T*>
+{};
+
 template<class InIt, class OutIt>
-InIt copy_n(InIt first, typename std::iterator_traits<InIt>::difference_type length, OutIt dest)
+struct optimize_copy
+{
+ static const bool value = false;
+};
+
+template<class T>
+struct optimize_copy<const T*, T*>
+{
+ static const bool value = boost::has_trivial_copy<T>::value;
+};
+
+template<class T>
+struct optimize_copy<T*, T*>
+ : public optimize_copy<const T*, T*>
+{};
+
+
+template<class InIt, class OutIt> inline
+OutIt copy_n_dispatch(InIt first, typename std::iterator_traits<InIt>::difference_type length, OutIt dest, detail::bool_<false>)
 {
    for (; length--; ++dest, ++first)
       *dest = *first;
- return first;
+ return dest;
+}
+
+template<class T> inline
+T *copy_n_dispatch(const T *first, typename std::iterator_traits<const T*>::difference_type length, T *dest, detail::bool_<true>)
+{
+ std::size_t size = length*sizeof(T);
+ return ((T*)std::memmove(dest, first, size)) + size;
+}
+
+template<class InIt, class OutIt> inline
+OutIt copy_n(InIt first, typename std::iterator_traits<InIt>::difference_type length, OutIt dest)
+{
+ const bool do_optimized_assign = optimize_assign<InIt, OutIt>::value;
+ return copy_n_dispatch(first, length, dest, detail::bool_<do_optimized_assign>());
 }
 
 template<class InIt, class FwdIt> inline
-InIt n_uninitialized_copy_n
+FwdIt uninitialized_copy_n_dispatch
    (InIt first,
     typename std::iterator_traits<InIt>::difference_type count,
- FwdIt dest)
+ FwdIt dest, detail::bool_<false>)
 {
    typedef typename std::iterator_traits<FwdIt>::value_type value_type;
    //Save initial destination position
@@ -95,9 +157,28 @@
       BOOST_RETHROW
    }
    BOOST_CATCH_END
- return first;
+ return dest;
 }
 
+
+template<class T> inline
+T *uninitialized_copy_n_dispatch(const T *first, typename std::iterator_traits<const T*>::difference_type length, T *dest, detail::bool_<true>)
+{
+ std::size_t size = length*sizeof(T);
+ return ((T*)std::memmove(dest, first, size)) + size;
+}
+
+template<class InIt, class FwdIt> inline
+FwdIt uninitialized_copy_n
+ (InIt first,
+ typename std::iterator_traits<InIt>::difference_type count,
+ FwdIt dest)
+{
+ const bool do_optimized_copy = optimize_copy<InIt, FwdIt>::value;
+ return uninitialized_copy_n_dispatch(first, count, dest, detail::bool_<do_optimized_copy>());
+}
+
+
 // uninitialized_copy_copy
 // Copies [first1, last1) into [result, result + (last1 - first1)), and
 // copies [first2, last2) into

Modified: branches/CMake/release/boost/interprocess/detail/config_begin.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/detail/config_begin.hpp (original)
+++ branches/CMake/release/boost/interprocess/detail/config_begin.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -30,4 +30,5 @@
    #pragma warning (disable : 4711) // function selected for automatic inline expansion
    #pragma warning (disable : 4786) // identifier truncated in debug info
    #pragma warning (disable : 4996) // 'function': was declared deprecated
+ #pragma warning (disable : 4197) // top-level volatile in cast is ignored
 #endif

Modified: branches/CMake/release/boost/interprocess/detail/file_wrapper.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/detail/file_wrapper.hpp (original)
+++ branches/CMake/release/boost/interprocess/detail/file_wrapper.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -51,7 +51,7 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    file_wrapper
- (detail::moved_object<file_wrapper> &moved)
+ (detail::moved_object<file_wrapper> moved)
    { this->swap(moved.get()); }
    #else
    file_wrapper(file_wrapper &&moved)
@@ -63,7 +63,7 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    file_wrapper &operator=
- (detail::moved_object<file_wrapper> &moved)
+ (detail::moved_object<file_wrapper> moved)
    {
       file_wrapper tmp(moved);
       this->swap(tmp);
@@ -72,7 +72,7 @@
    #else
    file_wrapper &operator=(file_wrapper &&moved)
    {
- file_wrapper tmp(move(moved));
+ file_wrapper tmp(detail::move_impl(moved));
       this->swap(tmp);
       return *this;
    }

Modified: branches/CMake/release/boost/interprocess/detail/managed_memory_impl.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/detail/managed_memory_impl.hpp (original)
+++ branches/CMake/release/boost/interprocess/detail/managed_memory_impl.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -94,6 +94,8 @@
 
    /// @cond
 
+ typedef typename
+ segment_manager::char_ptr_holder_t char_ptr_holder_t;
    //Experimental. Don't use.
 
    typedef typename segment_manager::multiallocation_iterator multiallocation_iterator;
@@ -105,9 +107,6 @@
    private:
    typedef basic_managed_memory_impl
                <CharType, MemoryAlgorithm, IndexType, Offset> self_t;
- typedef typename
- segment_manager::char_ptr_holder_t char_ptr_holder_t;
-
    protected:
    template<class ManagedMemory>
    static bool grow(const char *filename, std::size_t extra_bytes)
@@ -687,6 +686,15 @@
       get_deleter()
    { return mp_header->get_deleter<T>(); }
 
+ /// @cond
+ //!Tries to find a previous named allocation address. Returns a memory
+ //!buffer and the object count. If not found returned pointer is 0.
+ //!Never throws.
+ template <class T>
+ std::pair<T*, std::size_t> find_no_lock (char_ptr_holder_t name)
+ { return mp_header->template find_no_lock<T>(name); }
+ /// @endcond
+
    protected:
    //!Swaps the segment manager's managed by this managed memory segment.
    //!NOT thread-safe. Never throws.

Modified: branches/CMake/release/boost/interprocess/detail/move.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/detail/move.hpp (original)
+++ branches/CMake/release/boost/interprocess/detail/move.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -17,6 +17,8 @@
 
 #include <boost/interprocess/detail/config_begin.hpp>
 #include <boost/interprocess/detail/workaround.hpp>
+#include <boost/interprocess/interprocess_fwd.hpp>
+#include <boost/interprocess/detail/mpl.hpp>
 
 //!\file
 //!Describes a function and a type to emulate move semantics.
@@ -79,7 +81,7 @@
    public:
    typedef T type;
 
- move_return(T& returned)
+ move_return(const T& returned)
       : m_moved(moved_object<T>(returned))
    {}
 
@@ -106,16 +108,25 @@
 namespace boost {
 namespace interprocess {
 
+namespace detail{
+
 //!A function that converts an object to a moved object so that
 //!it can match a function taking a detail::moved_object object.
 template<class Object>
-typename detail::move_type<Object>::type move
- (const Object &object)
+typename detail::move_type<Object>::type move_impl(const Object &object)
 {
    typedef typename detail::move_type<Object>::type type;
    return type(object);
 }
 
+} //namespace detail {
+
+//!A function that converts an object to a moved object so that
+//!it can match a function taking a detail::moved_object object.
+template<class Object>
+typename detail::move_type<Object>::type move(const Object &object)
+{ return detail::move_impl(object); }
+
 } //namespace interprocess {
 } //namespace boost {
 
@@ -126,15 +137,20 @@
 namespace boost {
 namespace interprocess {
 
+namespace detail {
+
 template <class T>
-inline typename detail::remove_reference<T>::type&&
-move(T&& t)
+inline typename detail::remove_reference<T>::type&& move_impl(T&& t)
 { return t; }
 
 template <class T>
-inline
-T&&
-forward(typename identity<T>::type&& t)
+inline T&& forward_impl(typename detail::identity<T>::type&& t)
+{ return t; }
+
+} //namespace detail {
+
+template <class T>
+inline typename detail::remove_reference<T>::type&& move(T&& t)
 { return t; }
 
 } //namespace interprocess {

Modified: branches/CMake/release/boost/interprocess/detail/move_iterator.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/detail/move_iterator.hpp (original)
+++ branches/CMake/release/boost/interprocess/detail/move_iterator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -53,7 +53,7 @@
 
    reference operator*() const
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- { return move(*m_it); }
+ { return detail::move_impl(*m_it); }
    #else
    { return *m_it; }
    #endif
@@ -86,7 +86,7 @@
    { m_it -= n; return *this; }
 
    reference operator[](difference_type n) const
- { return move(m_it[n]); }
+ { return detail::move_impl(m_it[n]); }
 
    private:
    It m_it;

Modified: branches/CMake/release/boost/interprocess/detail/mpl.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/detail/mpl.hpp (original)
+++ branches/CMake/release/boost/interprocess/detail/mpl.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -17,7 +17,7 @@
 # pragma once
 #endif
 
-//#include <functional>
+#include <cstddef>
 
 namespace boost {
 namespace interprocess {
@@ -117,10 +117,29 @@
 struct identity
 // : public std::unary_function<T,T>
 {
+ typedef T type;
    const T& operator()(const T& x) const
    { return x; }
 };
 
+template<std::size_t S>
+struct ls_zeros
+{
+ static const std::size_t value = (S & std::size_t(1)) ? 0 : (1u + ls_zeros<(S >> 1u)>::value);
+};
+
+template<>
+struct ls_zeros<0>
+{
+ static const std::size_t value = 0;
+};
+
+template<>
+struct ls_zeros<1>
+{
+ static const std::size_t value = 0;
+};
+
 } //namespace detail {
 } //namespace interprocess {
 } //namespace boost {

Modified: branches/CMake/release/boost/interprocess/detail/named_proxy.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/detail/named_proxy.hpp (original)
+++ branches/CMake/release/boost/interprocess/detail/named_proxy.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -48,13 +48,13 @@
    self_t operator++(int) { return *this; }
 
    void construct(void *mem)
- { new(mem)T; }
+ { new((void*)mem)T; }
 
    virtual void construct_n(void *mem, std::size_t num, std::size_t &constructed)
    {
- T* memory = static_cast<T*>(mem);
+ T* memory = (T*)(mem);
       for(constructed = 0; constructed < num; ++constructed)
- new(memory++)T;
+ new((void*)memory++)T;
    }
 };
 
@@ -88,13 +88,13 @@
 // : p1((P1 &)p_1), p2((P2 &)p_2) {}
 //
 // void construct(void *mem)
-// { new(object)T(m_p1, m_p2); }
+// { new((void*)object)T(m_p1, m_p2); }
 //
 // virtual void construct_n(void *mem
 // , std::size_t num
 // , std::size_t &constructed)
 // {
-// T* memory = static_cast<T*>(mem);
+// T* memory = (T*)(mem);
 // for(constructed = 0; constructed < num; ++constructed){
 // this->construct(memory++, IsIterator());
 // this->do_increment(IsIterator());
@@ -103,10 +103,10 @@
 //
 // private:
 // void construct(void *mem, detail::true_)
-// { new(mem)T(*m_p1, *m_p2); }
+// { new((void*)mem)T(*m_p1, *m_p2); }
 //
 // void construct(void *mem, detail::false_)
-// { new(mem)T(m_p1, m_p2); }
+// { new((void*)mem)T(m_p1, m_p2); }
 //
 // P1 &m_p1; P2 &m_p2;
 // };
@@ -163,7 +163,7 @@
                         , std::size_t num \
                         , std::size_t &constructed) \
       { \
- T* memory = static_cast<T*>(mem); \
+ T* memory = (T*)(mem); \
          for(constructed = 0; constructed < num; ++constructed){ \
             this->construct(memory++, IsIterator()); \
             this->do_increment(IsIterator()); \
@@ -172,10 +172,10 @@
                                                                            \
       private: \
       void construct(void *mem, detail::true_) \
- { new(mem)T(BOOST_PP_ENUM_PARAMS(n, *m_p)); } \
+ { new((void*)mem)T(BOOST_PP_ENUM_PARAMS(n, *m_p)); } \
                                                                            \
       void construct(void *mem, detail::false_) \
- { new(mem)T(BOOST_PP_ENUM_PARAMS(n, m_p)); } \
+ { new((void*)mem)T(BOOST_PP_ENUM_PARAMS(n, m_p)); } \
                                                                            \
       BOOST_PP_REPEAT(n, BOOST_INTERPROCESS_AUX_PARAM_DEFINE, _) \
    }; \

Modified: branches/CMake/release/boost/interprocess/detail/win32_api.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/detail/win32_api.hpp (original)
+++ branches/CMake/release/boost/interprocess/detail/win32_api.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -225,7 +225,7 @@
 extern "C" __declspec(dllimport) void * __stdcall CreateFileMappingA (void *, interprocess_security_attributes*, unsigned long, unsigned long, unsigned long, const char *);
 extern "C" __declspec(dllimport) void * __stdcall MapViewOfFileEx (void *, unsigned long, unsigned long, unsigned long, std::size_t, void*);
 extern "C" __declspec(dllimport) void * __stdcall OpenFileMappingA (unsigned long, int, const char *);
-extern "C" __declspec(dllimport) void * __stdcall CreateFileA (const char *, unsigned long, unsigned long, struct _SECURITY_ATTRIBUTES*, unsigned long, unsigned long, void *);
+extern "C" __declspec(dllimport) void * __stdcall CreateFileA (const char *, unsigned long, unsigned long, struct interprocess_security_attributes*, unsigned long, unsigned long, void *);
 extern "C" __declspec(dllimport) int __stdcall DeleteFileA (const char *);
 extern "C" __declspec(dllimport) void __stdcall GetSystemInfo (struct system_info *);
 extern "C" __declspec(dllimport) int __stdcall FlushViewOfFile (void *, std::size_t);

Modified: branches/CMake/release/boost/interprocess/detail/workaround.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/detail/workaround.hpp (original)
+++ branches/CMake/release/boost/interprocess/detail/workaround.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -13,6 +13,8 @@
 
 #include <boost/interprocess/detail/config_begin.hpp>
 
+#undef BOOST_DISABLE_WIN32
+
 #if !(defined BOOST_WINDOWS) || (defined BOOST_DISABLE_WIN32)
 
    #include <unistd.h>
@@ -105,8 +107,11 @@
 // defined by some very early development versions of GCC 4.3; we will
 // remove this part of the check in the near future.
 # if defined(__GXX_EXPERIMENTAL_CPP0X__) || defined(__GXX_EXPERIMENTAL_CXX0X__)
-# define BOOST_INTERPROCESS_RVALUE_REFERENCE
-# define BOOST_INTERPROCESS_VARIADIC_TEMPLATES
+# define BOOST_INTERPROCESS_RVALUE_REFERENCE
+# define BOOST_INTERPROCESS_VARIADIC_TEMPLATES
+# if defined(__GLIBCPP__) || defined(__GLIBCXX__)
+# define BOOST_INTERPROCESS_RVALUE_PAIR
+# endif
 # endif
 #endif
 

Modified: branches/CMake/release/boost/interprocess/errors.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/errors.hpp (original)
+++ branches/CMake/release/boost/interprocess/errors.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -10,8 +10,8 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 //
-// Copyright © 2002 Beman Dawes
-// Copyright © 2001 Dietmar Kühl
+// Copyright (C) 2002 Beman Dawes
+// Copyright (C) 2001 Dietmar Kuehl
 // Use, modification, and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
 // at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/CMake/release/boost/interprocess/file_mapping.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/file_mapping.hpp (original)
+++ branches/CMake/release/boost/interprocess/file_mapping.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -19,6 +19,7 @@
 #include <boost/interprocess/detail/utilities.hpp>
 #include <boost/interprocess/creation_tags.hpp>
 #include <boost/interprocess/detail/os_file_functions.hpp>
+#include <boost/interprocess/detail/move.hpp>
 #include <string> //std::string
 #include <cstdio> //std::remove
 #include <string>
@@ -55,10 +56,12 @@
    //!After the call, "moved" does not represent any shared memory object.
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- file_mapping(detail::moved_object<file_mapping> &moved)
+ file_mapping(detail::moved_object<file_mapping> moved)
+ : m_handle(file_handle_t(detail::invalid_file()))
    { this->swap(moved.get()); }
    #else
    file_mapping(file_mapping &&moved)
+ : m_handle(file_handle_t(detail::invalid_file()))
    { this->swap(moved); }
    #endif
 
@@ -67,7 +70,7 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    file_mapping &operator=
- (detail::moved_object<file_mapping> &moved)
+ (detail::moved_object<file_mapping> moved)
    {
       file_mapping tmp(moved);
       this->swap(tmp);
@@ -76,7 +79,7 @@
    #else
    file_mapping &operator=(file_mapping &&moved)
    {
- file_mapping tmp(move(moved));
+ file_mapping tmp(detail::move_impl(moved));
       this->swap(tmp);
       return *this;
    }
@@ -157,6 +160,8 @@
    m_mode = mode;
 }
 
+///@cond
+
 inline void file_mapping::priv_close()
 {
    if(m_handle != detail::invalid_file()){
@@ -165,6 +170,33 @@
    }
 }
 
+
+//!Trait class to detect if a type is
+//!movable
+template<>
+struct is_movable<file_mapping>
+{
+ enum { value = true };
+};
+
+///@endcond
+
+//!A class that stores the name of a a file
+//!and call std::remove(name) in its destructor
+//!Useful to remove temporary files in the presence
+//!of exceptions
+class remove_file_on_destroy
+{
+ const char * m_name;
+ public:
+ remove_file_on_destroy(const char *name)
+ : m_name(name)
+ {}
+
+ ~remove_file_on_destroy()
+ { std::remove(m_name); }
+};
+
 } //namespace interprocess {
 } //namespace boost {
 

Modified: branches/CMake/release/boost/interprocess/indexes/map_index.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/indexes/map_index.hpp (original)
+++ branches/CMake/release/boost/interprocess/indexes/map_index.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -77,7 +77,7 @@
    //!This tries to free previously allocate
    //!unused memory.
    void shrink_to_fit()
- { base_type::get_stored_allocator().deallocate_free_chunks(); }
+ { base_type::get_stored_allocator().deallocate_free_blocks(); }
 };
 
 /// @cond

Modified: branches/CMake/release/boost/interprocess/indexes/unordered_map_index.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/indexes/unordered_map_index.hpp (original)
+++ branches/CMake/release/boost/interprocess/indexes/unordered_map_index.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -27,6 +27,8 @@
 namespace boost {
 namespace interprocess {
 
+///@cond
+
 //!Helper class to define typedefs from
 //!IndexTraits
 template <class MapConfig>
@@ -55,6 +57,8 @@
                          key_equal, allocator_type> index_t;
 };
 
+///@endcond
+
 //!Index type based in unordered_map. Just derives from unordered_map and
 //!defines the interface needed by managed memory segments
 template <class MapConfig>

Modified: branches/CMake/release/boost/interprocess/interprocess_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/interprocess_fwd.hpp (original)
+++ branches/CMake/release/boost/interprocess/interprocess_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -120,26 +120,26 @@
 template<class T, class SegmentManager>
 class allocator;
 
-template<class T, class SegmentManager, std::size_t NodesPerChunk = 64>
+template<class T, class SegmentManager, std::size_t NodesPerBlock = 64>
 class node_allocator;
 
-template<class T, class SegmentManager, std::size_t NodesPerChunk = 64>
+template<class T, class SegmentManager, std::size_t NodesPerBlock = 64>
 class private_node_allocator;
 
-template<class T, class SegmentManager, std::size_t NodesPerChunk = 64>
+template<class T, class SegmentManager, std::size_t NodesPerBlock = 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 NodesPerBlock = 64, std::size_t MaxFreeBlocks = 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 NodesPerBlock = 64, std::size_t MaxFreeBlocks = 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 NodesPerBlock = 64, std::size_t MaxFreeBlocks = 2
          , unsigned char OverheadPercent = 5
>
 class cached_adaptive_pool;

Modified: branches/CMake/release/boost/interprocess/ipc/message_queue.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/ipc/message_queue.hpp (original)
+++ branches/CMake/release/boost/interprocess/ipc/message_queue.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -98,7 +98,7 @@
 
    //!Sends a message stored in buffer "buffer" with size "buffer_size" in the
    //!message queue with priority "priority". If the message queue is full
- //!the sender is retries until time "abs_time" is reached. Returns true if
+ //!the sender retries until time "abs_time" is reached. Returns true if
    //!the message has been successfully sent. Returns false if timeout is reached.
    //!Throws interprocess_error on error.
    bool timed_send (const void *buffer, std::size_t buffer_size,
@@ -106,23 +106,23 @@
 
    //!Receives a message from the message queue. The message is stored in buffer
    //!"buffer", which has size "buffer_size". The received message has size
- //!"recvd_size" and priority "priority". If the message queue is full
- //!the sender is blocked. Throws interprocess_error on error.
+ //!"recvd_size" and priority "priority". If the message queue is empty
+ //!the receiver is blocked. Throws interprocess_error on error.
    void receive (void *buffer, std::size_t buffer_size,
                  std::size_t &recvd_size,unsigned int &priority);
 
    //!Receives a message from the message queue. The message is stored in buffer
    //!"buffer", which has size "buffer_size". The received message has size
- //!"recvd_size" and priority "priority". If the message queue is full
- //!the sender is not blocked and returns false, otherwise returns true.
+ //!"recvd_size" and priority "priority". If the message queue is empty
+ //!the receiver is not blocked and returns false, otherwise returns true.
    //!Throws interprocess_error on error.
    bool try_receive (void *buffer, std::size_t buffer_size,
                      std::size_t &recvd_size,unsigned int &priority);
 
    //!Receives a message from the message queue. The message is stored in buffer
    //!"buffer", which has size "buffer_size". The received message has size
- //!"recvd_size" and priority "priority". If the message queue is full
- //!the sender is retries until time "abs_time" is reached. Returns true if
+ //!"recvd_size" and priority "priority". If the message queue is empty
+ //!the receiver retries until time "abs_time" is reached. Returns true if
    //!the message has been successfully sent. Returns false if timeout is reached.
    //!Throws interprocess_error on error.
    bool timed_receive (void *buffer, std::size_t buffer_size,
@@ -368,7 +368,6 @@
 };
 
 } //namespace detail {
-/// @endcond
 
 inline message_queue::~message_queue()
 {}
@@ -611,6 +610,8 @@
 inline bool message_queue::remove(const char *name)
 { return shared_memory_object::remove(name); }
 
+/// @endcond
+
 }} //namespace boost{ namespace interprocess{
 
 #include <boost/interprocess/detail/config_end.hpp>

Modified: branches/CMake/release/boost/interprocess/managed_external_buffer.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/managed_external_buffer.hpp (original)
+++ branches/CMake/release/boost/interprocess/managed_external_buffer.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -46,6 +46,12 @@
    /// @endcond
 
    public:
+
+ //!Default constructor. Does nothing.
+ //!Useful in combination with move semantics
+ basic_managed_external_buffer()
+ {}
+
    //!Creates and places the segment manager. This can throw
    basic_managed_external_buffer
       (create_only_t, void *addr, std::size_t size)
@@ -71,7 +77,7 @@
    //!Moves the ownership of "moved"'s managed memory to *this. Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_managed_external_buffer
- (detail::moved_object<basic_managed_external_buffer> &moved)
+ (detail::moved_object<basic_managed_external_buffer> moved)
    { this->swap(moved.get()); }
    #else
    basic_managed_external_buffer
@@ -82,7 +88,7 @@
    //!Moves the ownership of "moved"'s managed memory to *this. Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_managed_external_buffer &operator=
- (detail::moved_object<basic_managed_external_buffer> &moved)
+ (detail::moved_object<basic_managed_external_buffer> moved)
    { this->swap(moved.get()); return *this; }
    #else
    basic_managed_external_buffer &operator=
@@ -100,6 +106,26 @@
 
 };
 
+///@cond
+
+//!Trait class to detect if a type is
+//!movable
+template
+ <
+ class CharType,
+ class AllocationAlgorithm,
+ template<class IndexConfig> class IndexType
+ >
+struct is_movable<basic_managed_external_buffer
+ <CharType, AllocationAlgorithm, IndexType>
+>
+{
+ static const bool value = true;
+};
+
+///@endcond
+
+
 } //namespace interprocess {
 } //namespace boost {
 

Modified: branches/CMake/release/boost/interprocess/managed_heap_memory.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/managed_heap_memory.hpp (original)
+++ branches/CMake/release/boost/interprocess/managed_heap_memory.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -50,7 +50,8 @@
 
    public: //functions
 
- //!Constructor. Never throws.
+ //!Default constructor. Does nothing.
+ //!Useful in combination with move semantics
    basic_managed_heap_memory(){}
 
    //!Destructor. Liberates the heap memory holding the managed data.
@@ -72,7 +73,7 @@
    //!Moves the ownership of "moved"'s managed memory to *this. Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_managed_heap_memory
- (detail::moved_object<basic_managed_heap_memory> &moved)
+ (detail::moved_object<basic_managed_heap_memory> moved)
    { this->swap(moved.get()); }
    #else
    basic_managed_heap_memory(basic_managed_heap_memory &&moved)
@@ -82,7 +83,7 @@
    //!Moves the ownership of "moved"'s managed memory to *this. Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_managed_heap_memory &operator=
- (detail::moved_object<basic_managed_heap_memory> &moved)
+ (detail::moved_object<basic_managed_heap_memory> moved)
    { this->swap(moved.get()); return *this; }
    #else
    basic_managed_heap_memory &operator=
@@ -139,6 +140,25 @@
    /// @endcond
 };
 
+///@cond
+
+//!Trait class to detect if a type is
+//!movable
+template
+ <
+ class CharType,
+ class AllocationAlgorithm,
+ template<class IndexConfig> class IndexType
+ >
+struct is_movable<basic_managed_heap_memory
+ <CharType, AllocationAlgorithm, IndexType>
+>
+{
+ static const bool value = true;
+};
+
+///@endcond
+
 } //namespace interprocess {
 
 } //namespace boost {

Modified: branches/CMake/release/boost/interprocess/managed_mapped_file.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/managed_mapped_file.hpp (original)
+++ branches/CMake/release/boost/interprocess/managed_mapped_file.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -22,15 +22,13 @@
 #include <boost/interprocess/creation_tags.hpp>
 #include <boost/interprocess/detail/file_wrapper.hpp>
 #include <boost/interprocess/detail/move.hpp>
-
-//!\file
-//!Describes a named shared memory object allocation user class.
+#include <boost/interprocess/file_mapping.hpp>
 
 namespace boost {
 namespace interprocess {
 
-//!A basic shared memory named object creation class. Initializes the
-//!shared memory segment. Inherits all basic functionality from
+//!A basic mapped file named object creation class. Initializes the
+//!mapped file. Inherits all basic functionality from
 //!basic_managed_memory_impl<CharType, AllocationAlgorithm, IndexType>
 template
       <
@@ -57,11 +55,19 @@
 
    basic_managed_mapped_file *get_this_pointer()
    { return this; }
+
+ private:
+ typedef typename base_t::char_ptr_holder_t char_ptr_holder_t;
    /// @endcond
 
    public: //functions
 
- //!Creates shared memory and creates and places the segment manager.
+ //!Creates mapped file and creates and places the segment manager.
+ //!This can throw.
+ basic_managed_mapped_file()
+ {}
+
+ //!Creates mapped file and creates and places the segment manager.
    //!This can throw.
    basic_managed_mapped_file(create_only_t create_only, const char *name,
                              std::size_t size, const void *addr = 0)
@@ -69,7 +75,7 @@
                 create_open_func_t(get_this_pointer(), detail::DoCreate))
    {}
 
- //!Creates shared memory and creates and places the segment manager if
+ //!Creates mapped file and creates and places the segment manager if
    //!segment was not created. If segment was created it connects to the
    //!segment.
    //!This can throw.
@@ -81,8 +87,8 @@
                 detail::DoOpenOrCreate))
    {}
 
- //!Connects to a created shared memory and it's the segment manager.
- //!Never throws.
+ //!Connects to a created mapped file and its segment manager.
+ //!This can throw.
    basic_managed_mapped_file (open_only_t open_only, const char* name,
                               const void *addr = 0)
       : m_mfile(open_only, name, read_write, addr,
@@ -90,11 +96,31 @@
                 detail::DoOpen))
    {}
 
+ //!Connects to a created mapped file and its segment manager
+ //!in copy_on_write mode.
+ //!This can throw.
+ basic_managed_mapped_file (open_copy_on_write_t, const char* name,
+ const void *addr = 0)
+ : m_mfile(open_only, name, copy_on_write, addr,
+ create_open_func_t(get_this_pointer(),
+ detail::DoOpen))
+ {}
+
+ //!Connects to a created mapped file and its segment manager
+ //!in read-only mode.
+ //!This can throw.
+ basic_managed_mapped_file (open_read_only_t, const char* name,
+ const void *addr = 0)
+ : m_mfile(open_only, name, read_only, addr,
+ create_open_func_t(get_this_pointer(),
+ detail::DoOpen))
+ {}
+
    //!Moves the ownership of "moved"'s managed memory to *this.
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_managed_mapped_file
- (detail::moved_object<basic_managed_mapped_file> &moved)
+ (detail::moved_object<basic_managed_mapped_file> moved)
    { this->swap(moved.get()); }
    #else
    basic_managed_mapped_file(basic_managed_mapped_file &&moved)
@@ -105,7 +131,7 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_managed_mapped_file &operator=
- (detail::moved_object<basic_managed_mapped_file> &moved)
+ (detail::moved_object<basic_managed_mapped_file> moved)
    { this->swap(moved.get()); return *this; }
    #else
    basic_managed_mapped_file &operator=(basic_managed_mapped_file &&moved)
@@ -156,11 +182,45 @@
    }
 
    /// @cond
+
+ //!Tries to find a previous named allocation address. Returns a memory
+ //!buffer and the object count. If not found returned pointer is 0.
+ //!Never throws.
+ template <class T>
+ std::pair<T*, std::size_t> find (char_ptr_holder_t name)
+ {
+ if(m_mfile.get_mapped_region().get_mode() == read_only){
+ return base_t::template find_no_lock<T>(name);
+ }
+ else{
+ return base_t::template find<T>(name);
+ }
+ }
+
    private:
    managed_open_or_create_type m_mfile;
    /// @endcond
 };
 
+///@cond
+
+//!Trait class to detect if a type is
+//!movable
+template
+ <
+ class CharType,
+ class AllocationAlgorithm,
+ template<class IndexConfig> class IndexType
+ >
+struct is_movable<basic_managed_mapped_file
+ <CharType, AllocationAlgorithm, IndexType>
+>
+{
+ static const bool value = true;
+};
+
+///@endcond
+
 } //namespace interprocess {
 
 } //namespace boost {

Modified: branches/CMake/release/boost/interprocess/managed_shared_memory.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/managed_shared_memory.hpp (original)
+++ branches/CMake/release/boost/interprocess/managed_shared_memory.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -23,9 +23,6 @@
 #include <boost/interprocess/shared_memory_object.hpp>
 #include <boost/interprocess/creation_tags.hpp>
 
-//!\file
-//!Describes a named shared memory object allocation user class.
-
 namespace boost {
 
 namespace interprocess {
@@ -58,10 +55,11 @@
 
    typedef detail::create_open_func<base_t> create_open_func_t;
 
- basic_managed_shared_memory();
-
    basic_managed_shared_memory *get_this_pointer()
    { return this; }
+
+ private:
+ typedef typename base_t::char_ptr_holder_t char_ptr_holder_t;
    /// @endcond
 
    public: //functions
@@ -75,6 +73,11 @@
    ~basic_managed_shared_memory()
    {}
 
+ //!Default constructor. Does nothing.
+ //!Useful in combination with move semantics
+ basic_managed_shared_memory()
+ {}
+
    //!Creates shared memory and creates and places the segment manager.
    //!This can throw.
    basic_managed_shared_memory(create_only_t create_only, const char *name,
@@ -97,10 +100,32 @@
                 detail::DoOpenOrCreate))
    {}
 
- //!Connects to a created shared memory and it's the segment manager.
- //!Never throws.
+ //!Connects to a created shared memory and its segment manager.
+ //!in copy_on_write mode.
+ //!This can throw.
+ basic_managed_shared_memory (open_copy_on_write_t, const char* name,
+ const void *addr = 0)
+ : base_t()
+ , base2_t(open_only, name, copy_on_write, addr,
+ create_open_func_t(get_this_pointer(),
+ detail::DoOpen))
+ {}
+
+ //!Connects to a created shared memory and its segment manager.
+ //!in read-only mode.
+ //!This can throw.
+ basic_managed_shared_memory (open_read_only_t, const char* name,
+ const void *addr = 0)
+ : base_t()
+ , base2_t(open_only, name, read_only, addr,
+ create_open_func_t(get_this_pointer(),
+ detail::DoOpen))
+ {}
+
+ //!Connects to a created shared memory and its segment manager.
+ //!This can throw.
    basic_managed_shared_memory (open_only_t open_only, const char* name,
- const void *addr = 0)
+ const void *addr = 0)
       : base_t()
       , base2_t(open_only, name, read_write, addr,
                 create_open_func_t(get_this_pointer(),
@@ -111,7 +136,7 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_managed_shared_memory
- (detail::moved_object<basic_managed_shared_memory> &moved)
+ (detail::moved_object<basic_managed_shared_memory> moved)
    { this->swap(moved.get()); }
    #else
    basic_managed_shared_memory(basic_managed_shared_memory &&moved)
@@ -122,7 +147,7 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_managed_shared_memory &operator=
- (detail::moved_object<basic_managed_shared_memory> &moved)
+ (detail::moved_object<basic_managed_shared_memory> moved)
    { this->swap(moved.get()); return *this; }
    #else
    basic_managed_shared_memory &operator=(basic_managed_shared_memory &&moved)
@@ -157,8 +182,45 @@
       return base_t::template shrink_to_fit
          <basic_managed_shared_memory>(filename);
    }
+
+ /// @cond
+
+ //!Tries to find a previous named allocation address. Returns a memory
+ //!buffer and the object count. If not found returned pointer is 0.
+ //!Never throws.
+ template <class T>
+ std::pair<T*, std::size_t> find (char_ptr_holder_t name)
+ {
+ if(base2_t::get_mapped_region().get_mode() == read_only){
+ return base_t::template find_no_lock<T>(name);
+ }
+ else{
+ return base_t::template find<T>(name);
+ }
+ }
+
+ /// @endcond
+};
+
+///@cond
+
+//!Trait class to detect if a type is
+//!movable
+template
+ <
+ class CharType,
+ class AllocationAlgorithm,
+ template<class IndexConfig> class IndexType
+ >
+struct is_movable<basic_managed_shared_memory
+ <CharType, AllocationAlgorithm, IndexType>
+>
+{
+ static const bool value = true;
 };
 
+///@endcond
+
 } //namespace interprocess {
 } //namespace boost {
 

Modified: branches/CMake/release/boost/interprocess/managed_windows_shared_memory.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/managed_windows_shared_memory.hpp (original)
+++ branches/CMake/release/boost/interprocess/managed_windows_shared_memory.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -23,9 +23,6 @@
 #include <boost/interprocess/windows_shared_memory.hpp>
 #include <boost/interprocess/detail/move.hpp>
 
-//!\file
-//!Describes a named shared memory object allocation user class.
-
 namespace boost {
 namespace interprocess {
 
@@ -60,9 +57,18 @@
 
    basic_managed_windows_shared_memory *get_this_pointer()
    { return this; }
+
+ private:
+ typedef typename base_t::char_ptr_holder_t char_ptr_holder_t;
    /// @endcond
 
    public: //functions
+
+ //!Default constructor. Does nothing.
+ //!Useful in combination with move semantics
+ basic_managed_windows_shared_memory()
+ {}
+
    //!Creates shared memory and creates and places the segment manager.
    //!This can throw.
    basic_managed_windows_shared_memory
@@ -85,20 +91,39 @@
                 detail::DoOpenOrCreate))
    {}
 
- //!Connects to a created shared memory and it's the segment manager.
- //!Never throws.
- basic_managed_windows_shared_memory (open_only_t open_only, const char* name,
- const void *addr = 0)
+ //!Connects to a created shared memory and its segment manager.
+ //!This can throw.
+ basic_managed_windows_shared_memory
+ (open_only_t open_only, const char* name, const void *addr = 0)
       : m_wshm(open_only, name, read_write, addr,
                 create_open_func_t(get_this_pointer(),
                 detail::DoOpen))
    {}
 
+ //!Connects to a created shared memory and its segment manager
+ //!in copy_on_write mode.
+ //!This can throw.
+ basic_managed_windows_shared_memory
+ (open_copy_on_write_t, const char* name, const void *addr = 0)
+ : m_wshm(open_only, name, copy_on_write, addr,
+ create_open_func_t(get_this_pointer(), detail::DoOpen))
+ {}
+
+ //!Connects to a created shared memory and its segment manager
+ //!in read-only mode.
+ //!This can throw.
+ basic_managed_windows_shared_memory
+ (open_read_only_t, const char* name, const void *addr = 0)
+ : base_t()
+ , m_wshm(open_only, name, read_only, addr,
+ create_open_func_t(get_this_pointer(), detail::DoOpen))
+ {}
+
    //!Moves the ownership of "moved"'s managed memory to *this.
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_managed_windows_shared_memory
- (detail::moved_object<basic_managed_windows_shared_memory> &moved)
+ (detail::moved_object<basic_managed_windows_shared_memory> moved)
    { this->swap(moved.get()); }
    #else
    basic_managed_windows_shared_memory(basic_managed_windows_shared_memory &&moved)
@@ -109,7 +134,7 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    basic_managed_windows_shared_memory &operator=
- (detail::moved_object<basic_managed_windows_shared_memory> &moved)
+ (detail::moved_object<basic_managed_windows_shared_memory> moved)
    { this->swap(moved.get()); return *this; }
    #else
    basic_managed_windows_shared_memory &operator=
@@ -133,11 +158,45 @@
       m_wshm.swap(other.m_wshm);
    }
    /// @cond
+
+ //!Tries to find a previous named allocation address. Returns a memory
+ //!buffer and the object count. If not found returned pointer is 0.
+ //!Never throws.
+ template <class T>
+ std::pair<T*, std::size_t> find (char_ptr_holder_t name)
+ {
+ if(m_wshm.get_mapped_region().get_mode() == read_only){
+ return base_t::template find_no_lock<T>(name);
+ }
+ else{
+ return base_t::template find<T>(name);
+ }
+ }
+
    private:
    detail::managed_open_or_create_impl<windows_shared_memory, false> m_wshm;
    /// @endcond
 };
 
+///@cond
+
+//!Trait class to detect if a type is
+//!movable
+template
+ <
+ class CharType,
+ class AllocationAlgorithm,
+ template<class IndexConfig> class IndexType
+ >
+struct is_movable<basic_managed_windows_shared_memory
+ <CharType, AllocationAlgorithm, IndexType>
+>
+{
+ static const bool value = true;
+};
+
+///@endcond
+
 } //namespace interprocess {
 } //namespace boost {
 

Modified: branches/CMake/release/boost/interprocess/mapped_region.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/mapped_region.hpp (original)
+++ branches/CMake/release/boost/interprocess/mapped_region.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -45,6 +45,8 @@
 
 /// @cond
 namespace detail{ class interprocess_tester; }
+namespace detail{ class raw_mapped_region_creator; }
+
 /// @endcond
 
 //!The mapped_region class represents a portion or region created from a
@@ -107,6 +109,10 @@
    //!mapped memory. Never throws.
    offset_t get_offset() const;
 
+ //!Returns the mode of the mapping used to contruct the mapped file.
+ //!Never throws.
+ mode_t get_mode() const;
+
    //!Flushes to the disk a byte range within the mapped memory.
    //!Never throws
    bool flush(std::size_t mapping_offset = 0, std::size_t numbytes = 0);
@@ -135,15 +141,19 @@
    std::size_t m_size;
    offset_t m_offset;
    offset_t m_extra_offset;
+ mode_t m_mode;
    #if (defined BOOST_WINDOWS) && !(defined BOOST_DISABLE_WIN32)
    file_handle_t m_file_mapping_hnd;
    #endif
 
    friend class detail::interprocess_tester;
+ friend class detail::raw_mapped_region_creator;
    void dont_close_on_destruction();
    /// @endcond
 };
 
+///@cond
+
 inline void swap(mapped_region &x, mapped_region &y)
 { x.swap(y); }
 
@@ -161,16 +171,19 @@
 inline std::size_t mapped_region::get_size() const
 { return m_size; }
 
-inline offset_t mapped_region::get_offset() const
+inline offset_t mapped_region::get_offset() const
 { return m_offset; }
 
+inline mode_t mapped_region::get_mode() const
+{ return m_mode; }
+
 inline void* mapped_region::get_address() const
 { return m_base; }
 
 #if (defined BOOST_WINDOWS) && !(defined BOOST_DISABLE_WIN32)
 
 inline mapped_region::mapped_region()
- : m_base(0), m_size(0), m_offset(0), m_extra_offset(0)
+ : m_base(0), m_size(0), m_offset(0), m_extra_offset(0), m_mode(read_only)
    , m_file_mapping_hnd(detail::invalid_file())
 {}
 
@@ -178,12 +191,14 @@
 inline mapped_region::mapped_region(detail::moved_object<mapped_region> other)
    : m_base(0), m_size(0), m_offset(0)
    , m_extra_offset(0)
+ , m_mode(read_only)
    , m_file_mapping_hnd(detail::invalid_file())
 { this->swap(other.get()); }
 #else
 inline mapped_region::mapped_region(mapped_region &&other)
    : m_base(0), m_size(0), m_offset(0)
    , m_extra_offset(0)
+ , m_mode(read_only)
    , m_file_mapping_hnd(detail::invalid_file())
 { this->swap(other); }
 #endif
@@ -203,7 +218,7 @@
    ,offset_t offset
    ,std::size_t size
    ,const void *address)
- : m_base(0), m_size(0), m_offset(0), m_extra_offset(0)
+ : m_base(0), m_size(0), m_offset(0), m_extra_offset(0), m_mode(mode)
    , m_file_mapping_hnd(detail::invalid_file())
 {
    mapping_handle_t mhandle = mapping.get_mapping_handle();
@@ -362,9 +377,9 @@
       m_base = 0;
    }
    #if (defined BOOST_WINDOWS) && !(defined BOOST_DISABLE_WIN32)
- if(m_file_mapping_hnd){
+ if(m_file_mapping_hnd != detail::invalid_file()){
          winapi::close_handle(m_file_mapping_hnd);
- m_file_mapping_hnd = 0;
+ m_file_mapping_hnd = detail::invalid_file();
       }
    #endif
 }
@@ -375,16 +390,16 @@
 #else //#if (defined BOOST_WINDOWS) && !(defined BOOST_DISABLE_WIN32)
 
 inline mapped_region::mapped_region()
- : m_base(MAP_FAILED), m_size(0), m_offset(0), m_extra_offset(0)
+ : m_base(MAP_FAILED), m_size(0), m_offset(0), m_extra_offset(0), m_mode(read_only)
 {}
 
 #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
 inline mapped_region::mapped_region(detail::moved_object<mapped_region> other)
- : m_base(MAP_FAILED), m_size(0), m_offset(0), m_extra_offset(0)
+ : m_base(MAP_FAILED), m_size(0), m_offset(0), m_extra_offset(0), m_mode(read_only)
 { this->swap(other.get()); }
 #else
 inline mapped_region::mapped_region(mapped_region &&other)
- : m_base(MAP_FAILED), m_size(0), m_offset(0)
+ : m_base(MAP_FAILED), m_size(0), m_offset(0), m_mode(read_only)
    , m_extra_offset(0)
 { this->swap(other); }
 #endif
@@ -400,7 +415,7 @@
    offset_t offset,
    std::size_t size,
    const void *address)
- : m_base(MAP_FAILED), m_size(0), m_offset(0), m_extra_offset(0)
+ : m_base(MAP_FAILED), m_size(0), m_offset(0), m_extra_offset(0), m_mode(mode)
 {
    if(size == 0){
 // offset_t filesize = lseek64
@@ -441,7 +456,7 @@
       break;
 
       case copy_on_write:
- prot |= PROT_READ;
+ prot |= (PROT_WRITE | PROT_READ);
          flags |= MAP_PRIVATE;
       break;
    
@@ -537,19 +552,26 @@
    detail::do_swap(this->m_size, other.m_size);
    detail::do_swap(this->m_offset, other.m_offset);
    detail::do_swap(this->m_extra_offset, other.m_extra_offset);
+ detail::do_swap(this->m_mode, other.m_mode);
    #if (defined BOOST_WINDOWS) && !(defined BOOST_DISABLE_WIN32)
    detail::do_swap(this->m_file_mapping_hnd, other.m_file_mapping_hnd);
    #endif
 }
 
-/// @cond
-
 //!No-op functor
 struct null_mapped_region_function
 {
    bool operator()(void *, std::size_t , bool) const
       { return true; }
 };
+
+//!Trait class to detect if a type is
+//!movable
+template<>
+struct is_movable<mapped_region>
+{
+ enum { value = true };
+};
 /// @endcond
 
 } //namespace interprocess {

Modified: branches/CMake/release/boost/interprocess/mem_algo/detail/mem_algo_common.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/mem_algo/detail/mem_algo_common.hpp (original)
+++ branches/CMake/release/boost/interprocess/mem_algo/detail/mem_algo_common.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -23,6 +23,8 @@
 #include <boost/interprocess/detail/utilities.hpp>
 #include <boost/interprocess/detail/type_traits.hpp>
 #include <boost/interprocess/detail/iterators.hpp>
+#include <boost/interprocess/detail/math_functions.hpp>
+#include <boost/interprocess/detail/utilities.hpp>
 #include <boost/assert.hpp>
 #include <boost/static_assert.hpp>
 
@@ -281,6 +283,101 @@
       return this_type::priv_allocate_many(memory_algo, &elem_bytes, n_elements, 0);
    }
 
+ static bool calculate_lcm_and_needs_backwards_lcmed
+ (std::size_t backwards_multiple, std::size_t received_size, std::size_t size_to_achieve,
+ std::size_t &lcm_out, std::size_t &needs_backwards_lcmed_out)
+ {
+ // Now calculate lcm
+ std::size_t max = backwards_multiple;
+ std::size_t min = Alignment;
+ std::size_t needs_backwards;
+ std::size_t needs_backwards_lcmed;
+ std::size_t lcm;
+ std::size_t current_forward;
+ //Swap if necessary
+ if(max < min){
+ std::size_t tmp = min;
+ min = max;
+ max = tmp;
+ }
+ //Check if it's power of two
+ if((backwards_multiple & (backwards_multiple-1)) == 0){
+ if(0 != (size_to_achieve & ((backwards_multiple-1)))){
+ return false;
+ }
+
+ lcm = max;
+ //If we want to use minbytes data to get a buffer between maxbytes
+ //and minbytes if maxbytes can't be achieved, calculate the
+ //biggest of all possibilities
+ current_forward = detail::get_truncated_size_po2(received_size, backwards_multiple);
+ needs_backwards = size_to_achieve - current_forward;
+ assert((needs_backwards % backwards_multiple) == 0);
+ needs_backwards_lcmed = detail::get_rounded_size_po2(needs_backwards, lcm);
+ lcm_out = lcm;
+ needs_backwards_lcmed_out = needs_backwards_lcmed;
+ return true;
+ }
+ //Check if it's multiple of alignment
+ else if((backwards_multiple & (Alignment - 1u)) == 0){
+ lcm = backwards_multiple;
+ current_forward = detail::get_truncated_size(received_size, backwards_multiple);
+ //No need to round needs_backwards because backwards_multiple == lcm
+ needs_backwards_lcmed = needs_backwards = size_to_achieve - current_forward;
+ assert((needs_backwards_lcmed & (Alignment - 1u)) == 0);
+ lcm_out = lcm;
+ needs_backwards_lcmed_out = needs_backwards_lcmed;
+ return true;
+ }
+ //Check if it's multiple of the half of the alignmment
+ else if((backwards_multiple & ((Alignment/2u) - 1u)) == 0){
+ lcm = backwards_multiple*2u;
+ current_forward = detail::get_truncated_size(received_size, backwards_multiple);
+ needs_backwards_lcmed = needs_backwards = size_to_achieve - current_forward;
+ if(0 != (needs_backwards_lcmed & (Alignment-1)))
+ //while(0 != (needs_backwards_lcmed & (Alignment-1)))
+ needs_backwards_lcmed += backwards_multiple;
+ assert((needs_backwards_lcmed % lcm) == 0);
+ lcm_out = lcm;
+ needs_backwards_lcmed_out = needs_backwards_lcmed;
+ return true;
+ }
+ //Check if it's multiple of the half of the alignmment
+ else if((backwards_multiple & ((Alignment/4u) - 1u)) == 0){
+ std::size_t remainder;
+ lcm = backwards_multiple*4u;
+ current_forward = detail::get_truncated_size(received_size, backwards_multiple);
+ needs_backwards_lcmed = needs_backwards = size_to_achieve - current_forward;
+ //while(0 != (needs_backwards_lcmed & (Alignment-1)))
+ //needs_backwards_lcmed += backwards_multiple;
+ if(0 != (remainder = ((needs_backwards_lcmed & (Alignment-1))>>(Alignment/8u)))){
+ if(backwards_multiple & Alignment/2u){
+ needs_backwards_lcmed += (remainder)*backwards_multiple;
+ }
+ else{
+ needs_backwards_lcmed += (4-remainder)*backwards_multiple;
+ }
+ }
+ assert((needs_backwards_lcmed % lcm) == 0);
+ lcm_out = lcm;
+ needs_backwards_lcmed_out = needs_backwards_lcmed;
+ return true;
+ }
+ else{
+ lcm = detail::lcm(max, min);
+ }
+ //If we want to use minbytes data to get a buffer between maxbytes
+ //and minbytes if maxbytes can't be achieved, calculate the
+ //biggest of all possibilities
+ current_forward = detail::get_truncated_size(received_size, backwards_multiple);
+ needs_backwards = size_to_achieve - current_forward;
+ assert((needs_backwards % backwards_multiple) == 0);
+ needs_backwards_lcmed = detail::get_rounded_size(needs_backwards, lcm);
+ lcm_out = lcm;
+ needs_backwards_lcmed_out = needs_backwards_lcmed;
+ return true;
+ }
+
    static multiallocation_iterator allocate_many
       ( MemoryAlgorithm *memory_algo
       , const std::size_t *elem_sizes
@@ -309,13 +406,13 @@
       if(nbytes > UsableByPreviousChunk)
          nbytes -= UsableByPreviousChunk;
       
- //We can find a aligned portion if we allocate a chunk that has alignment
+ //We can find a aligned portion if we allocate a block that has alignment
       //nbytes + alignment bytes or more.
       std::size_t minimum_allocation = max_value
          (nbytes + alignment, std::size_t(MinBlockUnits*Alignment));
- //Since we will split that chunk, we must request a bit more memory
+ //Since we will split that block, we must request a bit more memory
       //if the alignment is near the beginning of the buffer, because otherwise,
- //there is no space for a new chunk before the alignment.
+ //there is no space for a new block before the alignment.
       //
       // ____ Aligned here
       // |
@@ -390,7 +487,7 @@
       // | MBU +more | ACB | (3) | BCU |
       // -----------------------------------------------------
       //This size will be the minimum size to be able to create a
- //new chunk in the end.
+ //new block in the end.
       const std::size_t second_min_units = max_value(std::size_t(MinBlockUnits),
                         ceil_units(nbytes) + AllocatedCtrlUnits );
 

Modified: branches/CMake/release/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp (original)
+++ branches/CMake/release/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -564,7 +564,7 @@
                         T *reuse_ptr)
 {
    std::pair<void*, bool> ret = priv_allocation_command
- (command, limit_size, preferred_size, received_size, reuse_ptr, sizeof(T));
+ (command, limit_size, preferred_size, received_size, (void*)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);
@@ -577,7 +577,7 @@
                         void *reuse_ptr, std::size_t sizeof_object)
 {
    if(!sizeof_object)
- return std::pair<void *, bool>(0, 0);
+ return std::pair<void *, bool>((void*)0, 0);
    if(command & try_shrink_in_place){
       bool success = algo_impl_t::try_shrink
          ( this, reuse_ptr, limit_objects*sizeof_object
@@ -596,7 +596,7 @@
                        void *reuse_ptr, std::size_t sizeof_object)
 {
    command &= ~expand_bwd;
- if(!command) return std::pair<void *, bool>(0, false);
+ if(!command) return std::pair<void *, bool>((void*)0, false);
 
    std::pair<void*, bool> ret;
    std::size_t max_count = m_header.m_size/sizeof_object;
@@ -769,7 +769,7 @@
    received_size = 0;
 
    if(limit_size > preferred_size)
- return return_type(0, false);
+ return return_type((void*)0, false);
 
    //Number of units to request (including block_ctrl header)
    std::size_t nunits = detail::get_rounded_size(preferred_size, Alignment)/Alignment + BlockCtrlUnits;
@@ -819,7 +819,7 @@
       if(biggest_block){
          std::size_t limit_units = detail::get_rounded_size(limit_size, Alignment)/Alignment + BlockCtrlUnits;
          if(biggest_block->m_size < limit_units)
- return return_type(0, false);
+ return return_type((void*)0, false);
 
          received_size = biggest_block->m_size*Alignment - BlockCtrlUnits;
          void *ret = this->priv_check_and_allocate
@@ -836,7 +836,7 @@
       algo_impl_t::assert_alignment(ret.first);
       return ret;
    }
- return return_type(0, false);
+ return return_type((void*)0, false);
 }
 
 template<class MutexFamily, class VoidPointer> inline
@@ -888,13 +888,13 @@
    }
 
    if(prev_block == root || !prev_block->m_next)
- return prev_pair_t(0, 0);
+ return prev_pair_t((block_ctrl*)0, (block_ctrl*)0);
 
    //Check if the previous block is in the managed segment
    std::size_t distance = (detail::char_ptr_cast(prev_block) - detail::char_ptr_cast(this))/Alignment;
    if(distance >= (m_header.m_size/Alignment)){
       //"previous_block" does not exist so we can't expand "block"
- return prev_pair_t(0, 0);
+ return prev_pair_t((block_ctrl*)0, (block_ctrl*)0);
    }
    return prev_pair_t(prev_2_block, prev_block);
 }

Modified: branches/CMake/release/boost/interprocess/mem_algo/rbtree_best_fit.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/mem_algo/rbtree_best_fit.hpp (original)
+++ branches/CMake/release/boost/interprocess/mem_algo/rbtree_best_fit.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -352,6 +352,8 @@
    static const std::size_t PayloadPerAllocation = AllocatedCtrlBytes - UsableByPreviousChunk;
 };
 
+/// @cond
+
 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)
@@ -651,7 +653,7 @@
                         T *reuse_ptr)
 {
    std::pair<void*, bool> ret = priv_allocation_command
- (command, limit_size, preferred_size, received_size, reuse_ptr, sizeof(T));
+ (command, limit_size, preferred_size, received_size, (void*)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);
@@ -664,7 +666,7 @@
                         void *reuse_ptr, std::size_t sizeof_object)
 {
    if(!sizeof_object)
- return std::pair<void *, bool>(0, 0);
+ return std::pair<void *, bool>((void *)0, 0);
    if(command & try_shrink_in_place){
       bool success = algo_impl_t::try_shrink
          ( this, reuse_ptr, limit_objects*sizeof_object
@@ -776,26 +778,16 @@
       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
- //block's begin. The value is a multiple of backwards_multiple
- std::size_t needs_backwards = preferred_size -
- detail::get_truncated_size(received_size, backwards_multiple);
-
- const std::size_t lcm = detail::lcm(max_value(backwards_multiple, (std::size_t)Alignment)
- ,min_value(backwards_multiple, (std::size_t)Alignment));
-
- //If we want to use min_size data to get a buffer between preferred_size
- //and min_size if preferred_size can't be achieved, calculate the
- //biggest of all possibilities
- if(!only_preferred_backwards){
- needs_backwards = min_size - detail::get_truncated_size(received_size, backwards_multiple);
+ std::size_t needs_backwards_aligned;
+ std::size_t lcm;
+ if(!algo_impl_t::calculate_lcm_and_needs_backwards_lcmed
+ ( backwards_multiple
+ , received_size
+ , only_preferred_backwards ? preferred_size : min_size
+ , lcm, needs_backwards_aligned)){
+ return 0;
       }
 
- assert((needs_backwards % backwards_multiple) == 0);
-
- const std::size_t needs_backwards_aligned =
- detail::get_rounded_size(needs_backwards, lcm);
-
       //Check if previous block has enough size
       if(std::size_t(prev_block->m_size*Alignment) >= needs_backwards_aligned){
          //Now take all next space. This will succeed
@@ -822,7 +814,7 @@
             assert(prev_block->m_size >= BlockCtrlUnits);
             priv_mark_as_free_block(prev_block);
 
- //Update the old previous block in the free chunks tree
+ //Update the old previous block in the free blocks tree
             //If the new size fulfills tree invariants do nothing,
             //otherwise erase() + insert()
             {
@@ -857,10 +849,8 @@
             m_header.m_imultiset.erase(Imultiset::s_iterator_to(*prev_block));
 
             //Just merge the whole previous block
- 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;
+ //prev_block->m_size*Alignment is multiple of lcm (and backwards_multiple)
+ received_size = received_size + prev_block->m_size*Alignment;
 
             m_header.m_allocated += prev_block->m_size*Alignment;
             //Now update sizes
@@ -942,7 +932,7 @@
    received_size = 0;
 
    if(limit_size > preferred_size)
- return return_type(0, false);
+ return return_type((void*)0, false);
 
    //Number of units to request (including block_ctrl header)
    std::size_t preferred_units = priv_get_total_units(preferred_size);
@@ -981,7 +971,7 @@
          (command, limit_size, preferred_size, received_size, reuse_ptr, false, backwards_multiple), true);
    }
 
- return return_type(0, false);
+ return return_type((void*)0, false);
 }
 
 template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
@@ -1070,12 +1060,12 @@
       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
+ //Check if we we need to update the old next block in the free blocks 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
+ //This fixup must be done in two parts, because the new next block might
+ //overwrite the tree hook of the old next block. 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 =
@@ -1304,7 +1294,7 @@
    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
+ //Merge logic. First just update block sizes, then fix free blocks tree
    if(merge_with_prev || merge_with_next){
       //Merge if the previous is free
       if(merge_with_prev){
@@ -1344,10 +1334,11 @@
    priv_mark_as_free_block(block_to_insert);
 }
 
+/// @endcond
+
 } //namespace interprocess {
 } //namespace boost {
 
 #include <boost/interprocess/detail/config_end.hpp>
 
 #endif //#ifndef BOOST_INTERPROCESS_MEM_ALGO_RBTREE_BEST_FIT_HPP
-

Modified: branches/CMake/release/boost/interprocess/offset_ptr.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/offset_ptr.hpp (original)
+++ branches/CMake/release/boost/interprocess/offset_ptr.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -53,9 +53,6 @@
 {
    /// @cond
    typedef offset_ptr<PointedType> self_t;
- typedef const PointedType * const_pointer_t;
- typedef typename detail::add_reference
- <const PointedType>::type const_reference_t;
 
    void unspecified_bool_type_func() const {}
    typedef void (self_t::*unspecified_bool_type)() const;
@@ -64,6 +61,9 @@
    __declspec(noinline) //this workaround is needed for msvc-8.0 and msvc-9.0
    #endif
    void set_offset(const volatile void *ptr)
+ { set_offset((const void*)ptr); }
+
+ void set_offset(const void *ptr)
    {
       const char *p = static_cast<const char*>(const_cast<const void*>(ptr));
       //offset == 1 && ptr != 0 is not legal for this pointer
@@ -402,68 +402,44 @@
 
 //Predeclaration to avoid including header
 template<class VoidPointer, std::size_t N>
-struct has_pointer_plus_bit;
+struct max_pointer_plus_bits;
 
-template<std::size_t N>
-struct has_pointer_plus_bit<boost::interprocess::offset_ptr<void>, N>
+template<std::size_t Alignment>
+struct max_pointer_plus_bits<boost::interprocess::offset_ptr<void>, Alignment>
 {
- static const bool value = (N % 4u == 0);
+ //The offset ptr can embed one bit less than the alignment since it
+ //uses offset == 1 to store the null pointer.
+ static const std::size_t value = ::boost::interprocess::detail::ls_zeros<Alignment>::value - 1;
 };
 
 //Predeclaration
-template<class Pointer>
-struct pointer_plus_bit;
+template<class Pointer, std::size_t NumBits>
+struct pointer_plus_bits;
 
-//Specialization
-template<class T>
-struct pointer_plus_bit<boost::interprocess::offset_ptr<T> >
+template<class T, std::size_t NumBits>
+struct pointer_plus_bits<boost::interprocess::offset_ptr<T>, NumBits>
 {
    typedef boost::interprocess::offset_ptr<T> pointer;
+ //Bits are stored in the lower bits of the pointer except the LSB,
+ //because this bit is used to represent the null pointer.
+ static const std::size_t Mask = ((std::size_t(1) << NumBits)-1)<<1u;
 
    static pointer get_pointer(const pointer &n)
- { return (T*)(std::size_t(n.get()) & ~std::size_t(2u)); }
+ { return (T*)(std::size_t(n.get()) & ~std::size_t(Mask)); }
 
    static void set_pointer(pointer &n, pointer p)
- { n = (T*)(std::size_t(p.get()) | (std::size_t(n.get()) & std::size_t(2u))); }
-
- static bool get_bit(const pointer &n)
- { return 0 != (std::size_t(n.get()) & std::size_t(2u)); }
-
- static void set_bit(pointer &n, bool c)
- { n = (T*)(std::size_t(get_pointer(n).get()) | (std::size_t(c) << 1u)); }
-};
-
-//Predeclaration to avoid including header
-template<class VoidPointer, std::size_t N>
-struct has_pointer_plus_2_bits;
-
-template<std::size_t N>
-struct has_pointer_plus_2_bits<boost::interprocess::offset_ptr<void>, N>
-{
- static const bool value = (N % 8u == 0);
-};
-
-//Predeclaration
-template<class Pointer>
-struct pointer_plus_2_bits;
-
-template<class T>
-struct pointer_plus_2_bits<boost::interprocess::offset_ptr<T> >
-{
- typedef boost::interprocess::offset_ptr<T> pointer;
-
- static pointer get_pointer(const pointer &n)
- { return (T*)(std::size_t(n.get()) & ~std::size_t(6u)); }
-
- static void set_pointer(pointer &n, pointer p)
- { n = (T*)(std::size_t(p.get()) | (std::size_t(n.get()) & std::size_t(6u))); }
+ {
+ std::size_t pint = std::size_t(p.get());
+ assert(0 == (std::size_t(pint) & Mask));
+ n = (T*)(pint | (std::size_t(n.get()) & std::size_t(Mask)));
+ }
 
    static std::size_t get_bits(const pointer &n)
- { return(std::size_t(n.get()) & std::size_t(6u)) >> 1u; }
+ { return(std::size_t(n.get()) & std::size_t(Mask)) >> 1u; }
 
    static void set_bits(pointer &n, std::size_t b)
    {
- assert(b < 4);
+ assert(b < (std::size_t(1) << NumBits));
       n = (T*)(std::size_t(get_pointer(n).get()) | (b << 1u));
    }
 };

Modified: branches/CMake/release/boost/interprocess/segment_manager.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/segment_manager.hpp (original)
+++ branches/CMake/release/boost/interprocess/segment_manager.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -32,6 +32,8 @@
 #include <boost/interprocess/exceptions.hpp>
 #include <boost/interprocess/allocators/allocator.hpp>
 #include <boost/interprocess/smart_ptr/deleter.hpp>
+#include <boost/interprocess/detail/move.hpp>
+#include <boost/interprocess/sync/scoped_lock.hpp>
 #include <cstddef> //std::size_t
 #include <string> //char_traits
 #include <new> //std::nothrow
@@ -292,7 +294,7 @@
       block_header_t *ctrl_data = block_header_t::block_header_from_value(object, table.size, table.alignment);
 
       //-------------------------------
- //boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ //scoped_lock<rmutex> guard(m_header);
       //-------------------------------
 
       if(ctrl_data->allocation_type() != anonymous_type){
@@ -423,10 +425,10 @@
       void *ret;
 
       if(name == reinterpret_cast<const CharType*>(-1)){
- ret = priv_generic_find<char> (typeid(T).name(), m_header.m_unique_index, table, size, is_intrusive_t());
+ ret = priv_generic_find<char> (typeid(T).name(), m_header.m_unique_index, table, size, is_intrusive_t(), true);
       }
       else{
- ret = priv_generic_find<CharType> (name, m_header.m_named_index, table, size, is_intrusive_t());
+ ret = priv_generic_find<CharType> (name, m_header.m_named_index, table, size, is_intrusive_t(), true);
       }
       return std::pair<T*, std::size_t>(static_cast<T*>(ret), size);
    }
@@ -439,7 +441,7 @@
    {
       detail::placement_destroy<T> table;
       std::size_t size;
- void *ret = priv_generic_find<char>(name, m_header.m_unique_index, table, size, is_intrusive_t());
+ void *ret = priv_generic_find<char>(name, m_header.m_unique_index, table, size, is_intrusive_t(), true);
       return std::pair<T*, std::size_t>(static_cast<T*>(ret), size);
    }
 
@@ -502,7 +504,7 @@
    //!executing the object function call*/
    template <class Func>
    void atomic_func(Func &f)
- { boost::interprocess::scoped_lock<rmutex> guard(m_header); f(); }
+ { scoped_lock<rmutex> guard(m_header); f(); }
 
    //!Destroys a previously created unique instance.
    //!Returns false if the object was not present.
@@ -559,7 +561,7 @@
    void reserve_named_objects(std::size_t num)
    {
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(m_header);
       //-------------------------------
       m_header.m_named_index.reserve(num);
    }
@@ -570,7 +572,7 @@
    void reserve_unique_objects(std::size_t num)
    {
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(m_header);
       //-------------------------------
       m_header.m_unique_index.reserve(num);
    }
@@ -580,7 +582,7 @@
    void shrink_to_fit_indexes()
    {
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(m_header);
       //-------------------------------
       m_header.m_named_index.shrink_to_fit();
       m_header.m_unique_index.shrink_to_fit();
@@ -591,7 +593,7 @@
    std::size_t get_num_named_objects()
    {
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(m_header);
       //-------------------------------
       return m_header.m_named_index.size();
    }
@@ -601,7 +603,7 @@
    std::size_t get_num_unique_objects()
    {
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(m_header);
       //-------------------------------
       return m_header.m_unique_index.size();
    }
@@ -688,6 +690,39 @@
          (priv_generic_construct(name, num, try2find, dothrow, table));
    }
 
+ //!Tries to find a previous named allocation. Returns the address
+ //!and the object count. On failure the first member of the
+ //!returned pair is 0.
+ template <class T>
+ std::pair<T*, std::size_t> find_no_lock (const CharType* name)
+ {
+ //The name can't be null, no anonymous object can be found by name
+ assert(name != 0);
+ detail::placement_destroy<T> table;
+ std::size_t size;
+ void *ret;
+
+ if(name == reinterpret_cast<const CharType*>(-1)){
+ ret = priv_generic_find<char> (typeid(T).name(), m_header.m_unique_index, table, size, is_intrusive_t(), false);
+ }
+ else{
+ ret = priv_generic_find<CharType> (name, m_header.m_named_index, table, size, is_intrusive_t(), false);
+ }
+ return std::pair<T*, std::size_t>(static_cast<T*>(ret), size);
+ }
+
+ //!Tries to find a previous unique allocation. Returns the address
+ //!and the object count. On failure the first member of the
+ //!returned pair is 0.
+ template <class T>
+ std::pair<T*, std::size_t> find_no_lock (const detail::unique_instance_t* name)
+ {
+ detail::placement_destroy<T> table;
+ std::size_t size;
+ void *ret = priv_generic_find<char>(name, m_header.m_unique_index, table, size, is_intrusive_t(), false);
+ return std::pair<T*, std::size_t>(static_cast<T*>(ret), size);
+ }
+
    private:
    void *priv_generic_construct(const CharType *name,
                          std::size_t num,
@@ -790,7 +825,8 @@
        IndexType<detail::index_config<CharT, MemoryAlgorithm> > &index,
        detail::in_place_interface &table,
        std::size_t &length,
- detail::true_ is_intrusive)
+ detail::true_ is_intrusive,
+ bool use_lock)
    {
       (void)is_intrusive;
       typedef IndexType<detail::index_config<CharT, MemoryAlgorithm> > index_type;
@@ -798,7 +834,7 @@
       typedef typename index_type::iterator index_it;
 
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(priv_get_lock(use_lock));
       //-------------------------------
       //Find name in index
       detail::intrusive_compare_key<CharT> key
@@ -829,7 +865,8 @@
        IndexType<detail::index_config<CharT, MemoryAlgorithm> > &index,
        detail::in_place_interface &table,
        std::size_t &length,
- detail::false_ is_intrusive)
+ detail::false_ is_intrusive,
+ bool use_lock)
    {
       (void)is_intrusive;
       typedef IndexType<detail::index_config<CharT, MemoryAlgorithm> > index_type;
@@ -837,7 +874,7 @@
       typedef typename index_type::iterator index_it;
 
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(priv_get_lock(use_lock));
       //-------------------------------
       //Find name in index
       index_it it = index.find(key_type(name, std::char_traits<CharT>::length(name)));
@@ -900,7 +937,7 @@
       typedef typename index_type::value_type intrusive_value_type;
       
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(m_header);
       //-------------------------------
       //Find name in index
       detail::intrusive_compare_key<CharT> key
@@ -950,7 +987,7 @@
       typedef typename index_type::key_type key_type;
 
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(m_header);
       //-------------------------------
       //Try to find the name in the index
       index_it it = index.find(key_type (name,
@@ -1038,7 +1075,7 @@
       typedef std::pair<index_it, bool> index_ib;
 
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(m_header);
       //-------------------------------
       //Insert the node. This can throw.
       //First, we want to know if the key is already present before
@@ -1118,7 +1155,7 @@
 
       //Initialize the node value_eraser to erase inserted node
       //if something goes wrong
- detail::value_eraser<index_type> value_eraser(index, it);
+ value_eraser<index_type> v_eraser(index, it);
       
       //Avoid constructions if constructor is trivial
       //Build scoped ptr to avoid leaks with constructor exception
@@ -1130,8 +1167,8 @@
 
       //All constructors successful, we don't want to release memory
       mem.release();
- //Release node value_eraser since construction was successful
- value_eraser.release();
+ //Release node v_eraser since construction was successful
+ v_eraser.release();
       return ptr;
    }
 
@@ -1164,7 +1201,7 @@
       typedef std::pair<index_it, bool> index_ib;
 
       //-------------------------------
- boost::interprocess::scoped_lock<rmutex> guard(m_header);
+ scoped_lock<rmutex> guard(m_header);
       //-------------------------------
       //Insert the node. This can throw.
       //First, we want to know if the key is already present before
@@ -1204,7 +1241,7 @@
       }
       //Initialize the node value_eraser to erase inserted node
       //if something goes wrong
- detail::value_eraser<index_type> value_eraser(index, it);
+ value_eraser<index_type> v_eraser(index, it);
 
       //Allocates buffer for name + data, this can throw (it hurts)
       void *buffer_ptr;
@@ -1260,8 +1297,8 @@
       //All constructors successful, we don't want to release memory
       mem.release();
 
- //Release node value_eraser since construction was successful
- value_eraser.release();
+ //Release node v_eraser since construction was successful
+ v_eraser.release();
       return ptr;
    }
 
@@ -1272,6 +1309,20 @@
 
    typedef typename MemoryAlgorithm::mutex_family::recursive_mutex_type rmutex;
 
+ #ifdef BOOST_INTERPROCESS_RVALUE_REFERENCE
+ scoped_lock<rmutex>
+ #else
+ detail::move_return<scoped_lock<rmutex> >
+ #endif
+ priv_get_lock(bool use_lock)
+ {
+ scoped_lock<rmutex> local(m_header, defer_lock);
+ if(use_lock){
+ local.lock();
+ }
+ return local;
+ }
+
    //!This struct includes needed data and derives from
    //!rmutex to allow EBO when using null interprocess_mutex
    struct header_t

Modified: branches/CMake/release/boost/interprocess/shared_memory_object.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/shared_memory_object.hpp (original)
+++ branches/CMake/release/boost/interprocess/shared_memory_object.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -76,10 +76,12 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    shared_memory_object
- (detail::moved_object<shared_memory_object> &moved)
+ (const detail::moved_object<shared_memory_object> moved)
+ : m_handle(file_handle_t(detail::invalid_file()))
    { this->swap(moved.get()); }
    #else
    shared_memory_object(shared_memory_object &&moved)
+ : m_handle(file_handle_t(detail::invalid_file()))
    { this->swap(moved); }
    #endif
 
@@ -88,7 +90,7 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    shared_memory_object &operator=
- (detail::moved_object<shared_memory_object> &moved)
+ (detail::moved_object<shared_memory_object> moved)
    {
       shared_memory_object tmp(moved);
       this->swap(tmp);
@@ -97,7 +99,7 @@
    #else
    shared_memory_object &operator=(shared_memory_object &&moved)
    {
- shared_memory_object tmp(move(moved));
+ shared_memory_object tmp(detail::move_impl(moved));
       this->swap(tmp);
       return *this;
    }
@@ -150,6 +152,8 @@
    /// @endcond
 };
 
+/// @cond
+
 inline shared_memory_object::shared_memory_object()
    : m_handle(file_handle_t(detail::invalid_file()))
 {}
@@ -341,6 +345,32 @@
 
 #endif
 
+//!Trait class to detect if a type is
+//!movable
+template<>
+struct is_movable<shared_memory_object>
+{
+ enum { value = true };
+};
+
+///@endcond
+
+//!A class that stores the name of a shared memory
+//!and calls shared_memory_object::remove(name) in its destructor
+//!Useful to remove temporary shared memory objects in the presence
+//!of exceptions
+class remove_shared_memory_on_destroy
+{
+ const char * m_name;
+ public:
+ remove_shared_memory_on_destroy(const char *name)
+ : m_name(name)
+ {}
+
+ ~remove_shared_memory_on_destroy()
+ { shared_memory_object::remove(m_name); }
+};
+
 } //namespace interprocess {
 } //namespace boost {
 

Modified: branches/CMake/release/boost/interprocess/smart_ptr/detail/shared_count.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/smart_ptr/detail/shared_count.hpp (original)
+++ branches/CMake/release/boost/interprocess/smart_ptr/detail/shared_count.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -73,6 +73,11 @@
    {}
 
    template <class Ptr>
+ shared_count(const shared_count &other_shared_count, const Ptr &p)
+ : m_px(p), m_pi(other_shared_count.m_pi)
+ {}
+
+ template <class Ptr>
    shared_count(const Ptr &p, const VoidAllocator &a, Deleter d)
       : m_px(p), m_pi(0)
    {

Modified: branches/CMake/release/boost/interprocess/smart_ptr/enable_shared_from_this.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/smart_ptr/enable_shared_from_this.hpp (original)
+++ branches/CMake/release/boost/interprocess/smart_ptr/enable_shared_from_this.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -27,6 +27,10 @@
 namespace boost{
 namespace interprocess{
 
+//!This class is used as a base class that allows a shared_ptr to the current
+//!object to be obtained from within a member function.
+//!enable_shared_from_this defines two member functions called shared_from_this
+//!that return a shared_ptr<T> and shared_ptr<T const>, depending on constness, to this.
 template<class T, class A, class D>
 class enable_shared_from_this
 {
@@ -60,7 +64,6 @@
       return p;
    }
 
- private:
    /// @cond
    typedef T element_type;
    mutable weak_ptr<element_type, A, D> _internal_weak_this;

Modified: branches/CMake/release/boost/interprocess/smart_ptr/shared_ptr.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/smart_ptr/shared_ptr.hpp (original)
+++ branches/CMake/release/boost/interprocess/smart_ptr/shared_ptr.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -24,6 +24,7 @@
 #include <boost/assert.hpp>
 #include <boost/interprocess/smart_ptr/detail/shared_count.hpp>
 #include <boost/interprocess/detail/mpl.hpp>
+#include <boost/interprocess/detail/move.hpp>
 #include <boost/interprocess/detail/type_traits.hpp>
 #include <boost/interprocess/allocators/allocator.hpp>
 #include <boost/interprocess/smart_ptr/deleter.hpp>
@@ -47,19 +48,21 @@
 
 template<class T, class VoidAllocator, class Deleter>
 inline void sp_enable_shared_from_this
- (shared_count<T, VoidAllocator, Deleter> const & pn,
- const typename pointer_to_other <typename shared_count<T, VoidAllocator, Deleter>::pointer,
- enable_shared_from_this<T, VoidAllocator, Deleter> >::type &pe,
- const typename shared_count<T, VoidAllocator, Deleter>::pointer &px)
+ (shared_count<T, VoidAllocator, Deleter> const & pn
+ ,enable_shared_from_this<T, VoidAllocator, Deleter> *pe
+ ,T *ptr)
+
 {
- if(pe != 0)
+ (void)ptr;
+ if(pe != 0){
       pe->_internal_weak_this._internal_assign(pn);
+ }
 }
-/*
+
 template<class T, class VoidAllocator, class Deleter>
 inline void sp_enable_shared_from_this(shared_count<T, VoidAllocator, Deleter> const &, ...)
 {}
-*/
+
 } // namespace detail
 
 //!shared_ptr stores a pointer to a dynamically allocated object.
@@ -122,9 +125,17 @@
       typedef typename detail::pointer_to_other<pointer, T>::type ParameterPointer;
       BOOST_STATIC_ASSERT((detail::is_same<pointer, ParameterPointer>::value) ||
                           (detail::is_pointer<pointer>::value));
- //detail::sp_enable_shared_from_this( m_pn, p, p );
+ detail::sp_enable_shared_from_this<T, VoidAllocator, Deleter>( m_pn, detail::get_pointer(p), detail::get_pointer(p) );
    }
 
+
+ //!Constructs a shared_ptr that shares ownership with r and stores p.
+ //!Postconditions: get() == p && use_count() == r.use_count().
+ //!Throws: nothing.
+ shared_ptr(const shared_ptr &other, const pointer &p)
+ : m_pn(other.m_pn, p)
+ {}
+
    //!If r is empty, constructs an empty shared_ptr. Otherwise, constructs
    //!a shared_ptr that shares ownership with r. Never throws.
    template<class Y>
@@ -139,6 +150,19 @@
       : m_pn(r.m_pn) // may throw
    {}
 
+ //!Move-Constructs a shared_ptr that takes ownership of other resource and
+ //!other is put in default-constructed state.
+ //!Throws: nothing.
+ #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
+ explicit shared_ptr(detail::moved_object<shared_ptr> other)
+ : m_pn()
+ { this->swap(other.get()); }
+ #else
+ explicit shared_ptr(shared_ptr &&other)
+ : m_pn()
+ { this->swap(other); }
+ #endif
+
    /// @cond
    template<class Y>
    shared_ptr(shared_ptr<Y, VoidAllocator, Deleter> const & r, detail::static_cast_tag)
@@ -172,6 +196,22 @@
       return *this;
    }
 
+ //!Move-assignment. Equivalent to shared_ptr(other).swap(*this).
+ //!Never throws
+ #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
+ shared_ptr & operator=(detail::moved_object<shared_ptr> other) // never throws
+ {
+ this_type(other).swap(*this);
+ return *this;
+ }
+ #else
+ shared_ptr & operator=(shared_ptr &&other) // never throws
+ {
+ this_type(other).swap(*this);
+ return *this;
+ }
+ #endif
+
    //!This is equivalent to:
    //!this_type().swap(*this);
    void reset()
@@ -192,6 +232,12 @@
       this_type(p, a, d).swap(*this);
    }
 
+ template<class Y>
+ void reset(shared_ptr<Y, VoidAllocator, Deleter> const & r, const pointer &p)
+ {
+ this_type(r, p).swap(*this);
+ }
+
    //!Returns a reference to the
    //!pointed type
    reference operator* () const // never throws
@@ -333,6 +379,18 @@
    get_deleter(shared_ptr<T, VoidAllocator, Deleter> const & p)
 { return static_cast<Deleter *>(p._internal_get_deleter(typeid(Deleter))); }
 */
+
+/// @cond
+
+//!This class has move constructor
+template <class T, class VA, class D>
+struct is_movable<boost::interprocess::shared_ptr<T, VA, D> >
+{
+ enum { value = true };
+};
+
+/// @endcond
+
 } // namespace interprocess
 
 /// @cond

Modified: branches/CMake/release/boost/interprocess/smart_ptr/unique_ptr.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/smart_ptr/unique_ptr.hpp (original)
+++ branches/CMake/release/boost/interprocess/smart_ptr/unique_ptr.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -138,11 +138,11 @@
    //!
    //!Effects: Constructs a unique_ptr which owns the pointer which u owns
    //!(if any). If the deleter is not a reference type, it is move constructed
- //!from u’s deleter, otherwise the reference is copy constructed from u’s deleter.
+ //!from u's deleter, otherwise the reference is copy constructed from u's deleter.
    //!
    //!After the construction, u no longer owns a pointer.
    //![ Note: The deleter constructor can be implemented with
- //!std::forward<D>. —end note ]
+ //!std::detail::forward_impl<D>. -end note ]
    //!
    //!Postconditions: get() == value u.get() had before the construction.
    //!get_deleter() returns a reference to the internally stored deleter which
@@ -152,11 +152,11 @@
    //!Throws: nothing.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    unique_ptr(detail::moved_object<unique_ptr> u)
- : ptr_(u.get().release(), move(u.get().get_deleter()))
+ : ptr_(u.get().release(), detail::move_impl(u.get().get_deleter()))
    {}
    #else
    unique_ptr(unique_ptr &&u)
- : ptr_(u.release(), forward<D>(u.get_deleter()))
+ : ptr_(u.release(), detail::forward_impl<D>(u.get_deleter()))
    {}
    #endif
 
@@ -168,8 +168,8 @@
    //!
    //!Effects: Constructs a unique_ptr which owns the pointer which u owns
    //!(if any). If the deleter is not a reference
- //!type, it is move constructed from u’s deleter, otherwise the reference
- //!is copy constructed from u’s deleter.
+ //!type, it is move constructed from u's deleter, otherwise the reference
+ //!is copy constructed from u's deleter.
    //!
    //!After the construction, u no longer owns a pointer.
    //!
@@ -181,7 +181,7 @@
    //!Throws: nothing.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    template <class U, class E>
- unique_ptr(const detail::moved_object<unique_ptr<U, E> >& u,
+ unique_ptr(detail::moved_object<unique_ptr<U, E> > u,
       typename detail::enable_if_c<
             detail::is_convertible<typename unique_ptr<U, E>::pointer, pointer>::value &&
             detail::is_convertible<E, D>::value &&
@@ -192,12 +192,12 @@
             ,
             nat
>::type = nat())
- : ptr_(const_cast<unique_ptr<U,E>&>(u.get()).release(), move(u.get().get_deleter()))
+ : ptr_(const_cast<unique_ptr<U,E>&>(u.get()).release(), detail::move_impl(u.get().get_deleter()))
    {}
    #else
    template <class U, class E>
    unique_ptr(unique_ptr<U, E> && u,
- typename boost::enable_if_c<
+ typename detail::enable_if_c<
             detail::is_convertible<typename unique_ptr<U, E>::pointer, pointer>::value &&
             detail::is_convertible<E, D>::value &&
             (
@@ -207,7 +207,7 @@
             ,
             nat
>::type = nat())
- : ptr_(const_cast<unique_ptr<U,E>&>(u).release(), forward<D>(u.get_deleter()))
+ : ptr_(const_cast<unique_ptr<U,E>&>(u).release(), detail::forward_impl<D>(u.get_deleter()))
    {}
    #endif
 
@@ -221,7 +221,7 @@
 
    //!Requires: Assignment of the deleter D from an rvalue D must not throw an exception.
    //!
- //!Effects: reset(u.release()) followed by a move assignment from u’s deleter to
+ //!Effects: reset(u.release()) followed by a move assignment from u's deleter to
    //!this deleter.
    //!
    //!Postconditions: This unique_ptr now owns the pointer which u owned, and u no
@@ -231,17 +231,17 @@
    //!
    //!Throws: nothing.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- unique_ptr& operator=(const detail::moved_object<unique_ptr>& u)
+ unique_ptr& operator=(detail::moved_object<unique_ptr> u)
    {
       reset(u.get().release());
- ptr_.second() = move(u.get().get_deleter());
+ ptr_.second() = detail::move_impl(u.get().get_deleter());
       return *this;
    }
    #else
- unique_ptr(unique_ptr && u)
+ unique_ptr& operator=(unique_ptr && u)
    {
       reset(u.release());
- ptr_.second() = move(u.get_deleter());
+ ptr_.second() = detail::move_impl(u.get_deleter());
       return *this;
    }
    #endif
@@ -250,7 +250,7 @@
    //!throw an exception. U* must be implicitly convertible to T*.
    //!
    //!Effects: reset(u.release()) followed by a move assignment from
- //!u’s deleter to this deleter. If either D or E is
+ //!u's deleter to this deleter. If either D or E is
    //!a reference type, then the referenced lvalue deleter participates
    //!in the move assignment.
    //!
@@ -262,17 +262,17 @@
    //!Throws: nothing.
    template <class U, class E>
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- unique_ptr& operator=(const detail::moved_object<unique_ptr<U, E> >& mu)
+ unique_ptr& operator=(detail::moved_object<unique_ptr<U, E> > mu)
    {
       reset(mu.get().release());
- ptr_.second() = move(mu.get().get_deleter());
+ ptr_.second() = detail::move_impl(mu.get().get_deleter());
       return *this;
    }
    #else
- unique_ptr(unique_ptr<U, E> && u)
+ unique_ptr& operator=(unique_ptr<U, E> && u)
    {
       reset(u.release());
- ptr_.second() = move(u.get_deleter());
+ ptr_.second() = detail::move_impl(u.get_deleter());
       return *this;
    }
    #endif
@@ -356,8 +356,8 @@
 
    //!Requires: The deleter D is Swappable and will not throw an exception under swap.
    //!
- //!Effects: The stored pointers of this and u are exchanged. The stored deleters are swap’d (unqualified).
- //!
+ //!Effects: The stored pointers of this and u are exchanged.
+ //! The stored deleters are swapped (unqualified).
    //!Throws: nothing.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    void swap(unique_ptr& u)
@@ -597,9 +597,13 @@
 //!with boost::interproces::deleter from a pointer
 //!of type T that has been allocated in the passed managed segment
 template<class T, class ManagedMemory>
+#ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
 inline typename detail::return_type
    <typename managed_unique_ptr<T, ManagedMemory>::type
>::type
+#else
+typename managed_unique_ptr<T, ManagedMemory>::type
+#endif
    make_managed_unique_ptr(T *constructed_object, ManagedMemory &managed_memory)
 {
    typename managed_unique_ptr<T, ManagedMemory>::type to_return

Modified: branches/CMake/release/boost/interprocess/smart_ptr/weak_ptr.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/smart_ptr/weak_ptr.hpp (original)
+++ branches/CMake/release/boost/interprocess/smart_ptr/weak_ptr.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -200,7 +200,10 @@
    
    template<class Y>
    void _internal_assign(const detail::shared_count<Y, A, D> & pn2)
- { m_pn = pn2; }
+ {
+
+ m_pn = pn2;
+ }
 
    private:
 

Modified: branches/CMake/release/boost/interprocess/sync/emulation/interprocess_condition.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/sync/emulation/interprocess_condition.hpp (original)
+++ branches/CMake/release/boost/interprocess/sync/emulation/interprocess_condition.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -9,7 +9,7 @@
 //////////////////////////////////////////////////////////////////////////////
 
 #include <boost/interprocess/detail/posix_time_types_wrk.hpp>
-
+#include <boost/interprocess/detail/move.hpp>
 namespace boost {
 namespace interprocess {
 
@@ -86,11 +86,23 @@
       if(now >= abs_time) return false;
    }
 
+ typedef boost::interprocess::scoped_lock<interprocess_mutex> InternalLock;
    //The enter interprocess_mutex guarantees that while executing a notification,
    //no other thread can execute the do_timed_wait method.
    {
       //---------------------------------------------------------------
- boost::interprocess::scoped_lock<interprocess_mutex> lock(m_enter_mut);
+ InternalLock lock;
+ if(tout_enabled){
+ InternalLock dummy(m_enter_mut, abs_time);
+ lock = detail::move_impl(dummy);
+ }
+ else{
+ InternalLock dummy(m_enter_mut);
+ lock = detail::move_impl(dummy);
+ }
+
+ if(!lock)
+ return false;
       //---------------------------------------------------------------
       //We increment the waiting thread count protected so that it will be
       //always constant when another thread enters the notification logic.
@@ -146,7 +158,18 @@
          //Notification occurred, we will lock the checking interprocess_mutex so that
          //if a notify_one notification occurs, only one thread can exit
         //---------------------------------------------------------------
- boost::interprocess::scoped_lock<interprocess_mutex> lock(m_check_mut);
+ InternalLock lock;
+ if(tout_enabled){
+ InternalLock dummy(m_check_mut, abs_time);
+ lock = detail::move_impl(dummy);
+ }
+ else{
+ InternalLock dummy(m_check_mut);
+ lock = detail::move_impl(dummy);
+ }
+
+ if(!lock)
+ return false;
          //---------------------------------------------------------------
          boost::uint32_t result = detail::atomic_cas32
                         ((boost::uint32_t*)&m_command, SLEEP, NOTIFY_ONE);

Modified: branches/CMake/release/boost/interprocess/sync/file_lock.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/sync/file_lock.hpp (original)
+++ branches/CMake/release/boost/interprocess/sync/file_lock.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -20,6 +20,7 @@
 #include <boost/interprocess/exceptions.hpp>
 #include <cassert>
 #include <boost/interprocess/detail/os_file_functions.hpp>
+#include <boost/interprocess/detail/os_thread_functions.hpp>
 #include <boost/interprocess/detail/posix_time_types_wrk.hpp>
 
 //!\file
@@ -31,6 +32,8 @@
 //!A file lock, is a mutual exclusion utility similar to a mutex using a
 //!file. A file lock has sharable and exclusive locking capabilities and
 //!can be used with scoped_lock and sharable_lock classes.
+//!A file lock can't guarantee synchronization between threads of the same
+//!process so just use file locks to synchronize threads from different processes.
 class file_lock
 {
    /// @cond
@@ -108,62 +111,6 @@
 
    bool timed_acquire_file_lock
       (file_handle_t hnd, bool &acquired, const boost::posix_time::ptime &abs_time)
- {
- //Obtain current count and target time
- boost::posix_time::ptime now = microsec_clock::universal_time();
- using namespace boost::detail;
-
- if(now >= abs_time) return false;
-
- do{
- if(!try_acquire_file_lock(hnd, acquired))
- return false;
-
- if(acquired)
- return true;
- else{
- now = microsec_clock::universal_time();
-
- if(now >= abs_time){
- acquired = false;
- return true;
- }
- // relinquish current time slice
- winapi::sched_yield();
- }
- }while (true);
- }
-
- bool timed_acquire_file_lock_sharable
- (file_handle_t hnd, bool &acquired, const boost::posix_time::ptime &abs_time)
- {
- //Obtain current count and target time
- boost::posix_time::ptime now = microsec_clock::universal_time();
- using namespace boost::detail;
-
- if(now >= abs_time) return false;
-
- do{
- if(!try_acquire_file_lock_sharable(hnd, acquired))
- return false;
-
- if(acquired)
- return true;
- else{
- now = microsec_clock::universal_time();
-
- if(now >= abs_time){
- acquired = false;
- return true;
- }
- // relinquish current time slice
- winapi::sched_yield();
- }
- }while (true);
- }
-
- bool timed_acquire_file_lock
- (file_handle_t hnd, bool &acquired, const boost::posix_time::ptime &abs_time)
    {
       //Obtain current count and target time
       boost::posix_time::ptime now = microsec_clock::universal_time();
@@ -172,7 +119,7 @@
       if(now >= abs_time) return false;
 
       do{
- if(!try_acquire_file_lock(hnd, acquired))
+ if(!detail::try_acquire_file_lock(hnd, acquired))
             return false;
 
          if(acquired)
@@ -185,7 +132,7 @@
                return true;
             }
             // relinquish current time slice
- sleep(0);
+ detail::thread_yield();
          }
       }while (true);
    }
@@ -200,7 +147,7 @@
       if(now >= abs_time) return false;
 
       do{
- if(!try_acquire_file_lock_sharable(hnd, acquired))
+ if(!detail::try_acquire_file_lock_sharable(hnd, acquired))
             return false;
 
          if(acquired)
@@ -213,7 +160,7 @@
                return true;
             }
             // relinquish current time slice
- ::sleep(0);
+ detail::thread_yield();
          }
       }while (true);
    }
@@ -259,7 +206,7 @@
 inline bool file_lock::timed_lock(const boost::posix_time::ptime &abs_time)
 {
    bool result;
- if(!detail::timed_acquire_file_lock(m_file_hnd, result, abs_time)){
+ if(!this->timed_acquire_file_lock(m_file_hnd, result, abs_time)){
       error_info err(system_error_code());
       throw interprocess_exception(err);
    }
@@ -295,7 +242,7 @@
 inline bool file_lock::timed_lock_sharable(const boost::posix_time::ptime &abs_time)
 {
    bool result;
- if(!detail::timed_acquire_file_lock_sharable(m_file_hnd, result, abs_time)){
+ if(!this->timed_acquire_file_lock_sharable(m_file_hnd, result, abs_time)){
       error_info err(system_error_code());
       throw interprocess_exception(err);
    }

Modified: branches/CMake/release/boost/interprocess/sync/interprocess_condition.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/sync/interprocess_condition.hpp (original)
+++ branches/CMake/release/boost/interprocess/sync/interprocess_condition.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -50,6 +50,8 @@
 
 class named_condition;
 
+//!This class is a condition variable that can be placed in shared memory or
+//!memory mapped files.
 class interprocess_condition
 {
    /// @cond

Modified: branches/CMake/release/boost/interprocess/sync/interprocess_upgradable_mutex.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/sync/interprocess_upgradable_mutex.hpp (original)
+++ branches/CMake/release/boost/interprocess/sync/interprocess_upgradable_mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -266,6 +266,8 @@
    /// @endcond
 };
 
+/// @cond
+
 template <int Dummy>
 const unsigned interprocess_upgradable_mutex::base_constants_t<Dummy>::max_readers;
 
@@ -633,8 +635,9 @@
    return true;
 }
 
-} //namespace interprocess {
+/// @endcond
 
+} //namespace interprocess {
 } //namespace boost {
 
 

Modified: branches/CMake/release/boost/interprocess/sync/named_condition.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/sync/named_condition.hpp (original)
+++ branches/CMake/release/boost/interprocess/sync/named_condition.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -40,6 +40,9 @@
 namespace detail{ class interprocess_tester; }
 /// @endcond
 
+//! A global condition variable that can be created by name.
+//! This condition variable is designed to work with named_mutex and
+//! can't be placed in shared memory or memory mapped files.
 class named_condition
 {
    /// @cond
@@ -146,21 +149,30 @@
    template <class Lock>
    void do_wait(Lock& lock)
    {
+ //lock internal before unlocking external to avoid race with a notifier
+ scoped_lock<interprocess_mutex> internal_lock(*this->mutex());
       lock_inverter<Lock> inverted_lock(lock);
- //unlock internal first to avoid deadlock with near simultaneous waits
       scoped_lock<lock_inverter<Lock> > external_unlock(inverted_lock);
- scoped_lock<interprocess_mutex> internal_lock(*this->mutex());
- this->condition()->wait(internal_lock);
+
+ //unlock internal first to avoid deadlock with near simultaneous waits
+ scoped_lock<interprocess_mutex> internal_unlock;
+ internal_lock.swap(internal_unlock);
+ this->condition()->wait(internal_unlock);
    }
 
    template <class Lock>
    bool do_timed_wait(Lock& lock, const boost::posix_time::ptime &abs_time)
    {
- //unlock internal first to avoid deadlock with near simultaneous waits
- lock_inverter<Lock> inverted_lock(lock);
- scoped_lock<lock_inverter<Lock> > external_unlock(inverted_lock);
- scoped_lock<interprocess_mutex> internal_lock(*this->mutex());
- return this->condition()->timed_wait(internal_lock, abs_time);
+ //lock internal before unlocking external to avoid race with a notifier
+ scoped_lock<interprocess_mutex> internal_lock(*this->mutex(), abs_time);
+ if(!internal_lock) return false;
+ lock_inverter<Lock> inverted_lock(lock);
+ scoped_lock<lock_inverter<Lock> > external_unlock(inverted_lock);
+
+ //unlock internal first to avoid deadlock with near simultaneous waits
+ scoped_lock<interprocess_mutex> internal_unlock;
+ internal_lock.swap(internal_unlock);
+ return this->condition()->timed_wait(internal_unlock, abs_time);
    }
    #endif
 
@@ -174,6 +186,8 @@
    /// @endcond
 };
 
+/// @cond
+
 inline named_condition::~named_condition()
 {}
 
@@ -320,6 +334,8 @@
 inline bool named_condition::remove(const char *name)
 { return shared_memory_object::remove(name); }
 
+/// @endcond
+
 } //namespace interprocess
 } //namespace boost
 

Modified: branches/CMake/release/boost/interprocess/sync/named_recursive_mutex.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/sync/named_recursive_mutex.hpp (original)
+++ branches/CMake/release/boost/interprocess/sync/named_recursive_mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -108,6 +108,8 @@
    /// @endcond
 };
 
+/// @cond
+
 inline named_recursive_mutex::~named_recursive_mutex()
 {}
 
@@ -159,6 +161,8 @@
 inline bool named_recursive_mutex::remove(const char *name)
 { return shared_memory_object::remove(name); }
 
+/// @endcond
+
 } //namespace interprocess {
 } //namespace boost {
 

Modified: branches/CMake/release/boost/interprocess/sync/named_upgradable_mutex.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/sync/named_upgradable_mutex.hpp (original)
+++ branches/CMake/release/boost/interprocess/sync/named_upgradable_mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -233,6 +233,8 @@
    /// @endcond
 };
 
+/// @cond
+
 inline named_upgradable_mutex::~named_upgradable_mutex()
 {}
 
@@ -339,8 +341,9 @@
 inline bool named_upgradable_mutex::remove(const char *name)
 { return shared_memory_object::remove(name); }
 
-} //namespace interprocess {
+/// @endcond
 
+} //namespace interprocess {
 } //namespace boost {
 
 #include <boost/interprocess/detail/config_end.hpp>

Modified: branches/CMake/release/boost/interprocess/sync/scoped_lock.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/sync/scoped_lock.hpp (original)
+++ branches/CMake/release/boost/interprocess/sync/scoped_lock.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -122,15 +122,16 @@
    //! to thisscoped_lock with no blocking. If the scop scoped_lock does not
    //! own the mutex, then neither will this scoped_lock. Only a moved
    //! scoped_lock's will match this signature. An non-moved scoped_lock
- //! can be moved with the expression: "move(lock);". This
+ //! can be moved with the expression: "detail::move_impl(lock);". This
    //! constructor does not alter the state of the mutex, only potentially
    //! who owns it.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- explicit scoped_lock(detail::moved_object<scoped_lock<Mutex> > scop)
+ scoped_lock(detail::moved_object<scoped_lock<Mutex> > scop)
       : mp_mutex(0), m_locked(scop.get().owns())
    { mp_mutex = scop.get().release(); }
    #else
- explicit scoped_lock(scoped_lock<Mutex> &&scop)
+
+ scoped_lock(scoped_lock &&scop)
       : mp_mutex(0), m_locked(scop.owns())
    { mp_mutex = scop.release(); }
    #endif
@@ -144,11 +145,11 @@
    //! unlocking upgr. If upgr is unlocked, then this scoped_lock will be
    //! unlocked as well. Only a moved upgradable_lock's will match this
    //! signature. An non-moved upgradable_lock can be moved with
- //! the expression: "move(lock);" This constructor may block if
+ //! the expression: "detail::move_impl(lock);" This constructor may block if
    //! other threads hold a sharable_lock on this mutex (sharable_lock's can
    //! share ownership with an upgradable_lock).
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- explicit scoped_lock(detail::moved_object<upgradable_lock<Mutex> > upgr)
+ scoped_lock(detail::moved_object<upgradable_lock<Mutex> > upgr)
       : mp_mutex(0), m_locked(false)
    {
       upgradable_lock<mutex_type> &u_lock = upgr.get();
@@ -159,7 +160,7 @@
       mp_mutex = u_lock.release();
    }
    #else
- explicit scoped_lock(upgradable_lock<Mutex> &&upgr)
+ scoped_lock(upgradable_lock<Mutex> &&upgr)
       : mp_mutex(0), m_locked(false)
    {
       upgradable_lock<mutex_type> &u_lock = upgr;
@@ -326,7 +327,7 @@
    //! mutex after the assignment (and scop will not), but the mutex's lock
    //! count will be decremented by one.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- scoped_lock &operator=(detail::moved_object<scoped_lock<Mutex> > scop)
+ scoped_lock &operator=(detail::moved_object<scoped_lock> scop)
    {
       if(this->owns())
          this->unlock();
@@ -335,7 +336,7 @@
       return *this;
    }
    #else
- scoped_lock &operator=(scoped_lock<Mutex> &&scop)
+ scoped_lock &operator=(scoped_lock &&scop)
    {
       if(this->owns())
          this->unlock();

Modified: branches/CMake/release/boost/interprocess/sync/sharable_lock.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/sync/sharable_lock.hpp (original)
+++ branches/CMake/release/boost/interprocess/sync/sharable_lock.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -127,14 +127,14 @@
    //! sharable_lock with no blocking. If the upgr sharable_lock does not own the mutex, then
    //! neither will this sharable_lock. Only a moved sharable_lock's will match this
    //! signature. An non-moved sharable_lock can be moved with the expression:
- //! "move(lock);". This constructor does not alter the state of the mutex,
+ //! "detail::move_impl(lock);". This constructor does not alter the state of the mutex,
    //! only potentially who owns it.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- explicit sharable_lock(detail::moved_object<sharable_lock<mutex_type> > upgr)
+ sharable_lock(detail::moved_object<sharable_lock<mutex_type> > upgr)
       : mp_mutex(0), m_locked(upgr.get().owns())
    { mp_mutex = upgr.get().release(); }
    #else
- explicit sharable_lock(sharable_lock<mutex_type> &&upgr)
+ sharable_lock(sharable_lock<mutex_type> &&upgr)
       : mp_mutex(0), m_locked(upgr.owns())
    { mp_mutex = upgr.release(); }
    #endif
@@ -147,9 +147,9 @@
    //!Notes: If upgr is locked, this constructor will lock this sharable_lock while
    //! unlocking upgr. Only a moved sharable_lock's will match this
    //! signature. An non-moved upgradable_lock can be moved with the expression:
- //! "move(lock);".*/
+ //! "detail::move_impl(lock);".*/
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- explicit sharable_lock(detail::moved_object<upgradable_lock<mutex_type> > upgr)
+ sharable_lock(detail::moved_object<upgradable_lock<mutex_type> > upgr)
       : mp_mutex(0), m_locked(false)
    {
       upgradable_lock<mutex_type> &u_lock = upgr.get();
@@ -160,7 +160,7 @@
       mp_mutex = u_lock.release();
    }
    #else
- explicit sharable_lock(upgradable_lock<mutex_type> &&upgr)
+ sharable_lock(upgradable_lock<mutex_type> &&upgr)
       : mp_mutex(0), m_locked(false)
    {
       upgradable_lock<mutex_type> &u_lock = upgr;
@@ -181,9 +181,9 @@
    //! to a sharable-ownership of this sharable_lock.
    //! Only a moved scoped_lock's will match this
    //! signature. An non-moved scoped_lock can be moved with the expression:
- //! "move(lock);".*/
+ //! "detail::move_impl(lock);".*/
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- explicit sharable_lock(detail::moved_object<scoped_lock<mutex_type> > scop)
+ sharable_lock(detail::moved_object<scoped_lock<mutex_type> > scop)
       : mp_mutex(0), m_locked(false)
    {
       scoped_lock<mutex_type> &e_lock = scop.get();
@@ -194,7 +194,7 @@
       mp_mutex = e_lock.release();
    }
    #else
- explicit sharable_lock(scoped_lock<mutex_type> &&scop)
+ sharable_lock(scoped_lock<mutex_type> &&scop)
       : mp_mutex(0), m_locked(false)
    {
       scoped_lock<mutex_type> &e_lock = scop;

Modified: branches/CMake/release/boost/interprocess/sync/upgradable_lock.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/sync/upgradable_lock.hpp (original)
+++ branches/CMake/release/boost/interprocess/sync/upgradable_lock.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -121,14 +121,14 @@
    //! while unlocking upgr. If upgr is unlocked, then this upgradable_lock will
    //! be unlocked as well. Only a moved upgradable_lock's will match this
    //! signature. An non-moved upgradable_lock can be moved with the
- //! expression: "move(lock);". This constructor does not alter the
+ //! expression: "detail::move_impl(lock);". This constructor does not alter the
    //! state of the mutex, only potentially who owns it.
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- explicit upgradable_lock(detail::moved_object<upgradable_lock<mutex_type> > upgr)
+ upgradable_lock(detail::moved_object<upgradable_lock<mutex_type> > upgr)
       : mp_mutex(0), m_locked(upgr.get().owns())
    { mp_mutex = upgr.get().release(); }
    #else
- explicit upgradable_lock(upgradable_lock<mutex_type> &&upgr)
+ upgradable_lock(upgradable_lock<mutex_type> &&upgr)
       : mp_mutex(0), m_locked(upgr.owns())
    { mp_mutex = upgr.release(); }
    #endif
@@ -141,9 +141,9 @@
    //! to an upgradable-ownership of this upgradable_lock.
    //! Only a moved sharable_lock's will match this
    //! signature. An non-moved sharable_lock can be moved with the
- //! expression: "move(lock);".
+ //! expression: "detail::move_impl(lock);".
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
- explicit upgradable_lock(detail::moved_object<scoped_lock<mutex_type> > scop)
+ upgradable_lock(detail::moved_object<scoped_lock<mutex_type> > scop)
       : mp_mutex(0), m_locked(false)
    {
       scoped_lock<mutex_type> &u_lock = scop.get();
@@ -154,7 +154,7 @@
       mp_mutex = u_lock.release();
    }
    #else
- explicit upgradable_lock(scoped_lock<mutex_type> &&scop)
+ upgradable_lock(scoped_lock<mutex_type> &&scop)
       : mp_mutex(0), m_locked(false)
    {
       scoped_lock<mutex_type> &u_lock = scop;

Modified: branches/CMake/release/boost/interprocess/windows_shared_memory.hpp
==============================================================================
--- branches/CMake/release/boost/interprocess/windows_shared_memory.hpp (original)
+++ branches/CMake/release/boost/interprocess/windows_shared_memory.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -83,7 +83,7 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    windows_shared_memory
- (detail::moved_object<windows_shared_memory> &moved)
+ (detail::moved_object<windows_shared_memory> moved)
    { this->swap(moved.get()); }
    #else
    windows_shared_memory(windows_shared_memory &&moved)
@@ -95,7 +95,7 @@
    //!Does not throw
    #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE
    windows_shared_memory &operator=
- (detail::moved_object<windows_shared_memory> &moved)
+ (detail::moved_object<windows_shared_memory> moved)
    {
       windows_shared_memory tmp(moved);
       this->swap(tmp);
@@ -104,7 +104,7 @@
    #else
    windows_shared_memory &operator=(windows_shared_memory &&moved)
    {
- windows_shared_memory tmp(move(moved));
+ windows_shared_memory tmp(detail::move_impl(moved));
       this->swap(tmp);
       return *this;
    }
@@ -143,6 +143,8 @@
    /// @endcond
 };
 
+/// @cond
+
 inline windows_shared_memory::windows_shared_memory()
    : m_handle(0)
 {}
@@ -169,7 +171,7 @@
 inline bool windows_shared_memory::priv_open_or_create
    (detail::create_enum_t type, const char *filename, mode_t mode, std::size_t size)
 {
- m_name = filename;
+ m_name = filename ? filename : "";
 
    unsigned long file_map_access = 0;
    unsigned long map_access = 0;
@@ -235,6 +237,16 @@
    }
 }
 
+//!Trait class to detect if a type is
+//!movable
+template<>
+struct is_movable<windows_shared_memory>
+{
+ static const bool value = true;
+};
+
+///@endcond
+
 } //namespace interprocess {
 } //namespace boost {
 

Modified: branches/CMake/release/boost/intrusive/avl_set.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/avl_set.hpp (original)
+++ branches/CMake/release/boost/intrusive/avl_set.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -240,7 +240,7 @@
    //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
    //! of avl_set.
    //!
- //! <b>Effects</b>: Returns a const reference to the avl_set associated to the end iterator
+ //! <b>Effects</b>: Returns a const reference to the set associated to the end iterator
    //!
    //! <b>Throws</b>: Nothing.
    //!
@@ -252,6 +252,34 @@
          , &avl_set_impl::tree_);
    }
 
+ //! <b>Precondition</b>: it must be a valid iterator of set.
+ //!
+ //! <b>Effects</b>: Returns a reference to the set associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static avl_set_impl &container_from_iterator(iterator it)
+ {
+ return *detail::parent_from_member<avl_set_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &avl_set_impl::tree_);
+ }
+
+ //! <b>Precondition</b>: it must be a valid const_iterator of set.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the set associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static const avl_set_impl &container_from_iterator(const_iterator it)
+ {
+ return *detail::parent_from_member<avl_set_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &avl_set_impl::tree_);
+ }
+
    //! <b>Effects</b>: Returns the key_compare object used by the avl_set.
    //!
    //! <b>Complexity</b>: Constant.
@@ -1085,6 +1113,12 @@
 
    static const avl_set &container_from_end_iterator(const_iterator end_iterator)
    { return static_cast<const avl_set &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static avl_set &container_from_iterator(iterator end_iterator)
+ { return static_cast<avl_set &>(Base::container_from_iterator(end_iterator)); }
+
+ static const avl_set &container_from_iterator(const_iterator end_iterator)
+ { return static_cast<const avl_set &>(Base::container_from_iterator(end_iterator)); }
 };
 
 #endif
@@ -1317,6 +1351,34 @@
          , &avl_multiset_impl::tree_);
    }
 
+ //! <b>Precondition</b>: it must be a valid iterator of multiset.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static avl_multiset_impl &container_from_iterator(iterator it)
+ {
+ return *detail::parent_from_member<avl_multiset_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &avl_multiset_impl::tree_);
+ }
+
+ //! <b>Precondition</b>: it must be a valid const_iterator of multiset.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static const avl_multiset_impl &container_from_iterator(const_iterator it)
+ {
+ return *detail::parent_from_member<avl_multiset_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &avl_multiset_impl::tree_);
+ }
+
    //! <b>Effects</b>: Returns the key_compare object used by the avl_multiset.
    //!
    //! <b>Complexity</b>: Constant.
@@ -2057,6 +2119,12 @@
 
    static const avl_multiset &container_from_end_iterator(const_iterator end_iterator)
    { return static_cast<const avl_multiset &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static avl_multiset &container_from_iterator(iterator end_iterator)
+ { return static_cast<avl_multiset &>(Base::container_from_iterator(end_iterator)); }
+
+ static const avl_multiset &container_from_iterator(const_iterator end_iterator)
+ { return static_cast<const avl_multiset &>(Base::container_from_iterator(end_iterator)); }
 };
 
 #endif

Modified: branches/CMake/release/boost/intrusive/avltree.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/avltree.hpp (original)
+++ branches/CMake/release/boost/intrusive/avltree.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -387,6 +387,28 @@
    static const avltree_impl &container_from_end_iterator(const_iterator end_iterator)
    { return priv_container_from_end_iterator(end_iterator); }
 
+ //! <b>Precondition</b>: it must be a valid iterator
+ //! of rbtree.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static avltree_impl &container_from_iterator(iterator it)
+ { return priv_container_from_iterator(it); }
+
+ //! <b>Precondition</b>: it must be a valid end const_iterator
+ //! of rbtree.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static const avltree_impl &container_from_iterator(const_iterator it)
+ { return priv_container_from_iterator(it); }
+
    //! <b>Effects</b>: Returns the value_compare object used by the tree.
    //!
    //! <b>Complexity</b>: Constant.
@@ -1233,6 +1255,9 @@
       avltree_impl *avl = detail::parent_from_member<avltree_impl, data_t>(d, &avltree_impl::data_);
       return *avl;
    }
+
+ static avltree_impl &priv_container_from_iterator(const const_iterator &it)
+ { return priv_container_from_end_iterator(it.end_iterator_from_it()); }
 };
 
 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
@@ -1426,6 +1451,12 @@
 
    static const avltree &container_from_end_iterator(const_iterator end_iterator)
    { return static_cast<const avltree &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static avltree &container_from_iterator(iterator it)
+ { return static_cast<avltree &>(Base::container_from_iterator(it)); }
+
+ static const avltree &container_from_iterator(const_iterator it)
+ { return static_cast<const avltree &>(Base::container_from_iterator(it)); }
 };
 
 #endif

Modified: branches/CMake/release/boost/intrusive/avltree_algorithms.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/avltree_algorithms.hpp (original)
+++ branches/CMake/release/boost/intrusive/avltree_algorithms.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -20,7 +20,6 @@
 #include <boost/intrusive/intrusive_fwd.hpp>
 
 #include <boost/intrusive/detail/assert.hpp>
-#include <boost/intrusive/detail/no_exceptions_support.hpp>
 #include <boost/intrusive/detail/utilities.hpp>
 #include <boost/intrusive/detail/tree_algorithms.hpp>
 
@@ -69,6 +68,7 @@
 class avltree_algorithms
 {
    public:
+ typedef typename NodeTraits::node node;
    typedef NodeTraits node_traits;
    typedef typename NodeTraits::node_ptr node_ptr;
    typedef typename NodeTraits::const_node_ptr const_node_ptr;
@@ -76,8 +76,6 @@
 
    /// @cond
    private:
-
- typedef typename NodeTraits::node node;
    typedef detail::tree_algorithms<NodeTraits> tree_algorithms;
 
    template<class F>
@@ -641,6 +639,16 @@
       rebalance_after_insertion(header, new_value);
    }
 
+ //! <b>Requires</b>: "n" must be a node inserted in a tree.
+ //!
+ //! <b>Effects</b>: Returns a pointer to the header node of the tree.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr get_header(node_ptr n)
+ { return tree_algorithms::get_header(n); }
+
    /// @cond
    private:
 

Modified: branches/CMake/release/boost/intrusive/circular_list_algorithms.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/circular_list_algorithms.hpp (original)
+++ branches/CMake/release/boost/intrusive/circular_list_algorithms.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -50,6 +50,7 @@
 class circular_list_algorithms
 {
    public:
+ typedef typename NodeTraits::node node;
    typedef typename NodeTraits::node_ptr node_ptr;
    typedef typename NodeTraits::const_node_ptr const_node_ptr;
    typedef NodeTraits node_traits;
@@ -62,8 +63,8 @@
    //! <b>Throws</b>: Nothing.
    static void init(node_ptr this_node)
    {
- NodeTraits::set_next(this_node, 0);
- NodeTraits::set_previous(this_node, 0);
+ NodeTraits::set_next(this_node, node_ptr(0));
+ NodeTraits::set_previous(this_node, node_ptr(0));
    }
 
    //! <b>Effects</b>: Returns true is "this_node" is in a non-used state

Modified: branches/CMake/release/boost/intrusive/circular_slist_algorithms.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/circular_slist_algorithms.hpp (original)
+++ branches/CMake/release/boost/intrusive/circular_slist_algorithms.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -54,6 +54,7 @@
    typedef detail::common_slist_algorithms<NodeTraits> base_t;
    /// @endcond
    public:
+ typedef typename NodeTraits::node node;
    typedef typename NodeTraits::node_ptr node_ptr;
    typedef typename NodeTraits::const_node_ptr const_node_ptr;
    typedef NodeTraits node_traits;
@@ -305,12 +306,12 @@
    static node_ptr move_backwards(node_ptr p, std::size_t n)
    {
       //Null shift, nothing to do
- if(!n) return 0;
+ if(!n) return node_ptr(0);
       node_ptr first = NodeTraits::get_next(p);
 
       //count() == 1 or 2, nothing to do
       if(NodeTraits::get_next(first) == p)
- return 0;
+ return node_ptr(0);
 
       bool end_found = false;
       node_ptr new_last(0);
@@ -326,7 +327,7 @@
             //Shortcut the shift with the modulo of the size of the list
             n %= i;
             if(!n)
- return 0;
+ return node_ptr(0);
             i = 0;
             //Unlink p and continue the new first node search
             first = NodeTraits::get_next(p);
@@ -357,11 +358,11 @@
    static node_ptr move_forward(node_ptr p, std::size_t n)
    {
       //Null shift, nothing to do
- if(!n) return 0;
+ if(!n) return node_ptr(0);
       node_ptr first = node_traits::get_next(p);
 
       //count() == 1 or 2, nothing to do
- if(node_traits::get_next(first) == p) return 0;
+ if(node_traits::get_next(first) == p) return node_ptr(0);
 
       //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
@@ -380,7 +381,7 @@
          //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 0;
+ if(!new_before_last_pos) return node_ptr(0);
          
          for( new_last = p
             ; new_before_last_pos--

Modified: branches/CMake/release/boost/intrusive/detail/avltree_node.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/avltree_node.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/avltree_node.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -17,7 +17,7 @@
 #include <iterator>
 #include <boost/intrusive/detail/pointer_to_other.hpp>
 #include <boost/intrusive/avltree_algorithms.hpp>
-#include <boost/intrusive/pointer_plus_2_bits.hpp>
+#include <boost/intrusive/pointer_plus_bits.hpp>
 #include <boost/intrusive/detail/mpl.hpp>
 
 namespace boost {
@@ -111,7 +111,7 @@
       <VoidPointer, const node>::type const_node_ptr;
    typedef typename node::balance balance;
 
- typedef pointer_plus_2_bits<node_ptr> ptr_bit;
+ typedef pointer_plus_bits<node_ptr, 2> ptr_bit;
 
    static node_ptr get_parent(const_node_ptr n)
    { return ptr_bit::get_pointer(n->parent_); }
@@ -148,7 +148,7 @@
 };
 
 //Dispatches the implementation based on the boolean
-template<class VoidPointer, bool compact>
+template<class VoidPointer, bool Compact>
 struct avltree_node_traits_dispatch
    : public default_avltree_node_traits_impl<VoidPointer>
 {};
@@ -164,10 +164,10 @@
    : public avltree_node_traits_dispatch
          < VoidPointer
          , OptimizeSize &&
- has_pointer_plus_2_bits
+ max_pointer_plus_bits
             < VoidPointer
             , detail::alignment_of<compact_avltree_node<VoidPointer> >::value
- >::value
+ >::value >= 2u
>
 {};
 

Modified: branches/CMake/release/boost/intrusive/detail/common_slist_algorithms.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/common_slist_algorithms.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/common_slist_algorithms.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -26,6 +26,7 @@
 class common_slist_algorithms
 {
    public:
+ typedef typename NodeTraits::node node;
    typedef typename NodeTraits::node_ptr node_ptr;
    typedef typename NodeTraits::const_node_ptr const_node_ptr;
    typedef NodeTraits node_traits;
@@ -47,13 +48,13 @@
    { NodeTraits::set_next(this_node, this_node); }
 
    static void init(node_ptr this_node)
- { NodeTraits::set_next(this_node, 0); }
+ { NodeTraits::set_next(this_node, node_ptr(0)); }
 
    static bool unique(const_node_ptr this_node)
    {
       node_ptr next = NodeTraits::get_next(this_node);
       return !next || next == this_node;
- }
+ }
 
    static bool inited(const_node_ptr this_node)
    { return !NodeTraits::get_next(this_node); }

Modified: branches/CMake/release/boost/intrusive/detail/ebo_functor_holder.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/ebo_functor_holder.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/ebo_functor_holder.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Joaquín M López Muñoz 2006-2007
+// (C) Copyright Joaquin M Lopez Munoz 2006-2007
 //
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at
@@ -23,8 +23,15 @@
 class ebo_functor_holder_impl
 {
    public:
- ebo_functor_holder_impl(){}
- ebo_functor_holder_impl(const T& t):t(t){}
+ ebo_functor_holder_impl()
+ {}
+ ebo_functor_holder_impl(const T& t)
+ : t(t)
+ {}
+ template<class Arg1, class Arg2>
+ ebo_functor_holder_impl(const Arg1& arg1, const Arg2& arg2)
+ : t(arg1, arg2)
+ {}
 
    T& get(){return t;}
    const T& get()const{return t;}
@@ -38,8 +45,15 @@
    : public T
 {
    public:
- ebo_functor_holder_impl(){}
- ebo_functor_holder_impl(const T& t):T(t){}
+ ebo_functor_holder_impl()
+ {}
+ ebo_functor_holder_impl(const T& t)
+ : T(t)
+ {}
+ template<class Arg1, class Arg2>
+ ebo_functor_holder_impl(const Arg1& arg1, const Arg2& arg2)
+ : T(arg1, arg2)
+ {}
 
    T& get(){return *this;}
    const T& get()const{return *this;}
@@ -54,7 +68,14 @@
 
    public:
    ebo_functor_holder(){}
- ebo_functor_holder(const T& t):super(t){}
+ ebo_functor_holder(const T& t)
+ : super(t)
+ {}
+
+ template<class Arg1, class Arg2>
+ ebo_functor_holder(const Arg1& arg1, const Arg2& arg2)
+ : super(arg1, arg2)
+ {}
 
    ebo_functor_holder& operator=(const ebo_functor_holder& x)
    {

Modified: branches/CMake/release/boost/intrusive/detail/generic_hook.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/generic_hook.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/generic_hook.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -18,6 +18,7 @@
 #include <boost/intrusive/detail/pointer_to_other.hpp>
 #include <boost/intrusive/link_mode.hpp>
 #include <boost/intrusive/detail/utilities.hpp>
+#include <boost/intrusive/detail/mpl.hpp>
 #include <boost/static_assert.hpp>
 
 namespace boost {
@@ -35,6 +36,7 @@
 , SplaySetBaseHook
 , AvlSetBaseHook
 , BsSetBaseHook
+, AnyBaseHook
 };
 
 struct no_default_definer{};
@@ -70,6 +72,10 @@
 struct default_definer<Hook, BsSetBaseHook>
 { typedef Hook default_bs_set_hook; };
 
+template <class Hook>
+struct default_definer<Hook, AnyBaseHook>
+{ typedef Hook default_any_hook; };
+
 template <class Hook, unsigned int BaseHookType>
 struct make_default_definer
 {
@@ -90,11 +96,11 @@
    typedef typename detail::if_c
       <!detail::is_same<Tag, member_tag>::value
       , detail::node_holder
- < typename GetNodeAlgorithms::type::node_traits::node
+ < typename GetNodeAlgorithms::type::node
          , Tag
          , LinkMode
          , HookType>
- , typename GetNodeAlgorithms::type::node_traits::node
+ , typename GetNodeAlgorithms::type::node
>::type type;
 };
 
@@ -122,38 +128,38 @@
    , public make_node_holder<GetNodeAlgorithms, Tag, LinkMode, HookType>::type
    /// @endcond
 {
- public:
    /// @cond
+ typedef typename GetNodeAlgorithms::type node_algorithms;
+ typedef typename node_algorithms::node node;
+ typedef typename node_algorithms::node_ptr node_ptr;
+ typedef typename node_algorithms::const_node_ptr const_node_ptr;
+
+ public:
    struct boost_intrusive_tags
    {
       static const int hook_type = HookType;
       static const link_mode_type link_mode = LinkMode;
- typedef Tag tag;
- typedef typename GetNodeAlgorithms::type node_algorithms;
- typedef typename node_algorithms::node_traits node_traits;
- typedef typename node_traits::node node;
- typedef typename node_traits::node_ptr node_ptr;
- typedef typename node_traits::const_node_ptr const_node_ptr;
+ typedef Tag tag;
+ typedef typename GetNodeAlgorithms::type::node_traits node_traits;
       static const bool is_base_hook = !detail::is_same<Tag, member_tag>::value;
- enum { safemode_or_autounlink =
- (int)link_mode == (int)auto_unlink ||
- (int)link_mode == (int)safe_link };
+ static const bool safemode_or_autounlink =
+ (int)link_mode == (int)auto_unlink || (int)link_mode == (int)safe_link;
    };
+
+ public:
    /// @endcond
 
    generic_hook()
    {
       if(boost_intrusive_tags::safemode_or_autounlink){
- boost_intrusive_tags::node_algorithms::init
- (static_cast<typename boost_intrusive_tags::node*>(this));
+ node_algorithms::init(static_cast<node*>(this));
       }
    }
 
    generic_hook(const generic_hook& )
    {
       if(boost_intrusive_tags::safemode_or_autounlink){
- boost_intrusive_tags::node_algorithms::init
- (static_cast<typename boost_intrusive_tags::node*>(this));
+ node_algorithms::init(static_cast<node*>(this));
       }
    }
 
@@ -168,26 +174,23 @@
 
    void swap_nodes(generic_hook &other)
    {
- boost_intrusive_tags::node_algorithms::swap_nodes
- ( static_cast<typename boost_intrusive_tags::node*>(this)
- , static_cast<typename boost_intrusive_tags::node*>(&other));
+ node_algorithms::swap_nodes
+ ( static_cast<node*>(this), static_cast<node*>(&other));
    }
 
    bool is_linked() const
    {
       //is_linked() can be only used in safe-mode or auto-unlink
       BOOST_STATIC_ASSERT(( boost_intrusive_tags::safemode_or_autounlink ));
- return !boost_intrusive_tags::node_algorithms::unique
- (static_cast<const typename boost_intrusive_tags::node*>(this));
+ return !node_algorithms::unique
+ (static_cast<const node*>(this));
    }
 
    void unlink()
    {
       BOOST_STATIC_ASSERT(( (int)boost_intrusive_tags::link_mode == (int)auto_unlink ));
- boost_intrusive_tags::node_algorithms::unlink
- (static_cast<typename boost_intrusive_tags::node*>(this));
- boost_intrusive_tags::node_algorithms::init
- (static_cast<typename boost_intrusive_tags::node*>(this));
+ node_algorithms::unlink(static_cast<node*>(this));
+ node_algorithms::init(static_cast<node*>(this));
    }
 };
 

Modified: branches/CMake/release/boost/intrusive/detail/hashtable_node.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/hashtable_node.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/hashtable_node.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -50,6 +50,7 @@
 template <class Slist>
 struct bucket_impl : public Slist
 {
+ typedef Slist slist_type;
    bucket_impl()
    {}
 
@@ -69,28 +70,6 @@
       //Slist::clear();
       return *this;
    }
-
- static typename Slist::difference_type get_bucket_num
- ( typename Slist::const_iterator it
- , const bucket_impl<Slist> &first_bucket
- , const bucket_impl<Slist> &last_bucket)
- {
- typename Slist::const_iterator
- first(first_bucket.cend()), last(last_bucket.cend());
-
- //The end node is embedded in the singly linked list:
- //iterate until we reach it.
- while(!(first.pointed_node() <= it.pointed_node() &&
- it.pointed_node() <= last.pointed_node())){
- ++it;
- }
- //Now get the bucket_impl from the iterator
- const bucket_impl &b = static_cast<const bucket_impl&>
- (Slist::container_from_end_iterator(it));
-
- //Now just calculate the index b has in the bucket array
- return &b - &first_bucket;
- }
 };
 
 template<class Slist>
@@ -125,13 +104,16 @@
             <typename Container::value_type, IsConst>::type
>
 {
- typedef typename Container::real_value_traits real_value_traits;
- typedef typename Container::siterator siterator;
- typedef typename Container::const_siterator const_siterator;
- typedef typename Container::bucket_type bucket_type;
+ typedef typename Container::real_value_traits real_value_traits;
+ typedef typename Container::siterator siterator;
+ typedef typename Container::const_siterator const_siterator;
+ typedef typename Container::bucket_type bucket_type;
    typedef typename boost::pointer_to_other
- < typename Container::pointer, const Container>::type const_cont_ptr;
- typedef typename Container::size_type size_type;
+ < typename Container::pointer, const Container>::type const_cont_ptr;
+ typedef typename Container::size_type size_type;
+
+ static typename Container::node_ptr downcast_bucket(typename bucket_type::node_ptr p)
+ { return typename Container::node_ptr(&static_cast<typename Container::node&>(*p)); }
 
    public:
    typedef typename detail::add_const_if_c
@@ -172,7 +154,7 @@
    { return *this->operator ->(); }
 
    value_type* operator->() const
- { return detail::get_pointer(this->get_real_value_traits()->to_value_ptr(slist_it_.pointed_node())); }
+ { return detail::get_pointer(this->get_real_value_traits()->to_value_ptr(downcast_bucket(slist_it_.pointed_node()))); }
 
    const Container *get_container() const
    { return detail::get_pointer(cont_); }
@@ -186,17 +168,19 @@
       const Container *cont = detail::get_pointer(cont_);
       bucket_type* buckets = detail::get_pointer(cont->bucket_pointer());
       size_type buckets_len = cont->bucket_count();
- const_siterator first(buckets[0].cend());
- const_siterator last (buckets[buckets_len].cend());
 
       ++slist_it_;
- if(first.pointed_node() <= slist_it_.pointed_node() &&
- slist_it_.pointed_node()<= last.pointed_node() ){
- size_type n_bucket = (size_type)
- bucket_type::get_bucket_num(slist_it_, buckets[0], buckets[buckets_len]);
+ if(buckets[0].cend().pointed_node() <= slist_it_.pointed_node() &&
+ slist_it_.pointed_node()<= buckets[buckets_len].cend().pointed_node() ){
+ //Now get the bucket_impl from the iterator
+ const bucket_type &b = static_cast<const bucket_type&>
+ (bucket_type::slist_type::container_from_end_iterator(slist_it_));
+
+ //Now just calculate the index b has in the bucket array
+ size_type n_bucket = static_cast<size_type>(&b - &buckets[0]);
          do{
             if (++n_bucket == buckets_len){
- slist_it_ = buckets->end();
+ slist_it_ = (&buckets[0] + buckets_len)->end();
                break;
             }
             slist_it_ = buckets[n_bucket].begin();

Modified: branches/CMake/release/boost/intrusive/detail/list_node.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/list_node.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/list_node.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -18,7 +18,6 @@
 #include <iterator>
 #include <boost/intrusive/detail/assert.hpp>
 #include <boost/intrusive/detail/pointer_to_other.hpp>
-#include <boost/intrusive/circular_list_algorithms.hpp>
 
 namespace boost {
 namespace intrusive {
@@ -32,7 +31,8 @@
 {
    typedef typename boost::pointer_to_other
       <VoidPointer, list_node>::type node_ptr;
- node_ptr prev_, next_;
+ node_ptr next_;
+ node_ptr prev_;
 };
 
 template<class VoidPointer>
@@ -85,7 +85,7 @@
    typedef value_type * pointer;
 
    list_iterator()
- : members_ (0, 0)
+ : members_ (node_ptr(0), 0)
    {}
 
    explicit list_iterator(node_ptr node, const Container *cont_ptr)

Modified: branches/CMake/release/boost/intrusive/detail/mpl.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/mpl.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/mpl.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -13,6 +13,8 @@
 #ifndef BOOST_INTRUSIVE_DETAIL_MPL_HPP
 #define BOOST_INTRUSIVE_DETAIL_MPL_HPP
 
+#include <cstddef>
+
 namespace boost {
 namespace intrusive {
 namespace detail {
@@ -290,6 +292,24 @@
    static const bool value = sizeof(empty_helper_t1<Class>) == sizeof(empty_helper_t2);
 };
 
+template<std::size_t S>
+struct ls_zeros
+{
+ static const std::size_t value = (S & std::size_t(1)) ? 0 : (1 + ls_zeros<(S>>1u)>::value);
+};
+
+template<>
+struct ls_zeros<0>
+{
+ static const std::size_t value = 0;
+};
+
+template<>
+struct ls_zeros<1>
+{
+ static const std::size_t value = 0;
+};
+
 } //namespace detail
 } //namespace intrusive
 } //namespace boost

Deleted: branches/CMake/release/boost/intrusive/detail/no_exceptions_support.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/no_exceptions_support.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
+++ (empty file)
@@ -1,28 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-//
-// (C) Copyright Ion Gaztanaga 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)
-//
-// See http://www.boost.org/libs/intrusive for documentation.
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef BOOST_INTRUSIVE_NO_EXCEPTION_SUPPORT_HPP
-
-#if !(defined BOOST_INTRUSIVE_DISABLE_EXCEPTION_HANDLING)
-# include <boost/detail/no_exceptions_support.hpp>
-# define BOOST_INTRUSIVE_TRY BOOST_TRY
-# define BOOST_INTRUSIVE_CATCH(x) BOOST_CATCH(x)
-# define BOOST_INTRUSIVE_RETHROW BOOST_RETHROW
-# define BOOST_INTRUSIVE_CATCH_END BOOST_CATCH_END
-#else
-# define BOOST_INTRUSIVE_TRY { if (true)
-# define BOOST_INTRUSIVE_CATCH(x) else if (false)
-# define BOOST_INTRUSIVE_RETHROW
-# define BOOST_INTRUSIVE_CATCH_END }
-#endif
-
-#endif //#ifndef BOOST_INTRUSIVE_NO_EXCEPTION_SUPPORT_HPP

Modified: branches/CMake/release/boost/intrusive/detail/parent_from_member.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/parent_from_member.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/parent_from_member.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -13,25 +13,30 @@
 #define BOOST_INTRUSIVE_PARENT_FROM_MEMBER_HPP
 
 #include <boost/intrusive/detail/config_begin.hpp>
-#include <boost/static_assert.hpp>
 #include <cstddef>
 
+#if defined(BOOST_MSVC) || (defined (BOOST_WINDOWS) && defined(BOOST_INTEL))
+#define BOOST_INTRUSIVE_MSVC_COMPLIANT_PTR_TO_MEMBER
+#include <boost/cstdint.hpp>
+#endif
+
 namespace boost {
 namespace intrusive {
 namespace detail {
 
 template<class Parent, class Member>
-inline std::size_t offset_from_pointer_to_member(const Member Parent::* ptr_to_member)
+inline std::ptrdiff_t offset_from_pointer_to_member(const Member Parent::* ptr_to_member)
 {
- //BOOST_STATIC_ASSERT(( sizeof(std::ptrdiff_t) == sizeof(ptr_to_member) ));
    //The implementation of a pointer to member is compiler dependent.
- #if defined(BOOST_MSVC) || (defined (BOOST_WINDOWS) && defined(BOOST_INTEL))
+ #if defined(BOOST_INTRUSIVE_MSVC_COMPLIANT_PTR_TO_MEMBER)
+ //msvc compliant compilers use their the first 32 bits as offset (even in 64 bit mode)
+ return *(const boost::int32_t*)(void*)&ptr_to_member;
    //This works with gcc, msvc, ac++, ibmcpp
- return *(const std::ptrdiff_t*)(void*)&ptr_to_member;
- #elif defined(__GNUC__) || defined(__HP_aCC) || defined(BOOST_INTEL) || defined (__IBMCPP__) || defined (__DECCXX)
+ #elif defined(__GNUC__) || defined(__HP_aCC) || defined(BOOST_INTEL) || \
+ defined(__IBMCPP__) || defined(__DECCXX)
    const Parent * const parent = 0;
    const char *const member = reinterpret_cast<const char*>(&(parent->*ptr_to_member));
- return std::size_t(member - reinterpret_cast<const char*>(parent));
+ return std::ptrdiff_t(member - reinterpret_cast<const char*>(parent));
    #else
    //This is the traditional C-front approach: __MWERKS__, __DMC__, __SUNPRO_CC
    return (*(const std::ptrdiff_t*)(void*)&ptr_to_member) - 1;
@@ -56,6 +61,10 @@
 } //namespace intrusive {
 } //namespace boost {
 
+#ifdef BOOST_INTRUSIVE_MSVC_COMPLIANT_PTR_TO_MEMBER
+#undef BOOST_INTRUSIVE_MSVC_COMPLIANT_PTR_TO_MEMBER
+#endif
+
 #include <boost/intrusive/detail/config_end.hpp>
 
 #endif //#ifndef BOOST_INTRUSIVE_PARENT_FROM_MEMBER_HPP

Modified: branches/CMake/release/boost/intrusive/detail/rbtree_node.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/rbtree_node.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/rbtree_node.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -18,7 +18,7 @@
 #include <iterator>
 #include <boost/intrusive/detail/pointer_to_other.hpp>
 #include <boost/intrusive/rbtree_algorithms.hpp>
-#include <boost/intrusive/pointer_plus_bit.hpp>
+#include <boost/intrusive/pointer_plus_bits.hpp>
 #include <boost/intrusive/detail/mpl.hpp>
 
 namespace boost {
@@ -110,7 +110,7 @@
    typedef typename boost::pointer_to_other
       <VoidPointer, const node>::type const_node_ptr;
 
- typedef pointer_plus_bit<node_ptr> ptr_bit;
+ typedef pointer_plus_bits<node_ptr, 1> ptr_bit;
 
    typedef typename node::color color;
 
@@ -133,10 +133,10 @@
    { n->right_ = r; }
 
    static color get_color(const_node_ptr n)
- { return (color)ptr_bit::get_bit(n->parent_); }
+ { return (color)ptr_bit::get_bits(n->parent_); }
 
    static void set_color(node_ptr n, color c)
- { ptr_bit::set_bit(n->parent_, c != 0); }
+ { ptr_bit::set_bits(n->parent_, c != 0); }
 
    static color black()
    { return node::black_t; }
@@ -146,7 +146,7 @@
 };
 
 //Dispatches the implementation based on the boolean
-template<class VoidPointer, bool compact>
+template<class VoidPointer, bool Compact>
 struct rbtree_node_traits_dispatch
    : public default_rbtree_node_traits_impl<VoidPointer>
 {};
@@ -161,11 +161,11 @@
 struct rbtree_node_traits
    : public rbtree_node_traits_dispatch
          < VoidPointer
- , OptimizeSize &&
- has_pointer_plus_bit
+ , OptimizeSize &&
+ (max_pointer_plus_bits
             < VoidPointer
             , detail::alignment_of<compact_rbtree_node<VoidPointer> >::value
- >::value
+ >::value >= 1)
>
 {};
 

Modified: branches/CMake/release/boost/intrusive/detail/slist_node.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/slist_node.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/slist_node.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -18,7 +18,6 @@
 #include <iterator>
 #include <boost/intrusive/detail/assert.hpp>
 #include <boost/intrusive/detail/pointer_to_other.hpp>
-#include <boost/intrusive/circular_slist_algorithms.hpp>
 
 namespace boost {
 namespace intrusive {
@@ -78,7 +77,7 @@
    typedef value_type * pointer;
 
    slist_iterator()
- : members_ (0, 0)
+ : members_ (node_ptr(0), 0)
    {}
 
    explicit slist_iterator(node_ptr node, const Container *cont_ptr)

Modified: branches/CMake/release/boost/intrusive/detail/tree_algorithms.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/tree_algorithms.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/tree_algorithms.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -17,7 +17,6 @@
 #include <boost/intrusive/detail/assert.hpp>
 #include <boost/intrusive/intrusive_fwd.hpp>
 #include <cstddef>
-#include <boost/intrusive/detail/no_exceptions_support.hpp>
 #include <boost/intrusive/detail/utilities.hpp>
 
 namespace boost {
@@ -95,12 +94,8 @@
 template<class NodeTraits>
 class tree_algorithms
 {
- /// @cond
- private:
- typedef typename NodeTraits::node node;
- /// @endcond
-
    public:
+ typedef typename NodeTraits::node node;
    typedef NodeTraits node_traits;
    typedef typename NodeTraits::node_ptr node_ptr;
    typedef typename NodeTraits::const_node_ptr const_node_ptr;
@@ -123,6 +118,26 @@
 
    /// @cond
    private:
+ template<class Disposer>
+ struct dispose_subtree_disposer
+ {
+ dispose_subtree_disposer(Disposer &disp, node_ptr subtree)
+ : disposer_(&disp), subtree_(subtree)
+ {}
+
+ void release()
+ { disposer_ = 0; }
+
+ ~dispose_subtree_disposer()
+ {
+ if(disposer_){
+ dispose_subtree(subtree_, *disposer_);
+ }
+ }
+ Disposer *disposer_;
+ node_ptr subtree_;
+ };
+
    static node_ptr uncast(const_node_ptr ptr)
    {
       return node_ptr(const_cast<node*>(::boost::intrusive::detail::get_pointer(ptr)));
@@ -505,9 +520,21 @@
    //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
    static void init(node_ptr node)
    {
- NodeTraits::set_parent(node, 0);
- NodeTraits::set_left(node, 0);
- NodeTraits::set_right(node, 0);
+ NodeTraits::set_parent(node, node_ptr(0));
+ NodeTraits::set_left(node, node_ptr(0));
+ NodeTraits::set_right(node, node_ptr(0));
+ };
+
+ //! <b>Effects</b>: Returns true if node is in the same state as if called init(node)
+ //!
+ //! <b>Complexity</b>: Constant.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static bool inited(const_node_ptr node)
+ {
+ return !NodeTraits::get_parent(node) &&
+ !NodeTraits::get_left(node) &&
+ !NodeTraits::get_right(node) ;
    };
 
    //! <b>Requires</b>: node must not be part of any tree.
@@ -522,7 +549,7 @@
    //! <b>Nodes</b>: If node is inserted in a tree, this function corrupts the tree.
    static void init_header(node_ptr header)
    {
- NodeTraits::set_parent(header, 0);
+ NodeTraits::set_parent(header, node_ptr(0));
       NodeTraits::set_left(header, header);
       NodeTraits::set_right(header, header);
    }
@@ -565,7 +592,7 @@
    {
       node_ptr leftmost = NodeTraits::get_left(header);
       if (leftmost == header)
- return 0;
+ return node_ptr(0);
       node_ptr leftmost_parent(NodeTraits::get_parent(leftmost));
       node_ptr leftmost_right (NodeTraits::get_right(leftmost));
       bool is_root = leftmost_parent == header;
@@ -580,12 +607,12 @@
             NodeTraits::set_left(NodeTraits::get_parent(header), leftmost_right);
       }
       else if (is_root){
- NodeTraits::set_parent(header, 0);
+ NodeTraits::set_parent(header, node_ptr(0));
          NodeTraits::set_left(header, header);
          NodeTraits::set_right(header, header);
       }
       else{
- NodeTraits::set_left(leftmost_parent, 0);
+ NodeTraits::set_left(leftmost_parent, node_ptr(0));
          NodeTraits::set_left(header, leftmost_parent);
       }
       return leftmost;
@@ -1143,58 +1170,54 @@
          node_ptr rightmost = target_sub_root;
 
          //First set the subroot
- NodeTraits::set_left(target_sub_root, 0);
- NodeTraits::set_right(target_sub_root, 0);
+ NodeTraits::set_left(target_sub_root, node_ptr(0));
+ NodeTraits::set_right(target_sub_root, node_ptr(0));
          NodeTraits::set_parent(target_sub_root, target_parent);
 
- try {
- while(true) {
- //First clone left nodes
- if( NodeTraits::get_left(current) &&
- !NodeTraits::get_left(insertion_point)) {
- current = NodeTraits::get_left(current);
- node_ptr temp = insertion_point;
- //Clone and mark as leaf
- insertion_point = cloner(current);
- NodeTraits::set_left (insertion_point, 0);
- NodeTraits::set_right (insertion_point, 0);
- //Insert left
- NodeTraits::set_parent(insertion_point, temp);
- NodeTraits::set_left (temp, insertion_point);
- //Update leftmost
- if(rightmost == target_sub_root)
- leftmost = insertion_point;
- }
- //Then clone right nodes
- else if( NodeTraits::get_right(current) &&
- !NodeTraits::get_right(insertion_point)){
- current = NodeTraits::get_right(current);
- node_ptr temp = insertion_point;
- //Clone and mark as leaf
- insertion_point = cloner(current);
- NodeTraits::set_left (insertion_point, 0);
- NodeTraits::set_right (insertion_point, 0);
- //Insert right
- NodeTraits::set_parent(insertion_point, temp);
- NodeTraits::set_right (temp, insertion_point);
- //Update rightmost
- rightmost = insertion_point;
- }
- //If not, go up
- else if(current == source_root){
- break;
- }
- else{
- //Branch completed, go up searching more nodes to clone
- current = NodeTraits::get_parent(current);
- insertion_point = NodeTraits::get_parent(insertion_point);
- }
+ dispose_subtree_disposer<Disposer> rollback(disposer, target_sub_root);
+ while(true) {
+ //First clone left nodes
+ if( NodeTraits::get_left(current) &&
+ !NodeTraits::get_left(insertion_point)) {
+ current = NodeTraits::get_left(current);
+ node_ptr temp = insertion_point;
+ //Clone and mark as leaf
+ insertion_point = cloner(current);
+ NodeTraits::set_left (insertion_point, node_ptr(0));
+ NodeTraits::set_right (insertion_point, node_ptr(0));
+ //Insert left
+ NodeTraits::set_parent(insertion_point, temp);
+ NodeTraits::set_left (temp, insertion_point);
+ //Update leftmost
+ if(rightmost == target_sub_root)
+ leftmost = insertion_point;
+ }
+ //Then clone right nodes
+ else if( NodeTraits::get_right(current) &&
+ !NodeTraits::get_right(insertion_point)){
+ current = NodeTraits::get_right(current);
+ node_ptr temp = insertion_point;
+ //Clone and mark as leaf
+ insertion_point = cloner(current);
+ NodeTraits::set_left (insertion_point, node_ptr(0));
+ NodeTraits::set_right (insertion_point, node_ptr(0));
+ //Insert right
+ NodeTraits::set_parent(insertion_point, temp);
+ NodeTraits::set_right (temp, insertion_point);
+ //Update rightmost
+ rightmost = insertion_point;
+ }
+ //If not, go up
+ else if(current == source_root){
+ break;
+ }
+ else{
+ //Branch completed, go up searching more nodes to clone
+ current = NodeTraits::get_parent(current);
+ insertion_point = NodeTraits::get_parent(insertion_point);
             }
          }
- catch(...) {
- dispose_subtree(target_sub_root, disposer);
- throw;
- }
+ rollback.release();
          leftmost_out = leftmost;
          rightmost_out = rightmost;
       }
@@ -1321,8 +1344,8 @@
              NodeTraits::set_right(header, z);
       }
       NodeTraits::set_parent(z, par);
- NodeTraits::set_right(z, 0);
- NodeTraits::set_left(z, 0);
+ NodeTraits::set_right(z, node_ptr(0));
+ NodeTraits::set_left(z, node_ptr(0));
    }
 
    static void erase(node_ptr header, node_ptr z)
@@ -1384,7 +1407,7 @@
    {
       std::size_t len;
       len = 0;
- if(!old_root) return 0;
+ if(!old_root) return node_ptr(0);
 
       //To avoid irregularities in the algorithm (old_root can be a
       //left or right child or even the root of the tree) just put the
@@ -1392,8 +1415,8 @@
       //information to restore the original relationship after
       //the algorithm is applied.
       node_ptr super_root = NodeTraits::get_parent(old_root);
- assert(super_root);
-
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(super_root);
+
       //Get info
       node_ptr super_root_right_backup = NodeTraits::get_right(super_root);
       bool super_root_is_header = is_header(super_root);
@@ -1464,7 +1487,7 @@
       //information to restore the original relationship after
       //the algorithm is applied.
       node_ptr super_root = NodeTraits::get_parent(old_root);
- assert(super_root);
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(super_root);
 
       //Get info
       node_ptr super_root_right_backup = NodeTraits::get_right(super_root);
@@ -1511,6 +1534,28 @@
       return new_root;
    }
 
+ //! <b>Requires</b>: "n" must be a node inserted in a tree.
+ //!
+ //! <b>Effects</b>: Returns a pointer to the header node of the tree.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr get_root(node_ptr node)
+ {
+ BOOST_INTRUSIVE_INVARIANT_ASSERT((!inited(node)));
+ node_ptr x = NodeTraits::get_parent(node);
+ if(x){
+ while(!is_header(x)){
+ x = NodeTraits::get_parent(x);
+ }
+ return x;
+ }
+ else{
+ return node;
+ }
+ }
+
    private:
    static void erase_impl(node_ptr header, node_ptr z, data_for_rebalance &info)
    {
@@ -1569,7 +1614,6 @@
       info.x_parent = x_parent;
       info.y = y;
    }
-
 };
 
 } //namespace detail {

Modified: branches/CMake/release/boost/intrusive/detail/tree_node.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/tree_node.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/tree_node.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -168,6 +168,11 @@
          return 0;
    }
 
+ tree_iterator end_iterator_from_it() const
+ {
+ return tree_iterator(node_algorithms::get_header(this->pointed_node()), this->get_container());
+ }
+
    private:
    struct members
       : public detail::select_constptr

Modified: branches/CMake/release/boost/intrusive/detail/utilities.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/detail/utilities.hpp (original)
+++ branches/CMake/release/boost/intrusive/detail/utilities.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -25,6 +25,7 @@
 #include <climits>
 #include <iterator>
 #include <boost/cstdint.hpp>
+#include <boost/static_assert.hpp>
 
 namespace boost {
 namespace intrusive {
@@ -56,6 +57,24 @@
 };
 
 template <class T>
+struct internal_any_hook_bool
+{
+ template<bool Add>
+ struct two_or_three {one _[2 + Add];};
+ template <class U> static one test(...);
+ template <class U> static two_or_three<U::is_any_hook>
+ test (detail::bool_<U::is_any_hook>* = 0);
+ static const std::size_t value = sizeof(test<T>(0));
+};
+
+template <class T>
+struct internal_any_hook_bool_is_true
+{
+ static const bool value = internal_any_hook_bool<T>::value > sizeof(one)*2;
+};
+
+
+template <class T>
 struct external_value_traits_bool
 {
    template<bool Add>
@@ -235,16 +254,9 @@
    node_cloner(F f, const Container *cont)
       : base_t(f), cont_(cont)
    {}
-
+
    node_ptr operator()(node_ptr p)
- {
- node_ptr n = cont_->get_real_value_traits().to_node_ptr
- (*base_t::get()(*cont_->get_real_value_traits().to_value_ptr(p)));
- //Cloned node must be in default mode if the linking mode requires it
- if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(n));
- return n;
- }
+ { return this->operator()(*p); }
 
    node_ptr operator()(const node &to_clone)
    {
@@ -396,16 +408,20 @@
 struct link_dispatch
 {};
 
-template<class Container>
-void destructor_impl(Container &cont, detail::link_dispatch<safe_link>)
-{ (void)cont; BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT(!cont.is_linked()); }
-
-template<class Container>
-void destructor_impl(Container &cont, detail::link_dispatch<auto_unlink>)
-{ cont.unlink(); }
+template<class Hook>
+void destructor_impl(Hook &hook, detail::link_dispatch<safe_link>)
+{ //If this assertion raises, you might have destroyed an object
+ //while it was still inserted in a container that is alive.
+ //If so, remove the object from the container before destroying it.
+ (void)hook; BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT(!hook.is_linked());
+}
+
+template<class Hook>
+void destructor_impl(Hook &hook, detail::link_dispatch<auto_unlink>)
+{ hook.unlink(); }
 
-template<class Container>
-void destructor_impl(Container &, detail::link_dispatch<normal_link>)
+template<class Hook>
+void destructor_impl(Hook &, detail::link_dispatch<normal_link>)
 {}
 
 template<class T, class NodeTraits, link_mode_type LinkMode, class Tag, int HookType>
@@ -548,6 +564,62 @@
    return (value >> (pow - x)) + 1;
 }
 
+template<class Container, class Disposer>
+class exception_disposer
+{
+ Container *cont_;
+ Disposer &disp_;
+
+ exception_disposer(const exception_disposer&);
+ exception_disposer &operator=(const exception_disposer&);
+
+ public:
+ exception_disposer(Container &cont, Disposer &disp)
+ : cont_(&cont), disp_(disp)
+ {}
+
+ void release()
+ { cont_ = 0; }
+
+ ~exception_disposer()
+ {
+ if(cont_){
+ cont_->clear_and_dispose(disp_);
+ }
+ }
+};
+
+template<class Container, class Disposer>
+class exception_array_disposer
+{
+ Container *cont_;
+ Disposer &disp_;
+ typename Container::size_type &constructed_;
+
+ exception_array_disposer(const exception_array_disposer&);
+ exception_array_disposer &operator=(const exception_array_disposer&);
+
+ public:
+ typedef typename Container::size_type size_type;
+ exception_array_disposer
+ (Container &cont, Disposer &disp, size_type &constructed)
+ : cont_(&cont), disp_(disp), constructed_(constructed)
+ {}
+
+ void release()
+ { cont_ = 0; }
+
+ ~exception_array_disposer()
+ {
+ size_type n = constructed_;
+ if(cont_){
+ while(n--){
+ cont_[n].clear_and_dispose(disp_);
+ }
+ }
+ }
+};
+
 } //namespace detail
 } //namespace intrusive
 } //namespace boost

Modified: branches/CMake/release/boost/intrusive/hashtable.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/hashtable.hpp (original)
+++ branches/CMake/release/boost/intrusive/hashtable.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -14,15 +14,15 @@
 
 #include <boost/intrusive/detail/config_begin.hpp>
 //std C++
-#include <functional>
-#include <utility>
-#include <algorithm>
-#include <cstddef>
+#include <functional> //std::equal_to
+#include <utility> //std::pair
+#include <algorithm> //std::swap, std::lower_bound, std::upper_bound
+#include <cstddef> //std::size_t
+#include <iterator> //std::iterator_traits
 //boost
 #include <boost/intrusive/detail/assert.hpp>
 #include <boost/static_assert.hpp>
 #include <boost/functional/hash.hpp>
-#include <boost/intrusive/detail/no_exceptions_support.hpp>
 //General intrusive utilities
 #include <boost/intrusive/intrusive_fwd.hpp>
 #include <boost/intrusive/detail/pointer_to_other.hpp>
@@ -34,13 +34,107 @@
 #include <boost/intrusive/trivial_value_traits.hpp>
 #include <boost/intrusive/unordered_set_hook.hpp>
 #include <boost/intrusive/slist.hpp>
+#include <boost/intrusive/detail/mpl.hpp>
 
 namespace boost {
 namespace intrusive {
 
 /// @cond
 
-namespace detail{
+namespace detail {
+
+template <class NodeTraits>
+struct hash_reduced_slist_node_traits
+{
+ template <class U> static detail::one test(...);
+ template <class U> static detail::two test(typename U::reduced_slist_node_traits* = 0);
+ static const bool value = sizeof(test<NodeTraits>(0)) == sizeof(detail::two);
+};
+
+template <class NodeTraits>
+struct apply_reduced_slist_node_traits
+{
+ typedef typename NodeTraits::reduced_slist_node_traits type;
+};
+
+template <class NodeTraits>
+struct reduced_slist_node_traits
+{
+ typedef typename detail::eval_if_c
+ < hash_reduced_slist_node_traits<NodeTraits>::value
+ , apply_reduced_slist_node_traits<NodeTraits>
+ , detail::identity<NodeTraits>
+ >::type type;
+};
+
+template<class NodeTraits>
+struct get_slist_impl
+{
+ typedef trivial_value_traits<NodeTraits, normal_link> trivial_traits;
+
+ //Reducing symbol length
+ struct type : make_slist
+ < typename NodeTraits::node
+ , boost::intrusive::value_traits<trivial_traits>
+ , boost::intrusive::constant_time_size<false>
+ , boost::intrusive::size_type<std::size_t>
+ >::type
+ {};
+};
+
+template<class SupposedValueTraits>
+struct real_from_supposed_value_traits
+{
+ typedef typename detail::eval_if_c
+ < detail::external_value_traits_is_true
+ <SupposedValueTraits>::value
+ , detail::eval_value_traits
+ <SupposedValueTraits>
+ , detail::identity
+ <SupposedValueTraits>
+ >::type type;
+};
+
+template<class SupposedValueTraits>
+struct get_slist_impl_from_supposed_value_traits
+{
+ typedef typename
+ real_from_supposed_value_traits
+ < SupposedValueTraits>::type real_value_traits;
+ typedef typename detail::get_node_traits
+ <real_value_traits>::type node_traits;
+ typedef typename get_slist_impl
+ <typename reduced_slist_node_traits
+ <node_traits>::type
+ >::type type;
+};
+
+
+template<class SupposedValueTraits>
+struct unordered_bucket_impl
+{
+ /// @cond
+ typedef typename
+ get_slist_impl_from_supposed_value_traits
+ <SupposedValueTraits>::type slist_impl;
+ typedef detail::bucket_impl<slist_impl> implementation_defined;
+ /// @endcond
+ typedef implementation_defined type;
+};
+
+template<class SupposedValueTraits>
+struct unordered_bucket_ptr_impl
+{
+ /// @cond
+ typedef typename detail::get_node_traits
+ <SupposedValueTraits>::type::node_ptr node_ptr;
+ typedef typename unordered_bucket_impl
+ <SupposedValueTraits>::type bucket_type;
+ typedef typename boost::pointer_to_other
+ <node_ptr, bucket_type>::type implementation_defined;
+ /// @endcond
+ typedef implementation_defined type;
+};
 
 template <class T>
 struct store_hash_bool
@@ -59,6 +153,23 @@
    static const bool value = store_hash_bool<T>::value > sizeof(one)*2;
 };
 
+template <class T>
+struct optimize_multikey_bool
+{
+ template<bool Add>
+ struct two_or_three {one _[2 + Add];};
+ template <class U> static one test(...);
+ template <class U> static two_or_three<U::optimize_multikey>
+ test (detail::bool_<U::optimize_multikey>* = 0);
+ static const std::size_t value = sizeof(test<T>(0));
+};
+
+template <class T>
+struct optimize_multikey_is_true
+{
+ static const bool value = optimize_multikey_bool<T>::value > sizeof(one)*2;
+};
+
 template<class Config>
 struct bucket_plus_size
    : public detail::size_holder
@@ -92,7 +203,7 @@
    bucket_plus_size<Config> bucket_plus_size_;
 };
 
-template<class Config>
+template<class Config, bool>
 struct bucket_hash_equal_t : public detail::ebo_functor_holder<typename Config::equal>
 {
    typedef typename Config::equal equal;
@@ -105,22 +216,42 @@
    bucket_hash_t<Config> bucket_hash;
 };
 
+template<class Config> //cache_begin == true version
+struct bucket_hash_equal_t<Config, true>
+ : public detail::ebo_functor_holder<typename Config::equal>
+{
+ typedef typename Config::equal equal;
+ typedef typename Config::hash hasher;
+ typedef typename Config::bucket_traits bucket_traits;
+ typedef typename unordered_bucket_ptr_impl
+ <typename Config::value_traits>::type bucket_ptr;
+
+ bucket_hash_equal_t(const bucket_traits &b_traits, const hasher & h, const equal &e)
+ : detail::ebo_functor_holder<typename Config::equal>(e), bucket_hash(b_traits, h)
+ {}
+ bucket_hash_t<Config> bucket_hash;
+ bucket_ptr cached_begin_;
+};
+
 template<class Config>
-struct data_t : public Config::value_traits
+struct hashtable_data_t : public Config::value_traits
 {
    typedef typename Config::value_traits value_traits;
    typedef typename Config::equal equal;
    typedef typename Config::hash hasher;
    typedef typename Config::bucket_traits bucket_traits;
 
- data_t( const bucket_traits &b_traits, const hasher & h
- , const equal &e, const value_traits &val_traits)
+ hashtable_data_t( const bucket_traits &b_traits, const hasher & h
+ , const equal &e, const value_traits &val_traits)
       : Config::value_traits(val_traits), bucket_hash_equal_(b_traits, h, e)
    {}
- bucket_hash_equal_t<Config> bucket_hash_equal_;
+ bucket_hash_equal_t<Config, Config::cache_begin> bucket_hash_equal_;
 };
 
-} //namespace detail {
+struct insert_commit_data_impl
+{
+ std::size_t hash;
+};
 
 template <class T>
 struct internal_default_uset_hook
@@ -130,6 +261,49 @@
    static const bool value = sizeof(test<T>(0)) == sizeof(detail::two);
 };
 
+} //namespace detail {
+
+//!This metafunction will obtain the type of a bucket
+//!from the value_traits or hook option to be used with
+//!a hash container.
+template<class ValueTraitsOrHookOption>
+struct unordered_bucket
+ : public detail::unordered_bucket_impl
+ <typename ValueTraitsOrHookOption::
+ template pack<none>::value_traits
+ >
+{};
+
+//!This metafunction will obtain the type of a bucket pointer
+//!from the value_traits or hook option to be used with
+//!a hash container.
+template<class ValueTraitsOrHookOption>
+struct unordered_bucket_ptr
+ : public detail::unordered_bucket_ptr_impl
+ <typename ValueTraitsOrHookOption::
+ template pack<none>::value_traits
+ >
+{};
+
+//!This metafunction will obtain the type of the default bucket traits
+//!(when the user does not specify the bucket_traits<> option) from the
+//!value_traits or hook option to be used with
+//!a hash container.
+template<class ValueTraitsOrHookOption>
+struct unordered_default_bucket_traits
+{
+ /// @cond
+ typedef typename ValueTraitsOrHookOption::
+ template pack<none>::value_traits supposed_value_traits;
+ typedef typename detail::
+ get_slist_impl_from_supposed_value_traits
+ <supposed_value_traits>::type slist_impl;
+ typedef detail::bucket_traits_impl
+ <slist_impl> implementation_defined;
+ /// @endcond
+ typedef implementation_defined type;
+};
+
 template <class T>
 struct get_default_uset_hook
 {
@@ -137,12 +311,15 @@
 };
 
 template < class ValueTraits
+ , bool UniqueKeys
          , class Hash
          , class Equal
          , class SizeType
          , bool ConstantTimeSize
          , class BucketTraits
          , bool Power2Buckets
+ , bool CacheBegin
+ , bool CompareHash
>
 struct usetopt
 {
@@ -153,6 +330,9 @@
    typedef BucketTraits bucket_traits;
    static const bool constant_time_size = ConstantTimeSize;
    static const bool power_2_buckets = Power2Buckets;
+ static const bool unique_keys = UniqueKeys;
+ static const bool cache_begin = CacheBegin;
+ static const bool compare_hash = CompareHash;
 };
 
 struct default_bucket_traits;
@@ -163,7 +343,7 @@
       < none
       , base_hook
          < typename detail::eval_if_c
- < internal_default_uset_hook<T>::value
+ < detail::internal_default_uset_hook<T>::value
                , get_default_uset_hook<T>
                , detail::identity<none>
>::type
@@ -174,80 +354,18 @@
       , hash<boost::hash<T> >
       , bucket_traits<default_bucket_traits>
       , power_2_buckets<false>
+ , cache_begin<false>
+ , compare_hash<false>
>::type
 {};
 
-template<class NodeTraits>
-struct get_slist_impl
-{
- typedef trivial_value_traits<NodeTraits, normal_link> trivial_traits;
-
- //Reducing symbol length
- struct type : make_slist
- < typename NodeTraits::node
- , boost::intrusive::value_traits<trivial_traits>
- , boost::intrusive::constant_time_size<false>
- , boost::intrusive::size_type<std::size_t>
- >::type
- {};
-};
-
 /// @endcond
 
-template<class ValueTraitsOrHookOption>
-struct unordered_bucket
-{
- /// @cond
- typedef typename ValueTraitsOrHookOption::
- template pack<none>::value_traits supposed_value_traits;
-
- typedef typename detail::eval_if_c
- < detail::external_value_traits_is_true
- <supposed_value_traits>::value
- , detail::eval_value_traits
- <supposed_value_traits>
- , detail::identity
- <supposed_value_traits>
- >::type real_value_traits;
-
- typedef typename detail::get_node_traits
- <real_value_traits>::type node_traits;
- typedef typename get_slist_impl
- <node_traits>::type slist_impl;
- typedef detail::bucket_impl<slist_impl> implementation_defined;
- /// @endcond
- typedef implementation_defined type;
-};
-
-template<class ValueTraitsOrHookOption>
-struct unordered_bucket_ptr
-{
- /// @cond
- typedef typename ValueTraitsOrHookOption::
- template pack<none>::value_traits supposed_value_traits;
- typedef typename detail::eval_if_c
- < detail::external_value_traits_is_true
- <supposed_value_traits>::value
- , detail::eval_value_traits
- <supposed_value_traits>
- , detail::identity
- <supposed_value_traits>
- >::type real_value_traits;
- typedef typename detail::get_node_traits
- <supposed_value_traits>::type::node_ptr node_ptr;
- typedef typename unordered_bucket
- <ValueTraitsOrHookOption>::type bucket_type;
- typedef typename boost::pointer_to_other
- <node_ptr, bucket_type>::type implementation_defined;
- /// @endcond
- typedef implementation_defined type;
-};
-
 //! The class template hashtable is an intrusive hash table container, that
 //! is used to construct intrusive unordered_set and unordered_multiset containers. The
 //! no-throw guarantee holds only, if the Equal object and Hasher don't throw.
 //!
-//! hashtable is a pseudo-intrusive container: each object to be stored in the
+//! hashtable is a semi-intrusive container: each object to be stored in the
 //! container must contain a proper hook, but the container also needs
 //! additional auxiliary memory to work: hashtable needs a pointer to an array
 //! of type `bucket_type` to be passed in the constructor. This bucket array must
@@ -261,7 +379,8 @@
 //!
 //! The container supports the following options:
 //! \c base_hook<>/member_hook<>/value_traits<>,
-//! \c constant_time_size<>, \c size_type<>, \c hash<> and \c equal<> .
+//! \c constant_time_size<>, \c size_type<>, \c hash<> and \c equal<>
+//! \c bucket_traits<>, power_2_buckets<> and cache_begin<>.
 //!
 //! hashtable only provides forward iterators but it provides 4 iterator types:
 //! iterator and const_iterator to navigate through the whole container and
@@ -284,13 +403,12 @@
 template<class Config>
 #endif
 class hashtable_impl
- : private detail::data_t<Config>
+ : private detail::hashtable_data_t<Config>
 {
    public:
    typedef typename Config::value_traits value_traits;
 
    /// @cond
-
    static const bool external_value_traits =
       detail::external_value_traits_is_true<value_traits>::value;
    typedef typename detail::eval_if_c
@@ -306,8 +424,10 @@
       , detail::eval_bucket_traits<bucket_traits>
       , detail::identity<bucket_traits>
>::type real_bucket_traits;
- typedef typename get_slist_impl
- <typename real_value_traits::node_traits>::type slist_impl;
+ typedef typename detail::get_slist_impl
+ <typename detail::reduced_slist_node_traits
+ <typename real_value_traits::node_traits>::type
+ >::type slist_impl;
    /// @endcond
 
    typedef typename real_value_traits::pointer pointer;
@@ -327,7 +447,7 @@
    typedef typename slist_impl::const_iterator const_siterator;
    typedef detail::hashtable_iterator<hashtable_impl, false> iterator;
    typedef detail::hashtable_iterator<hashtable_impl, true> const_iterator;
- typedef typename real_value_traits::node_traits node_traits;
+ typedef typename real_value_traits::node_traits node_traits;
    typedef typename node_traits::node node;
    typedef typename boost::pointer_to_other
       <pointer, node>::type node_ptr;
@@ -338,19 +458,71 @@
    static const bool constant_time_size = Config::constant_time_size;
    static const bool stateful_value_traits = detail::store_cont_ptr_on_it<hashtable_impl>::value;
    static const bool store_hash = detail::store_hash_is_true<node_traits>::value;
+ static const bool unique_keys = Config::unique_keys;
+ static const bool optimize_multikey
+ = detail::optimize_multikey_is_true<node_traits>::value && !unique_keys;
+ static const bool power_2_buckets = Config::power_2_buckets;
+ static const bool cache_begin = Config::cache_begin;
+ static const bool compare_hash = Config::compare_hash;
 
    /// @cond
    private:
+ //Configuration error: compare_hash<> can't be specified without store_hash<>
+ //See documentation for more explanations
+ BOOST_STATIC_ASSERT((!compare_hash || store_hash));
+
+ typedef typename slist_impl::node_ptr slist_node_ptr;
+ typedef typename boost::pointer_to_other
+ <slist_node_ptr, void>::type void_pointer;
+ //We'll define group traits, but these won't be instantiated if
+ //optimize_multikey is not true
+ typedef unordered_group_adapter<node_traits> group_traits;
+ typedef circular_slist_algorithms<group_traits> group_algorithms;
    typedef detail::bool_<store_hash> store_hash_t;
+ typedef detail::bool_<optimize_multikey> optimize_multikey_t;
+ typedef detail::bool_<cache_begin> cache_begin_t;
+ typedef detail::bool_<power_2_buckets> power_2_buckets_t;
    typedef detail::size_holder<constant_time_size, size_type> size_traits;
- typedef detail::data_t<Config> base_type;
- typedef detail::transform_iterator
- < typename slist_impl::iterator
- , detail::node_to_value<hashtable_impl, false> > local_iterator_impl;
- typedef detail::transform_iterator
- < typename slist_impl::iterator
- , detail::node_to_value<hashtable_impl, true> > const_local_iterator_impl;
+ typedef detail::hashtable_data_t<Config> base_type;
+
+ template<bool IsConst>
+ struct downcast_node_to_value
+ : public detail::node_to_value<hashtable_impl, IsConst>
+ {
+ typedef detail::node_to_value<hashtable_impl, IsConst> base_t;
+ typedef typename base_t::result_type result_type;
+ typedef typename detail::add_const_if_c
+ <typename slist_impl::node, IsConst>::type &first_argument_type;
+ typedef typename detail::add_const_if_c
+ <node, IsConst>::type &intermediate_argument_type;
+
+ downcast_node_to_value(const hashtable_impl *cont)
+ : base_t(cont)
+ {}
+
+ result_type operator()(first_argument_type arg) const
+ { return this->base_t::operator()(static_cast<intermediate_argument_type>(arg)); }
+ };
+
+ template<class F>
+ struct node_cast_adaptor
+ : private detail::ebo_functor_holder<F>
+ {
+ typedef detail::ebo_functor_holder<F> base_t;
+
+ template<class ConvertibleToF>
+ node_cast_adaptor(const ConvertibleToF &c2f, const hashtable_impl *cont)
+ : base_t(base_t(c2f, cont))
+ {}
+
+ typename base_t::node_ptr operator()(const typename slist_impl::node &to_clone)
+ { return base_t::operator()(static_cast<const node &>(to_clone)); }
+
+ void operator()(typename slist_impl::node_ptr to_clone)
+ { base_t::operator()(node_ptr(&static_cast<node &>(*to_clone))); }
+ };
 
+ private:
    //noncopyable
    hashtable_impl (const hashtable_impl&);
    hashtable_impl operator =(const hashtable_impl&);
@@ -362,103 +534,23 @@
    //Constant-time size is incompatible with auto-unlink hooks!
    BOOST_STATIC_ASSERT(!(constant_time_size && ((int)real_value_traits::link_mode == (int)auto_unlink)));
 
- static const bool power_2_buckets = Config::power_2_buckets;
-
- std::size_t from_hash_to_bucket(std::size_t hash_value) const
- { return from_hash_to_bucket(hash_value, detail::bool_<power_2_buckets>()); }
-
- std::size_t from_hash_to_bucket(std::size_t hash_value, detail::bool_<false>) const
- { return hash_value % this->get_real_bucket_traits().bucket_count(); }
-
- std::size_t from_hash_to_bucket(std::size_t hash_value, detail::bool_<true>) const
- { return hash_value & (this->get_real_bucket_traits().bucket_count() - 1); }
-
- const key_equal &priv_equal() const
- { return static_cast<const key_equal&>(this->bucket_hash_equal_.get()); }
-
- key_equal &priv_equal()
- { return static_cast<key_equal&>(this->bucket_hash_equal_.get()); }
-
- const real_bucket_traits &get_real_bucket_traits(detail::bool_<false>) const
- { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_; }
-
- const real_bucket_traits &get_real_bucket_traits(detail::bool_<true>) const
- { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_.get_bucket_traits(*this); }
-
- real_bucket_traits &get_real_bucket_traits(detail::bool_<false>)
- { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_; }
-
- real_bucket_traits &get_real_bucket_traits(detail::bool_<true>)
- { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_.get_bucket_traits(*this); }
-
- const real_bucket_traits &get_real_bucket_traits() const
- { return this->get_real_bucket_traits(detail::bool_<external_bucket_traits>()); }
-
- real_bucket_traits &get_real_bucket_traits()
- { return this->get_real_bucket_traits(detail::bool_<external_bucket_traits>()); }
-
- const hasher &priv_hasher() const
- { return static_cast<const hasher&>(this->bucket_hash_equal_.bucket_hash.get()); }
-
- hasher &priv_hasher()
- { return static_cast<hasher&>(this->bucket_hash_equal_.bucket_hash.get()); }
-
- bucket_ptr priv_buckets() const
- { return this->get_real_bucket_traits().bucket_begin(); }
-
- size_type priv_buckets_len() const
- { return this->get_real_bucket_traits().bucket_count(); }
-
- static node_ptr uncast(const_node_ptr ptr)
- {
- return node_ptr(const_cast<node*>(detail::get_pointer(ptr)));
- }
-
- node &from_value_to_node(value_type &v)
- { return *this->get_real_value_traits().to_node_ptr(v); }
-
- const node &from_value_to_node(const value_type &v) const
- { return *this->get_real_value_traits().to_node_ptr(v); }
-
- size_traits &priv_size_traits()
- { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_; }
-
- const size_traits &priv_size_traits() const
- { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_; }
+ template<class Disposer>
+ node_cast_adaptor<detail::node_disposer<Disposer, hashtable_impl> >
+ make_node_disposer(const Disposer &disposer) const
+ { return node_cast_adaptor<detail::node_disposer<Disposer, hashtable_impl> >(disposer, this); }
 
- struct insert_commit_data_impl
- {
- size_type hash;
- };
    /// @endcond
 
    public:
+ typedef detail::insert_commit_data_impl insert_commit_data;
 
- class local_iterator
- : public local_iterator_impl
- {
- public:
- local_iterator()
- {}
-
- local_iterator(siterator sit, const hashtable_impl *cont)
- : local_iterator_impl(sit, cont)
- {}
- };
-
- class const_local_iterator
- : public const_local_iterator_impl
- {
- public:
- const_local_iterator()
- {}
-
- const_local_iterator(siterator sit, const hashtable_impl *cont)
- : const_local_iterator_impl(sit, cont)
- {}
- };
+ typedef detail::transform_iterator
+ < typename slist_impl::iterator
+ , downcast_node_to_value<false> > local_iterator;
 
- typedef insert_commit_data_impl insert_commit_data;
+ typedef detail::transform_iterator
+ < typename slist_impl::iterator
+ , downcast_node_to_value<true> > const_local_iterator;
 
    /// @cond
 
@@ -503,7 +595,7 @@
                   , const value_traits &v_traits = value_traits())
       : base_type(b_traits, hash_func, equal_func, v_traits)
    {
- priv_clear_buckets();
+ priv_initialize_buckets();
       this->priv_size_traits().set_size(size_type(0));
       BOOST_INTRUSIVE_INVARIANT_ASSERT(this->priv_buckets_len() != 0);
       //Check power of two bucket array if the option is activated
@@ -562,7 +654,7 @@
    //!
    //! <b>Throws</b>: Nothing.
    iterator end()
- { return iterator(invalid_local_it(this->get_real_bucket_traits()), 0); }
+ { return iterator(priv_invalid_local_it(), 0); }
 
    //! <b>Effects</b>: Returns a const_iterator pointing to the end of the unordered_set.
    //!
@@ -578,7 +670,7 @@
    //!
    //! <b>Throws</b>: Nothing.
    const_iterator cend() const
- { return const_iterator(invalid_local_it(this->get_real_bucket_traits()), 0); }
+ { return const_iterator(priv_invalid_local_it(), 0); }
 
    //! <b>Effects</b>: Returns the hasher object used by the unordered_set.
    //!
@@ -598,8 +690,8 @@
 
    //! <b>Effects</b>: Returns true is the container is empty.
    //!
- //! <b>Complexity</b>: if constant_time_size is false, average constant time
- //! (worst case, with empty() == true): O(this->bucket_count()).
+ //! <b>Complexity</b>: if constant-time size and cache_last options are disabled,
+ //! average constant time (worst case, with empty() == true: O(this->bucket_count()).
    //! Otherwise constant.
    //!
    //! <b>Throws</b>: Nothing.
@@ -608,6 +700,9 @@
       if(constant_time_size){
          return !this->size();
       }
+ else if(cache_begin){
+ return this->begin() == this->end();
+ }
       else{
          size_type buckets_len = this->priv_buckets_len();
          const bucket_type *b = detail::get_pointer(this->priv_buckets());
@@ -658,7 +753,8 @@
       swap(this->priv_equal(), other.priv_equal());
       swap(this->priv_hasher(), other.priv_hasher());
       //These can't throw
- swap(this->get_real_bucket_traits(), other.get_real_bucket_traits());
+ swap(this->priv_real_bucket_traits(), other.priv_real_bucket_traits());
+ priv_swap_cache(cache_begin_t(), other);
       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());
@@ -698,75 +794,75 @@
             const bucket_ptr src_buckets = src.priv_buckets();
             const bucket_ptr dst_buckets = this->priv_buckets();
             size_type constructed;
- BOOST_INTRUSIVE_TRY{
- for( constructed = 0
- ; constructed < dst_bucket_count
+ typedef node_cast_adaptor<detail::node_disposer<Disposer, hashtable_impl> > NodeDisposer;
+ typedef node_cast_adaptor<detail::node_cloner<Cloner, hashtable_impl> > NodeCloner;
+ NodeDisposer node_disp(disposer, this);
+
+ detail::exception_array_disposer<bucket_type, NodeDisposer>
+ rollback(dst_buckets[0], node_disp, constructed);
+ for( constructed = 0
+ ; constructed < dst_bucket_count
+ ; ++constructed){
+ dst_buckets[constructed].clone_from
+ ( src_buckets[constructed]
+ , NodeCloner(cloner, this), node_disp);
+ }
+ if(src_bucket_count != dst_bucket_count){
+ //Now insert the remaining ones using the modulo trick
+ for(//"constructed" comes from the previous loop
+ ; constructed < src_bucket_count
                   ; ++constructed){
- dst_buckets[constructed].clone_from
- ( src_buckets[constructed]
- , detail::node_cloner<Cloner, hashtable_impl>(cloner, this)
- , detail::node_disposer<Disposer, hashtable_impl>(disposer, this)
- );
- }
- if(src_bucket_count != dst_bucket_count){
- //Now insert the remaining ones using the modulo trick
- for(//"constructed" comes from the previous loop
- ; constructed < src_bucket_count
- ; ++constructed){
- bucket_type &dst_b = (power_2_buckets)
- ? dst_buckets[constructed & (dst_bucket_count-1)]
- : dst_buckets[constructed % dst_bucket_count];
- bucket_type &src_b = src_buckets[constructed];
- for( siterator b(src_b.begin()), e(src_b.end())
- ; b != e
- ; ++b){
- dst_b.push_front(*detail::node_cloner<Cloner, hashtable_impl>
- (cloner, this)(b.pointed_node()));
- }
+ bucket_type &dst_b =
+ dst_buckets[priv_hash_to_bucket(constructed, dst_bucket_count)];
+ bucket_type &src_b = src_buckets[constructed];
+ for( siterator b(src_b.begin()), e(src_b.end())
+ ; b != e
+ ; ++b){
+ dst_b.push_front(*(NodeCloner(cloner, this)(*b.pointed_node())));
                   }
                }
             }
- BOOST_INTRUSIVE_CATCH(...){
- while(constructed--){
- dst_buckets[constructed].clear_and_dispose
- (detail::node_disposer<Disposer, hashtable_impl>(disposer, this));
- }
- BOOST_INTRUSIVE_RETHROW;
- }
- BOOST_INTRUSIVE_CATCH_END
+ rollback.release();
             this->priv_size_traits().set_size(src.priv_size_traits().get_size());
+ priv_insertion_update_cache(0u);
+ priv_erasure_update_cache();
          }
          else{
             //Unlike previous cloning algorithm, this can throw
             //if cloner, the hasher or comparison functor throw
             const_iterator b(src.begin()), e(src.end());
- BOOST_INTRUSIVE_TRY{
- for(; b != e; ++b){
- this->insert_equal(*cloner(*b));
- }
- }
- BOOST_INTRUSIVE_CATCH(...){
- this->clear_and_dispose(disposer);
- BOOST_INTRUSIVE_RETHROW;
+ detail::exception_disposer<hashtable_impl, Disposer>
+ rollback(*this, disposer);
+ for(; b != e; ++b){
+ this->insert_equal(*cloner(*b));
             }
- BOOST_INTRUSIVE_CATCH_END
+ rollback.release();
          }
       }
    }
 
    iterator insert_equal(reference value)
    {
- size_type bucket_num, hash_value;
+ size_type bucket_num;
+ std::size_t hash_value;
+ siterator prev;
       siterator it = this->priv_find
- (value, this->priv_hasher(), this->priv_equal(), bucket_num, hash_value);
+ (value, this->priv_hasher(), this->priv_equal(), bucket_num, hash_value, prev);
       bucket_type &b = this->priv_buckets()[bucket_num];
- if(it == invalid_local_it(this->get_real_bucket_traits())){
- it = b.before_begin();
- }
- node_ptr n = node_ptr(&from_value_to_node(value));
+ bool found_equal = it != priv_invalid_local_it();
+ node_ptr n = node_ptr(&priv_value_to_node(value));
       this->priv_store_hash(n, hash_value, store_hash_t());
       if(safemode_or_autounlink)
          BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(n));
+ if(!found_equal){
+ it = b.before_begin();
+ }
+ if(optimize_multikey){
+ node_ptr first_in_group = found_equal ?
+ dcast_bucket_ptr(it.pointed_node()) : node_ptr(0);
+ this->priv_insert_in_group(first_in_group, n, optimize_multikey_t());
+ }
+ priv_insertion_update_cache(bucket_num);
       this->priv_size_traits().increment();
       return iterator(b.insert_after(it, *n), this);
    }
@@ -867,9 +963,10 @@
       , insert_commit_data &commit_data)
    {
       size_type bucket_num;
+ siterator prev;
       siterator prev_pos =
- this->priv_find(key, hash_func, equal_func, bucket_num, commit_data.hash);
- bool success = prev_pos == invalid_local_it(this->get_real_bucket_traits());
+ this->priv_find(key, hash_func, equal_func, bucket_num, commit_data.hash, prev);
+ bool success = prev_pos == priv_invalid_local_it();
       if(success){
          prev_pos = this->priv_buckets()[bucket_num].before_begin();
       }
@@ -897,14 +994,16 @@
    //! After a successful rehashing insert_commit_data remains valid.
    iterator insert_unique_commit(reference value, const insert_commit_data &commit_data)
    {
- size_type bucket_num = from_hash_to_bucket(commit_data.hash);
+ size_type bucket_num = priv_hash_to_bucket(commit_data.hash);
       bucket_type &b = this->priv_buckets()[bucket_num];
       this->priv_size_traits().increment();
- node_ptr n = node_ptr(&from_value_to_node(value));
+ node_ptr n = node_ptr(&priv_value_to_node(value));
       this->priv_store_hash(n, commit_data.hash, store_hash_t());
       if(safemode_or_autounlink)
          BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(n));
- return iterator( b.insert_after(b.before_begin(), *n), this);
+ priv_insertion_update_cache(bucket_num);
+ this->priv_insert_in_group(node_ptr(0), n, optimize_multikey_t());
+ return iterator(b.insert_after(b.before_begin(), *n), this);
    }
 
    //! <b>Effects</b>: Erases the element pointed to by i.
@@ -983,12 +1082,9 @@
    template<class Disposer>
    void erase_and_dispose(const_iterator i, Disposer disposer)
    {
- siterator to_erase(i.slist_it());
- bucket_ptr f(priv_buckets()), l(f + priv_buckets_len());
- bucket_type &b = this->priv_buckets()[bucket_type::get_bucket_num(to_erase, *f, *l)];
- b.erase_after_and_dispose
- (b.previous(to_erase), detail::node_disposer<Disposer, hashtable_impl>(disposer, this));
+ priv_erase(i, disposer, optimize_multikey_t());
       this->priv_size_traits().decrement();
+ priv_erasure_update_cache();
    }
 
    //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
@@ -1009,67 +1105,27 @@
       if(b == e) return;
 
       //Get the bucket number and local iterator for both iterators
- bucket_ptr f(priv_buckets()), l(f + priv_buckets_len());
- size_type first_bucket_num = bucket_type::get_bucket_num(b.slist_it(), *f, *l);
+ siterator first_local_it(b.slist_it());
+ size_type first_bucket_num = this->priv_get_bucket_num(first_local_it);
 
       siterator before_first_local_it
- = priv_buckets()[first_bucket_num].previous(b.slist_it());
+ = priv_get_previous(priv_buckets()[first_bucket_num], first_local_it);
       size_type last_bucket_num;
       siterator last_local_it;
 
       //For the end iterator, we will assign the end iterator
       //of the last bucket
- if(e == end()){
+ if(e == this->end()){
          last_bucket_num = this->bucket_count() - 1;
          last_local_it = priv_buckets()[last_bucket_num].end();
       }
       else{
          last_local_it = e.slist_it();
- last_bucket_num = bucket_type::get_bucket_num(last_local_it, *f, *l);
+ last_bucket_num = this->priv_get_bucket_num(last_local_it);
       }
-
- const bucket_ptr buckets = priv_buckets();
- //First erase the nodes of the first bucket
- {
- bucket_type &first_b = buckets[first_bucket_num];
- siterator nxt(before_first_local_it); ++nxt;
- siterator end = first_b.end();
- while(nxt != end){
- nxt = first_b.erase_after_and_dispose
- ( before_first_local_it
- , detail::node_disposer<Disposer, hashtable_impl>(disposer, this));
- this->priv_size_traits().decrement();
- }
- }
-
- //Now fully clear the intermediate buckets
- for(size_type i = first_bucket_num+1; i < last_bucket_num; ++i){
- bucket_type &b = buckets[i];
- if(b.empty())
- continue;
- siterator b_begin(b.before_begin());
- siterator nxt(b_begin); ++nxt;
- siterator end = b.end();
- while(nxt != end){
- nxt = b.erase_after_and_dispose
- (b_begin, detail::node_disposer<Disposer, hashtable_impl>(disposer, this));
- this->priv_size_traits().decrement();
- }
- }
-
- //Now erase nodes from the last bucket
- {
- bucket_type &last_b = buckets[last_bucket_num];
- siterator b_begin(last_b.before_begin());
- siterator nxt(b_begin); ++nxt;
- while(nxt != last_local_it){
- nxt = last_b.erase_after_and_dispose
- (b_begin, detail::node_disposer<Disposer, hashtable_impl>
- (disposer, this));
- this->priv_size_traits().decrement();
- }
- }
- }
+ priv_erase_range(before_first_local_it, first_bucket_num, last_local_it, last_bucket_num, disposer);
+ priv_erasure_update_cache(first_bucket_num, last_bucket_num);
+ }
 
    //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
    //!
@@ -1109,40 +1165,42 @@
    size_type erase_and_dispose(const KeyType& key, KeyHasher hash_func
                               ,KeyValueEqual equal_func, Disposer disposer)
    {
+ size_type bucket_num;
+ std::size_t h;
+ siterator prev;
+ siterator it =
+ this->priv_find(key, hash_func, equal_func, bucket_num, h, prev);
+ bool success = it != priv_invalid_local_it();
       size_type count(0);
-
- if(constant_time_size && this->empty()){
+ if(!success){
          return 0;
       }
-
- bucket_type &b = this->priv_buckets()[from_hash_to_bucket(hash_func(key))];
- siterator it = b.begin();
- siterator prev = b.before_begin();
-
- bool found = false;
- //Find equal value
- while(it != b.end()){
- const value_type &v =
- *this->get_real_value_traits().to_value_ptr(it.pointed_node());
- if(equal_func(key, v)){
- found = true;
- break;
- }
- ++prev;
- ++it;
+ else if(optimize_multikey){
+ siterator last = bucket_type::s_iterator_to
+ (*node_traits::get_next(priv_get_last_in_group
+ (dcast_bucket_ptr(it.pointed_node()))));
+ this->priv_erase_range_impl(bucket_num, prev, last, disposer, count);
       }
-
- if(!found)
- return 0;
-
- //If found erase all equal values
- for(siterator end = b.end(); it != end &&
- equal_func(key, *this->get_real_value_traits().to_value_ptr(it.pointed_node()))
- ; ++count){
- it = b.erase_after_and_dispose
- (prev, detail::node_disposer<Disposer, hashtable_impl>(disposer, this));
- this->priv_size_traits().decrement();
+ else{
+ //If found erase all equal values
+ bucket_type &b = this->priv_buckets()[bucket_num];
+ for(siterator end = b.end(); it != end; ++count, ++it){
+ slist_node_ptr n(it.pointed_node());
+ const value_type &v = priv_value_from_slist_node(n);
+ if(compare_hash){
+ std::size_t vh = this->priv_stored_hash(v, store_hash_t());
+ if(h != vh || !equal_func(key, v)){
+ break;
+ }
+ }
+ else if(!equal_func(key, v)){
+ break;
+ }
+ this->priv_size_traits().decrement();
+ }
+ b.erase_after_and_dispose(prev, it, make_node_disposer(disposer));
       }
+ priv_erasure_update_cache();
       return count;
    }
 
@@ -1179,11 +1237,11 @@
          size_type num_buckets = this->bucket_count();
          bucket_ptr b = this->priv_buckets();
          for(; num_buckets--; ++b){
- b->clear_and_dispose
- (detail::node_disposer<Disposer, hashtable_impl>(disposer, this));
+ b->clear_and_dispose(make_node_disposer(disposer));
          }
          this->priv_size_traits().set_size(size_type(0));
       }
+ priv_initialize_cache();
    }
 
    //! <b>Effects</b>: Returns the number of contained elements with the given value
@@ -1246,8 +1304,10 @@
    template<class KeyType, class KeyHasher, class KeyValueEqual>
    iterator find(const KeyType &key, KeyHasher hash_func, KeyValueEqual equal_func)
    {
- size_type bucket_n, hash;
- siterator local_it = this->priv_find(key, hash_func, equal_func, bucket_n, hash);
+ size_type bucket_n;
+ std::size_t hash;
+ siterator prev;
+ siterator local_it = this->priv_find(key, hash_func, equal_func, bucket_n, hash, prev);
       return iterator(local_it, this);
    }
 
@@ -1283,8 +1343,10 @@
    const_iterator find
       (const KeyType &key, KeyHasher hash_func, KeyValueEqual equal_func) const
    {
- size_type bucket_n, hash_value;
- siterator sit = this->priv_find(key, hash_func, equal_func, bucket_n, hash_value);
+ size_type bucket_n;
+ std::size_t hash_value;
+ siterator prev;
+ siterator sit = this->priv_find(key, hash_func, equal_func, bucket_n, hash_value, prev);
       return const_iterator(sit, this);
    }
 
@@ -1382,7 +1444,7 @@
    //! <b>Throws</b>: If the internal hash function throws.
    iterator iterator_to(reference value)
    {
- return iterator(bucket_type::s_iterator_to(from_value_to_node(value)), this);
+ return iterator(bucket_type::s_iterator_to(priv_value_to_node(value)), this);
    }
 
    //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
@@ -1396,12 +1458,9 @@
    //! <b>Throws</b>: If the internal hash function throws.
    const_iterator iterator_to(const_reference value) const
    {
- return const_iterator(bucket_type::s_iterator_to(from_value_to_node(const_cast<reference>(value))), this);
+ return const_iterator(bucket_type::s_iterator_to(priv_value_to_node(const_cast<reference>(value))), this);
    }
 
-
-
-
    //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
    //! appropriate type. Otherwise the behavior is undefined.
    //!
@@ -1417,7 +1476,7 @@
    static local_iterator s_local_iterator_to(reference value)
    {
       BOOST_STATIC_ASSERT((!stateful_value_traits));
- siterator sit = bucket_type::s_iterator_to(((hashtable_impl*)0)->from_value_to_node(value));
+ siterator sit = bucket_type::s_iterator_to(((hashtable_impl*)0)->priv_value_to_node(value));
       return local_iterator(sit, (hashtable_impl*)0);
    }
 
@@ -1436,7 +1495,7 @@
    static const_local_iterator s_local_iterator_to(const_reference value)
    {
       BOOST_STATIC_ASSERT((!stateful_value_traits));
- siterator sit = bucket_type::s_iterator_to(((hashtable_impl*)0)->from_value_to_node(const_cast<value_type&>(value)));
+ siterator sit = bucket_type::s_iterator_to(((hashtable_impl*)0)->priv_value_to_node(const_cast<value_type&>(value)));
       return const_local_iterator(sit, (hashtable_impl*)0);
    }
 
@@ -1451,7 +1510,7 @@
    //! <b>Throws</b>: Nothing.
    local_iterator local_iterator_to(reference value)
    {
- siterator sit = bucket_type::s_iterator_to(this->from_value_to_node(value));
+ siterator sit = bucket_type::s_iterator_to(this->priv_value_to_node(value));
       return local_iterator(sit, this);
    }
 
@@ -1467,7 +1526,7 @@
    const_local_iterator local_iterator_to(const_reference value) const
    {
       siterator sit = bucket_type::s_iterator_to
- (const_cast<node &>(this->from_value_to_node(value)));
+ (const_cast<node &>(this->priv_value_to_node(value)));
       return const_local_iterator(sit, this);
    }
 
@@ -1515,7 +1574,7 @@
    //! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
    template<class KeyType, class KeyHasher>
    size_type bucket(const KeyType& k, const KeyHasher &hash_func) const
- { return from_hash_to_bucket(hash_func(k)); }
+ { return priv_hash_to_bucket(hash_func(k)); }
 
    //! <b>Effects</b>: Returns the bucket array pointer passed in the constructor
    //! or the last rehash function.
@@ -1630,75 +1689,87 @@
       size_type new_buckets_len = new_bucket_traits.bucket_count();
       bucket_ptr old_buckets = this->priv_buckets();
       size_type old_buckets_len = this->priv_buckets_len();
+
       //Check power of two bucket array if the option is activated
       BOOST_INTRUSIVE_INVARIANT_ASSERT
       (!power_2_buckets || (0 == (new_buckets_len & (new_buckets_len-1u))));
 
- BOOST_INTRUSIVE_TRY{
- size_type n = 0;
- const bool same_buffer = old_buckets == new_buckets;
- //If the new bucket length is a common factor
- //of the old one we can avoid hash calculations.
- const bool fast_shrink = (old_buckets_len > new_buckets_len) &&
- (power_2_buckets ||(old_buckets_len % new_buckets_len) == 0);
- //If we are shrinking the same bucket array and it's
- //is a fast shrink, just rehash the last nodes
- if(same_buffer && fast_shrink){
- n = new_buckets_len;
- }
-
- //Iterate through nodes
- for(; n < old_buckets_len; ++n){
- bucket_type &old_bucket = old_buckets[n];
-
- if(!fast_shrink){
- siterator before_i(old_bucket.before_begin());
- siterator end(old_bucket.end());
- siterator i(old_bucket.begin());
- for(;i != end; ++i){
- const value_type &v = *this->get_real_value_traits().to_value_ptr(i.pointed_node());
- const std::size_t hash_value = this->priv_hash_when_rehashing(v, store_hash_t());
- const size_type new_n = (power_2_buckets)
- ? (hash_value & (new_buckets_len-1)) : (hash_value % new_buckets_len);
- //If this is a buffer expansion don't move if it's not necessary
- if(same_buffer && new_n == n){
- ++before_i;
- }
- else{
- bucket_type &new_b = new_buckets[new_n];
- new_b.splice_after(new_b.before_begin(), old_bucket, before_i);
- i = before_i;
- }
+ size_type n = priv_get_cache_bucket_num();
+ const bool same_buffer = old_buckets == new_buckets;
+ //If the new bucket length is a common factor
+ //of the old one we can avoid hash calculations.
+ const bool fast_shrink = (old_buckets_len > new_buckets_len) &&
+ (power_2_buckets ||(old_buckets_len % new_buckets_len) == 0);
+ //If we are shrinking the same bucket array and it's
+ //is a fast shrink, just rehash the last nodes
+ size_type new_first_bucket_num = new_buckets_len;
+ if(same_buffer && fast_shrink && (n < new_buckets_len)){
+ n = new_buckets_len;
+ new_first_bucket_num = priv_get_cache_bucket_num();
+ }
+
+ //Anti-exception stuff: they destroy the elements if something goes wrong
+ typedef detail::init_disposer<node_algorithms> NodeDisposer;
+ NodeDisposer node_disp;
+ detail::exception_array_disposer<bucket_type, NodeDisposer>
+ rollback1(new_buckets[0], node_disp, new_buckets_len);
+ detail::exception_array_disposer<bucket_type, NodeDisposer>
+ rollback2(old_buckets[0], node_disp, old_buckets_len);
+
+ //Put size in a safe value for rollback exception
+ size_type size_backup = this->priv_size_traits().get_size();
+ this->priv_size_traits().set_size(0);
+ //Put cache to safe position
+ priv_initialize_cache();
+ priv_insertion_update_cache(size_type(0u));
+
+ //Iterate through nodes
+ for(; n < old_buckets_len; ++n){
+ bucket_type &old_bucket = old_buckets[n];
+
+ if(!fast_shrink){
+ siterator before_i(old_bucket.before_begin());
+ siterator end(old_bucket.end());
+ siterator i(old_bucket.begin());
+ for(;i != end; ++i){
+ const value_type &v = priv_value_from_slist_node(i.pointed_node());
+ const std::size_t hash_value = this->priv_stored_hash(v, store_hash_t());
+ const size_type new_n = priv_hash_to_bucket(hash_value, new_buckets_len);
+ if(cache_begin && new_n < new_first_bucket_num)
+ new_first_bucket_num = new_n;
+ siterator last = bucket_type::s_iterator_to
+ (*priv_get_last_in_group(dcast_bucket_ptr(i.pointed_node())));
+ if(same_buffer && new_n == n){
+ before_i = last;
                }
- }
- else{
- const size_type new_n = (power_2_buckets)
- ? (n & (new_buckets_len-1))
- : (n % new_buckets_len);
- bucket_type &new_b = new_buckets[new_n];
- new_b.splice_after(new_b.before_begin(), old_bucket);
+ else{
+ bucket_type &new_b = new_buckets[new_n];
+ new_b.splice_after(new_b.before_begin(), old_bucket, before_i, last);
+ }
+ i = before_i;
             }
          }
-
- this->get_real_bucket_traits()= new_bucket_traits;
- }
- BOOST_INTRUSIVE_CATCH(...){
- for(size_type n = 0; n < new_buckets_len; ++n){
- if(safemode_or_autounlink){
- new_buckets[n].clear_and_dispose
- (detail::init_disposer<node_algorithms>());
- old_buckets[n].clear_and_dispose
- (detail::init_disposer<node_algorithms>());
- }
- else{
- new_buckets[n].clear();
- old_buckets[n].clear();
+ else{
+ const size_type new_n = priv_hash_to_bucket(n, new_buckets_len);
+ if(cache_begin && new_n < new_first_bucket_num)
+ new_first_bucket_num = new_n;
+ bucket_type &new_b = new_buckets[new_n];
+ if(!old_bucket.empty()){
+ new_b.splice_after( new_b.before_begin()
+ , old_bucket
+ , old_bucket.before_begin()
+ , priv_get_last(old_bucket));
             }
          }
- this->priv_size_traits().set_size(size_type(0));
- BOOST_INTRUSIVE_RETHROW;
       }
- BOOST_INTRUSIVE_CATCH_END
+
+ this->priv_size_traits().set_size(size_backup);
+ this->priv_real_bucket_traits() = new_bucket_traits;
+ priv_initialize_cache();
+ priv_insertion_update_cache(new_first_bucket_num);
+ //priv_erasure_update_cache();
+ rollback1.release();
+ rollback2.release();
    }
 
    //! <b>Effects</b>: Returns the nearest new bucket count optimized for
@@ -1714,8 +1785,7 @@
    {
       const std::size_t *primes = &detail::prime_list_holder<0>::prime_list[0];
       const std::size_t *primes_end = primes + detail::prime_list_holder<0>::prime_list_size;
- size_type const* bound =
- std::lower_bound(primes, primes_end, n);
+ size_type const* bound = std::lower_bound(primes, primes_end, n);
       if(bound == primes_end)
             bound--;
       return size_type(*bound);
@@ -1734,8 +1804,7 @@
    {
       const std::size_t *primes = &detail::prime_list_holder<0>::prime_list[0];
       const std::size_t *primes_end = primes + detail::prime_list_holder<0>::prime_list_size;
- size_type const* bound =
- std::upper_bound(primes, primes_end, n);
+ size_type const* bound = std::upper_bound(primes, primes_end, n);
       if(bound != primes_end)
             bound--;
       return size_type(*bound);
@@ -1743,72 +1812,672 @@
 
    /// @cond
    private:
+ std::size_t priv_hash_to_bucket(std::size_t hash_value) const
+ { return priv_hash_to_bucket(hash_value, power_2_buckets_t()); }
+
+ std::size_t priv_hash_to_bucket(std::size_t hash_value, detail::bool_<false>) const
+ { return hash_value % this->priv_real_bucket_traits().bucket_count(); }
+
+ std::size_t priv_hash_to_bucket(std::size_t hash_value, detail::bool_<true>) const
+ { return hash_value & (this->priv_real_bucket_traits().bucket_count() - 1); }
+
+ std::size_t priv_hash_to_bucket(std::size_t hash_value, std::size_t bucket_len) const
+ { return priv_hash_to_bucket(hash_value, bucket_len, power_2_buckets_t()); }
+
+ std::size_t priv_hash_to_bucket(std::size_t hash_value, std::size_t bucket_len, detail::bool_<false>) const
+ { return hash_value % bucket_len; }
+
+ std::size_t priv_hash_to_bucket(std::size_t hash_value, std::size_t bucket_len, detail::bool_<true>) const
+ { return hash_value & (bucket_len - 1); }
+
+ const key_equal &priv_equal() const
+ { return static_cast<const key_equal&>(this->bucket_hash_equal_.get()); }
+
+ key_equal &priv_equal()
+ { return static_cast<key_equal&>(this->bucket_hash_equal_.get()); }
+
+ value_type &priv_value_from_slist_node(slist_node_ptr n)
+ { return *this->get_real_value_traits().to_value_ptr(dcast_bucket_ptr(n)); }
+
+ const value_type &priv_value_from_slist_node(slist_node_ptr n) const
+ { return *this->get_real_value_traits().to_value_ptr(dcast_bucket_ptr(n)); }
+
+ const real_bucket_traits &priv_real_bucket_traits(detail::bool_<false>) const
+ { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_; }
+
+ const real_bucket_traits &priv_real_bucket_traits(detail::bool_<true>) const
+ { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_.get_bucket_traits(*this); }
+
+ real_bucket_traits &priv_real_bucket_traits(detail::bool_<false>)
+ { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_; }
+
+ real_bucket_traits &priv_real_bucket_traits(detail::bool_<true>)
+ { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_.get_bucket_traits(*this); }
+
+ const real_bucket_traits &priv_real_bucket_traits() const
+ { return this->priv_real_bucket_traits(detail::bool_<external_bucket_traits>()); }
+
+ real_bucket_traits &priv_real_bucket_traits()
+ { return this->priv_real_bucket_traits(detail::bool_<external_bucket_traits>()); }
+
+ const hasher &priv_hasher() const
+ { return static_cast<const hasher&>(this->bucket_hash_equal_.bucket_hash.get()); }
+
+ hasher &priv_hasher()
+ { return static_cast<hasher&>(this->bucket_hash_equal_.bucket_hash.get()); }
+
+ bucket_ptr priv_buckets() const
+ { return this->priv_real_bucket_traits().bucket_begin(); }
+
+ size_type priv_buckets_len() const
+ { return this->priv_real_bucket_traits().bucket_count(); }
+
+ static node_ptr uncast(const_node_ptr ptr)
+ { return node_ptr(const_cast<node*>(detail::get_pointer(ptr))); }
+
+ node &priv_value_to_node(value_type &v)
+ { return *this->get_real_value_traits().to_node_ptr(v); }
+
+ const node &priv_value_to_node(const value_type &v) const
+ { return *this->get_real_value_traits().to_node_ptr(v); }
+
+ size_traits &priv_size_traits()
+ { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_; }
+
+ const size_traits &priv_size_traits() const
+ { return this->bucket_hash_equal_.bucket_hash.bucket_plus_size_; }
+
+ template<class Disposer>
+ void priv_erase_range_impl
+ (size_type bucket_num, siterator before_first_it, siterator end, Disposer disposer, size_type &num_erased)
+ {
+ const bucket_ptr buckets = priv_buckets();
+ bucket_type &b = buckets[bucket_num];
+
+ if(before_first_it == b.before_begin() && end == b.end()){
+ priv_erase_range_impl(bucket_num, 1, disposer, num_erased);
+ }
+ else{
+ num_erased = 0;
+ siterator to_erase(before_first_it);
+ ++to_erase;
+ slist_node_ptr end_ptr = end.pointed_node();
+ while(to_erase != end){
+ priv_erase_from_group(end_ptr, dcast_bucket_ptr(to_erase.pointed_node()), optimize_multikey_t());
+ to_erase = b.erase_after_and_dispose(before_first_it, make_node_disposer(disposer));
+ ++num_erased;
+ }
+ this->priv_size_traits().set_size(this->priv_size_traits().get_size()-num_erased);
+ }
+ }
+
+ template<class Disposer>
+ void priv_erase_range_impl
+ (size_type first_bucket_num, size_type num_buckets, Disposer disposer, size_type &num_erased)
+ {
+ //Now fully clear the intermediate buckets
+ const bucket_ptr buckets = priv_buckets();
+ num_erased = 0;
+ for(size_type i = first_bucket_num; i < (num_buckets + first_bucket_num); ++i){
+ bucket_type &b = buckets[i];
+ siterator b_begin(b.before_begin());
+ siterator nxt(b_begin);
+ ++nxt;
+ siterator end(b.end());
+ while(nxt != end){
+ priv_init_group(nxt.pointed_node(), optimize_multikey_t());
+ nxt = b.erase_after_and_dispose
+ (b_begin, make_node_disposer(disposer));
+ this->priv_size_traits().decrement();
+ ++num_erased;
+ }
+ }
+ }
+
+ template<class Disposer>
+ void priv_erase_range( siterator before_first_it, size_type first_bucket
+ , siterator last_it, size_type last_bucket
+ , Disposer disposer)
+ {
+ size_type num_erased;
+ if (first_bucket == last_bucket){
+ priv_erase_range_impl(first_bucket, before_first_it, last_it, disposer, num_erased);
+ }
+ else {
+ bucket_type *b = (&this->priv_buckets()[0]);
+ priv_erase_range_impl(first_bucket, before_first_it, b[first_bucket].end(), disposer, num_erased);
+ if(size_type n = (last_bucket - first_bucket - 1))
+ priv_erase_range_impl(first_bucket + 1, n, disposer, num_erased);
+ priv_erase_range_impl(last_bucket, b[last_bucket].before_begin(), last_it, disposer, num_erased);
+ }
+ }
+
+ static node_ptr dcast_bucket_ptr(typename slist_impl::node_ptr p)
+ { return node_ptr(&static_cast<node&>(*p)); }
 
- std::size_t priv_hash_when_rehashing(const value_type &v, detail::true_)
+ std::size_t priv_stored_hash(const value_type &v, detail::true_) const
    { return node_traits::get_hash(this->get_real_value_traits().to_node_ptr(v)); }
 
- std::size_t priv_hash_when_rehashing(const value_type &v, detail::false_)
+ std::size_t priv_stored_hash(const value_type &v, detail::false_) const
    { return priv_hasher()(v); }
 
- void priv_store_hash(node_ptr p, std::size_t h, detail::true_)
+ std::size_t priv_stored_hash(slist_node_ptr n, detail::true_) const
+ { return node_traits::get_hash(dcast_bucket_ptr(n)); }
+
+ std::size_t priv_stored_hash(slist_node_ptr, detail::false_) const
+ {
+ //This code should never be reached!
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(0);
+ return 0;
+ }
+
+ static void priv_store_hash(node_ptr p, std::size_t h, detail::true_)
    { return node_traits::set_hash(p, h); }
 
- void priv_store_hash(node_ptr, std::size_t, detail::false_)
+ static void priv_store_hash(node_ptr, std::size_t, detail::false_)
+ {}
+
+ static void priv_clear_group_nodes(bucket_type &b, detail::true_)
+ {
+ siterator it(b.begin()), itend(b.end());
+ while(it != itend){
+ node_ptr to_erase(dcast_bucket_ptr(it.pointed_node()));
+ ++it;
+ group_algorithms::init(to_erase);
+ }
+ }
+
+ static void priv_clear_group_nodes(bucket_type &, detail::false_)
+ {}
+
+ std::size_t priv_get_bucket_num(siterator it)
+ { return priv_get_bucket_num_hash_dispatch(it, store_hash_t()); }
+
+ std::size_t priv_get_bucket_num_hash_dispatch(siterator it, detail::true_)
+ {
+ return this->priv_hash_to_bucket
+ (this->priv_stored_hash(it.pointed_node(), store_hash_t()));
+ }
+
+ std::size_t priv_get_bucket_num_hash_dispatch(siterator it, detail::false_)
+ { return priv_get_bucket_num_no_hash_store(it, optimize_multikey_t()); }
+
+ std::size_t priv_get_bucket_num_no_hash_store( siterator it, detail::true_)
+ {
+ bucket_ptr f(priv_buckets()), l(f + priv_buckets_len() - 1);
+ slist_node_ptr bb = priv_get_bucket_before_begin
+ ( f->end().pointed_node()
+ , l->end().pointed_node()
+ , dcast_bucket_ptr(it.pointed_node()));
+ //Now get the bucket_impl from the iterator
+ const bucket_type &b = static_cast<const bucket_type&>
+ (bucket_type::slist_type::container_from_end_iterator(bucket_type::s_iterator_to(*bb)));
+ //Now just calculate the index b has in the bucket array
+ return static_cast<size_type>(&b - &*f);
+ }
+
+ std::size_t priv_get_bucket_num_no_hash_store( siterator it, detail::false_)
+ {
+ bucket_ptr f(priv_buckets()), l(f + priv_buckets_len() - 1);
+ slist_node_ptr first_ptr(f->cend().pointed_node())
+ , last_ptr(l->cend().pointed_node());
+
+ //The end node is embedded in the singly linked list:
+ //iterate until we reach it.
+ while(!(first_ptr <= it.pointed_node() && it.pointed_node() <= last_ptr)){
+ ++it;
+ }
+ //Now get the bucket_impl from the iterator
+ const bucket_type &b = static_cast<const bucket_type&>
+ (bucket_type::container_from_end_iterator(it));
+
+ //Now just calculate the index b has in the bucket array
+ return static_cast<std::size_t>(&b - &*f);
+ }
+
+ void priv_erase_from_group(slist_node_ptr end_ptr, node_ptr to_erase_ptr, detail::true_)
+ {
+ node_ptr nxt_ptr(node_traits::get_next(to_erase_ptr));
+ node_ptr prev_in_group_ptr(group_traits::get_next(to_erase_ptr));
+ bool last_in_group = (end_ptr == nxt_ptr) ||
+ (group_traits::get_next(nxt_ptr) != to_erase_ptr);
+ bool first_in_group = node_traits::get_next(prev_in_group_ptr) != to_erase_ptr;
+
+ if(first_in_group && last_in_group){
+ group_algorithms::init(to_erase_ptr);
+ }
+ else if(first_in_group){
+ group_algorithms::unlink_after(nxt_ptr);
+ }
+ else if(last_in_group){
+ node_ptr first_in_group = //possible_first_in_group ? possible_first_in_group :
+ priv_get_first_in_group_of_last_in_group(to_erase_ptr);
+ group_algorithms::unlink_after(first_in_group);
+ //possible_first_in_group = 0;
+ }
+ else{
+ group_algorithms::unlink_after(nxt_ptr);
+ }
+ }
+
+ void priv_erase_from_group(slist_node_ptr, node_ptr, detail::false_)
    {}
+
+ void priv_init_group(slist_node_ptr n, detail::true_)
+ { group_algorithms::init(dcast_bucket_ptr(n)); }
+
+ void priv_init_group(slist_node_ptr, detail::false_)
+ {}
+
+ void priv_insert_in_group(node_ptr first_in_group, node_ptr n, detail::true_)
+ {
+ if(first_in_group){
+ if(group_algorithms::unique(first_in_group))
+ group_algorithms::link_after(first_in_group, n);
+ else{
+ group_algorithms::link_after(node_traits::get_next(first_in_group), n);
+ }
+ }
+ else{
+ group_algorithms::init_header(n);
+ }
+ }
+
+ static slist_node_ptr priv_get_bucket_before_begin
+ (slist_node_ptr bucket_beg, slist_node_ptr bucket_end, node_ptr p)
+ {
+ //First find the last node of p's group.
+ //This requires checking the first node of the next group or
+ //the bucket node.
+ node_ptr prev_node = p;
+ node_ptr nxt(node_traits::get_next(p));
+ while(!(bucket_beg <= nxt && nxt <= bucket_end) &&
+ (group_traits::get_next(nxt) == prev_node)){
+ prev_node = nxt;
+ nxt = node_traits::get_next(nxt);
+ }
+
+ //If we've reached the bucket node just return it.
+ if(bucket_beg <= nxt && nxt <= bucket_end){
+ return nxt;
+ }
+
+ //Otherwise, iterate using group links until the bucket node
+ node_ptr first_node_of_group = nxt;
+ node_ptr last_node_group = group_traits::get_next(first_node_of_group);
+ slist_node_ptr possible_end = node_traits::get_next(last_node_group);
+
+ while(!(bucket_beg <= possible_end && possible_end <= bucket_end)){
+ first_node_of_group = dcast_bucket_ptr(possible_end);
+ last_node_group = group_traits::get_next(first_node_of_group);
+ possible_end = node_traits::get_next(last_node_group);
+ }
+ return possible_end;
+ }
+
+ static node_ptr priv_get_prev_to_first_in_group(slist_node_ptr bucket_node, node_ptr first_in_group)
+ {
+ //Just iterate using group links and obtain the node
+ //before "first_in_group)"
+ node_ptr prev_node = dcast_bucket_ptr(bucket_node);
+ node_ptr nxt(node_traits::get_next(prev_node));
+ while(nxt != first_in_group){
+ prev_node = group_traits::get_next(nxt);
+ nxt = node_traits::get_next(prev_node);
+ }
+ return prev_node;
+ }
+
+ static node_ptr priv_get_first_in_group_of_last_in_group(node_ptr last_in_group)
+ {
+ //Just iterate using group links and obtain the node
+ //before "last_in_group"
+ node_ptr possible_first = group_traits::get_next(last_in_group);
+ node_ptr possible_first_prev = group_traits::get_next(possible_first);
+ // The deleted node is at the end of the group, so the
+ // node in the group pointing to it is at the beginning
+ // of the group. Find that to change its pointer.
+ while(possible_first_prev != last_in_group){
+ possible_first = possible_first_prev;
+ possible_first_prev = group_traits::get_next(possible_first);
+ }
+ return possible_first;
+ }
+
+ void priv_insert_in_group(node_ptr, node_ptr, detail::false_)
+ {}
+
+ static node_ptr priv_get_last_in_group(node_ptr first_in_group)
+ { return priv_get_last_in_group(first_in_group, optimize_multikey_t()); }
+
+ static node_ptr priv_get_last_in_group(node_ptr first_in_group, detail::true_)
+ { return group_traits::get_next(first_in_group); }
+
+ static node_ptr priv_get_last_in_group(node_ptr n, detail::false_)
+ { return n; }
+
+ siterator priv_get_previous
+ (bucket_type &b, siterator i)
+ { return priv_get_previous(b, i, optimize_multikey_t()); }
+
+ siterator priv_get_previous
+ (bucket_type &b, siterator i, detail::true_)
+ {
+ node_ptr elem(dcast_bucket_ptr(i.pointed_node()));
+ node_ptr prev_in_group(group_traits::get_next(elem));
+ bool first_in_group = node_traits::get_next(prev_in_group) != elem;
+
+ typename bucket_type::node &n = first_in_group
+ ? *priv_get_prev_to_first_in_group(b.end().pointed_node(), elem)
+ : *group_traits::get_next(elem)
+ ;
+ return bucket_type::s_iterator_to(n);
+ }
+
+ siterator priv_get_previous
+ (bucket_type &b, siterator i, detail::false_)
+ { return b.previous(i); }
+
+ static siterator priv_get_last(bucket_type &b)
+ { return priv_get_last(b, optimize_multikey_t()); }
+
+ static siterator priv_get_last(bucket_type &b, detail::true_)
+ {
+ //First find the last node of p's group.
+ //This requires checking the first node of the next group or
+ //the bucket node.
+ slist_node_ptr end_ptr(b.end().pointed_node());
+ node_ptr possible_end(node_traits::get_next( dcast_bucket_ptr(end_ptr)));
+ node_ptr last_node_group(possible_end);
+
+ while(end_ptr != possible_end){
+ last_node_group = group_traits::get_next(dcast_bucket_ptr(possible_end));
+ possible_end = node_traits::get_next(last_node_group);
+ }
+ return bucket_type::s_iterator_to(*last_node_group);
+ }
+
+ static siterator priv_get_last(bucket_type &b, detail::false_)
+ { return b.previous(b.end()); }
+
+ siterator priv_get_previous_and_next_in_group
+ (siterator i, node_ptr &nxt_in_group)
+ {
+ siterator prev;
+ node_ptr elem(dcast_bucket_ptr(i.pointed_node()));
+ bucket_ptr f(priv_buckets()), l(f + priv_buckets_len() - 1);
+
+ slist_node_ptr first_end_ptr(f->cend().pointed_node());
+ slist_node_ptr last_end_ptr (l->cend().pointed_node());
+
+ node_ptr nxt(node_traits::get_next(elem));
+ node_ptr prev_in_group(group_traits::get_next(elem));
+ bool last_in_group = (first_end_ptr <= nxt && nxt <= last_end_ptr) ||
+ (group_traits::get_next(nxt) != elem);
+ bool first_in_group = node_traits::get_next(prev_in_group) != elem;
+
+ if(first_in_group){
+ node_ptr start_pos;
+ if(last_in_group){
+ start_pos = elem;
+ nxt_in_group = 0;
+ }
+ else{
+ start_pos = prev_in_group;
+ nxt_in_group = node_traits::get_next(elem);
+ }
+ slist_node_ptr bucket_node;
+ if(store_hash){
+ bucket_node = this->priv_buckets()
+ [this->priv_hash_to_bucket
+ (this->priv_stored_hash(elem, store_hash_t()))
+ ].before_begin().pointed_node();
+ }
+ else{
+ bucket_node = priv_get_bucket_before_begin
+ (first_end_ptr, last_end_ptr, start_pos);
+ }
+ prev = bucket_type::s_iterator_to
+ (*priv_get_prev_to_first_in_group(bucket_node, elem));
+ }
+ else{
+ if(last_in_group){
+ nxt_in_group = priv_get_first_in_group_of_last_in_group(elem);
+ }
+ else{
+ nxt_in_group = node_traits::get_next(elem);
+ }
+ prev = bucket_type::s_iterator_to(*group_traits::get_next(elem));
+ }
+ return prev;
+ }
+
+ template<class Disposer>
+ void priv_erase(const_iterator i, Disposer disposer, detail::true_)
+ {
+ siterator elem(i.slist_it());
+ node_ptr nxt_in_group;
+ siterator prev = priv_get_previous_and_next_in_group(elem, nxt_in_group);
+ bucket_type::s_erase_after_and_dispose(prev, make_node_disposer(disposer));
+ if(nxt_in_group)
+ group_algorithms::unlink_after(nxt_in_group);
+ if(safemode_or_autounlink)
+ group_algorithms::init(dcast_bucket_ptr(elem.pointed_node()));
+ }
+
+ template <class Disposer>
+ void priv_erase(const_iterator i, Disposer disposer, detail::false_)
+ {
+ siterator to_erase(i.slist_it());
+ bucket_type &b = this->priv_buckets()[this->priv_get_bucket_num(to_erase)];
+ siterator prev(priv_get_previous(b, to_erase));
+ b.erase_after_and_dispose(prev, make_node_disposer(disposer));
+ }
+
+ bucket_ptr priv_invalid_bucket() const
+ {
+ const real_bucket_traits &rbt = this->priv_real_bucket_traits();
+ return rbt.bucket_begin() + rbt.bucket_count();
+ }
    
- static siterator invalid_local_it(const real_bucket_traits &b)
- { return b.bucket_begin()->end(); }
+ siterator priv_invalid_local_it() const
+ { return priv_invalid_bucket()->end(); }
 
    siterator priv_begin(size_type &bucket_num) const
+ { return priv_begin(bucket_num, cache_begin_t()); }
+
+ siterator priv_begin(size_type &bucket_num, detail::bool_<false>) const
    {
+ size_type n = 0;
       size_type buckets_len = this->priv_buckets_len();
- for (bucket_num = 0; bucket_num < buckets_len; ++bucket_num){
- bucket_type &b = this->priv_buckets()[bucket_num];
- if(!b.empty())
+ for (n = 0; n < buckets_len; ++n){
+ bucket_type &b = this->priv_buckets()[n];
+ if(!b.empty()){
+ bucket_num = n;
             return b.begin();
+ }
       }
- return invalid_local_it(this->get_real_bucket_traits());
+ bucket_num = n;
+ return priv_invalid_local_it();
    }
 
+ siterator priv_begin(size_type &bucket_num, detail::bool_<true>) const
+ {
+ bucket_num = this->bucket_hash_equal_.cached_begin_ - this->priv_buckets();
+ if(this->bucket_hash_equal_.cached_begin_ == priv_invalid_bucket()){
+ return priv_invalid_local_it();
+ }
+ else{
+ return this->bucket_hash_equal_.cached_begin_->begin();
+ }
+ }
+
+ void priv_initialize_cache()
+ { priv_initialize_cache(cache_begin_t()); }
+
+ void priv_initialize_cache(detail::bool_<true>)
+ { this->bucket_hash_equal_.cached_begin_ = priv_invalid_bucket(); }
+
+ void priv_initialize_cache(detail::bool_<false>)
+ {}
+
+ void priv_insertion_update_cache(size_type insertion_bucket)
+ { priv_insertion_update_cache(insertion_bucket, cache_begin_t()); }
+
+ void priv_insertion_update_cache(size_type insertion_bucket, detail::bool_<true>)
+ {
+ bucket_ptr p = priv_buckets() + insertion_bucket;
+ if(p < this->bucket_hash_equal_.cached_begin_){
+ this->bucket_hash_equal_.cached_begin_ = p;
+ }
+ }
+
+ void priv_insertion_update_cache(size_type, detail::bool_<false>)
+ {}
+
+ void priv_erasure_update_cache(size_type first_bucket, size_type last_bucket)
+ { priv_erasure_update_cache(first_bucket, last_bucket, cache_begin_t()); }
+
+ void priv_erasure_update_cache(size_type first_bucket_num, size_type last_bucket_num, detail::bool_<true>)
+ {
+ //If the last bucket is the end, the cache must be updated
+ //to the last position if all
+ if(priv_get_cache_bucket_num() == first_bucket_num &&
+ priv_buckets()[first_bucket_num].empty() ){
+ priv_set_cache(priv_buckets() + last_bucket_num);
+ priv_erasure_update_cache();
+ }
+ }
+
+ void priv_erasure_update_cache(size_type, size_type, detail::bool_<false>)
+ {}
+
+ void priv_erasure_update_cache()
+ { priv_erasure_update_cache(cache_begin_t()); }
+
+ void priv_erasure_update_cache(detail::bool_<true>)
+ {
+ if(constant_time_size && !size()){
+ priv_initialize_cache();
+ }
+ else{
+ size_type current_n = this->bucket_hash_equal_.cached_begin_ - priv_buckets();
+ for( const size_type num_buckets = this->priv_buckets_len()
+ ; current_n < num_buckets
+ ; ++current_n, ++this->bucket_hash_equal_.cached_begin_){
+ if(!this->bucket_hash_equal_.cached_begin_->empty()){
+ return;
+ }
+ }
+ priv_initialize_cache();
+ }
+ }
+
+ void priv_erasure_update_cache(detail::bool_<false>)
+ {}
+
+ void priv_swap_cache(detail::bool_<true>, hashtable_impl &other)
+ {
+ std::swap( this->bucket_hash_equal_.cached_begin_
+ , other.bucket_hash_equal_.cached_begin_);
+ }
+
+ void priv_swap_cache(detail::bool_<false>, hashtable_impl &)
+ {}
+
+ bucket_ptr priv_get_cache()
+ { return priv_get_cache(cache_begin_t()); }
+
+ bucket_ptr priv_get_cache(detail::bool_<true>)
+ { return this->bucket_hash_equal_.cached_begin_; }
+
+ bucket_ptr priv_get_cache(detail::bool_<false>)
+ { return this->priv_buckets(); }
+
+ void priv_set_cache(bucket_ptr p)
+ { priv_set_cache(p, cache_begin_t()); }
+
+ void priv_set_cache(bucket_ptr p, detail::bool_<true>)
+ { this->bucket_hash_equal_.cached_begin_ = p; }
+
+ void priv_set_cache(bucket_ptr, detail::bool_<false>)
+ {}
+
+ size_type priv_get_cache_bucket_num()
+ { return priv_get_cache_bucket_num(cache_begin_t()); }
+
+ size_type priv_get_cache_bucket_num(detail::bool_<true>)
+ { return this->bucket_hash_equal_.cached_begin_ - this->priv_buckets(); }
+
+ size_type priv_get_cache_bucket_num(detail::bool_<false>)
+ { return 0u; }
+
    void priv_clear_buckets()
- { priv_clear_buckets(this->priv_buckets(), this->priv_buckets_len()); }
+ {
+ this->priv_clear_buckets
+ ( priv_get_cache()
+ , this->priv_buckets_len() - (priv_get_cache() - priv_buckets()));
+ }
+
+ void priv_initialize_buckets()
+ {
+ this->priv_clear_buckets
+ ( priv_buckets(), this->priv_buckets_len());
+ }
 
- static void priv_clear_buckets(bucket_ptr buckets_ptr, size_type buckets_len)
+ void priv_clear_buckets(bucket_ptr buckets_ptr, size_type buckets_len)
    {
       for(; buckets_len--; ++buckets_ptr){
          if(safemode_or_autounlink){
+ priv_clear_group_nodes(*buckets_ptr, optimize_multikey_t());
             buckets_ptr->clear_and_dispose(detail::init_disposer<node_algorithms>());
          }
          else{
             buckets_ptr->clear();
          }
       }
+ priv_initialize_cache();
    }
 
    template<class KeyType, class KeyHasher, class KeyValueEqual>
    siterator priv_find
       ( const KeyType &key, KeyHasher hash_func
- , KeyValueEqual equal_func, size_type &bucket_number, size_type &h) const
+ , KeyValueEqual equal_func, size_type &bucket_number, std::size_t &h, siterator &previt) const
    {
- bucket_number = from_hash_to_bucket((h = hash_func(key)));
+ bucket_number = priv_hash_to_bucket((h = hash_func(key)));
 
       if(constant_time_size && this->empty()){
- return invalid_local_it(this->get_real_bucket_traits());
+ return priv_invalid_local_it();
       }
       
       bucket_type &b = this->priv_buckets()[bucket_number];
- siterator it = b.begin();
+ previt = b.before_begin();
+ siterator it = previt;
+ ++it;
 
       while(it != b.end()){
- const value_type &v =
- *this->get_real_value_traits().to_value_ptr(it.pointed_node());
- if(equal_func(key, v)){
+ const value_type &v = priv_value_from_slist_node(it.pointed_node());
+ if(compare_hash){
+ std::size_t vh = this->priv_stored_hash(v, store_hash_t());
+ if(h == vh && equal_func(key, v)){
+ return it;
+ }
+ }
+ else if(equal_func(key, v)){
             return it;
          }
+ if(optimize_multikey){
+ previt = bucket_type::s_iterator_to
+ (*priv_get_last_in_group(dcast_bucket_ptr(it.pointed_node())));
+ it = previt;
+ }
+ else{
+ previt = it;
+ }
          ++it;
       }
 
- return invalid_local_it(this->get_real_bucket_traits());
+ return priv_invalid_local_it();
    }
 
    template<class KeyType, class KeyHasher, class KeyValueEqual>
@@ -1820,33 +2489,52 @@
       , size_type &bucket_number_second
       , size_type &count) const
    {
- size_type h;
+ std::size_t h;
       count = 0;
+ siterator prev;
       //Let's see if the element is present
       std::pair<siterator, siterator> to_return
- ( priv_find(key, hash_func, equal_func, bucket_number_first, h)
- , invalid_local_it(this->get_real_bucket_traits()));
+ ( priv_find(key, hash_func, equal_func, bucket_number_first, h, prev)
+ , priv_invalid_local_it());
       if(to_return.first == to_return.second){
          bucket_number_second = bucket_number_first;
          return to_return;
       }
- ++count;
       //If it's present, find the first that it's not equal in
       //the same bucket
       bucket_type &b = this->priv_buckets()[bucket_number_first];
       siterator it = to_return.first;
- ++it;
-
- while(it != b.end()){
- const value_type &v =
- *this->get_real_value_traits().to_value_ptr(it.pointed_node());
- if(!equal_func(key, v)){
- to_return.second = it;
+ if(optimize_multikey){
+ to_return.second = bucket_type::s_iterator_to
+ (*node_traits::get_next(priv_get_last_in_group
+ (dcast_bucket_ptr(it.pointed_node()))));
+ count = std::distance(it, to_return.second);
+ if(to_return.second != b.end()){
             bucket_number_second = bucket_number_first;
             return to_return;
          }
- ++it;
+ }
+ else{
          ++count;
+ ++it;
+ while(it != b.end()){
+ const value_type &v = priv_value_from_slist_node(it.pointed_node());
+ if(compare_hash){
+ std::size_t hv = this->priv_stored_hash(v, store_hash_t());
+ if(hv != h || !equal_func(key, v)){
+ to_return.second = it;
+ bucket_number_second = bucket_number_first;
+ return to_return;
+ }
+ }
+ else if(!equal_func(key, v)){
+ to_return.second = it;
+ bucket_number_second = bucket_number_first;
+ return to_return;
+ }
+ ++it;
+ ++count;
+ }
       }
    
       //If we reached the end, find the first, non-empty bucket
@@ -1861,22 +2549,25 @@
       }
 
       //Otherwise, return the end node
- to_return.second = invalid_local_it(this->get_real_bucket_traits());
+ to_return.second = priv_invalid_local_it();
       return to_return;
    }
    /// @endcond
 };
 
 /// @cond
-template<class T, class O1 = none, class O2 = none
- , class O3 = none, class O4 = none
- , class O5 = none, class O6 = none
- , class O7 = none
- >
+template < class T
+ , bool UniqueKeys
+ , class O1 = none, class O2 = none
+ , class O3 = none, class O4 = none
+ , class O5 = none, class O6 = none
+ , class O7 = none, class O8 = none
+ , class O9 = none
+ >
 struct make_hashtable_opt
 {
    typedef typename pack_options
- < uset_defaults<T>, O1, O2, O3, O4, O5, O6, O7>::type packed_options;
+ < uset_defaults<T>, O1, O2, O3, O4, O5, O6, O7, O8, O9>::type packed_options;
 
    //Real value traits must be calculated from options
    typedef typename detail::get_value_traits
@@ -1891,9 +2582,13 @@
>::type real_value_traits;
    typedef typename packed_options::bucket_traits specified_bucket_traits;
    /// @endcond
- //Real bucket traits must be calculated from options and calculated valute_traits
- typedef typename get_slist_impl
- <typename real_value_traits::node_traits>::type slist_impl;
+
+ //Real bucket traits must be calculated from options and calculated value_traits
+ typedef typename detail::get_slist_impl
+ <typename detail::reduced_slist_node_traits
+ <typename real_value_traits::node_traits>::type
+ >::type slist_impl;
+
    typedef typename
       detail::if_c< detail::is_same
                      < specified_bucket_traits
@@ -1905,12 +2600,15 @@
 
    typedef usetopt
       < value_traits
+ , UniqueKeys
       , typename packed_options::hash
       , typename packed_options::equal
       , typename packed_options::size_type
       , packed_options::constant_time_size
       , real_bucket_traits
       , packed_options::power_2_buckets
+ , packed_options::cache_begin
+ , packed_options::compare_hash
> type;
 };
 /// @endcond
@@ -1923,7 +2621,8 @@
 template<class T, class O1 = none, class O2 = none
                 , class O3 = none, class O4 = none
                 , class O5 = none, class O6 = none
- , class O7 = none
+ , class O7 = none, class O8 = none
+ , class O9 = none
>
 #endif
 struct make_hashtable
@@ -1931,7 +2630,7 @@
    /// @cond
    typedef hashtable_impl
       < typename make_hashtable_opt
- <T, O1, O2, O3, O4, O5, O6, O7>::type
+ <T, false, O1, O2, O3, O4, O5, O6, O7, O8, O9>::type
> implementation_defined;
 
    /// @endcond
@@ -1939,12 +2638,12 @@
 };
 
 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
-template<class T, class O1, class O2, class O3, class O4, class O5, class O6, class O7>
+template<class T, class O1, class O2, class O3, class O4, class O5, class O6, class O7, class O8, class O9>
 class hashtable
- : public make_hashtable<T, O1, O2, O3, O4, O5, O6, O7>::type
+ : public make_hashtable<T, O1, O2, O3, O4, O5, O6, O7, O8, O9>::type
 {
    typedef typename make_hashtable
- <T, O1, O2, O3, O4, O5, O6, O7>::type Base;
+ <T, O1, O2, O3, O4, O5, O6, O7, O8, O9>::type Base;
 
    public:
    typedef typename Base::value_traits value_traits;

Modified: branches/CMake/release/boost/intrusive/intrusive_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/intrusive_fwd.hpp (original)
+++ branches/CMake/release/boost/intrusive/intrusive_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -283,8 +283,7 @@
>
 class bs_set_member_hook;
 
-//hash/unordered
-//rbtree/set/multiset
+//hashtable/unordered_set/unordered_multiset
 template
    < class T
    , class O1 = none
@@ -294,6 +293,8 @@
    , class O5 = none
    , class O6 = none
    , class O7 = none
+ , class O8 = none
+ , class O9 = none
>
 class hashtable;
 
@@ -306,6 +307,8 @@
    , class O5 = none
    , class O6 = none
    , class O7 = none
+ , class O8 = none
+ , class O9 = none
>
 class unordered_set;
 
@@ -318,6 +321,8 @@
    , class O5 = none
    , class O6 = none
    , class O7 = none
+ , class O8 = none
+ , class O9 = none
>
 class unordered_multiset;
 
@@ -337,6 +342,20 @@
>
 class unordered_set_member_hook;
 
+template
+ < class O1 = none
+ , class O2 = none
+ , class O3 = none
+ >
+class any_base_hook;
+
+template
+ < class O1 = none
+ , class O2 = none
+ , class O3 = none
+ >
+class any_member_hook;
+
 } //namespace intrusive {
 } //namespace boost {
 

Modified: branches/CMake/release/boost/intrusive/linear_slist_algorithms.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/linear_slist_algorithms.hpp (original)
+++ branches/CMake/release/boost/intrusive/linear_slist_algorithms.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -53,6 +53,7 @@
    typedef detail::common_slist_algorithms<NodeTraits> base_t;
    /// @endcond
    public:
+ typedef typename NodeTraits::node node;
    typedef typename NodeTraits::node_ptr node_ptr;
    typedef typename NodeTraits::const_node_ptr const_node_ptr;
    typedef NodeTraits node_traits;
@@ -136,7 +137,7 @@
    //!
    //! <b>Throws</b>: Nothing.
    static void init_header(node_ptr this_node)
- { NodeTraits::set_next(this_node, 0); }
+ { NodeTraits::set_next(this_node, node_ptr(0)); }
 
    //! <b>Requires</b>: this_node and prev_init_node must be in the same linear list.
    //!
@@ -195,7 +196,7 @@
    //! <b>Complexity</b>: This function is linear to the contained elements.
    static node_ptr reverse(node_ptr p)
    {
- if(!p) return 0;
+ if(!p) return node_ptr(0);
       node_ptr i = NodeTraits::get_next(p);
       node_ptr first(p);
       while(i){
@@ -218,7 +219,7 @@
    //! <b>Complexity</b>: Linear to the number of elements plus the number moved positions.
    static std::pair<node_ptr, node_ptr> move_first_n_backwards(node_ptr p, std::size_t n)
    {
- std::pair<node_ptr, node_ptr> ret(0, 0);
+ std::pair<node_ptr, node_ptr> ret(node_ptr(0), node_ptr(0));
       //Null shift, or count() == 0 or 1, nothing to do
       if(!n || !p || !NodeTraits::get_next(p)){
          return ret;
@@ -252,12 +253,12 @@
       //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){
- old_last = base_t::get_previous_node(first, 0);
+ old_last = base_t::get_previous_node(first, node_ptr(0));
       }
       
       //Now link p after the new last node
       NodeTraits::set_next(old_last, p);
- NodeTraits::set_next(new_last, 0);
+ NodeTraits::set_next(new_last, node_ptr(0));
       ret.first = first;
       ret.second = new_last;
       return ret;
@@ -273,7 +274,7 @@
    //! <b>Complexity</b>: Linear to the number of elements plus the number moved positions.
    static std::pair<node_ptr, node_ptr> move_first_n_forward(node_ptr p, std::size_t n)
    {
- std::pair<node_ptr, node_ptr> ret(0, 0);
+ std::pair<node_ptr, node_ptr> ret(node_ptr(0), node_ptr(0));
       //Null shift, or count() == 0 or 1, nothing to do
       if(!n || !p || !NodeTraits::get_next(p))
          return ret;
@@ -311,7 +312,7 @@
       node_ptr new_first(node_traits::get_next(new_last));
       //Now put the old beginning after the old end
       NodeTraits::set_next(old_last, p);
- NodeTraits::set_next(new_last, 0);
+ NodeTraits::set_next(new_last, node_ptr(0));
       ret.first = new_first;
       ret.second = new_last;
       return ret;

Modified: branches/CMake/release/boost/intrusive/list.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/list.hpp (original)
+++ branches/CMake/release/boost/intrusive/list.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -24,7 +24,7 @@
 #include <boost/intrusive/link_mode.hpp>
 #include <boost/static_assert.hpp>
 #include <boost/intrusive/options.hpp>
-#include <boost/intrusive/detail/no_exceptions_support.hpp>
+#include <boost/intrusive/detail/utilities.hpp>
 #include <iterator>
 #include <algorithm>
 #include <functional>
@@ -586,7 +586,7 @@
    iterator erase(iterator i)
    { return this->erase_and_dispose(i, detail::null_disposer()); }
 
- //! <b>Requires</b>: first and last must be valid iterator to elements in *this.
+ //! <b>Requires</b>: b and e must be valid iterators to elements in *this.
    //!
    //! <b>Effects</b>: Erases the element range pointed by b and e
    //! No destructors are called.
@@ -596,8 +596,8 @@
    //!
    //! <b>Throws</b>: Nothing.
    //!
- //! <b>Complexity</b>: Linear to the number of elements erased if it's a safe-mode
- //! or auto-unlink value. Constant time otherwise.
+ //! <b>Complexity</b>: Linear to the number of erased elements if it's a safe-mode
+ //! or auto-unlink value, or constant-time size is enabled. Constant-time otherwise.
    //!
    //! <b>Note</b>: Invalidates the iterators (but not the references) to the
    //! erased elements.
@@ -612,6 +612,37 @@
       }
    }
 
+ //! <b>Requires</b>: b and e must be valid iterators to elements in *this.
+ //! n must be std::distance(b, e).
+ //!
+ //! <b>Effects</b>: Erases the element range pointed by b and e
+ //! No destructors are called.
+ //!
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
+ //! or end() if no such element exists.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Linear to the number of erased elements if it's a safe-mode
+ //! or auto-unlink value is enabled. Constant-time otherwise.
+ //!
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
+ //! erased elements.
+ iterator erase(iterator b, iterator e, difference_type n)
+ {
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(std::distance(b, e) == difference_type(n));
+ if(safemode_or_autounlink || constant_time_size){
+ return this->erase_and_dispose(b, e, detail::null_disposer());
+ }
+ else{
+ if(constant_time_size){
+ this->priv_size_traits().set_size(this->priv_size_traits().get_size() - n);
+ }
+ node_algorithms::unlink(b.pointed_node(), e.pointed_node());
+ return e;
+ }
+ }
+
    //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
    //!
    //! <b>Effects</b>: Erases the element pointed by i of the list.
@@ -732,17 +763,13 @@
    void clone_from(const list_impl &src, Cloner cloner, Disposer disposer)
    {
       this->clear_and_dispose(disposer);
- BOOST_INTRUSIVE_TRY{
- const_iterator b(src.begin()), e(src.end());
- for(; b != e; ++b){
- this->push_back(*cloner(*b));
- }
- }
- BOOST_INTRUSIVE_CATCH(...){
- this->clear_and_dispose(disposer);
- BOOST_INTRUSIVE_RETHROW;
+ detail::exception_disposer<list_impl, Disposer>
+ rollback(*this, disposer);
+ const_iterator b(src.begin()), e(src.end());
+ for(; b != e; ++b){
+ this->push_back(*cloner(*b));
       }
- BOOST_INTRUSIVE_CATCH_END
+ rollback.release();
    }
 
    //! <b>Requires</b>: value must be an lvalue and p must be a valid iterator of *this.

Modified: branches/CMake/release/boost/intrusive/options.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/options.hpp (original)
+++ branches/CMake/release/boost/intrusive/options.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -49,15 +49,56 @@
    typedef typename BucketTraits::bucket_traits type;
 };
 
-template<class T, class BaseHook>
-struct get_base_value_traits
+template <class T, class BaseHook>
+struct concrete_hook_base_value_traits
+{
+ typedef typename BaseHook::boost_intrusive_tags tags;
+ typedef detail::base_hook_traits
+ < T
+ , typename tags::node_traits
+ , tags::link_mode
+ , typename tags::tag
+ , tags::hook_type> type;
+};
+
+template <class BaseHook>
+struct concrete_hook_base_node_traits
+{ typedef typename BaseHook::boost_intrusive_tags::node_traits type; };
+
+template <class T, class BaseHook>
+struct any_hook_base_value_traits
 {
+ typedef typename BaseHook::boost_intrusive_tags tags;
    typedef detail::base_hook_traits
       < T
- , typename BaseHook::boost_intrusive_tags::node_traits
- , BaseHook::boost_intrusive_tags::link_mode
- , typename BaseHook::boost_intrusive_tags::tag
- , BaseHook::boost_intrusive_tags::hook_type> type;
+ , typename BaseHook::node_traits
+ , tags::link_mode
+ , typename tags::tag
+ , tags::hook_type> type;
+};
+
+template <class BaseHook>
+struct any_hook_base_node_traits
+{ typedef typename BaseHook::node_traits type; };
+
+template<class T, class BaseHook>
+struct get_base_value_traits
+{
+ typedef typename detail::eval_if_c
+ < internal_any_hook_bool_is_true<BaseHook>::value
+ , any_hook_base_value_traits<T, BaseHook>
+ , concrete_hook_base_value_traits<T, BaseHook>
+ >::type type;
+};
+
+template<class BaseHook>
+struct get_base_node_traits
+{
+ typedef typename detail::eval_if_c
+ < internal_any_hook_bool_is_true<BaseHook>::value
+ , any_hook_base_node_traits<BaseHook>
+ , concrete_hook_base_node_traits<BaseHook>
+ >::type type;
 };
 
 template<class T, class MemberHook>
@@ -66,6 +107,12 @@
    typedef typename MemberHook::member_value_traits type;
 };
 
+template<class MemberHook>
+struct get_member_node_traits
+{
+ typedef typename MemberHook::member_value_traits::node_traits type;
+};
+
 template<class T, class SupposedValueTraits>
 struct get_value_traits
 {
@@ -86,25 +133,12 @@
>::type type;
 };
 
-template<class BaseHook>
-struct get_base_node_traits
-{
- typedef typename BaseHook::boost_intrusive_tags::node_traits type;
-};
-
-template<class MemberHook>
-struct get_member_node_traits
-{
- typedef typename MemberHook::member_value_traits::node_traits type;
-};
-
 template<class ValueTraits>
 struct get_explicit_node_traits
 {
    typedef typename ValueTraits::node_traits type;
 };
 
-
 template<class SupposedValueTraits>
 struct get_node_traits
 {
@@ -125,7 +159,6 @@
>::type type;
 };
 
-
 } //namespace detail{
 
 
@@ -258,7 +291,6 @@
 struct member_hook
 {
 /// @cond
- typedef char Parent::* GenericPtrToMember;
    typedef detail::member_hook_traits
       < Parent
       , MemberHook
@@ -272,6 +304,7 @@
 /// @endcond
 };
 
+
 //!This option setter specifies that the container
 //!must use the specified base hook
 template<typename BaseHook>
@@ -406,6 +439,24 @@
 /// @endcond
 };
 
+//!This option setter specifies if the unordered hook
+//!should offer room to store another link to another node
+//!with the same key.
+//!Storing this link will speed up lookups and insertions on
+//!unordered_multiset containers with a great number of elements
+//!with the same key.
+template<bool Enabled>
+struct optimize_multikey
+{
+/// @cond
+ template<class Base>
+ struct pack : Base
+ {
+ static const bool optimize_multikey = Enabled;
+ };
+/// @endcond
+};
+
 //!This option setter specifies if the bucket array will be always power of two.
 //!This allows using masks instead of the default modulo operation to determine
 //!the bucket number from the hash value, leading to better performance.
@@ -423,6 +474,41 @@
 /// @endcond
 };
 
+//!This option setter specifies if the container will cache a pointer to the first
+//!non-empty bucket so that begin() is always constant-time.
+//!This is specially helpful when we can have containers with a few elements
+//!but with big bucket arrays (that is, hashtables with low load factors).
+template<bool Enabled>
+struct cache_begin
+{
+/// @cond
+ template<class Base>
+ struct pack : Base
+ {
+ static const bool cache_begin = Enabled;
+ };
+/// @endcond
+};
+
+
+//!This option setter specifies if the container will compare the hash value
+//!before comparing objects. This option can't be specified if store_hash<>
+//!is not true.
+//!This is specially helpful when we have containers with a high load factor.
+//!and the comparison function is much more expensive that comparing already
+//!stored hash values.
+template<bool Enabled>
+struct compare_hash
+{
+/// @cond
+ template<class Base>
+ struct pack : Base
+ {
+ static const bool compare_hash = Enabled;
+ };
+/// @endcond
+};
+
 /// @cond
 
 template<class Prev, class Next>
@@ -500,6 +586,7 @@
       , optimize_size<false>
       , store_hash<false>
       , linear<false>
+ , optimize_multikey<false>
>::type
 {};
 

Deleted: branches/CMake/release/boost/intrusive/pointer_plus_2_bits.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/pointer_plus_2_bits.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
+++ (empty file)
@@ -1,82 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-//
-// (C) Copyright Ion Gaztanaga 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)
-//
-// See http://www.boost.org/libs/intrusive for documentation.
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef BOOST_INTRUSIVE_POINTER_PLUS_2_BIT_HPP
-#define BOOST_INTRUSIVE_POINTER_PLUS_2_BIT_HPP
-
-namespace boost {
-namespace intrusive {
-
-//!This trait class is used to know if a pointer
-//!can embed 2 extra bits of information if
-//!it's going to be used to point to objects
-//!with an alignment of "Alignment" bytes.
-template<class VoidPointer, std::size_t Alignment>
-struct has_pointer_plus_2_bits
-{
- static const bool value = false;
-};
-
-//!This is an specialization for raw pointers.
-//!Raw pointers can embed two extra bits in the lower bits
-//!if the alignment is multiple of 4.
-template<std::size_t N>
-struct has_pointer_plus_2_bits<void*, N>
-{
- static const bool value = (N % 4u == 0);
-};
-
-//!This is class that is supposed to have static methods
-//!to embed 2 extra bits of information in a pointer.
-//!
-//!This is a declaration and there is no default implementation,
-//!because operations to embed bits change with every pointer type.
-//!
-//!An implementation that detects that a pointer type whose
-//!has_pointer_plus_2_bits<>::value is non-zero can make use of these
-//!operations to embed bits in the pointer.
-template<class Pointer>
-struct pointer_plus_2_bits
-{
- static const bool value = false;
-};
-
-//!This is the specialization to embed 2 extra bits of information
-//!in a raw pointer. Extra bits are stored in the lower bits of the pointer.
-template<class T>
-struct pointer_plus_2_bits<T*>
-{
- typedef T* pointer;
-
- static pointer get_pointer(pointer n)
- { return pointer(std::size_t(n) & ~std::size_t(3u)); }
-
- static void set_pointer(pointer &n, pointer p)
- {
- assert(0 == (std::size_t(p) & std::size_t(3u)));
- n = pointer(std::size_t(p) | (std::size_t(n) & std::size_t(3u)));
- }
-
- static std::size_t get_bits(pointer n)
- { return (std::size_t(n) & std::size_t(3u)); }
-
- static void set_bits(pointer &n, std::size_t c)
- {
- assert(c < 4);
- n = pointer(std::size_t(get_pointer(n)) | c);
- }
-};
-
-} //namespace intrusive
-} //namespace boost
-
-#endif //BOOST_INTRUSIVE_POINTER_PLUS_2_BIT_HPP

Deleted: branches/CMake/release/boost/intrusive/pointer_plus_bit.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/pointer_plus_bit.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
+++ (empty file)
@@ -1,78 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-//
-// (C) Copyright Ion Gaztanaga 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)
-//
-// See http://www.boost.org/libs/intrusive for documentation.
-//
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef BOOST_INTRUSIVE_POINTER_PLUS_BIT_HPP
-#define BOOST_INTRUSIVE_POINTER_PLUS_BIT_HPP
-
-namespace boost {
-namespace intrusive {
-
-//!This trait class is used to know if a pointer
-//!can embed an extra bit of information if
-//!it's going to be used to point to objects
-//!with an alignment of "Alignment" bytes.
-template<class VoidPointer, std::size_t Alignment>
-struct has_pointer_plus_bit
-{
- static const bool value = false;
-};
-
-//!This is an specialization for raw pointers.
-//!Raw pointers can embed an extra bit in the lower bit
-//!if the alignment is multiple of 2.
-template<std::size_t N>
-struct has_pointer_plus_bit<void*, N>
-{
- static const bool value = (N % 2u == 0);
-};
-
-//!This is class that is supposed to have static methods
-//!to embed an extra bit of information in a pointer.
-//!This is a declaration and there is no default implementation,
-//!because operations to embed the bit change with every pointer type.
-//!
-//!An implementation that detects that a pointer type whose
-//!has_pointer_plus_bit<>::value is non-zero can make use of these
-//!operations to embed the bit in the pointer.
-template<class Pointer>
-struct pointer_plus_bit
-{
- static const bool value = false;
-};
-
-//!This is the specialization to embed an extra bit of information
-//!in a raw pointer. The extra bit is stored in the lower bit of the pointer.
-template<class T>
-struct pointer_plus_bit<T*>
-{
- typedef T* pointer;
-
- static pointer get_pointer(pointer n)
- { return pointer(std::size_t(n) & ~std::size_t(1u)); }
-
- static void set_pointer(pointer &n, pointer p)
- {
- assert(0 == (std::size_t(p) & std::size_t(1u)));
- n = pointer(std::size_t(p) | (std::size_t(n) & std::size_t(1u)));
- }
-
- static bool get_bit(pointer n)
- { return (std::size_t(n) & std::size_t(1u)) != 0; }
-
- static void set_bit(pointer &n, bool c)
- { n = pointer(std::size_t(get_pointer(n)) | std::size_t(c)); }
-};
-
-} //namespace intrusive
-} //namespace boost
-
-#endif //BOOST_INTRUSIVE_POINTER_PLUS_BIT_HPP

Modified: branches/CMake/release/boost/intrusive/rbtree.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/rbtree.hpp (original)
+++ branches/CMake/release/boost/intrusive/rbtree.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -379,7 +379,7 @@
    //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
    //! of rbtree.
    //!
- //! <b>Effects</b>: Returns a const reference to the rbtree associated to the end iterator
+ //! <b>Effects</b>: Returns a const reference to the rbtree associated to the iterator
    //!
    //! <b>Throws</b>: Nothing.
    //!
@@ -387,6 +387,28 @@
    static const rbtree_impl &container_from_end_iterator(const_iterator end_iterator)
    { return priv_container_from_end_iterator(end_iterator); }
 
+ //! <b>Precondition</b>: it must be a valid iterator
+ //! of rbtree.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static rbtree_impl &container_from_iterator(iterator it)
+ { return priv_container_from_iterator(it); }
+
+ //! <b>Precondition</b>: it must be a valid end const_iterator
+ //! of rbtree.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the tree associated to the end iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static const rbtree_impl &container_from_iterator(const_iterator it)
+ { return priv_container_from_iterator(it); }
+
    //! <b>Effects</b>: Returns the value_compare object used by the tree.
    //!
    //! <b>Complexity</b>: Constant.
@@ -1176,33 +1198,26 @@
    static void init_node(reference value)
    { node_algorithms::init(value_traits::to_node_ptr(value)); }
 
-/*
- //! <b>Effects</b>: removes x from a tree of the appropriate type. It has no effect,
- //! if x is not in such a tree.
+ //! <b>Effects</b>: removes "value" from the container.
    //!
    //! <b>Throws</b>: Nothing.
    //!
- //! <b>Complexity</b>: Constant time.
+ //! <b>Complexity</b>: Logarithmic time.
    //!
- //! <b>Note</b>: This static function is only usable with the "safe mode"
- //! hook and non-constant time size lists. Otherwise, the user must use
- //! the non-static "erase(reference )" member. If the user calls
- //! this function with a non "safe mode" or constant time size list
- //! a compilation error will be issued.
- template<class T>
- static void remove_node(T& value)
- {
- //This function is only usable for safe mode hooks and non-constant
- //time lists.
- //BOOST_STATIC_ASSERT((!(safemode_or_autounlink && constant_time_size)));
+ //! <b>Note</b>: This static function is only usable with non-constant
+ //! time size containers that have stateless comparison functors.
+ //!
+ //! If the user calls
+ //! this function with a constant time size container or stateful comparison
+ //! functor a compilation error will be issued.
+ static void remove_node(reference value)
+ {
       BOOST_STATIC_ASSERT((!constant_time_size));
- BOOST_STATIC_ASSERT((boost::is_convertible<T, value_type>::value));
       node_ptr to_remove(value_traits::to_node_ptr(value));
- node_algorithms::unlink_and_rebalance(to_remove);
+ node_algorithms::unlink(to_remove);
       if(safemode_or_autounlink)
          node_algorithms::init(to_remove);
    }
-*/
 
    /// @cond
    private:
@@ -1233,6 +1248,9 @@
       rbtree_impl *rb = detail::parent_from_member<rbtree_impl, data_t>(d, &rbtree_impl::data_);
       return *rb;
    }
+
+ static rbtree_impl &priv_container_from_iterator(const const_iterator &it)
+ { return priv_container_from_end_iterator(it.end_iterator_from_it()); }
 };
 
 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
@@ -1426,6 +1444,12 @@
 
    static const rbtree &container_from_end_iterator(const_iterator end_iterator)
    { return static_cast<const rbtree &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static rbtree &container_from_it(iterator it)
+ { return static_cast<rbtree &>(Base::container_from_iterator(it)); }
+
+ static const rbtree &container_from_it(const_iterator it)
+ { return static_cast<const rbtree &>(Base::container_from_iterator(it)); }
 };
 
 #endif

Modified: branches/CMake/release/boost/intrusive/rbtree_algorithms.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/rbtree_algorithms.hpp (original)
+++ branches/CMake/release/boost/intrusive/rbtree_algorithms.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -54,7 +54,6 @@
 #include <boost/intrusive/intrusive_fwd.hpp>
 
 #include <boost/intrusive/detail/assert.hpp>
-#include <boost/intrusive/detail/no_exceptions_support.hpp>
 #include <boost/intrusive/detail/utilities.hpp>
 #include <boost/intrusive/detail/tree_algorithms.hpp>
 
@@ -117,6 +116,7 @@
 {
    public:
    typedef NodeTraits node_traits;
+ typedef typename NodeTraits::node node;
    typedef typename NodeTraits::node_ptr node_ptr;
    typedef typename NodeTraits::const_node_ptr const_node_ptr;
    typedef typename NodeTraits::color color;
@@ -124,7 +124,6 @@
    /// @cond
    private:
 
- typedef typename NodeTraits::node node;
    typedef detail::tree_algorithms<NodeTraits> tree_algorithms;
 
    template<class F>
@@ -695,6 +694,16 @@
       rebalance_after_insertion(header, new_value);
    }
 
+ //! <b>Requires</b>: "n" must be a node inserted in a tree.
+ //!
+ //! <b>Effects</b>: Returns a pointer to the header node of the tree.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr get_header(node_ptr n)
+ { return tree_algorithms::get_header(n); }
+
    /// @cond
    private:
 

Modified: branches/CMake/release/boost/intrusive/set.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/set.hpp (original)
+++ branches/CMake/release/boost/intrusive/set.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -226,7 +226,7 @@
    //! <b>Precondition</b>: end_iterator must be a valid end iterator
    //! of set.
    //!
- //! <b>Effects</b>: Returns a const reference to the set associated to the end iterator
+ //! <b>Effects</b>: Returns a reference to the set associated to the end iterator
    //!
    //! <b>Throws</b>: Nothing.
    //!
@@ -253,6 +253,34 @@
          , &set_impl::tree_);
    }
 
+ //! <b>Precondition</b>: it must be a valid iterator of set.
+ //!
+ //! <b>Effects</b>: Returns a reference to the set associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static set_impl &container_from_iterator(iterator it)
+ {
+ return *detail::parent_from_member<set_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &set_impl::tree_);
+ }
+
+ //! <b>Precondition</b>: it must be a valid const_iterator of set.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the set associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static const set_impl &container_from_iterator(const_iterator it)
+ {
+ return *detail::parent_from_member<set_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &set_impl::tree_);
+ }
+
    //! <b>Effects</b>: Returns the key_compare object used by the set.
    //!
    //! <b>Complexity</b>: Constant.
@@ -1086,6 +1114,12 @@
 
    static const set &container_from_end_iterator(const_iterator end_iterator)
    { return static_cast<const set &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static set &container_from_iterator(iterator it)
+ { return static_cast<set &>(Base::container_from_iterator(it)); }
+
+ static const set &container_from_iterator(const_iterator it)
+ { return static_cast<const set &>(Base::container_from_iterator(it)); }
 };
 
 #endif
@@ -1318,6 +1352,34 @@
          , &multiset_impl::tree_);
    }
 
+ //! <b>Precondition</b>: it must be a valid iterator of multiset.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Constant.
+ static multiset_impl &container_from_iterator(iterator it)
+ {
+ return *detail::parent_from_member<multiset_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &multiset_impl::tree_);
+ }
+
+ //! <b>Precondition</b>: it must be a valid const_iterator of multiset.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Constant.
+ static const multiset_impl &container_from_iterator(const_iterator it)
+ {
+ return *detail::parent_from_member<multiset_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &multiset_impl::tree_);
+ }
+
    //! <b>Effects</b>: Returns the key_compare object used by the multiset.
    //!
    //! <b>Complexity</b>: Constant.
@@ -1932,6 +1994,21 @@
    void replace_node(iterator replace_this, reference with_this)
    { tree_.replace_node(replace_this, with_this); }
 
+ //! <b>Effects</b>: removes "value" from the container.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic time.
+ //!
+ //! <b>Note</b>: This static function is only usable with non-constant
+ //! time size containers that have stateless comparison functors.
+ //!
+ //! If the user calls
+ //! this function with a constant time size container or stateful comparison
+ //! functor a compilation error will be issued.
+ static void remove_node(reference value)
+ { tree_type::remove_node(value); }
+
    /// @cond
    friend bool operator==(const multiset_impl &x, const multiset_impl &y)
    { return x.tree_ == y.tree_; }
@@ -2058,6 +2135,12 @@
 
    static const multiset &container_from_end_iterator(const_iterator end_iterator)
    { return static_cast<const multiset &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static multiset &container_from_iterator(iterator it)
+ { return static_cast<multiset &>(Base::container_from_iterator(it)); }
+
+ static const multiset &container_from_iterator(const_iterator it)
+ { return static_cast<const multiset &>(Base::container_from_iterator(it)); }
 };
 
 #endif

Modified: branches/CMake/release/boost/intrusive/sg_set.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/sg_set.hpp (original)
+++ branches/CMake/release/boost/intrusive/sg_set.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -252,6 +252,34 @@
          , &sg_set_impl::tree_);
    }
 
+ //! <b>Precondition</b>: it must be a valid iterator of set.
+ //!
+ //! <b>Effects</b>: Returns a reference to the set associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static sg_set_impl &container_from_iterator(iterator it)
+ {
+ return *detail::parent_from_member<sg_set_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &sg_set_impl::tree_);
+ }
+
+ //! <b>Precondition</b>: it must be a valid const_iterator of set.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the set associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static const sg_set_impl &container_from_iterator(const_iterator it)
+ {
+ return *detail::parent_from_member<sg_set_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &sg_set_impl::tree_);
+ }
+
    //! <b>Effects</b>: Returns the key_compare object used by the sg_set.
    //!
    //! <b>Complexity</b>: Constant.
@@ -1124,6 +1152,12 @@
 
    static const sg_set &container_from_end_iterator(const_iterator end_iterator)
    { return static_cast<const sg_set &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static sg_set &container_from_iterator(iterator it)
+ { return static_cast<sg_set &>(Base::container_from_iterator(it)); }
+
+ static const sg_set &container_from_iterator(const_iterator it)
+ { return static_cast<const sg_set &>(Base::container_from_iterator(it)); }
 };
 
 #endif
@@ -1356,6 +1390,34 @@
          , &sg_multiset_impl::tree_);
    }
 
+ //! <b>Precondition</b>: it must be a valid iterator of multiset.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Constant.
+ static sg_multiset_impl &container_from_iterator(iterator it)
+ {
+ return *detail::parent_from_member<sg_multiset_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &sg_multiset_impl::tree_);
+ }
+
+ //! <b>Precondition</b>: it must be a valid const_iterator of multiset.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Constant.
+ static const sg_multiset_impl &container_from_iterator(const_iterator it)
+ {
+ return *detail::parent_from_member<sg_multiset_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &sg_multiset_impl::tree_);
+ }
+
    //! <b>Effects</b>: Returns the key_compare object used by the sg_multiset.
    //!
    //! <b>Complexity</b>: Constant.
@@ -2135,6 +2197,12 @@
 
    static const sg_multiset &container_from_end_iterator(const_iterator end_iterator)
    { return static_cast<const sg_multiset &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static sg_multiset &container_from_iterator(iterator it)
+ { return static_cast<sg_multiset &>(Base::container_from_iterator(it)); }
+
+ static const sg_multiset &container_from_iterator(const_iterator it)
+ { return static_cast<const sg_multiset &>(Base::container_from_iterator(it)); }
 };
 
 #endif

Modified: branches/CMake/release/boost/intrusive/sgtree.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/sgtree.hpp (original)
+++ branches/CMake/release/boost/intrusive/sgtree.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -527,6 +527,28 @@
    static const sgtree_impl &container_from_end_iterator(const_iterator end_iterator)
    { return priv_container_from_end_iterator(end_iterator); }
 
+ //! <b>Precondition</b>: it must be a valid iterator
+ //! of rbtree.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static sgtree_impl &container_from_iterator(iterator it)
+ { return priv_container_from_iterator(it); }
+
+ //! <b>Precondition</b>: it must be a valid end const_iterator
+ //! of rbtree.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static const sgtree_impl &container_from_iterator(const_iterator it)
+ { return priv_container_from_iterator(it); }
+
    //! <b>Effects</b>: Returns the value_compare object used by the tree.
    //!
    //! <b>Complexity</b>: Constant.
@@ -1442,6 +1464,9 @@
       sgtree_impl *scapegoat = detail::parent_from_member<sgtree_impl, data_t>(d, &sgtree_impl::data_);
       return *scapegoat;
    }
+
+ static sgtree_impl &priv_container_from_iterator(const const_iterator &it)
+ { return priv_container_from_end_iterator(it.end_iterator_from_it()); }
 };
 
 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED

Modified: branches/CMake/release/boost/intrusive/sgtree_algorithms.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/sgtree_algorithms.hpp (original)
+++ branches/CMake/release/boost/intrusive/sgtree_algorithms.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -22,7 +22,6 @@
 #include <cstddef>
 #include <boost/intrusive/intrusive_fwd.hpp>
 #include <boost/intrusive/detail/assert.hpp>
-#include <boost/intrusive/detail/no_exceptions_support.hpp>
 #include <boost/intrusive/detail/utilities.hpp>
 #include <boost/intrusive/detail/tree_algorithms.hpp>
 
@@ -59,6 +58,7 @@
 class sgtree_algorithms
 {
    public:
+ typedef typename NodeTraits::node node;
    typedef NodeTraits node_traits;
    typedef typename NodeTraits::node_ptr node_ptr;
    typedef typename NodeTraits::const_node_ptr const_node_ptr;
@@ -66,7 +66,6 @@
    /// @cond
    private:
 
- typedef typename NodeTraits::node node;
    typedef detail::tree_algorithms<NodeTraits> tree_algorithms;
 
    static node_ptr uncast(const_node_ptr ptr)
@@ -640,6 +639,16 @@
    static node_ptr rebalance_subtree(node_ptr old_root)
    { return tree_algorithms::rebalance_subtree(old_root); }
 
+ //! <b>Requires</b>: "n" must be a node inserted in a tree.
+ //!
+ //! <b>Effects</b>: Returns a pointer to the header node of the tree.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr get_header(node_ptr n)
+ { return tree_algorithms::get_header(n); }
+
    /// @cond
    private:
 

Modified: branches/CMake/release/boost/intrusive/slist.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/slist.hpp (original)
+++ branches/CMake/release/boost/intrusive/slist.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -16,7 +16,6 @@
 
 #include <boost/intrusive/detail/config_begin.hpp>
 #include <boost/static_assert.hpp>
-#include <boost/intrusive/detail/no_exceptions_support.hpp>
 #include <boost/intrusive/detail/assert.hpp>
 #include <boost/intrusive/intrusive_fwd.hpp>
 #include <boost/intrusive/slist_hook.hpp>
@@ -25,6 +24,7 @@
 #include <boost/intrusive/detail/pointer_to_other.hpp>
 #include <boost/intrusive/link_mode.hpp>
 #include <boost/intrusive/options.hpp>
+#include <boost/intrusive/detail/utilities.hpp>
 #include <iterator>
 #include <functional>
 #include <algorithm>
@@ -183,10 +183,12 @@
    BOOST_STATIC_ASSERT(!(cache_last && ((int)real_value_traits::link_mode == (int)auto_unlink)));
 
    node_ptr get_end_node()
- { return node_ptr(linear ? 0 : this->get_root_node()); }
+ { return node_ptr(linear ? node_ptr(0) : this->get_root_node()); }
 
    const_node_ptr get_end_node() const
- { return const_node_ptr(linear ? 0 : this->get_root_node()); }
+ {
+ return const_node_ptr
+ (linear ? const_node_ptr(0) : this->get_root_node()); }
 
    node_ptr get_root_node()
    { return node_ptr(&data_.root_plus_size_.root_); }
@@ -203,13 +205,10 @@
    void set_last_node(node_ptr n)
    { return this->set_last_node(n, detail::bool_<cache_last>()); }
 
- node_ptr get_last_node(detail::bool_<false>)
+ static node_ptr get_last_node(detail::bool_<false>)
    { return node_ptr(0); }
 
- const_node_ptr get_last_node(detail::bool_<false>) const
- { return const_node_ptr(0); }
-
- void set_last_node(node_ptr, detail::bool_<false>)
+ static void set_last_node(node_ptr, detail::bool_<false>)
    {}
 
    node_ptr get_last_node(detail::bool_<true>)
@@ -667,18 +666,14 @@
    void clone_from(const slist_impl &src, Cloner cloner, Disposer disposer)
    {
       this->clear_and_dispose(disposer);
- BOOST_INTRUSIVE_TRY{
- iterator prev(this->before_begin());
- const_iterator b(src.begin()), e(src.end());
- for(; b != e; ++b){
- prev = this->insert_after(prev, *cloner(*b));
- }
+ detail::exception_disposer<slist_impl, Disposer>
+ rollback(*this, disposer);
+ iterator prev(this->before_begin());
+ const_iterator b(src.begin()), e(src.end());
+ for(; b != e; ++b){
+ prev = this->insert_after(prev, *cloner(*b));
       }
- BOOST_INTRUSIVE_CATCH(...){
- this->clear_and_dispose(disposer);
- BOOST_INTRUSIVE_RETHROW;
- }
- BOOST_INTRUSIVE_CATCH_END
+ rollback.release();
    }
 
    //! <b>Requires</b>: value must be an lvalue and prev_p must point to an element
@@ -783,12 +778,64 @@
    //!
    //! <b>Throws</b>: Nothing.
    //!
- //! <b>Complexity</b>: Lineal to the elements (last - before_first + 1).
+ //! <b>Complexity</b>: Linear to the number of erased elements if it's a safe-mode
+ //! , auto-unlink value or constant-time size is activated. Constant time otherwise.
    //!
    //! <b>Note</b>: Invalidates the iterators (but not the references) to the
    //! erased element.
    iterator erase_after(iterator before_first, iterator last)
- { return this->erase_after_and_dispose(before_first, last, detail::null_disposer()); }
+ {
+ if(safemode_or_autounlink || constant_time_size){
+ return this->erase_after_and_dispose(before_first, last, detail::null_disposer());
+ }
+ else{
+ node_ptr bfp = before_first.pointed_node();
+ node_ptr lp = last.pointed_node();
+ if(cache_last){
+ if((lp == this->get_end_node())){
+ this->set_last_node(bfp);
+ }
+ }
+ node_algorithms::unlink_after(bfp, lp);
+ return last;
+ }
+ }
+
+ //! <b>Effects</b>: Erases the range (before_first, last) from
+ //! the list. n must be std::distance(before_first, last) - 1.
+ //! No destructors are called.
+ //!
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
+ //! or end() if no such element exists.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: constant-time if link_mode is normal_link.
+ //! Linear to the elements (last - before_first) otherwise.
+ //!
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
+ //! erased element.
+ iterator erase_after(iterator before_first, iterator last, difference_type n)
+ {
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(std::distance(++iterator(before_first), last) == difference_type(n));
+ if(safemode_or_autounlink){
+ return this->erase_after(before_first, last);
+ }
+ else{
+ node_ptr bfp = before_first.pointed_node();
+ node_ptr lp = last.pointed_node();
+ if(cache_last){
+ if((lp == this->get_end_node())){
+ this->set_last_node(bfp);
+ }
+ }
+ node_algorithms::unlink_after(bfp, lp);
+ if(constant_time_size){
+ this->priv_size_traits().set_size(this->priv_size_traits().get_size() - n);
+ }
+ return last;
+ }
+ }
 
    //! <b>Effects</b>: Erases the element pointed by i of the list.
    //! No destructors are called.
@@ -815,14 +862,30 @@
    //!
    //! <b>Throws</b>: Nothing.
    //!
- //! <b>Complexity</b>: Linear to the number of elements erased plus linear
- //! to the elements before first.
+ //! <b>Complexity</b>: Linear to the elements before last.
    //!
    //! <b>Note</b>: Invalidates the iterators (but not the references) to the
    //! erased elements.
    iterator erase(iterator first, iterator last)
    { return this->erase_after(this->previous(first), last); }
 
+ //! <b>Effects</b>: Erases the range [first, last) from
+ //! the list. n must be std::distance(first, last).
+ //! No destructors are called.
+ //!
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
+ //! or end() if no such element exists.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: linear to the elements before first if link_mode is normal_link
+ //! and constant_time_size is activated. Linear to the elements before last otherwise.
+ //!
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
+ //! erased element.
+ iterator erase(iterator first, iterator last, difference_type n)
+ { return this->erase_after(this->previous(first), last, n); }
+
    //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
    //!
    //! <b>Effects</b>: Erases the element after the element pointed by prev of
@@ -849,13 +912,36 @@
       if(cache_last && (to_erase == this->get_last_node())){
          this->set_last_node(prev_n);
       }
- this->priv_size_traits().decrement();
       if(safemode_or_autounlink)
          node_algorithms::init(to_erase);
       disposer(get_real_value_traits().to_value_ptr(to_erase));
+ this->priv_size_traits().decrement();
+ return it;
+ }
+
+ /// @cond
+
+ template<class Disposer>
+ static iterator s_erase_after_and_dispose(iterator prev, Disposer disposer)
+ {
+ BOOST_STATIC_ASSERT(((!cache_last)&&(!constant_time_size)&&(!stateful_value_traits)));
+ iterator it(prev);
+ ++it;
+ node_ptr to_erase(it.pointed_node());
+ ++it;
+ node_ptr prev_n(prev.pointed_node());
+ node_algorithms::unlink_after(prev_n);
+ if(safemode_or_autounlink)
+ node_algorithms::init(to_erase);
+ disposer(real_value_traits::to_value_ptr(to_erase));
       return it;
    }
 
+ static iterator s_erase_after(iterator prev)
+ { return s_erase_after_and_dispose(prev, detail::null_disposer()); }
+
+ /// @endcond
+
    //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
    //!
    //! <b>Effects</b>: Erases the range (before_first, last) from
@@ -867,7 +953,7 @@
    //!
    //! <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 to the erased element.
    template<class Disposer>
@@ -921,7 +1007,7 @@
    //!
    //! <b>Throws</b>: Nothing.
    //!
- //! <b>Complexity</b>: Linear to the number of elements erased plus linear
+ //! <b>Complexity</b>: Linear to the number of erased elements plus linear
    //! to the elements before first.
    //!
    //! <b>Note</b>: Invalidates the iterators (but not the references) to the
@@ -997,8 +1083,11 @@
          iterator last_x(x.previous(x.end())); //<- constant time if cache_last is active
          node_ptr prev_n(prev.pointed_node());
          node_ptr last_x_n(last_x.pointed_node());
- if(cache_last && node_traits::get_next(prev_n) == this->get_end_node()){
- this->set_last_node(last_x_n);
+ if(cache_last){
+ x.set_last_node(x.get_root_node());
+ if(node_traits::get_next(prev_n) == this->get_end_node()){
+ this->set_last_node(last_x_n);
+ }
          }
          node_algorithms::transfer_after( prev_n, x.before_begin().pointed_node(), last_x_n);
          this->priv_size_traits().set_size(this->priv_size_traits().get_size() + x.priv_size_traits().get_size());
@@ -1026,10 +1115,7 @@
    void splice_after(iterator prev_pos, slist_impl &x, iterator prev_ele)
    {
       iterator elem = prev_ele;
- ++elem;
- if (elem != prev_pos && prev_ele != prev_pos){
- this->splice_after(prev_pos, x, prev_ele, elem, 1);
- }
+ this->splice_after(prev_pos, x, prev_ele, ++elem, 1);
    }
 
    //! <b>Requires</b>: prev_pos must be a dereferenceable iterator in *this or be
@@ -1567,15 +1653,18 @@
    private:
    void priv_splice_after(node_ptr prev_pos_n, slist_impl &x, node_ptr before_first_n, node_ptr before_last_n)
    {
- if(cache_last){
- if(node_traits::get_next(prev_pos_n) == this->get_end_node()){
- this->set_last_node(before_last_n);
- }
- if(node_traits::get_next(before_last_n) == x.get_end_node()){
- x.set_last_node(before_first_n);
+ if (before_first_n != before_last_n && prev_pos_n != before_first_n && prev_pos_n != before_last_n)
+ {
+ if(cache_last){
+ if(node_traits::get_next(prev_pos_n) == this->get_end_node()){
+ this->set_last_node(before_last_n);
+ }
+ if(node_traits::get_next(before_last_n) == x.get_end_node()){
+ x.set_last_node(before_first_n);
+ }
          }
+ node_algorithms::transfer_after(prev_pos_n, before_first_n, before_last_n);
       }
- node_algorithms::transfer_after(prev_pos_n, before_first_n, before_last_n);
    }
 
    void priv_reverse(detail::bool_<false>)

Modified: branches/CMake/release/boost/intrusive/splay_set.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/splay_set.hpp (original)
+++ branches/CMake/release/boost/intrusive/splay_set.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -252,6 +252,34 @@
          , &splay_set_impl::tree_);
    }
 
+ //! <b>Precondition</b>: it must be a valid iterator of set.
+ //!
+ //! <b>Effects</b>: Returns a reference to the set associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Constant.
+ static splay_set_impl &container_from_iterator(iterator it)
+ {
+ return *detail::parent_from_member<splay_set_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &splay_set_impl::tree_);
+ }
+
+ //! <b>Precondition</b>: it must be a valid const_iterator of set.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the set associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static const splay_set_impl &container_from_iterator(const_iterator it)
+ {
+ return *detail::parent_from_member<splay_set_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &splay_set_impl::tree_);
+ }
+
    //! <b>Effects</b>: Returns the key_compare object used by the splay_set.
    //!
    //! <b>Complexity</b>: Constant.
@@ -1161,6 +1189,12 @@
 
    static const splay_set &container_from_end_iterator(const_iterator end_iterator)
    { return static_cast<const splay_set &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static splay_set &container_from_iterator(iterator it)
+ { return static_cast<splay_set &>(Base::container_from_iterator(it)); }
+
+ static const splay_set &container_from_iterator(const_iterator it)
+ { return static_cast<const splay_set &>(Base::container_from_iterator(it)); }
 };
 
 #endif
@@ -1393,6 +1427,34 @@
          , &splay_multiset_impl::tree_);
    }
 
+ //! <b>Precondition</b>: it must be a valid iterator of multiset.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static splay_multiset_impl &container_from_iterator(iterator it)
+ {
+ return *detail::parent_from_member<splay_multiset_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &splay_multiset_impl::tree_);
+ }
+
+ //! <b>Precondition</b>: it must be a valid const_iterator of multiset.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Constant.
+ static const splay_multiset_impl &container_from_iterator(const_iterator it)
+ {
+ return *detail::parent_from_member<splay_multiset_impl, tree_type>
+ ( &tree_type::container_from_iterator(it)
+ , &splay_multiset_impl::tree_);
+ }
+
    //! <b>Effects</b>: Returns the key_compare object used by the splay_multiset.
    //!
    //! <b>Complexity</b>: Constant.
@@ -2209,6 +2271,12 @@
 
    static const splay_multiset &container_from_end_iterator(const_iterator end_iterator)
    { return static_cast<const splay_multiset &>(Base::container_from_end_iterator(end_iterator)); }
+
+ static splay_multiset &container_from_iterator(iterator it)
+ { return static_cast<splay_multiset &>(Base::container_from_iterator(it)); }
+
+ static const splay_multiset &container_from_iterator(const_iterator it)
+ { return static_cast<const splay_multiset &>(Base::container_from_iterator(it)); }
 };
 
 #endif

Modified: branches/CMake/release/boost/intrusive/splaytree.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/splaytree.hpp (original)
+++ branches/CMake/release/boost/intrusive/splaytree.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -387,6 +387,28 @@
    static const splaytree_impl &container_from_end_iterator(const_iterator end_iterator)
    { return priv_container_from_end_iterator(end_iterator); }
 
+ //! <b>Precondition</b>: it must be a valid iterator
+ //! of rbtree.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static splaytree_impl &container_from_iterator(iterator it)
+ { return priv_container_from_iterator(it); }
+
+ //! <b>Precondition</b>: it must be a valid end const_iterator
+ //! of rbtree.
+ //!
+ //! <b>Effects</b>: Returns a const reference to the tree associated to the iterator
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ static const splaytree_impl &container_from_iterator(const_iterator it)
+ { return priv_container_from_iterator(it); }
+
    //! <b>Effects</b>: Returns the value_compare object used by the tree.
    //!
    //! <b>Complexity</b>: Constant.
@@ -1312,6 +1334,9 @@
       splaytree_impl *rb = detail::parent_from_member<splaytree_impl, data_t>(d, &splaytree_impl::data_);
       return *rb;
    }
+
+ static splaytree_impl &priv_container_from_iterator(const const_iterator &it)
+ { return priv_container_from_end_iterator(it.end_iterator_from_it()); }
 };
 
 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED

Modified: branches/CMake/release/boost/intrusive/splaytree_algorithms.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/splaytree_algorithms.hpp (original)
+++ branches/CMake/release/boost/intrusive/splaytree_algorithms.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -50,13 +50,48 @@
 #include <boost/intrusive/detail/assert.hpp>
 #include <boost/intrusive/intrusive_fwd.hpp>
 #include <cstddef>
-#include <boost/intrusive/detail/no_exceptions_support.hpp>
 #include <boost/intrusive/detail/utilities.hpp>
 #include <boost/intrusive/detail/tree_algorithms.hpp>
 
 namespace boost {
 namespace intrusive {
 
+/// @cond
+namespace detail {
+
+template<class NodeTraits>
+struct splaydown_rollback
+{
+ typedef typename NodeTraits::node_ptr node_ptr;
+ splaydown_rollback( const node_ptr *pcur_subtree, node_ptr header
+ , node_ptr leftmost , node_ptr rightmost)
+ : pcur_subtree_(pcur_subtree) , header_(header)
+ , leftmost_(leftmost) , rightmost_(rightmost)
+ {}
+
+ void release()
+ { pcur_subtree_ = 0; }
+
+ ~splaydown_rollback()
+ {
+ if(pcur_subtree_){
+ //Exception can only be thrown by comp, but
+ //tree invariants still hold. *pcur_subtree is the current root
+ //so link it to the header.
+ NodeTraits::set_parent(*pcur_subtree_, header_);
+ NodeTraits::set_parent(header_, *pcur_subtree_);
+ //Recover leftmost/rightmost pointers
+ NodeTraits::set_left (header_, leftmost_);
+ NodeTraits::set_right(header_, rightmost_);
+ }
+ }
+ const node_ptr *pcur_subtree_;
+ node_ptr header_, leftmost_, rightmost_;
+};
+
+} //namespace detail {
+/// @endcond
+
 //! A splay tree is an implementation of a binary search tree. The tree is
 //! self balancing using the splay algorithm as described in
 //!
@@ -95,11 +130,11 @@
 {
    /// @cond
    private:
- typedef typename NodeTraits::node node;
    typedef detail::tree_algorithms<NodeTraits> tree_algorithms;
    /// @endcond
 
    public:
+ typedef typename NodeTraits::node node;
    typedef NodeTraits node_traits;
    typedef typename NodeTraits::node_ptr node_ptr;
    typedef typename NodeTraits::const_node_ptr const_node_ptr;
@@ -656,7 +691,8 @@
       node_ptr leftmost = NodeTraits::get_left(header);
       node_ptr rightmost = NodeTraits::get_right(header);
 
- try{
+ {
+ detail::splaydown_rollback<NodeTraits> rollback(&t, header, leftmost, rightmost);
          node_ptr null = header;
          node_ptr l = null;
          node_ptr r = null;
@@ -712,18 +748,9 @@
          }
 
          assemble(t, l, r, null);
+ rollback.release();
       }
- catch(...){
- //Exception can only be thrown by comp, but
- //tree invariants still hold. t is the current root
- //so link it to the header.
- NodeTraits::set_parent(t, header);
- NodeTraits::set_parent(header, t);
- //Recover leftmost/rightmost pointers
- NodeTraits::set_left (header, leftmost);
- NodeTraits::set_right(header, rightmost);
- throw;
- }
+
       //t is the current root
       NodeTraits::set_parent(header, t);
       NodeTraits::set_parent(t, header);
@@ -755,6 +782,17 @@
    static node_ptr rebalance_subtree(node_ptr old_root)
    { return tree_algorithms::rebalance_subtree(old_root); }
 
+
+ //! <b>Requires</b>: "n" must be a node inserted in a tree.
+ //!
+ //! <b>Effects</b>: Returns a pointer to the header node of the tree.
+ //!
+ //! <b>Complexity</b>: Logarithmic.
+ //!
+ //! <b>Throws</b>: Nothing.
+ static node_ptr get_header(node_ptr n)
+ { return tree_algorithms::get_header(n); }
+
    private:
 
    /// @cond

Modified: branches/CMake/release/boost/intrusive/unordered_set.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/unordered_set.hpp (original)
+++ branches/CMake/release/boost/intrusive/unordered_set.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -24,7 +24,7 @@
 //! The class template unordered_set is an intrusive container, that mimics most of
 //! the interface of std::tr1::unordered_set as described in the C++ TR1.
 //!
-//! unordered_set is a pseudo-intrusive container: each object to be stored in the
+//! unordered_set is a semi-intrusive container: each object to be stored in the
 //! container must contain a proper hook, but the container also needs
 //! additional auxiliary memory to work: unordered_set needs a pointer to an array
 //! of type `bucket_type` to be passed in the constructor. This bucket array must
@@ -38,7 +38,8 @@
 //!
 //! The container supports the following options:
 //! \c base_hook<>/member_hook<>/value_traits<>,
-//! \c constant_time_size<>, \c size_type<>, \c hash<> and \c equal<> .
+//! \c constant_time_size<>, \c size_type<>, \c hash<> and \c equal<>
+//! \c bucket_traits<>, power_2_buckets<> and cache_begin<>.
 //!
 //! unordered_set only provides forward iterators but it provides 4 iterator types:
 //! iterator and const_iterator to navigate through the whole container and
@@ -167,8 +168,8 @@
 
    //! <b>Effects</b>: Returns an iterator pointing to the beginning of the unordered_set.
    //!
- //! <b>Complexity</b>: Amortized constant time.
- //! Worst case (empty unordered_set): O(this->bucket_count())
+ //! <b>Complexity</b>: Constant time if `cache_begin<>` is true. Amortized
+ //! constant time with worst case (empty unordered_set) O(this->bucket_count())
    //!
    //! <b>Throws</b>: Nothing.
    iterator begin()
@@ -177,8 +178,8 @@
    //! <b>Effects</b>: Returns a const_iterator pointing to the beginning
    //! of the unordered_set.
    //!
- //! <b>Complexity</b>: Amortized constant time.
- //! Worst case (empty unordered_set): O(this->bucket_count())
+ //! <b>Complexity</b>: Constant time if `cache_begin<>` is true. Amortized
+ //! constant time with worst case (empty unordered_set) O(this->bucket_count())
    //!
    //! <b>Throws</b>: Nothing.
    const_iterator begin() const
@@ -187,8 +188,8 @@
    //! <b>Effects</b>: Returns a const_iterator pointing to the beginning
    //! of the unordered_set.
    //!
- //! <b>Complexity</b>: Amortized constant time.
- //! Worst case (empty unordered_set): O(this->bucket_count())
+ //! <b>Complexity</b>: Constant time if `cache_begin<>` is true. Amortized
+ //! constant time with worst case (empty unordered_set) O(this->bucket_count())
    //!
    //! <b>Throws</b>: Nothing.
    const_iterator cbegin() const
@@ -236,8 +237,8 @@
 
    //! <b>Effects</b>: Returns true is the container is empty.
    //!
- //! <b>Complexity</b>: if constant-time size option is disabled, average constant time
- //! (worst case, with empty() == true): O(this->bucket_count()).
+ //! <b>Complexity</b>: if constant-time size and cache_last options are disabled,
+ //! average constant time (worst case, with empty() == true: O(this->bucket_count()).
    //! Otherwise constant.
    //!
    //! <b>Throws</b>: Nothing.
@@ -959,7 +960,8 @@
 template<class T, class O1 = none, class O2 = none
                 , class O3 = none, class O4 = none
                 , class O5 = none, class O6 = none
- , class O7 = none
+ , class O7 = none, class O8 = none
+ , class O9 = none
>
 #endif
 struct make_unordered_set
@@ -967,19 +969,19 @@
    /// @cond
    typedef unordered_set_impl
       < typename make_hashtable_opt
- <T, O1, O2, O3, O4, O5, O6, O7>::type
+ <T, true, O1, O2, O3, O4, O5, O6, O7, O8, O9>::type
> implementation_defined;
    /// @endcond
    typedef implementation_defined type;
 };
 
 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
-template<class T, class O1, class O2, class O3, class O4, class O5, class O6, class O7>
+template<class T, class O1, class O2, class O3, class O4, class O5, class O6, class O7, class O8, class O9>
 class unordered_set
- : public make_unordered_set<T, O1, O2, O3, O4, O5, O6, O7>::type
+ : public make_unordered_set<T, O1, O2, O3, O4, O5, O6, O7, O8, O9>::type
 {
    typedef typename make_unordered_set
- <T, O1, O2, O3, O4, O5, O6, O7>::type Base;
+ <T, O1, O2, O3, O4, O5, O6, O7, O8, O9>::type Base;
 
    //Assert if passed value traits are compatible with the type
    BOOST_STATIC_ASSERT((detail::is_same<typename Base::value_traits::value_type, T>::value));
@@ -1018,7 +1020,7 @@
 //! The class template unordered_multiset is an intrusive container, that mimics most of
 //! the interface of std::tr1::unordered_multiset as described in the C++ TR1.
 //!
-//! unordered_multiset is a pseudo-intrusive container: each object to be stored in the
+//! unordered_multiset is a semi-intrusive container: each object to be stored in the
 //! container must contain a proper hook, but the container also needs
 //! additional auxiliary memory to work: unordered_multiset needs a pointer to an array
 //! of type `bucket_type` to be passed in the constructor. This bucket array must
@@ -1032,7 +1034,8 @@
 //!
 //! The container supports the following options:
 //! \c base_hook<>/member_hook<>/value_traits<>,
-//! \c constant_time_size<>, \c size_type<>, \c hash<> and \c equal<> .
+//! \c constant_time_size<>, \c size_type<>, \c hash<> and \c equal<>
+//! \c bucket_traits<>, power_2_buckets<> and cache_begin<>.
 //!
 //! unordered_multiset only provides forward iterators but it provides 4 iterator types:
 //! iterator and const_iterator to navigate through the whole container and
@@ -1161,8 +1164,8 @@
 
    //! <b>Effects</b>: Returns an iterator pointing to the beginning of the unordered_multiset.
    //!
- //! <b>Complexity</b>: Amortized constant time.
- //! Worst case (empty unordered_multiset): O(this->bucket_count())
+ //! <b>Complexity</b>: Constant time if `cache_begin<>` is true. Amortized
+ //! constant time with worst case (empty unordered_set) O(this->bucket_count())
    //!
    //! <b>Throws</b>: Nothing.
    iterator begin()
@@ -1171,8 +1174,8 @@
    //! <b>Effects</b>: Returns a const_iterator pointing to the beginning
    //! of the unordered_multiset.
    //!
- //! <b>Complexity</b>: Amortized constant time.
- //! Worst case (empty unordered_multiset): O(this->bucket_count())
+ //! <b>Complexity</b>: Constant time if `cache_begin<>` is true. Amortized
+ //! constant time with worst case (empty unordered_set) O(this->bucket_count())
    //!
    //! <b>Throws</b>: Nothing.
    const_iterator begin() const
@@ -1181,8 +1184,8 @@
    //! <b>Effects</b>: Returns a const_iterator pointing to the beginning
    //! of the unordered_multiset.
    //!
- //! <b>Complexity</b>: Amortized constant time.
- //! Worst case (empty unordered_multiset): O(this->bucket_count())
+ //! <b>Complexity</b>: Constant time if `cache_begin<>` is true. Amortized
+ //! constant time with worst case (empty unordered_set) O(this->bucket_count())
    //!
    //! <b>Throws</b>: Nothing.
    const_iterator cbegin() const
@@ -1230,8 +1233,8 @@
 
    //! <b>Effects</b>: Returns true is the container is empty.
    //!
- //! <b>Complexity</b>: if constant-time size option is disabled, average constant time
- //! (worst case, with empty() == true): O(this->bucket_count()).
+ //! <b>Complexity</b>: if constant-time size and cache_last options are disabled,
+ //! average constant time (worst case, with empty() == true: O(this->bucket_count()).
    //! Otherwise constant.
    //!
    //! <b>Throws</b>: Nothing.
@@ -1891,7 +1894,8 @@
 template<class T, class O1 = none, class O2 = none
                 , class O3 = none, class O4 = none
                 , class O5 = none, class O6 = none
- , class O7 = none
+ , class O7 = none, class O8 = none
+ , class O9 = none
>
 #endif
 struct make_unordered_multiset
@@ -1899,19 +1903,19 @@
    /// @cond
    typedef unordered_multiset_impl
       < typename make_hashtable_opt
- <T, O1, O2, O3, O4, O5, O6, O7>::type
+ <T, false, O1, O2, O3, O4, O5, O6, O7, O8, O9>::type
> implementation_defined;
    /// @endcond
    typedef implementation_defined type;
 };
 
 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
-template<class T, class O1, class O2, class O3, class O4, class O5, class O6, class O7>
+template<class T, class O1, class O2, class O3, class O4, class O5, class O6, class O7, class O8, class O9>
 class unordered_multiset
- : public make_unordered_multiset<T, O1, O2, O3, O4, O5, O6, O7>::type
+ : public make_unordered_multiset<T, O1, O2, O3, O4, O5, O6, O7, O8, O9>::type
 {
    typedef typename make_unordered_multiset
- <T, O1, O2, O3, O4, O5, O6, O7>::type Base;
+ <T, O1, O2, O3, O4, O5, O6, O7, O8, O9>::type Base;
    //Assert if passed value traits are compatible with the type
    BOOST_STATIC_ASSERT((detail::is_same<typename Base::value_traits::value_type, T>::value));
 

Modified: branches/CMake/release/boost/intrusive/unordered_set_hook.hpp
==============================================================================
--- branches/CMake/release/boost/intrusive/unordered_set_hook.hpp (original)
+++ branches/CMake/release/boost/intrusive/unordered_set_hook.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -17,6 +17,7 @@
 #include <boost/intrusive/detail/config_begin.hpp>
 #include <boost/intrusive/intrusive_fwd.hpp>
 #include <boost/intrusive/detail/utilities.hpp>
+#include <boost/intrusive/detail/pointer_to_other.hpp>
 #include <boost/intrusive/slist_hook.hpp>
 #include <boost/intrusive/options.hpp>
 #include <boost/intrusive/detail/generic_hook.hpp>
@@ -26,35 +27,66 @@
 
 /// @cond
 
-template<class VoidPointer>
-struct slist_node_plus_hash
+template<class VoidPointer, bool StoreHash, bool OptimizeMultiKey>
+struct unordered_node
+ : public slist_node<VoidPointer>
 {
    typedef typename boost::pointer_to_other
- <VoidPointer, slist_node_plus_hash>::type node_ptr;
- node_ptr next_;
+ < VoidPointer
+ , unordered_node<VoidPointer, StoreHash, OptimizeMultiKey>
+ >::type node_ptr;
+ node_ptr prev_in_group_;
    std::size_t hash_;
 };
 
-// slist_node_traits can be used with circular_slist_algorithms and supplies
-// a slist_node holding the pointers needed for a singly-linked list
-// it is used by slist_base_hook and slist_member_hook
 template<class VoidPointer>
-struct slist_node_traits_plus_hash
+struct unordered_node<VoidPointer, false, true>
+ : public slist_node<VoidPointer>
 {
- typedef slist_node_plus_hash<VoidPointer> node;
+ typedef typename boost::pointer_to_other
+ < VoidPointer
+ , unordered_node<VoidPointer, false, true>
+ >::type node_ptr;
+ node_ptr prev_in_group_;
+};
+
+template<class VoidPointer>
+struct unordered_node<VoidPointer, true, false>
+ : public slist_node<VoidPointer>
+{
+ typedef typename boost::pointer_to_other
+ < VoidPointer
+ , unordered_node<VoidPointer, true, false>
+ >::type node_ptr;
+ std::size_t hash_;
+};
+
+template<class VoidPointer, bool StoreHash, bool OptimizeMultiKey>
+struct unordered_node_traits
+ : public slist_node_traits<VoidPointer>
+{
+ typedef slist_node_traits<VoidPointer> reduced_slist_node_traits;
+ typedef unordered_node<VoidPointer, StoreHash, OptimizeMultiKey> node;
    typedef typename boost::pointer_to_other
       <VoidPointer, node>::type node_ptr;
    typedef typename boost::pointer_to_other
       <VoidPointer, const node>::type const_node_ptr;
 
- static const bool store_hash = true;
+ static const bool store_hash = StoreHash;
+ static const bool optimize_multikey = OptimizeMultiKey;
 
    static node_ptr get_next(const_node_ptr n)
- { return n->next_; }
+ { return node_ptr(&static_cast<node &>(*n->next_)); }
 
    static void set_next(node_ptr n, node_ptr next)
    { n->next_ = next; }
 
+ static node_ptr get_prev_in_group(const_node_ptr n)
+ { return n->prev_in_group_; }
+
+ static void set_prev_in_group(node_ptr n, node_ptr prev)
+ { n->prev_in_group_ = prev; }
+
    static std::size_t get_hash(const_node_ptr n)
    { return n->hash_; }
 
@@ -62,15 +94,60 @@
    { n->hash_ = h; }
 };
 
-template<class VoidPointer, bool StoreHash>
+template<class NodeTraits>
+struct unordered_group_adapter
+{
+ typedef typename NodeTraits::node node;
+ typedef typename NodeTraits::node_ptr node_ptr;
+ typedef typename NodeTraits::const_node_ptr const_node_ptr;
+
+ static node_ptr get_next(const_node_ptr n)
+ { return NodeTraits::get_prev_in_group(n); }
+
+ static void set_next(node_ptr n, node_ptr next)
+ { NodeTraits::set_prev_in_group(n, next); }
+};
+
+template<class NodeTraits>
+struct unordered_algorithms
+ : public circular_slist_algorithms<NodeTraits>
+{
+ typedef circular_slist_algorithms<NodeTraits> base_type;
+ typedef unordered_group_adapter<NodeTraits> group_traits;
+ typedef circular_slist_algorithms<group_traits> group_algorithms;
+
+ static void init(typename base_type::node_ptr n)
+ {
+ base_type::init(n);
+ group_algorithms::init(n);
+ }
+
+ static void init_header(typename base_type::node_ptr n)
+ {
+ base_type::init_header(n);
+ group_algorithms::init_header(n);
+ }
+
+ static void unlink(typename base_type::node_ptr n)
+ {
+ base_type::unlink(n);
+ group_algorithms::unlink(n);
+ }
+};
+
+template<class VoidPointer, bool StoreHash, bool OptimizeMultiKey>
 struct get_uset_node_algo
 {
    typedef typename detail::if_c
- < StoreHash
- , slist_node_traits_plus_hash<VoidPointer>
+ < (StoreHash || OptimizeMultiKey)
+ , unordered_node_traits<VoidPointer, StoreHash, OptimizeMultiKey>
       , slist_node_traits<VoidPointer>
>::type node_traits_type;
- typedef circular_slist_algorithms<node_traits_type> type;
+ typedef typename detail::if_c
+ < OptimizeMultiKey
+ , unordered_algorithms<node_traits_type>
+ , circular_slist_algorithms<node_traits_type>
+ >::type type;
 };
 /// @endcond
 
@@ -90,6 +167,7 @@
    typedef detail::generic_hook
    < get_uset_node_algo<typename packed_options::void_pointer
                        , packed_options::store_hash
+ , packed_options::optimize_multikey
>
    , typename packed_options::tag
    , packed_options::link_mode
@@ -104,7 +182,7 @@
 //! the unordered_set/unordered_multi_set and provides an appropriate value_traits class for unordered_set/unordered_multi_set.
 //!
 //! The hook admits the following options: \c tag<>, \c void_pointer<>,
-//! \c link_mode<> and \c store_hash<>.
+//! \c link_mode<>, \c store_hash<> and \c optimize_multikey<>.
 //!
 //! \c tag<> defines a tag to identify the node.
 //! The same tag value can be used in different classes, but if a class is
@@ -119,6 +197,10 @@
 //!
 //! \c store_hash<> will tell the hook to store the hash of the value
 //! to speed up rehashings.
+//!
+//! \c optimize_multikey<> will tell the hook to store a link to form a group
+//! with other value with the same value to speed up searches and insertions
+//! in unordered_multisets with a great number of with equivalent keys.
 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
 template<class ...Options>
 #else
@@ -211,6 +293,7 @@
    typedef detail::generic_hook
    < get_uset_node_algo< typename packed_options::void_pointer
                        , packed_options::store_hash
+ , packed_options::optimize_multikey
>
    , member_tag
    , packed_options::link_mode

Modified: branches/CMake/release/boost/lambda/algorithm.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/algorithm.hpp (original)
+++ branches/CMake/release/boost/lambda/algorithm.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 // -- algorithm.hpp -- Boost Lambda Library -----------------------------------
-// Copyright (C) 2002 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 2002 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2002 Gary Powell (gwpowell_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See

Modified: branches/CMake/release/boost/lambda/bind.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/bind.hpp (original)
+++ branches/CMake/release/boost/lambda/bind.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // -- bind.hpp -- Boost Lambda Library --------------------------------------
 
-// Copyright (C) 1999-2001 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999-2001 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Gary Powell (gwpowell_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See

Modified: branches/CMake/release/boost/lambda/casts.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/casts.hpp (original)
+++ branches/CMake/release/boost/lambda/casts.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,7 +1,7 @@
 // - casts.hpp -- BLambda Library -------------
 //
 // Copyright (C) 2000 Gary Powell (powellg_at_[hidden])
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/construct.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/construct.hpp (original)
+++ branches/CMake/release/boost/lambda/construct.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,7 +1,7 @@
 // - construct.hpp -- Lambda Library -------------
 //
 // Copyright (C) 2000 Gary Powell (powellg_at_[hidden])
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/control_structures.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/control_structures.hpp (original)
+++ branches/CMake/release/boost/lambda/control_structures.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 // -- control_structures.hpp -- Boost Lambda Library --------------------------
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/core.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/core.hpp (original)
+++ branches/CMake/release/boost/lambda/core.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,7 +1,7 @@
 // -- core.hpp -- Boost Lambda Library -------------------------------------
 //
 // Copyright (C) 2000 Gary Powell (powellg_at_[hidden])
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/actions.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/actions.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/actions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // -- Boost Lambda Library - actions.hpp ----------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/arity_code.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/arity_code.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/arity_code.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // -- Boost Lambda Library -------------------------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/bind_functions.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/bind_functions.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/bind_functions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // -- bind_functions.hpp -- Boost Lambda Library
 //
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/control_constructs_common.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/control_constructs_common.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/control_constructs_common.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library -- control_constructs_common.hpp -------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2000 Gary Powell (powellg_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See

Modified: branches/CMake/release/boost/lambda/detail/control_structures_impl.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/control_structures_impl.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/control_structures_impl.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library -- control_structures_impl.hpp ---------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2000 Gary Powell (powellg_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See

Modified: branches/CMake/release/boost/lambda/detail/function_adaptors.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/function_adaptors.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/function_adaptors.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library - function_adaptors.hpp ----------------------------
  
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/is_instance_of.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/is_instance_of.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/is_instance_of.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library - is_instance_of.hpp ---------------------
 
-// Copyright (C) 2001 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 2001 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/lambda_config.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/lambda_config.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/lambda_config.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library - lambda_config.hpp ------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/lambda_functor_base.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/lambda_functor_base.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/lambda_functor_base.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library lambda_functor_base.hpp -----------------------------
 //
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/lambda_functors.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/lambda_functors.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/lambda_functors.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library - lambda_functors.hpp -------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/lambda_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/lambda_fwd.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/lambda_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // lambda_fwd.hpp - Boost Lambda Library -------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/lambda_traits.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/lambda_traits.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/lambda_traits.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // - lambda_traits.hpp --- Boost Lambda Library ----------------------------
 //
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/member_ptr.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/member_ptr.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/member_ptr.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library -- member_ptr.hpp ---------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2000 Gary Powell (gary.powell_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See

Modified: branches/CMake/release/boost/lambda/detail/operator_actions.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/operator_actions.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/operator_actions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // -- operator_actions.hpp - Boost Lambda Library ----------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/operator_lambda_func_base.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/operator_lambda_func_base.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/operator_lambda_func_base.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library - operator_lambda_func_base.hpp -----------------
 //
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/operator_return_type_traits.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/operator_return_type_traits.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/operator_return_type_traits.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // operator_return_type_traits.hpp -- Boost Lambda Library ------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/operators.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/operators.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/operators.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library - operators.hpp --------------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/ret.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/ret.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/ret.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library ret.hpp -----------------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/return_type_traits.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/return_type_traits.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/return_type_traits.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // return_type_traits.hpp -- Boost Lambda Library ---------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/detail/select_functions.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/detail/select_functions.hpp (original)
+++ branches/CMake/release/boost/lambda/detail/select_functions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // -- select_functions.hpp -- Boost Lambda Library --------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/exceptions.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/exceptions.hpp (original)
+++ branches/CMake/release/boost/lambda/exceptions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,7 +1,7 @@
 // -- Boost Lambda Library -- exceptions.hpp ----------------
 //
 // Copyright (C) 2000 Gary Powell (gwpowell_at_[hidden])
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/if.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/if.hpp (original)
+++ branches/CMake/release/boost/lambda/if.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library -- if.hpp ------------------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2000 Gary Powell (powellg_at_[hidden])
 // Copyright (C) 2001-2002 Joel de Guzman
 //

Modified: branches/CMake/release/boost/lambda/lambda.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/lambda.hpp (original)
+++ branches/CMake/release/boost/lambda/lambda.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 // -- lambda.hpp -- Boost Lambda Library -----------------------------------
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/lambda/loops.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/loops.hpp (original)
+++ branches/CMake/release/boost/lambda/loops.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Boost Lambda Library -- loops.hpp ----------------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2000 Gary Powell (powellg_at_[hidden])
 // Copyright (c) 2001-2002 Joel de Guzman
 //

Modified: branches/CMake/release/boost/lambda/numeric.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/numeric.hpp (original)
+++ branches/CMake/release/boost/lambda/numeric.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,5 @@
 // -- numeric.hpp -- Boost Lambda Library -----------------------------------
-// Copyright (C) 2002 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 2002 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2002 Gary Powell (gwpowell_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See

Modified: branches/CMake/release/boost/lambda/switch.hpp
==============================================================================
--- branches/CMake/release/boost/lambda/switch.hpp (original)
+++ branches/CMake/release/boost/lambda/switch.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,7 +1,7 @@
 // Boost Lambda Library -- switch.hpp -----------------------------------
 //
 // Copyright (C) 2000 Gary Powell (powellg_at_[hidden])
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/mpi/collectives/scatter.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/collectives/scatter.hpp (original)
+++ branches/CMake/release/boost/mpi/collectives/scatter.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -131,7 +131,7 @@
         int root)
 {
   if (comm.rank() == root)
- detail::scatter_impl(comm, in_values, n, out_values, root,
+ detail::scatter_impl(comm, in_values, out_values, n, root,
                          is_mpi_datatype<T>());
   else
     detail::scatter_impl(comm, out_values, n, root, is_mpi_datatype<T>());

Modified: branches/CMake/release/boost/mpi/communicator.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/communicator.hpp (original)
+++ branches/CMake/release/boost/mpi/communicator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1141,7 +1141,7 @@
 {
   BOOST_MPI_CHECK_RESULT(MPI_Send,
                          (const_cast<T*>(values), n,
- get_mpi_datatype<T>(*values),
+ get_mpi_datatype<T>(*values),
                           dest, tag, MPI_Comm(*this)));
 }
 
@@ -1174,7 +1174,7 @@
 
   BOOST_MPI_CHECK_RESULT(MPI_Recv,
                          (const_cast<T*>(&value), 1,
- get_mpi_datatype<T>(value),
+ get_mpi_datatype<T>(value),
                           source, tag, MPI_Comm(*this), &stat.m_status));
   return stat;
 }
@@ -1209,7 +1209,7 @@
   status stat;
   BOOST_MPI_CHECK_RESULT(MPI_Recv,
                          (const_cast<T*>(values), n,
- get_mpi_datatype<T>(*values),
+ get_mpi_datatype<T>(*values),
                           source, tag, MPI_Comm(*this), &stat.m_status));
   return stat;
 }
@@ -1256,7 +1256,7 @@
   request req;
   BOOST_MPI_CHECK_RESULT(MPI_Isend,
                          (const_cast<T*>(&value), 1,
- get_mpi_datatype<T>(value),
+ get_mpi_datatype<T>(value),
                           dest, tag, MPI_Comm(*this), &req.m_requests[0]));
   return req;
 }
@@ -1291,7 +1291,7 @@
   request req;
   BOOST_MPI_CHECK_RESULT(MPI_Isend,
                          (const_cast<T*>(values), n,
- get_mpi_datatype<T>(*values),
+ get_mpi_datatype<T>(*values),
                           dest, tag, MPI_Comm(*this), &req.m_requests[0]));
   return req;
 }
@@ -1531,7 +1531,7 @@
   request req;
   BOOST_MPI_CHECK_RESULT(MPI_Irecv,
                          (const_cast<T*>(&value), 1,
- get_mpi_datatype<T>(value),
+ get_mpi_datatype<T>(value),
                           source, tag, MPI_Comm(*this), &req.m_requests[0]));
   return req;
 }
@@ -1548,7 +1548,7 @@
 
   BOOST_MPI_CHECK_RESULT(MPI_Irecv,
                          (&data->count, 1,
- get_mpi_datatype<std::size_t>(data->count),
+ get_mpi_datatype<std::size_t>(data->count),
                           source, tag, MPI_Comm(*this), &req.m_requests[0]));
   
   return req;
@@ -1569,7 +1569,7 @@
   request req;
   BOOST_MPI_CHECK_RESULT(MPI_Irecv,
                          (const_cast<T*>(values), n,
- get_mpi_datatype<T>(*values),
+ get_mpi_datatype<T>(*values),
                           source, tag, MPI_Comm(*this), &req.m_requests[0]));
   return req;
 }
@@ -1587,7 +1587,7 @@
 
   BOOST_MPI_CHECK_RESULT(MPI_Irecv,
                          (&data->count, 1,
- get_mpi_datatype<std::size_t>(data->count),
+ get_mpi_datatype<std::size_t>(data->count),
                           source, tag, MPI_Comm(*this), &req.m_requests[0]));
 
   return req;

Modified: branches/CMake/release/boost/mpi/config.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/config.hpp (original)
+++ branches/CMake/release/boost/mpi/config.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 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/CMake/release/boost/mpi/datatype.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/datatype.hpp (original)
+++ branches/CMake/release/boost/mpi/datatype.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 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,13 @@
 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> >
+{
+};
+
 // Define wchar_t specialization of is_mpi_datatype, if possible.
 #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && \
   (defined(MPI_WCHAR) || (defined(MPI_VERSION) && MPI_VERSION >= 2))
@@ -314,11 +325,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/CMake/release/boost/mpi/datatype_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/datatype_fwd.hpp (original)
+++ branches/CMake/release/boost/mpi/datatype_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 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/CMake/release/boost/mpi/detail/content_oarchive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/detail/content_oarchive.hpp (original)
+++ branches/CMake/release/boost/mpi/detail/content_oarchive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -61,5 +61,5 @@
 // required by export
 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::content_oarchive)
 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::ignore_skeleton_oarchive<boost::mpi::detail::content_oarchive>)
-
+BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::detail::content_oarchive)
 #endif // BOOST_MPI_DETAIL_CONTENT_OARCHIVE_HPP

Modified: branches/CMake/release/boost/mpi/detail/forward_iprimitive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/detail/forward_iprimitive.hpp (original)
+++ branches/CMake/release/boost/mpi/detail/forward_iprimitive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -28,26 +28,26 @@
 
     /// the type of the archive to which the loading of primitive types will be forwarded
     typedef ImplementationArchive implementation_archive_type;
-
- /// the constructor takes a reference to the implementation archive used for loading primitve types
+
+ /// the constructor takes a reference to the implementation archive used for loading primitve types
     forward_iprimitive(implementation_archive_type& ar)
- : implementation_archive(ar)
+ : implementation_archive(ar)
     {}
 
- /// binary loading is forwarded to the implementation archive
+ /// binary loading is forwarded to the implementation archive
     void load_binary(void * address, std::size_t count )
- {
- implementation_archive.load_binary(address,count);
- }
-
- /// loading of arrays is forwarded to the implementation archive
+ {
+ implementation_archive.load_binary(address,count);
+ }
+
+ /// loading of arrays is forwarded to the implementation archive
     template<class T>
     void load_array(serialization::array<T> & x, unsigned int file_version )
     {
- implementation_archive.load_array(x,file_version);
+ implementation_archive.load_array(x,file_version);
     }
 
- typedef typename ImplementationArchive::use_array_optimization use_array_optimization;
+ typedef typename ImplementationArchive::use_array_optimization use_array_optimization;
 
 #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
     friend class archive::load_access;
@@ -60,9 +60,9 @@
     template<class T>
     void load(T & t)
     {
- implementation_archive >> t;
+ implementation_archive >> t;
     }
-
+
 private:
     implementation_archive_type& implementation_archive;
 };

Modified: branches/CMake/release/boost/mpi/detail/forward_oprimitive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/detail/forward_oprimitive.hpp (original)
+++ branches/CMake/release/boost/mpi/detail/forward_oprimitive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -29,26 +29,26 @@
 
     /// the type of the archive to which the saving of primitive types will be forwarded
     typedef ImplementationArchive implementation_archive_type;
-
- /// the constructor takes a reference to the implementation archive used for saving primitve types
+
+ /// the constructor takes a reference to the implementation archive used for saving primitve types
     forward_oprimitive(implementation_archive_type& ar)
- : implementation_archive(ar)
+ : implementation_archive(ar)
     {}
 
- /// binary saving is forwarded to the implementation archive
+ /// binary saving is forwarded to the implementation archive
     void save_binary(const void * address, std::size_t count)
- {
- implementation_archive.save_binary(address,count);
- }
-
- /// saving of arrays is forwarded to the implementation archive
+ {
+ implementation_archive.save_binary(address,count);
+ }
+
+ /// saving of arrays is forwarded to the implementation archive
     template<class T>
     void save_array(serialization::array<T> const& x, unsigned int file_version )
     {
- implementation_archive.save_array(x,file_version);
+ implementation_archive.save_array(x,file_version);
     }
 
- typedef typename ImplementationArchive::use_array_optimization use_array_optimization;
+ typedef typename ImplementationArchive::use_array_optimization use_array_optimization;
 
 #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
     friend class archive::save_access;
@@ -61,9 +61,9 @@
     template<class T>
     void save(const T & t)
     {
- implementation_archive << t;
+ implementation_archive << t;
     }
-
+
 private:
     implementation_archive_type& implementation_archive;
 };

Modified: branches/CMake/release/boost/mpi/detail/forward_skeleton_iarchive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/detail/forward_skeleton_iarchive.hpp (original)
+++ branches/CMake/release/boost/mpi/detail/forward_skeleton_iarchive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -14,26 +14,25 @@
 #include <boost/archive/detail/auto_link_archive.hpp>
 #include <boost/archive/detail/iserializer.hpp>
 #include <boost/archive/detail/interface_iarchive.hpp>
-#include <boost/archive/array/iarchive.hpp>
+#include <boost/archive/detail/common_iarchive.hpp>
 #include <boost/serialization/collection_size_type.hpp>
-#include <boost/archive/array/iarchive.hpp>
 
 namespace boost { namespace mpi { namespace detail {
 
 template<class Archive, class ImplementationArchive>
 class forward_skeleton_iarchive
- : public archive::array::iarchive<Archive>
+ : public archive::detail::common_iarchive<Archive>
 {
 public:
 
     typedef ImplementationArchive implementation_archive_type;
-
+
     forward_skeleton_iarchive(implementation_archive_type& ar)
- : archive::array::iarchive<Archive>(archive::no_header),
- implementation_archive(ar)
- {
- }
-
+ : archive::detail::common_iarchive<Archive>(archive::no_header),
+ implementation_archive(ar)
+ {
+ }
+
 #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
 public:
 #else
@@ -50,12 +49,12 @@
     {
         archive::load(* this->This(), t);
     }
-
+
 #define BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(T) \
     void load_override(T & t , int) \
- { \
- implementation_archive >> t; \
- }
+ { \
+ implementation_archive >> t; \
+ }
 
 BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_id_optional_type)
 BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::version_type)

Modified: branches/CMake/release/boost/mpi/detail/forward_skeleton_oarchive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/detail/forward_skeleton_oarchive.hpp (original)
+++ branches/CMake/release/boost/mpi/detail/forward_skeleton_oarchive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -14,26 +14,25 @@
 #include <boost/archive/detail/auto_link_archive.hpp>
 #include <boost/archive/detail/oserializer.hpp>
 #include <boost/archive/detail/interface_oarchive.hpp>
-#include <boost/archive/array/oarchive.hpp>
+#include <boost/archive/detail/common_oarchive.hpp>
 #include <boost/serialization/collection_size_type.hpp>
-#include <boost/archive/array/oarchive.hpp>
 
 namespace boost { namespace mpi { namespace detail {
 
 template<class Archive, class ImplementationArchive>
 class forward_skeleton_oarchive
- : public archive::array::oarchive<Archive>
+ : public archive::detail::common_oarchive<Archive>
 {
 public:
 
     typedef ImplementationArchive implementation_archive_type;
-
+
     forward_skeleton_oarchive(implementation_archive_type& ar)
- : archive::array::oarchive<Archive>(archive::no_header),
- implementation_archive(ar)
- {
- }
-
+ : archive::detail::common_oarchive<Archive>(archive::no_header),
+ implementation_archive(ar)
+ {
+ }
+
 #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
 public:
 #else
@@ -50,12 +49,12 @@
     {
         archive::save(* this->This(), t);
     }
-
+
 #define BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(T) \
     void save_override(T const & t , int) \
- { \
- implementation_archive << t; \
- }
+ { \
+ implementation_archive << t; \
+ }
 
 BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::class_id_optional_type)
 BOOST_ARCHIVE_FORWARD_IMPLEMENTATION(archive::version_type)

Modified: branches/CMake/release/boost/mpi/detail/ignore_skeleton_oarchive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/detail/ignore_skeleton_oarchive.hpp (original)
+++ branches/CMake/release/boost/mpi/detail/ignore_skeleton_oarchive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -12,7 +12,7 @@
 #include <boost/pfto.hpp>
 
 #include <boost/archive/detail/auto_link_archive.hpp>
-#include <boost/archive/array/oarchive.hpp>
+#include <boost/archive/detail/common_oarchive.hpp>
 #include <boost/archive/basic_archive.hpp>
 #include <boost/archive/detail/oserializer.hpp>
 #include <boost/serialization/collection_size_type.hpp>
@@ -21,15 +21,14 @@
 
 template<class Archive>
 class ignore_skeleton_oarchive
- : public archive::array::oarchive<Archive>
+ : public archive::detail::common_oarchive<Archive>
 {
 public:
-
     ignore_skeleton_oarchive()
- : archive::array::oarchive<Archive>(archive::no_header)
- {
- }
-
+ : archive::detail::common_oarchive<Archive>(archive::no_header)
+ {
+ }
+
 #ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
 public:
 #else
@@ -46,10 +45,10 @@
     {
         archive::save(* this->This(), t);
     }
-
+
 #define BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(T) \
     void save_override(T const & , int) \
- {}
+ {}
 
 BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::class_id_optional_type)
 BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::version_type)

Modified: branches/CMake/release/boost/mpi/detail/mpi_datatype_cache.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/detail/mpi_datatype_cache.hpp (original)
+++ branches/CMake/release/boost/mpi/detail/mpi_datatype_cache.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -69,12 +69,12 @@
 
     // check whether the type already exists
     std::type_info const* t = &typeid(T);
- MPI_Datatype datatype = get(t);
- if (datatype == MPI_DATATYPE_NULL) {
+ MPI_Datatype datatype = get(t);
+ if (datatype == MPI_DATATYPE_NULL) {
       // need to create a type
       mpi_datatype_oarchive ar(x);
- datatype = ar.get_mpi_datatype();
- set(t, datatype);
+ datatype = ar.get_mpi_datatype();
+ set(t, datatype);
     }
 
     return datatype;

Modified: branches/CMake/release/boost/mpi/detail/mpi_datatype_oarchive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/detail/mpi_datatype_oarchive.hpp (original)
+++ branches/CMake/release/boost/mpi/detail/mpi_datatype_oarchive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -43,5 +43,6 @@
 // required by export
 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::mpi_datatype_oarchive)
 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::ignore_skeleton_oarchive<boost::mpi::detail::mpi_datatype_oarchive>)
+BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::detail::mpi_datatype_oarchive)
 
 #endif // BOOST_MPI_DETAIL_MPI_DATATYPE_OARCHIVE_HPP

Modified: branches/CMake/release/boost/mpi/detail/packed_iprimitive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/detail/packed_iprimitive.hpp (original)
+++ branches/CMake/release/boost/mpi/detail/packed_iprimitive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 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/CMake/release/boost/mpi/detail/text_skeleton_oarchive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/detail/text_skeleton_oarchive.hpp (original)
+++ branches/CMake/release/boost/mpi/detail/text_skeleton_oarchive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -13,7 +13,6 @@
 #include <boost/archive/text_oarchive.hpp>
 #include <boost/mpi/detail/forward_skeleton_oarchive.hpp>
 #include <boost/mpi/detail/ignore_oprimitive.hpp>
-#include <boost/archive/array/oarchive.hpp>
 
 namespace boost { namespace mpi {
 
@@ -25,9 +24,9 @@
 {
 public:
     text_skeleton_oarchive(std::ostream & s, unsigned int flags = 0)
- : detail::forward_skeleton_oarchive<text_skeleton_oarchive,boost::archive::text_oarchive>(skeleton_archive_)
+ : detail::forward_skeleton_oarchive<text_skeleton_oarchive,boost::archive::text_oarchive>(skeleton_archive_)
      , skeleton_archive_(s,flags)
- {}
+ {}
 
 private:
     boost::archive::text_oarchive skeleton_archive_;

Modified: branches/CMake/release/boost/mpi/packed_iarchive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/packed_iarchive.hpp (original)
+++ branches/CMake/release/boost/mpi/packed_iarchive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 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.
@@ -90,5 +125,6 @@
 
 BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::mpi::packed_iarchive)
 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::packed_iarchive)
+BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::packed_iarchive)
 
 #endif // BOOST_MPI_PACKED_IARCHIVE_HPP

Modified: branches/CMake/release/boost/mpi/packed_oarchive.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/packed_oarchive.hpp (original)
+++ branches/CMake/release/boost/mpi/packed_oarchive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 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
@@ -84,6 +113,8 @@
 
 // required by export
 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::packed_oarchive)
+BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::packed_oarchive)
+
 
 
 #endif // BOOST_MPI_PACKED_OARCHIVE_HPP

Modified: branches/CMake/release/boost/mpi/python/serialize.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/python/serialize.hpp (original)
+++ branches/CMake/release/boost/mpi/python/serialize.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -317,8 +317,8 @@
     template<typename T>
     struct default_saver {
       void operator()(OArchiver& ar, const object& obj, const unsigned int) {
- typedef typename mpl::if_<is_fundamental<T>, T, T&>::type Type;
- ar << extract<Type>(obj)();
+ T value = extract<T>(obj)();
+ ar << value;
       }
     };
 

Modified: branches/CMake/release/boost/mpi/skeleton_and_content.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/skeleton_and_content.hpp (original)
+++ branches/CMake/release/boost/mpi/skeleton_and_content.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -385,4 +385,7 @@
 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::type1)
 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::type2)
 
+BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::packed_skeleton_oarchive)
+BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::packed_skeleton_iarchive)
+
 #endif // BOOST_MPI_SKELETON_AND_CONTENT_HPP

Modified: branches/CMake/release/boost/mpi/status.hpp
==============================================================================
--- branches/CMake/release/boost/mpi/status.hpp (original)
+++ branches/CMake/release/boost/mpi/status.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 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/CMake/release/boost/ptr_container/clone_allocator.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/clone_allocator.hpp (original)
+++ branches/CMake/release/boost/ptr_container/clone_allocator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -70,11 +70,11 @@
         template< class U >
         static U* allocate_clone( const U& r )
         {
- return const_cast<U*>( &r );
+ return const_cast<U*>(&r);
         }
 
         template< class U >
- static void deallocate_clone( const U* r )
+ static void deallocate_clone( const U* /*r*/ )
         {
             // do nothing
         }

Modified: branches/CMake/release/boost/ptr_container/detail/associative_ptr_container.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/detail/associative_ptr_container.hpp (original)
+++ branches/CMake/release/boost/ptr_container/detail/associative_ptr_container.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -38,6 +38,8 @@
         typedef BOOST_DEDUCED_TYPENAME base_type::scoped_deleter
                                 scoped_deleter;
 
+ typedef BOOST_DEDUCED_TYPENAME Config::container_type
+ container_type;
     public: // typedefs
         typedef BOOST_DEDUCED_TYPENAME Config::key_type
                                 key_type;
@@ -45,65 +47,88 @@
                                 key_compare;
         typedef BOOST_DEDUCED_TYPENAME Config::value_compare
                                 value_compare;
+ typedef BOOST_DEDUCED_TYPENAME Config::hasher
+ hasher;
+ typedef BOOST_DEDUCED_TYPENAME Config::key_equal
+ key_equal;
         typedef BOOST_DEDUCED_TYPENAME Config::iterator
                                 iterator;
         typedef BOOST_DEDUCED_TYPENAME Config::const_iterator
                                 const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME Config::local_iterator
+ local_iterator;
+ typedef BOOST_DEDUCED_TYPENAME Config::const_local_iterator
+ const_local_iterator;
         typedef BOOST_DEDUCED_TYPENAME base_type::size_type
                                 size_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::reference
+ reference;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_reference
+ const_reference;
 
     public: // foundation
+ associative_ptr_container()
+ { }
 
- template< class Compare, class Allocator >
- associative_ptr_container( const Compare& comp,
- const Allocator& a )
- : base_type( comp, a )
- { }
-
- template< class InputIterator, class Compare, class Allocator >
- associative_ptr_container( InputIterator first, InputIterator last,
- const Compare& comp,
- const Allocator& a )
- : base_type( first, last, comp, a )
- { }
-
- template< class PtrContainer >
- explicit associative_ptr_container( std::auto_ptr<PtrContainer> r )
- : base_type( r, key_compare() )
- { }
-
- explicit associative_ptr_container( const associative_ptr_container& r )
- : base_type( r.begin(), r.end(), key_compare(),
- BOOST_DEDUCED_TYPENAME Config::allocator_type() )
- { }
-
- template< class C, class V >
- explicit associative_ptr_container( const associative_ptr_container<C,V>& r )
- : base_type( r.begin(), r.end(), key_compare(),
- BOOST_DEDUCED_TYPENAME Config::allocator_type() )
- { }
-
- template< class PtrContainer >
- associative_ptr_container& operator=( std::auto_ptr<PtrContainer> r ) // nothrow
- {
+ template< class SizeType >
+ associative_ptr_container( SizeType n, unordered_associative_container_tag tag )
+ : base_type( n, tag )
+ { }
+
+ template< class Compare, class Allocator >
+ associative_ptr_container( const Compare& comp,
+ const Allocator& a )
+ : base_type( comp, a, container_type() )
+ { }
+
+ template< class Hash, class Pred, class Allocator >
+ associative_ptr_container( const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( hash, pred, a )
+ { }
+
+ template< class InputIterator, class Compare, class Allocator >
+ associative_ptr_container( InputIterator first, InputIterator last,
+ const Compare& comp,
+ const Allocator& a )
+ : base_type( first, last, comp, a, container_type() )
+ { }
+
+ template< class InputIterator, class Hash, class Pred, class Allocator >
+ associative_ptr_container( InputIterator first, InputIterator last,
+ const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( first, last, hash, pred, a )
+ { }
+
+ template< class PtrContainer >
+ explicit associative_ptr_container( std::auto_ptr<PtrContainer> r )
+ : base_type( r )
+ { }
+
+ associative_ptr_container( const associative_ptr_container& r )
+ : base_type( r.begin(), r.end(), container_type() )
+ { }
+
+ template< class C, class V >
+ associative_ptr_container( const associative_ptr_container<C,V>& r )
+ : base_type( r.begin(), r.end(), container_type() )
+ { }
+
+ template< class PtrContainer >
+ associative_ptr_container& operator=( std::auto_ptr<PtrContainer> r ) // nothrow
+ {
            base_type::operator=( r );
            return *this;
- }
-
- template< class C, class V >
- associative_ptr_container& operator=( const associative_ptr_container<C,V>& r ) // strong
- {
- associative_ptr_container clone( r );
- this->swap( clone );
- return *this;
- }
+ }
         
- associative_ptr_container& operator=( const associative_ptr_container& r ) // strong
- {
- associative_ptr_container clone( r );
- this->swap( clone );
+ associative_ptr_container& operator=( associative_ptr_container r ) // strong
+ {
+ this->swap( r );
            return *this;
- }
+ }
 
     public: // associative container interface
         key_compare key_comp() const
@@ -236,6 +261,145 @@
             }
             return res;
         }
+
+ reference front()
+ {
+ BOOST_ASSERT( !this->empty() );
+ BOOST_ASSERT( *this->begin().base() != 0 );
+ return *this->begin();
+ }
+
+ const_reference front() const
+ {
+ return const_cast<associative_ptr_container*>(this)->front();
+ }
+
+ reference back()
+ {
+ BOOST_ASSERT( !this->empty() );
+ BOOST_ASSERT( *(--this->end()).base() != 0 );
+ return *--this->end();
+ }
+
+ const_reference back() const
+ {
+ return const_cast<associative_ptr_container*>(this)->back();
+ }
+
+ protected: // unordered interface
+ hasher hash_function() const
+ {
+ return this->base().hash_function();
+ }
+
+ key_equal key_eq() const
+ {
+ return this->base().key_eq();
+ }
+
+ size_type bucket_count() const
+ {
+ return this->base().bucket_count();
+ }
+
+ size_type max_bucket_count() const
+ {
+ return this->base().max_bucket_count();
+ }
+
+ size_type bucket_size( size_type n ) const
+ {
+ return this->base().bucket_size( n );
+ }
+
+ float load_factor() const
+ {
+ return this->base().load_factor();
+ }
+
+ float max_load_factor() const
+ {
+ return this->base().max_load_factor();
+ }
+
+ void max_load_factor( float factor )
+ {
+ return this->base().max_load_factor( factor );
+ }
+
+ void rehash( size_type n )
+ {
+ this->base().rehash( n );
+ }
+
+ public:
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(70190006))
+ iterator begin()
+ {
+ return base_type::begin();
+ }
+
+ const_iterator begin() const
+ {
+ return base_type::begin();
+ }
+
+ iterator end()
+ {
+ return base_type::end();
+ }
+
+ const_iterator end() const
+ {
+ return base_type::end();
+ }
+
+ const_iterator cbegin() const
+ {
+ return base_type::cbegin();
+ }
+
+ const_iterator cend() const
+ {
+ return base_type::cend();
+ }
+#else
+ using base_type::begin;
+ using base_type::end;
+ using base_type::cbegin;
+ using base_type::cend;
+#endif
+
+ protected:
+ local_iterator begin( size_type n )
+ {
+ return local_iterator( this->base().begin( n ) );
+ }
+
+ const_local_iterator begin( size_type n ) const
+ {
+ return const_local_iterator( this->base().begin( n ) );
+ }
+
+ local_iterator end( size_type n )
+ {
+ return local_iterator( this->base().end( n ) );
+ }
+
+ const_local_iterator end( size_type n ) const
+ {
+ return const_local_iterator( this->base().end( n ) );
+ }
+
+ const_local_iterator cbegin( size_type n ) const
+ {
+ return const_local_iterator( this->base().cbegin( n ) );
+ }
+
+ const_local_iterator cend( size_type n )
+ {
+ return const_local_iterator( this->base().cend( n ) );
+ }
 
      }; // class 'associative_ptr_container'
     

Modified: branches/CMake/release/boost/ptr_container/detail/map_iterator.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/detail/map_iterator.hpp (original)
+++ branches/CMake/release/boost/ptr_container/detail/map_iterator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -18,8 +18,14 @@
 
 #include <boost/config.hpp>
 #include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/utility/compare_pointees.hpp>
 #include <utility>
 
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4512) // Assignment operator could not be generated.
+#endif
+
 namespace boost
 {
     namespace ptr_container_detail
@@ -47,6 +53,41 @@
             {
                 return this;
             }
+
+ friend inline bool operator==( ref_pair l, ref_pair r )
+ {
+ return l.first == r.first &&
+ boost::equal_pointees( l.second, r.second );
+ }
+
+ friend inline bool operator!=( ref_pair l, ref_pair r )
+ {
+ return !( l == r );
+ }
+
+ friend inline bool operator<( ref_pair l, ref_pair r )
+ {
+ if( l.first == r.first )
+ return boost::less_pointees( l.second, r.second );
+ else
+ return l.first < r.first;
+ }
+
+ friend inline bool operator>( ref_pair l, ref_pair r )
+ {
+ return r < l;
+ }
+
+ friend inline bool operator<=( ref_pair l, ref_pair r )
+ {
+ return !(r < l);
+ }
+
+ friend inline bool operator>=( ref_pair l, ref_pair r )
+ {
+ return !(l < r);
+ }
+
         };
     }
     
@@ -84,4 +125,8 @@
 
 }
 
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
 #endif

Modified: branches/CMake/release/boost/ptr_container/detail/reversible_ptr_container.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/detail/reversible_ptr_container.hpp (original)
+++ branches/CMake/release/boost/ptr_container/detail/reversible_ptr_container.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -66,8 +66,13 @@
 
     struct is_pointer_or_integral_tag {};
     struct is_range_tag {};
-
+ struct sequence_tag {};
+ struct fixed_length_sequence_tag : sequence_tag {};
+ struct associative_container_tag {};
+ struct ordered_associative_container_tag : associative_container_tag {};
+ struct unordered_associative_container_tag : associative_container_tag {};
     
+
     
     template
     <
@@ -135,6 +140,7 @@
 
     public:
         Cont& base() { return c_; }
+ protected: // having this public could break encapsulation
         const Cont& base() const { return c_; }
         
     public: // typedefs
@@ -157,7 +163,7 @@
                                    size_type;
         typedef BOOST_DEDUCED_TYPENAME Config::allocator_type
                                    allocator_type;
-
+ typedef CloneAllocator clone_allocator_type;
         typedef ptr_container_detail::static_move_ptr<Ty_,Deleter>
                                    auto_type;
             
@@ -291,30 +297,57 @@
             clone_back_insert( first, last );
         }
 
+ template< class I >
+ void associative_constructor_impl( I first, I last ) // strong
+ {
+ if( first == last )
+ return;
+
+ scoped_deleter sd( first, last );
+ insert_clones_and_release( sd );
+ }
+
     public: // foundation! should be protected!
- reversible_ptr_container( const allocator_type& a = allocator_type() )
+ reversible_ptr_container()
+ { }
+
+ template< class SizeType >
+ reversible_ptr_container( SizeType n, unordered_associative_container_tag )
+ : c_( n )
+ { }
+
+ template< class SizeType >
+ reversible_ptr_container( SizeType n, fixed_length_sequence_tag )
+ : c_( n )
+ { }
+
+ template< class SizeType >
+ reversible_ptr_container( SizeType n, const allocator_type& a,
+ fixed_length_sequence_tag )
+ : c_( n, a )
+ { }
+
+ explicit reversible_ptr_container( const allocator_type& a )
          : c_( a )
- {}
+ { }
         
         template< class PtrContainer >
- explicit reversible_ptr_container( std::auto_ptr<PtrContainer> clone )
- : c_( allocator_type() )
+ explicit reversible_ptr_container( std::auto_ptr<PtrContainer> clone )
         {
             swap( *clone );
         }
 
- explicit reversible_ptr_container( const reversible_ptr_container& r )
+ reversible_ptr_container( const reversible_ptr_container& r )
         {
- constructor_impl( r.begin(), r.end(), std::forward_iterator_tag() );
+ constructor_impl( r.begin(), r.end(), std::forward_iterator_tag() );
         }
 
         template< class C, class V >
- explicit reversible_ptr_container( const reversible_ptr_container<C,V>& r )
+ reversible_ptr_container( const reversible_ptr_container<C,V>& r )
         {
- constructor_impl( r.begin(), r.end(), std::forward_iterator_tag() );
+ constructor_impl( r.begin(), r.end(), std::forward_iterator_tag() );
         }
 
-
         template< class PtrContainer >
         reversible_ptr_container& operator=( std::auto_ptr<PtrContainer> clone ) // nothrow
         {
@@ -322,27 +355,19 @@
             return *this;
         }
 
- reversible_ptr_container& operator=( const reversible_ptr_container& r ) // strong
- {
- reversible_ptr_container clone( r );
- swap( clone );
- return *this;
- }
-
- template< class C, class V >
- reversible_ptr_container& operator=( const reversible_ptr_container<C,V>& r ) // strong
+ reversible_ptr_container& operator=( reversible_ptr_container r ) // strong
         {
- reversible_ptr_container clone( r );
- swap( clone );
+ swap( r );
             return *this;
         }
+
         // overhead: null-initilization of container pointer (very cheap compared to cloning)
         // overhead: 1 heap allocation (very cheap compared to cloning)
         template< class InputIterator >
         reversible_ptr_container( InputIterator first,
                                   InputIterator last,
                                   const allocator_type& a = allocator_type() ) // basic, strong
- : c_( a )
+ : c_( a )
         {
             constructor_impl( first, last,
 #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
@@ -355,28 +380,77 @@
         template< class Compare >
         reversible_ptr_container( const Compare& comp,
                                   const allocator_type& a )
- : c_( comp, a ) {}
+ : c_( comp, a ) {}
 
+ template< class ForwardIterator >
+ reversible_ptr_container( ForwardIterator first,
+ ForwardIterator last,
+ fixed_length_sequence_tag )
+ : c_( std::distance(first,last) )
+ {
+ constructor_impl( first, last,
+ std::forward_iterator_tag() );
+ }
+
+ template< class SizeType, class InputIterator >
+ reversible_ptr_container( SizeType n,
+ InputIterator first,
+ InputIterator last,
+ fixed_length_sequence_tag )
+ : c_( n )
+ {
+ constructor_impl( first, last,
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#else
+ BOOST_DEDUCED_TYPENAME
+#endif
+ iterator_category<InputIterator>::type() );
+ }
+
+ template< class Compare >
+ reversible_ptr_container( const Compare& comp,
+ const allocator_type& a,
+ associative_container_tag )
+ : c_( comp, a )
+ { }
+
+ template< class InputIterator >
+ reversible_ptr_container( InputIterator first,
+ InputIterator last,
+ associative_container_tag )
+ {
+ associative_constructor_impl( first, last );
+ }
+
         template< class InputIterator, class Compare >
         reversible_ptr_container( InputIterator first,
                                   InputIterator last,
                                   const Compare& comp,
- const allocator_type& a )
- : c_( comp, a )
+ const allocator_type& a,
+ associative_container_tag )
+ : c_( comp, a )
         {
- if( first == last )
- return;
-
- scoped_deleter sd( first, last );
- insert_clones_and_release( sd );
+ associative_constructor_impl( first, last );
         }
 
- template< class PtrContainer, class Compare >
- reversible_ptr_container( std::auto_ptr<PtrContainer> clone,
- Compare comp )
- : c_( comp, allocator_type() )
- {
- swap( *clone );
+ explicit reversible_ptr_container( size_type n )
+ : c_( n ) {}
+
+ template< class Hash, class Pred >
+ reversible_ptr_container( const Hash& hash,
+ const Pred& pred,
+ const allocator_type& a )
+ : c_( hash, pred, a ) {}
+
+ template< class InputIterator, class Hash, class Pred >
+ reversible_ptr_container( InputIterator first,
+ InputIterator last,
+ const Hash& hash,
+ const Pred& pred,
+ const allocator_type& a )
+ : c_( hash, pred, a )
+ {
+ associative_constructor_impl( first, last );
         }
 
     public:
@@ -410,7 +484,17 @@
             { return reverse_iterator( this->begin() ); }
         const_reverse_iterator rend() const
             { return const_reverse_iterator( this->begin() ); }
-
+
+ const_iterator cbegin() const
+ { return const_iterator( c_.begin() ); }
+ const_iterator cend() const
+ { return const_iterator( c_.end() ); }
+
+ const_reverse_iterator crbegin() const
+ { return const_reverse_iterator( this->end() ); }
+ const_reverse_iterator crend() const
+ { return const_reverse_iterator( this->begin() ); }
+
         void swap( reversible_ptr_container& r ) // nothrow
         {
             c_.swap( r.c_ );
@@ -613,25 +697,27 @@
 #define BOOST_PTR_CONTAINER_DEFINE_COPY_CONSTRUCTORS( PC, base_type ) \
                                                                       \
     template< class U > \
- explicit PC( const PC<U>& r ) : base_type( r ) { } \
+ PC( const PC<U>& r ) : base_type( r ) { } \
                                                                       \
- template< class U > \
- PC& operator=( const PC<U>& r ) \
+ PC& operator=( PC r ) \
     { \
- base_type::operator=( r ); \
+ this->swap( r ); \
         return *this; \
- }
-
+ } \
+
 
 #define BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( PC, base_type ) \
     typedef BOOST_DEDUCED_TYPENAME base_type::iterator iterator; \
     typedef BOOST_DEDUCED_TYPENAME base_type::size_type size_type; \
     typedef BOOST_DEDUCED_TYPENAME base_type::const_reference const_reference; \
     typedef BOOST_DEDUCED_TYPENAME base_type::allocator_type allocator_type; \
- explicit PC( const allocator_type& a = allocator_type() ) : base_type(a) {} \
+ PC() {} \
+ explicit PC( const allocator_type& a ) : base_type(a) {} \
+ template< class InputIterator > \
+ PC( InputIterator first, InputIterator last ) : base_type( first, last ) {} \
     template< class InputIterator > \
     PC( InputIterator first, InputIterator last, \
- const allocator_type& a = allocator_type() ) : base_type( first, last, a ) {}
+ const allocator_type& a ) : base_type( first, last, a ) {}
                  
 #define BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( PC, base_type, this_type ) \
    BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( PC, base_type ) \

Modified: branches/CMake/release/boost/ptr_container/detail/serialize_ptr_map_adapter.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/detail/serialize_ptr_map_adapter.hpp (original)
+++ branches/CMake/release/boost/ptr_container/detail/serialize_ptr_map_adapter.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -16,10 +16,10 @@
 namespace serialization
 {
 
-template<class Archive, class T, class VoidPtrMap, class CloneAllocator>
-void save(Archive& ar, const ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap, CloneAllocator>& c, unsigned int version)
+template<class Archive, class T, class VoidPtrMap, class CloneAllocator, bool Ordered>
+void save(Archive& ar, const ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap, CloneAllocator,Ordered>& c, unsigned int /*version*/)
 {
- typedef ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap, CloneAllocator> container;
+ typedef ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap, CloneAllocator,Ordered> container;
     typedef BOOST_DEDUCED_TYPENAME container::const_iterator const_iterator;
 
     ar << boost::serialization::make_nvp( ptr_container_detail::count(),
@@ -34,10 +34,10 @@
     }
 }
 
-template<class Archive, class T, class VoidPtrMap, class CloneAllocator>
-void load(Archive& ar, ptr_map_adapter<T, VoidPtrMap, CloneAllocator>& c, unsigned int version)
+template<class Archive, class T, class VoidPtrMap, class CloneAllocator, bool Ordered>
+void load(Archive& ar, ptr_map_adapter<T, VoidPtrMap, CloneAllocator,Ordered>& c, unsigned int /*version*/)
 {
- typedef ptr_map_adapter<T, VoidPtrMap, CloneAllocator> container;
+ typedef ptr_map_adapter<T, VoidPtrMap, CloneAllocator,Ordered> container;
     typedef BOOST_DEDUCED_TYPENAME container::key_type key_type;
     typedef BOOST_DEDUCED_TYPENAME container::size_type size_type;
     typedef BOOST_DEDUCED_TYPENAME container::iterator iterator;
@@ -57,10 +57,10 @@
     }
 }
 
-template<class Archive, class T, class VoidPtrMap, class CloneAllocator>
-void load(Archive& ar, ptr_multimap_adapter<T, VoidPtrMap, CloneAllocator>& c, unsigned int version)
+template<class Archive, class T, class VoidPtrMap, class CloneAllocator, bool Ordered>
+void load(Archive& ar, ptr_multimap_adapter<T, VoidPtrMap, CloneAllocator,Ordered>& c, unsigned int /*version*/)
 {
- typedef ptr_multimap_adapter<T, VoidPtrMap, CloneAllocator> container;
+ typedef ptr_multimap_adapter<T, VoidPtrMap, CloneAllocator,Ordered> container;
     typedef BOOST_DEDUCED_TYPENAME container::key_type key_type;
     typedef BOOST_DEDUCED_TYPENAME container::size_type size_type;
     typedef BOOST_DEDUCED_TYPENAME container::iterator iterator;

Modified: branches/CMake/release/boost/ptr_container/detail/serialize_reversible_cont.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/detail/serialize_reversible_cont.hpp (original)
+++ branches/CMake/release/boost/ptr_container/detail/serialize_reversible_cont.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -16,12 +16,6 @@
 namespace ptr_container_detail
 {
 
-template<class T>
-inline T const& serialize_as_const(T const& r)
-{
- return r;
-}
-
 template<class Archive, class Config, class CloneAllocator>
 void save_helper(Archive& ar, const ptr_container_detail::reversible_ptr_container<Config, CloneAllocator>& c)
 {
@@ -66,7 +60,7 @@
 {
 
 template<class Archive, class Config, class CloneAllocator>
-void save(Archive& ar, const ptr_container_detail::reversible_ptr_container<Config, CloneAllocator>& c, unsigned int version)
+void save(Archive& ar, const ptr_container_detail::reversible_ptr_container<Config, CloneAllocator>& c, unsigned int /*version*/)
 {
     ar << boost::serialization::make_nvp( ptr_container_detail::count(),
                                           ptr_container_detail::serialize_as_const(c.size()) );
@@ -74,7 +68,7 @@
 }
 
 template<class Archive, class Config, class CloneAllocator>
-void load(Archive& ar, ptr_container_detail::reversible_ptr_container<Config, CloneAllocator>& c, unsigned int version)
+void load(Archive& ar, ptr_container_detail::reversible_ptr_container<Config, CloneAllocator>& c, unsigned int /*version*/)
 {
     typedef ptr_container_detail::reversible_ptr_container<Config, CloneAllocator> container_type;
     typedef BOOST_DEDUCED_TYPENAME container_type::size_type size_type;

Modified: branches/CMake/release/boost/ptr_container/detail/serialize_xml_names.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/detail/serialize_xml_names.hpp (original)
+++ branches/CMake/release/boost/ptr_container/detail/serialize_xml_names.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -20,6 +20,12 @@
         inline const char* item() { return "item"; }
         inline const char* first() { return "first"; }
         inline const char* second() { return "second"; }
+
+ template<class T>
+ inline T const& serialize_as_const(T const& r)
+ {
+ return r;
+ }
     }
 }
 #endif

Modified: branches/CMake/release/boost/ptr_container/ptr_array.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/ptr_array.hpp (original)
+++ branches/CMake/release/boost/ptr_container/ptr_array.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -36,12 +36,12 @@
         public:
             typedef Allocator allocator_type;
 
- ptr_array_impl( Allocator a = Allocator() )
+ ptr_array_impl( Allocator /*a*/ = Allocator() )
             {
                 this->assign( 0 );
             }
 
- ptr_array_impl( size_t, T*, Allocator a = Allocator() )
+ ptr_array_impl( size_t, T*, Allocator /*a*/ = Allocator() )
             {
                 this->assign( 0 );
             }
@@ -83,41 +83,30 @@
         ptr_array() : base_class()
         { }
 
- explicit ptr_array( const ptr_array& r )
+ ptr_array( const ptr_array& r )
         {
             size_t i = 0;
             for( ; i != N; ++i )
                 this->base()[i] = this->null_policy_allocate_clone(
- static_cast<T*>( r.base()[i] ) );
+ static_cast<const T*>( &r[i] ) );
         }
 
         template< class U >
- explicit ptr_array( const ptr_array<U,N>& r )
+ ptr_array( const ptr_array<U,N>& r )
         {
             size_t i = 0;
             for( ; i != N; ++i )
                 this->base()[i] = this->null_policy_allocate_clone(
- static_cast<U*>( r.base()[i] ) );
+ static_cast<const T*>( &r[i] ) );
         }
 
         explicit ptr_array( std::auto_ptr<this_type> r )
         : base_class( r ) { }
 
- ptr_array& operator=( const ptr_array& r )
+ ptr_array& operator=( ptr_array r )
         {
- ptr_array clone( r );
- this->swap( clone );
- return *this;
-
- }
-
- template< class U >
- ptr_array& operator=( const ptr_array<U,N>& r )
- {
- ptr_array clone( r );
- this->swap( clone );
- return *this;
-
+ this->swap( r );
+ return *this;
         }
 
         ptr_array& operator=( std::auto_ptr<this_type> r )

Modified: branches/CMake/release/boost/ptr_container/ptr_container.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/ptr_container.hpp (original)
+++ branches/CMake/release/boost/ptr_container/ptr_container.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,7 +1,7 @@
 //
 // Boost.Pointer Container
 //
-// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// Copyright Thorsten Ottosen 2003-2008. Use, modification and
 // distribution is subject to the Boost Software License, Version
 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
@@ -22,6 +22,10 @@
 #include <boost/ptr_container/ptr_map.hpp>
 #include <boost/ptr_container/ptr_set.hpp>
 #include <boost/ptr_container/ptr_vector.hpp>
+#include <boost/ptr_container/ptr_unordered_map.hpp>
+#include <boost/ptr_container/ptr_unordered_set.hpp>
+#include <boost/ptr_container/ptr_circular_buffer.hpp>
+#include <boost/ptr_container/ptr_inserter.hpp>
 
 #endif
 

Modified: branches/CMake/release/boost/ptr_container/ptr_deque.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/ptr_deque.hpp (original)
+++ branches/CMake/release/boost/ptr_container/ptr_deque.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -44,7 +44,7 @@
 
       BOOST_PTR_CONTAINER_DEFINE_SEQEUENCE_MEMBERS( ptr_deque,
                                                     base_class,
- this_type );
+ this_type )
     };
 
     //////////////////////////////////////////////////////////////////////////////

Modified: branches/CMake/release/boost/ptr_container/ptr_list.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/ptr_list.hpp (original)
+++ branches/CMake/release/boost/ptr_container/ptr_list.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -38,12 +38,14 @@
                                          CloneAllocator >
             base_class;
 
- typedef ptr_list<T,CloneAllocator,Allocator> this_type;
+ typedef ptr_list<T,CloneAllocator,Allocator> this_type;
         
     public:
         BOOST_PTR_CONTAINER_DEFINE_SEQEUENCE_MEMBERS( ptr_list,
                                                       base_class,
- this_type );
+ this_type )
+
+ typedef BOOST_DEDUCED_TYPENAME base_class::value_type value_type;
         
     public:
         using base_class::merge;
@@ -69,6 +71,20 @@
             this->base().sort( void_ptr_indirect_fun<Compare,T>( comp ) );
         }
 
+ template< class Pred >
+ void erase_if( iterator first, iterator last, Pred pred )
+ {
+ base_class::erase_if( first, last, pred );
+ }
+
+ template< class Pred >
+ void erase_if( Pred pred )
+ {
+ this->base().remove_if( BOOST_DEDUCED_TYPENAME base_class::
+ BOOST_NESTED_TEMPLATE void_ptr_delete_if<Pred,value_type>
+ (pred) );
+ }
+
     }; // class 'ptr_list'
 
     //////////////////////////////////////////////////////////////////////////////

Modified: branches/CMake/release/boost/ptr_container/ptr_map.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/ptr_map.hpp (original)
+++ branches/CMake/release/boost/ptr_container/ptr_map.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -41,28 +41,35 @@
         typedef ptr_map<Key,T,Compare,CloneAllocator,Allocator> this_type;
         
     public:
- explicit ptr_map( const Compare& comp = Compare(),
+ ptr_map()
+ { }
+
+ explicit ptr_map( const Compare& comp,
                           const Allocator& a = Allocator() )
           : base_type( comp, a ) { }
 
         template< class InputIterator >
+ ptr_map( InputIterator first, InputIterator last )
+ : base_type( first, last )
+ { }
+
+ template< class InputIterator >
         ptr_map( InputIterator first, InputIterator last,
- const Compare& comp = Compare(),
+ const Compare& comp,
                  const Allocator& a = Allocator() )
           : base_type( first, last, comp, a )
         { }
 
         BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_map, base_type,
- this_type );
+ this_type )
 
         template< class U >
         ptr_map( const ptr_map<Key,U>& r ) : base_type( r )
         { }
 
- template< class U >
- ptr_map& operator=( const ptr_map<Key,U>& r )
+ ptr_map& operator=( ptr_map r )
         {
- base_type::operator=( r );
+ this->swap( r );
             return *this;
         }
     };
@@ -88,29 +95,36 @@
         typedef ptr_multimap<Key,T,Compare,CloneAllocator,Allocator> this_type;
         
     public:
- explicit ptr_multimap( const Compare& comp = Compare(),
+ ptr_multimap()
+ { }
+
+ explicit ptr_multimap( const Compare& comp,
                                const Allocator& a = Allocator() )
           : base_type( comp, a ) { }
+
+ template< class InputIterator >
+ ptr_multimap( InputIterator first, InputIterator last )
+ : base_type( first, last )
+ { }
         
         template< class InputIterator >
         ptr_multimap( InputIterator first, InputIterator last,
- const Compare& comp = Compare(),
+ const Compare& comp,
                       const Allocator& a = Allocator() )
           : base_type( first, last, comp, a )
         { }
 
         BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multimap,
                                                       base_type,
- this_type );
+ this_type )
 
         template< class U >
         ptr_multimap( const ptr_multimap<Key,U>& r ) : base_type( r )
         { }
 
- template< class U >
- ptr_multimap& operator=( const ptr_multimap<Key,U>& r )
+ ptr_multimap& operator=( ptr_multimap r )
         {
- base_type::operator=( r );
+ this->swap( r );
             return *this;
         }
     };

Modified: branches/CMake/release/boost/ptr_container/ptr_map_adapter.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/ptr_map_adapter.hpp (original)
+++ branches/CMake/release/boost/ptr_container/ptr_map_adapter.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -18,6 +18,7 @@
 
 #include <boost/ptr_container/detail/map_iterator.hpp>
 #include <boost/ptr_container/detail/associative_ptr_container.hpp>
+#include <boost/ptr_container/detail/meta_functions.hpp>
 #include <boost/static_assert.hpp>
 #include <boost/range/iterator_range.hpp>
 
@@ -29,7 +30,8 @@
     template
     <
         class T,
- class VoidPtrMap
+ class VoidPtrMap,
+ bool Ordered
>
     struct map_config
     {
@@ -41,11 +43,35 @@
         typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::allocator_type
                      allocator_type;
         
- typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_compare
- key_compare;
-
- typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::value_compare
- value_compare;
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ select_value_compare<VoidPtrMap>,
+ mpl::identity<void> >::type
+ value_compare;
+
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ select_key_compare<VoidPtrMap>,
+ mpl::identity<void> >::type
+ key_compare;
+
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ mpl::identity<void>,
+ select_hasher<VoidPtrMap> >::type
+ hasher;
+
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ mpl::identity<void>,
+ select_key_equal<VoidPtrMap> >::type
+ key_equal;
+
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::if_c<Ordered,
+ ptr_container_detail::ordered_associative_container_tag,
+ ptr_container_detail::unordered_associative_container_tag>::type
+ container_type;
         
         typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type
                      key_type;
@@ -57,7 +83,23 @@
         
         typedef ptr_map_iterator< BOOST_DEDUCED_TYPENAME VoidPtrMap::const_iterator, key_type, const U* const>
                      const_iterator;
-
+
+ typedef ptr_map_iterator<
+ BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ select_iterator<VoidPtrMap>,
+ select_local_iterator<VoidPtrMap> >::type,
+ key_type, U* const >
+ local_iterator;
+
+ typedef ptr_map_iterator<
+ BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ select_iterator<VoidPtrMap>,
+ select_const_local_iterator<VoidPtrMap> >::type,
+ key_type, const U* const >
+ const_local_iterator;
+
         template< class Iter >
         static U* get_pointer( Iter i )
         {
@@ -79,19 +121,19 @@
     <
         class T,
         class VoidPtrMap,
- class CloneAllocator
+ class CloneAllocator,
+ bool Ordered
>
     class ptr_map_adapter_base :
- public ptr_container_detail::associative_ptr_container< map_config<T,VoidPtrMap>,
+ public ptr_container_detail::associative_ptr_container< map_config<T,VoidPtrMap,Ordered>,
                                                     CloneAllocator >
     {
- typedef ptr_container_detail::associative_ptr_container< map_config<T,VoidPtrMap>,
+ typedef ptr_container_detail::associative_ptr_container< map_config<T,VoidPtrMap,Ordered>,
                                                      CloneAllocator >
             base_type;
 
- typedef map_config<T,VoidPtrMap> config;
-
- typedef ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator> this_type;
+ typedef map_config<T,VoidPtrMap,Ordered> config;
+ typedef ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator,Ordered> this_type;
         
     public:
 
@@ -153,6 +195,9 @@
             }
 
             void release() { released_ = true; }
+
+ private:
+ eraser& operator=(const eraser&);
         };
 
         mapped_reference insert_lookup( const key_type& key )
@@ -174,18 +219,48 @@
         
     public:
 
- template< class InputIterator >
- ptr_map_adapter_base( InputIterator first, InputIterator last,
- const allocator_type& a = allocator_type() )
- : base_type( first, last, a )
+ ptr_map_adapter_base()
         { }
-
+
+ template< class SizeType >
+ explicit ptr_map_adapter_base( SizeType n,
+ ptr_container_detail::unordered_associative_container_tag tag )
+ : base_type( n, tag )
+ { }
+
         template< class Compare, class Allocator >
         ptr_map_adapter_base( const Compare& comp,
                               const Allocator& a )
         : base_type( comp, a )
         { }
-
+
+ template< class Hash, class Pred, class Allocator >
+ ptr_map_adapter_base( const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( hash, pred, a )
+ { }
+
+ template< class InputIterator >
+ ptr_map_adapter_base( InputIterator first, InputIterator last )
+ : base_type( first, last )
+ { }
+
+ template< class InputIterator, class Comp >
+ ptr_map_adapter_base( InputIterator first, InputIterator last,
+ const Comp& comp,
+ const allocator_type& a = allocator_type() )
+ : base_type( first, last, comp, a )
+ { }
+
+ template< class InputIterator, class Hash, class Pred, class Allocator >
+ ptr_map_adapter_base( InputIterator first, InputIterator last,
+ const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( first, last, hash, pred, a )
+ { }
+
         template< class PtrContainer >
         explicit ptr_map_adapter_base( std::auto_ptr<PtrContainer> clone )
         : base_type( clone )
@@ -287,6 +362,12 @@
         {
             return replace( where, x.release() );
         }
+
+ protected:
+ size_type bucket( const key_type& key ) const
+ {
+ return this->base().bucket( key );
+ }
     };
     
 } // ptr_container_detail
@@ -299,12 +380,13 @@
     <
         class T,
         class VoidPtrMap,
- class CloneAllocator = heap_clone_allocator
+ class CloneAllocator = heap_clone_allocator,
+ bool Ordered = true
>
     class ptr_map_adapter :
- public ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator>
+ public ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator,Ordered>
     {
- typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator>
+ typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator,Ordered>
             base_type;
     
     public:
@@ -320,8 +402,6 @@
                     const_reference;
         typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
                     auto_type;
- typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_compare
- key_compare;
         typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::allocator_type
                     allocator_type;
         typedef BOOST_DEDUCED_TYPENAME base_type::mapped_type
@@ -356,29 +436,53 @@
         }
     
     public:
+ ptr_map_adapter( )
+ { }
 
- explicit ptr_map_adapter( const key_compare& comp = key_compare(),
- const allocator_type& a = allocator_type() )
+ template< class Comp >
+ explicit ptr_map_adapter( const Comp& comp,
+ const allocator_type& a )
           : base_type( comp, a ) { }
-
+
+ template< class Hash, class Pred, class Allocator >
+ ptr_map_adapter( const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( hash, pred, a )
+ { }
+
         template< class InputIterator >
+ ptr_map_adapter( InputIterator first, InputIterator last )
+ {
+ map_basic_clone_and_insert( first, last );
+ }
+
+ template< class InputIterator, class Comp >
         ptr_map_adapter( InputIterator first, InputIterator last,
- const key_compare& comp = key_compare(),
+ const Comp& comp,
                          const allocator_type& a = allocator_type() )
           : base_type( comp, a )
         {
             map_basic_clone_and_insert( first, last );
         }
 
- explicit ptr_map_adapter( const ptr_map_adapter& r )
- : base_type( key_compare(), allocator_type() )
+ template< class InputIterator, class Hash, class Pred, class Allocator >
+ ptr_map_adapter( InputIterator first, InputIterator last,
+ const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( hash, pred, a )
+ {
+ map_basic_clone_and_insert( first, last );
+ }
+
+ ptr_map_adapter( const ptr_map_adapter& r )
         {
             map_basic_clone_and_insert( r.begin(), r.end() );
         }
         
- template< class Key, class U >
- explicit ptr_map_adapter( const ptr_map_adapter<Key,U>& r )
- : base_type( key_compare(), allocator_type() )
+ template< class Key, class U, class CA, bool b >
+ ptr_map_adapter( const ptr_map_adapter<Key,U,CA,b>& r )
         {
             map_basic_clone_and_insert( r.begin(), r.end() );
         }
@@ -387,18 +491,9 @@
         ptr_map_adapter( std::auto_ptr<U> r ) : base_type( r )
         { }
 
- ptr_map_adapter& operator=( const ptr_map_adapter& r )
+ ptr_map_adapter& operator=( ptr_map_adapter r )
         {
- ptr_map_adapter clone( r );
- this->swap( clone );
- return *this;
- }
-
- template< class Key, class U >
- ptr_map_adapter& operator=( const ptr_map_adapter<Key,U>& r )
- {
- ptr_map_adapter clone( r );
- this->swap( clone );
+ this->swap( r );
             return *this;
         }
 
@@ -435,6 +530,18 @@
                 ptr.release(); // nothrow
             return std::make_pair( iterator( res.first ), res.second ); // nothrow
         }
+
+ iterator insert_impl( iterator before, const key_type& key, mapped_type x ) // strong
+ {
+ this->enforce_null_policy( x,
+ "Null pointer in 'ptr_map_adapter::insert()'" );
+ auto_type ptr( x ); // nothrow
+ BOOST_DEDUCED_TYPENAME base_type::ptr_iterator
+ res = this->base().insert( before.base(), std::make_pair( key, x ) );
+ // strong, commit
+ ptr.release(); // notrow
+ return iterator( res );
+ }
         
     public:
         
@@ -449,6 +556,33 @@
             return insert_impl( key, x.release() );
         }
 
+ template< class F, class S >
+ iterator insert( iterator before, ptr_container_detail::ref_pair<F,S> p ) // strong
+ {
+ this->enforce_null_policy( p.second,
+ "Null pointer in 'ptr_map_adapter::insert()'" );
+
+ auto_type ptr( this->null_policy_allocate_clone( p.second ) );
+ BOOST_DEDUCED_TYPENAME base_type::ptr_iterator
+ result = this->base().insert( before.base(),
+ std::make_pair(p.first,ptr.get()) ); // strong
+ if( ptr.get() == result->second )
+ ptr.release();
+
+ return iterator( result );
+ }
+
+ iterator insert( iterator before, key_type& key, mapped_type x ) // strong
+ {
+ return insert_impl( before, key, x );
+ }
+
+ template< class U >
+ iterator insert( iterator before, const key_type& key, std::auto_ptr<U> x ) // strong
+ {
+ return insert_impl( before, key, x.release() );
+ }
+
         template< class PtrMapAdapter >
         bool transfer( BOOST_DEDUCED_TYPENAME PtrMapAdapter::iterator object,
                        PtrMapAdapter& from ) // strong
@@ -493,12 +627,13 @@
     <
         class T,
         class VoidPtrMultiMap,
- class CloneAllocator = heap_clone_allocator
+ class CloneAllocator = heap_clone_allocator,
+ bool Ordered = true
>
     class ptr_multimap_adapter :
- public ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMultiMap,CloneAllocator>
+ public ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMultiMap,CloneAllocator,Ordered>
     {
- typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMultiMap,CloneAllocator>
+ typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMultiMap,CloneAllocator,Ordered>
              base_type;
 
     public: // typedefs
@@ -516,8 +651,6 @@
                     mapped_type;
         typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
                     auto_type;
- typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::key_compare
- key_compare;
         typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::allocator_type
                     allocator_type;
     private:
@@ -545,29 +678,60 @@
         }
         
     public:
-
- explicit ptr_multimap_adapter( const key_compare& comp = key_compare(),
- const allocator_type& a = allocator_type() )
+
+ ptr_multimap_adapter()
+ { }
+
+ template< class SizeType >
+ ptr_multimap_adapter( SizeType n,
+ ptr_container_detail::unordered_associative_container_tag tag )
+ : base_type( n, tag )
+ { }
+
+ template< class Comp >
+ explicit ptr_multimap_adapter( const Comp& comp,
+ const allocator_type& a )
           : base_type( comp, a ) { }
-
+
+ template< class Hash, class Pred, class Allocator >
+ ptr_multimap_adapter( const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( hash, pred, a )
+ { }
+
         template< class InputIterator >
+ ptr_multimap_adapter( InputIterator first, InputIterator last )
+ {
+ map_basic_clone_and_insert( first, last );
+ }
+
+ template< class InputIterator, class Comp >
         ptr_multimap_adapter( InputIterator first, InputIterator last,
- const key_compare& comp = key_compare(),
- const allocator_type& a = allocator_type() )
+ const Comp& comp,
+ const allocator_type& a )
           : base_type( comp, a )
         {
             map_basic_clone_and_insert( first, last );
         }
 
- explicit ptr_multimap_adapter( const ptr_multimap_adapter& r )
- : base_type( key_compare(), allocator_type() )
+ template< class InputIterator, class Hash, class Pred, class Allocator >
+ ptr_multimap_adapter( InputIterator first, InputIterator last,
+ const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( hash, pred, a )
+ {
+ map_basic_clone_and_insert( first, last );
+ }
+
+ ptr_multimap_adapter( const ptr_multimap_adapter& r )
         {
             map_basic_clone_and_insert( r.begin(), r.end() );
         }
         
- template< class Key, class U >
- explicit ptr_multimap_adapter( const ptr_multimap_adapter<Key,U>& r )
- : base_type( key_compare(), allocator_type() )
+ template< class Key, class U, class CA, bool b >
+ ptr_multimap_adapter( const ptr_multimap_adapter<Key,U,CA,b>& r )
         {
             map_basic_clone_and_insert( r.begin(), r.end() );
         }
@@ -576,21 +740,12 @@
         explicit ptr_multimap_adapter( std::auto_ptr<U> r ) : base_type( r )
         { }
 
- ptr_multimap_adapter& operator=( const ptr_multimap_adapter& r )
+ ptr_multimap_adapter& operator=( ptr_multimap_adapter r )
         {
- ptr_multimap_adapter clone( r );
- this->swap( clone );
+ this->swap( r );
             return *this;
         }
 
- template< class Key, class U >
- ptr_multimap_adapter& operator=( const ptr_multimap_adapter<Key,U>& r )
- {
- ptr_multimap_adapter clone( r );
- this->swap( clone );
- return *this;
- }
-
         template< class U >
         ptr_multimap_adapter& operator=( std::auto_ptr<U> r )
         {
@@ -599,7 +754,34 @@
         }
 
         using base_type::release;
-
+
+ private:
+ iterator insert_impl( const key_type& key, mapped_type x ) // strong
+ {
+ this->enforce_null_policy( x,
+ "Null pointer in 'ptr_multimap_adapter::insert()'" );
+ auto_type ptr( x ); // nothrow
+ BOOST_DEDUCED_TYPENAME base_type::ptr_iterator
+ res = this->base().insert( std::make_pair( key, x ) );
+ // strong, commit
+ ptr.release(); // notrow
+ return iterator( res );
+ }
+
+ iterator insert_impl( iterator before, const key_type& key, mapped_type x ) // strong
+ {
+ this->enforce_null_policy( x,
+ "Null pointer in 'ptr_multimap_adapter::insert()'" );
+ auto_type ptr( x ); // nothrow
+ BOOST_DEDUCED_TYPENAME base_type::ptr_iterator
+ res = this->base().insert( before.base(),
+ std::make_pair( key, x ) );
+ // strong, commit
+ ptr.release(); // notrow
+ return iterator( res );
+ }
+
+ public:
         template< typename InputIterator >
         void insert( InputIterator first, InputIterator last ) // basic
         {
@@ -614,23 +796,36 @@
 
         iterator insert( key_type& key, mapped_type x ) // strong
         {
- this->enforce_null_policy( x,
+ return insert_impl( key, x );
+ }
+
+ template< class U >
+ iterator insert( const key_type& key, std::auto_ptr<U> x )
+ {
+ return insert_impl( key, x.release() );
+ }
+
+ template< class F, class S >
+ iterator insert( iterator before, ptr_container_detail::ref_pair<F,S> p ) // strong
+ {
+ this->enforce_null_policy( p.second,
                   "Null pointer in 'ptr_multimap_adapter::insert()'" );
+ iterator res = insert_impl( before, p.first,
+ this->null_policy_allocate_clone( p.second ) );
+ return res;
+ }
 
- auto_type ptr( x ); // nothrow
- BOOST_DEDUCED_TYPENAME base_type::ptr_iterator
- res = this->base().insert( std::make_pair( key, x ) );
- // strong, commit
- ptr.release(); // notrow
- return iterator( res );
+ iterator insert( iterator before, key_type& key, mapped_type x ) // strong
+ {
+ return insert_impl( before, key, x );
         }
 
         template< class U >
- iterator insert( key_type& key, std::auto_ptr<U> x )
+ iterator insert( iterator before, const key_type& key, std::auto_ptr<U> x ) // strong
         {
- return insert( key, x.release() );
+ return insert_impl( before, key, x.release() );
         }
-
+
         template< class PtrMapAdapter >
         void transfer( BOOST_DEDUCED_TYPENAME PtrMapAdapter::iterator object,
                        PtrMapAdapter& from ) // strong

Modified: branches/CMake/release/boost/ptr_container/ptr_sequence_adapter.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/ptr_sequence_adapter.hpp (original)
+++ branches/CMake/release/boost/ptr_container/ptr_sequence_adapter.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -134,34 +134,100 @@
                                                     CloneAllocator >
              base_type;
         
- typedef BOOST_DEDUCED_TYPENAME base_type::scoped_deleter scoped_deleter;
-
         typedef ptr_sequence_adapter<T,VoidPtrSeq,CloneAllocator>
             this_type;
+
+ protected:
+ typedef BOOST_DEDUCED_TYPENAME base_type::scoped_deleter scoped_deleter;
          
     public:
         typedef BOOST_DEDUCED_TYPENAME base_type::value_type value_type;
         typedef BOOST_DEDUCED_TYPENAME base_type::reference reference;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_reference
+ const_reference;
         typedef BOOST_DEDUCED_TYPENAME base_type::auto_type auto_type;
-
- BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_sequence_adapter,
- base_type )
+ typedef BOOST_DEDUCED_TYPENAME base_type::clone_allocator_type
+ clone_allocator_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::iterator iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::size_type size_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::allocator_type
+ allocator_type;
+
+ ptr_sequence_adapter()
+ { }
+
+ template< class Allocator >
+ explicit ptr_sequence_adapter( const Allocator& a )
+ : base_type( a )
+ { }
+
+ template< class SizeType >
+ ptr_sequence_adapter( SizeType n,
+ ptr_container_detail::fixed_length_sequence_tag tag )
+ : base_type( n, tag )
+ { }
+
+ template< class SizeType, class Allocator >
+ ptr_sequence_adapter( SizeType n, const Allocator& a,
+ ptr_container_detail::fixed_length_sequence_tag tag )
+ : base_type( n, a, tag )
+ { }
+
+ template< class InputIterator >
+ ptr_sequence_adapter( InputIterator first, InputIterator last )
+ : base_type( first, last )
+ { }
+
+ template< class InputIterator, class Allocator >
+ ptr_sequence_adapter( InputIterator first, InputIterator last,
+ const Allocator& a )
+ : base_type( first, last, a )
+ { }
+
+ template< class ForwardIterator >
+ ptr_sequence_adapter( ForwardIterator first,
+ ForwardIterator last,
+ ptr_container_detail::fixed_length_sequence_tag tag )
+ : base_type( first, last, tag )
+ { }
+
+ template< class SizeType, class ForwardIterator >
+ ptr_sequence_adapter( SizeType n,
+ ForwardIterator first,
+ ForwardIterator last,
+ ptr_container_detail::fixed_length_sequence_tag tag )
+ : base_type( n, first, last, tag )
+ { }
 
+ ptr_sequence_adapter( const ptr_sequence_adapter& r )
+ : base_type( r )
+ { }
+
         template< class U >
- explicit ptr_sequence_adapter( const ptr_sequence_adapter<U,VoidPtrSeq>& r )
+ ptr_sequence_adapter( const ptr_sequence_adapter<U,VoidPtrSeq,CloneAllocator>& r )
           : base_type( r )
         { }
         
+ ptr_sequence_adapter( const ptr_sequence_adapter& r,
+ ptr_container_detail::fixed_length_sequence_tag tag )
+ : base_type( r, tag )
+ { }
+
+ template< class U >
+ ptr_sequence_adapter( const ptr_sequence_adapter<U,VoidPtrSeq,CloneAllocator>& r,
+ ptr_container_detail::fixed_length_sequence_tag tag )
+ : base_type( r, tag )
+ { }
+
         template< class PtrContainer >
         explicit ptr_sequence_adapter( std::auto_ptr<PtrContainer> clone )
           : base_type( clone )
         { }
 
- template< class U >
- ptr_sequence_adapter& operator=( const ptr_sequence_adapter<U,VoidPtrSeq>& r )
+ ptr_sequence_adapter& operator=( const ptr_sequence_adapter r )
         {
- base_type::operator=( r );
- return *this;
+ this->swap( r );
+ return *this;
         }
         
         template< class PtrContainer >
@@ -207,9 +273,8 @@
 
         auto_type pop_back()
         {
- BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
- bad_ptr_container_operation,
- "'pop_back()' on empty container" );
+ BOOST_ASSERT( !this->empty() &&
+ "'pop_back()' on empty container" );
             auto_type ptr( static_cast<value_type>( this->base().back() ) );
                                                        // nothrow
             this->base().pop_back(); // nothrow
@@ -218,9 +283,8 @@
 
         auto_type pop_front()
         {
- BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
- bad_ptr_container_operation,
- "'pop_front()' on empty container" );
+ BOOST_ASSERT( !this->empty() &&
+ "'pop_front()' on empty container" );
             auto_type ptr( static_cast<value_type>( this->base().front() ) );
                                          // nothrow
             this->base().pop_front(); // nothrow
@@ -229,38 +293,29 @@
         
         reference front()
         {
- BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
- bad_ptr_container_operation,
- "accessing 'front()' on empty container" );
+ BOOST_ASSERT( !this->empty() &&
+ "accessing 'front()' on empty container" );
+
             BOOST_ASSERT( !::boost::is_null( this->begin() ) );
             return *this->begin();
         }
 
         const_reference front() const
         {
- BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
- bad_ptr_container_operation,
- "accessing 'front()' on empty container" );
- BOOST_ASSERT( !::boost::is_null( this->begin() ) );
- return *this->begin();
+ return const_cast<ptr_sequence_adapter*>(this)->front();
         }
 
         reference back()
         {
- BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
- bad_ptr_container_operation,
- "accessing 'back()' on empty container" );
+ BOOST_ASSERT( !this->empty() &&
+ "accessing 'back()' on empty container" );
             BOOST_ASSERT( !::boost::is_null( --this->end() ) );
             return *--this->end();
         }
 
         const_reference back() const
         {
- BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
- bad_ptr_container_operation,
- "accessing 'back()' on empty container" );
- BOOST_ASSERT( !::boost::is_null( --this->end() ) );
- return *--this->end();
+ return const_cast<ptr_sequence_adapter*>(this)->back();
         }
 
     public: // deque/vector inerface
@@ -323,7 +378,7 @@
         }
 
         template< class Range >
- void assign( const Range& r )
+ void assign( const Range& r ) // strong
         {
             assign( boost::begin(r), boost::end(r ) );
         }
@@ -367,7 +422,7 @@
         }
 
 #endif
-
+
         template< class PtrSeqAdapter >
         void transfer( iterator before,
                        BOOST_DEDUCED_TYPENAME PtrSeqAdapter::iterator first,
@@ -455,7 +510,7 @@
 
     public: // resize
 
- void resize( size_type size )
+ void resize( size_type size ) // basic
         {
             size_type old_size = this->size();
             if( old_size > size )
@@ -472,7 +527,7 @@
             BOOST_ASSERT( this->size() == size );
         }
 
- void resize( size_type size, value_type to_clone )
+ void resize( size_type size, value_type to_clone ) // basic
         {
             size_type old_size = this->size();
             if( old_size > size )
@@ -487,7 +542,42 @@
 
             BOOST_ASSERT( this->size() == size );
         }
-
+
+ void rresize( size_type size ) // basic
+ {
+ size_type old_size = this->size();
+ if( old_size > size )
+ {
+ this->erase( this->begin(),
+ boost::next( this->begin(), old_size - size ) );
+ }
+ else if( size > old_size )
+ {
+ for( ; old_size != size; ++old_size )
+ this->push_front( new BOOST_DEDUCED_TYPENAME
+ boost::remove_pointer<value_type>::type );
+ }
+
+ BOOST_ASSERT( this->size() == size );
+ }
+
+ void rresize( size_type size, value_type to_clone ) // basic
+ {
+ size_type old_size = this->size();
+ if( old_size > size )
+ {
+ this->erase( this->begin(),
+ boost::next( this->begin(), old_size - size ) );
+ }
+ else if( size > old_size )
+ {
+ for( ; old_size != size; ++old_size )
+ this->push_front( this->null_policy_allocate_clone( to_clone ) );
+ }
+
+ BOOST_ASSERT( this->size() == size );
+ }
+
     public: // algorithms
 
         void sort( iterator first, iterator last )
@@ -537,9 +627,35 @@
             }
         };
 
+ protected:
+ template< class Fun, class Arg1 >
+ class void_ptr_delete_if
+ {
+ Fun fun;
+ public:
+
+ void_ptr_delete_if() : fun(Fun())
+ { }
+
+ void_ptr_delete_if( Fun f ) : fun(f)
+ { }
+
+ bool operator()( void* r ) const
+ {
+ BOOST_ASSERT( r != 0 );
+ Arg1 arg1 = static_cast<Arg1>(r);
+ if( fun( *arg1 ) )
+ {
+ clone_allocator_type::deallocate_clone( arg1 );
+ return true;
+ }
+ return false;
+ }
+ };
+
+ private:
         void compact_and_erase_nulls( iterator first, iterator last ) // nothrow
         {
-
             typename base_type::ptr_iterator p = std::stable_partition(
                                                     first.base(),
                                                     last.base(),
@@ -605,19 +721,9 @@
         void erase_if( iterator first, iterator last, Pred pred )
         {
             range_check(first,last);
-
- iterator next = first;
- for( ; next != last; ++next )
- {
- BOOST_ASSERT( !::boost::is_null(next) );
- if( pred( *next ) )
- {
- this->remove( next ); // delete object
- *next.base() = 0; // mark pointer as deleted
- }
- }
-
- compact_and_erase_nulls( first, last );
+ this->base().erase( std::remove_if( first.base(), last.base(),
+ void_ptr_delete_if<Pred,value_type>(pred) ),
+ this->base().end() );
         }
         
         template< class Pred >

Modified: branches/CMake/release/boost/ptr_container/ptr_set.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/ptr_set.hpp (original)
+++ branches/CMake/release/boost/ptr_container/ptr_set.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -33,30 +33,39 @@
     class ptr_set :
         public ptr_set_adapter< Key,
                                 std::set<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
- CloneAllocator >
+ CloneAllocator, true >
     {
         typedef ptr_set_adapter< Key, std::set<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
- CloneAllocator >
+ CloneAllocator, true >
              base_type;
 
         typedef ptr_set<Key,Compare,CloneAllocator,Allocator> this_type;
         
     public:
- explicit ptr_set( const Compare& comp = Compare(),
+ ptr_set()
+ { }
+
+ explicit ptr_set( const Compare& comp,
                           const Allocator& a = Allocator() )
          : base_type( comp, a )
         { }
-
+
+ template< typename InputIterator >
+ ptr_set( InputIterator first, InputIterator last )
+ : base_type( first, last )
+ { }
+
         template< typename InputIterator >
         ptr_set( InputIterator first, InputIterator last,
- const Compare& comp = Compare(),
+ const Compare& comp,
                  const Allocator& a = Allocator() )
          : base_type( first, last, comp, a )
         { }
 
         BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_set,
                                                       base_type,
- this_type );
+ this_type )
+
         BOOST_PTR_CONTAINER_DEFINE_COPY_CONSTRUCTORS( ptr_set, base_type )
                 
     };
@@ -73,32 +82,41 @@
     class ptr_multiset :
         public ptr_multiset_adapter< Key,
                                      std::multiset<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
- CloneAllocator >
+ CloneAllocator, true >
     {
         typedef ptr_multiset_adapter< Key,
                                       std::multiset<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
- CloneAllocator >
+ CloneAllocator, true >
               base_type;
         typedef ptr_multiset<Key,Compare,CloneAllocator,Allocator> this_type;
         
     public:
- explicit ptr_multiset( const Compare& comp = Compare(),
+ ptr_multiset()
+ { }
+
+ explicit ptr_multiset( const Compare& comp,
                                const Allocator& a = Allocator() )
          : base_type( comp, a )
         { }
-
+
+ template< typename InputIterator >
+ ptr_multiset( InputIterator first, InputIterator last )
+ : base_type( first, last )
+ { }
+
         template< typename InputIterator >
         ptr_multiset( InputIterator first, InputIterator last,
- const Compare& comp = Compare(),
+ const Compare& comp,
                       const Allocator& a = Allocator() )
          : base_type( first, last, comp, a )
         { }
 
         BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multiset,
                                                       base_type,
- this_type );
+ this_type )
+
         BOOST_PTR_CONTAINER_DEFINE_COPY_CONSTRUCTORS( ptr_multiset,
- base_type );
+ base_type )
 
     };
 

Modified: branches/CMake/release/boost/ptr_container/ptr_set_adapter.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/ptr_set_adapter.hpp (original)
+++ branches/CMake/release/boost/ptr_container/ptr_set_adapter.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -17,6 +17,7 @@
 #endif
 
 #include <boost/ptr_container/detail/associative_ptr_container.hpp>
+#include <boost/ptr_container/detail/meta_functions.hpp>
 #include <boost/ptr_container/detail/void_ptr_iterator.hpp>
 #include <boost/range/iterator_range.hpp>
 
@@ -27,7 +28,8 @@
     template
     <
         class Key,
- class VoidPtrSet
+ class VoidPtrSet,
+ bool Ordered
>
     struct set_config
     {
@@ -42,12 +44,33 @@
        typedef value_type
                     key_type;
 
- typedef BOOST_DEDUCED_TYPENAME VoidPtrSet::value_compare
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ select_value_compare<VoidPtrSet>,
+ mpl::identity<void> >::type
                     value_compare;
 
        typedef value_compare
                     key_compare;
 
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ mpl::identity<void>,
+ select_hasher<VoidPtrSet> >::type
+ hasher;
+
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ mpl::identity<void>,
+ select_key_equal<VoidPtrSet> >::type
+ key_equal;
+
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::if_c<Ordered,
+ ordered_associative_container_tag,
+ unordered_associative_container_tag>::type
+ container_type;
+
        typedef void_ptr_iterator<
                        BOOST_DEDUCED_TYPENAME VoidPtrSet::iterator, Key >
                     iterator;
@@ -56,6 +79,22 @@
                         BOOST_DEDUCED_TYPENAME VoidPtrSet::const_iterator, const Key >
                     const_iterator;
 
+ typedef void_ptr_iterator<
+ BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ select_iterator<VoidPtrSet>,
+ select_local_iterator<VoidPtrSet> >::type,
+ Key >
+ local_iterator;
+
+ typedef void_ptr_iterator<
+ BOOST_DEDUCED_TYPENAME
+ mpl::eval_if_c<Ordered,
+ select_iterator<VoidPtrSet>,
+ select_const_local_iterator<VoidPtrSet> >::type,
+ const Key >
+ const_local_iterator;
+
        template< class Iter >
        static Key* get_pointer( Iter i )
        {
@@ -77,13 +116,14 @@
     <
         class Key,
         class VoidPtrSet,
- class CloneAllocator = heap_clone_allocator
+ class CloneAllocator = heap_clone_allocator,
+ bool Ordered = true
>
     class ptr_set_adapter_base
- : public ptr_container_detail::associative_ptr_container< set_config<Key,VoidPtrSet>,
+ : public ptr_container_detail::associative_ptr_container< set_config<Key,VoidPtrSet,Ordered>,
                                                       CloneAllocator >
     {
- typedef ptr_container_detail::associative_ptr_container< set_config<Key,VoidPtrSet>,
+ typedef ptr_container_detail::associative_ptr_container< set_config<Key,VoidPtrSet,Ordered>,
                                                      CloneAllocator >
               base_type;
     public:
@@ -95,41 +135,61 @@
         typedef BOOST_DEDUCED_TYPENAME base_type::size_type
                       size_type;
 
- private:
+ public:
         ptr_set_adapter_base()
- : base_type( BOOST_DEDUCED_TYPENAME VoidPtrSet::key_compare(),
- BOOST_DEDUCED_TYPENAME VoidPtrSet::allocator_type() )
         { }
 
- public:
-
+ template< class SizeType >
+ ptr_set_adapter_base( SizeType n,
+ ptr_container_detail::unordered_associative_container_tag tag )
+ : base_type( n, tag )
+ { }
+
         template< class Compare, class Allocator >
         ptr_set_adapter_base( const Compare& comp,
                               const Allocator& a )
          : base_type( comp, a )
         { }
-
+
+ template< class Hash, class Pred, class Allocator >
+ ptr_set_adapter_base( const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( hash, pred, a )
+ { }
+
         template< class InputIterator, class Compare, class Allocator >
         ptr_set_adapter_base( InputIterator first, InputIterator last,
                               const Compare& comp,
                               const Allocator& a )
          : base_type( first, last, comp, a )
         { }
-
- template< class U, class Set >
- explicit ptr_set_adapter_base( const ptr_set_adapter_base<U,Set>& r )
+
+ template< class InputIterator, class Hash, class Pred, class Allocator >
+ ptr_set_adapter_base( InputIterator first, InputIterator last,
+ const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( first, last, hash, pred, a )
+ { }
+
+ template< class U, class Set, class CA, bool b >
+ ptr_set_adapter_base( const ptr_set_adapter_base<U,Set,CA,b>& r )
           : base_type( r )
         { }
-
+
+ ptr_set_adapter_base( const ptr_set_adapter_base& r )
+ : base_type( r )
+ { }
+
         template< class PtrContainer >
         explicit ptr_set_adapter_base( std::auto_ptr<PtrContainer> clone )
          : base_type( clone )
         { }
-
- template< class U, class Set >
- ptr_set_adapter_base& operator=( const ptr_set_adapter_base<U,Set>& r )
+
+ ptr_set_adapter_base& operator=( ptr_set_adapter_base r )
         {
- base_type::operator=( r );
+ this->swap( r );
             return *this;
         }
         
@@ -212,8 +272,13 @@
                 equal_range( const_cast<key_type*>(&x) );
             return make_iterator_range( const_iterator( p.first ),
                                         const_iterator( p.second ) );
- }
+ }
 
+ protected:
+ size_type bucket( const key_type& key ) const
+ {
+ return this->base().bucket( const_cast<key_type*>(&key) );
+ }
     };
 
 } // ptr_container_detail
@@ -226,12 +291,13 @@
     <
         class Key,
         class VoidPtrSet,
- class CloneAllocator = heap_clone_allocator
+ class CloneAllocator = heap_clone_allocator,
+ bool Ordered = true
>
     class ptr_set_adapter :
- public ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrSet,CloneAllocator>
+ public ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrSet,CloneAllocator,Ordered>
     {
- typedef ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrSet,CloneAllocator>
+ typedef ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrSet,CloneAllocator,Ordered>
             base_type;
     
     public: // typedefs
@@ -245,10 +311,8 @@
         typedef Key key_type;
         typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
                      auto_type;
- typedef BOOST_DEDUCED_TYPENAME VoidPtrSet::key_compare
- key_compare;
         typedef BOOST_DEDUCED_TYPENAME VoidPtrSet::allocator_type
- allocator_type;
+ allocator_type;
     private:
         
         template< typename II >
@@ -263,17 +327,38 @@
         }
 
     public:
+ ptr_set_adapter()
+ { }
+
+ template< class SizeType >
+ ptr_set_adapter( SizeType n,
+ ptr_container_detail::unordered_associative_container_tag tag )
+ : base_type( n, tag )
+ { }
         
- explicit ptr_set_adapter( const key_compare& comp = key_compare(),
- const allocator_type& a = allocator_type() )
+ template< class Comp >
+ explicit ptr_set_adapter( const Comp& comp,
+ const allocator_type& a )
           : base_type( comp, a )
         {
             BOOST_ASSERT( this->empty() );
         }
 
+ template< class Hash, class Pred, class Allocator >
+ ptr_set_adapter( const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( hash, pred, a )
+ { }
+
+ template< class InputIterator >
+ ptr_set_adapter( InputIterator first, InputIterator last )
+ : base_type( first, last )
+ { }
+
         template< class InputIterator, class Compare, class Allocator >
         ptr_set_adapter( InputIterator first, InputIterator last,
- const Compare& comp = Compare(),
+ const Compare& comp,
                          const Allocator a = Allocator() )
           : base_type( comp, a )
         {
@@ -281,8 +366,20 @@
             set_basic_clone_and_insert( first, last );
         }
 
- template< class U, class Set >
- explicit ptr_set_adapter( const ptr_set_adapter<U,Set>& r )
+ template< class InputIterator, class Hash, class Pred, class Allocator >
+ ptr_set_adapter( InputIterator first, InputIterator last,
+ const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( first, last, hash, pred, a )
+ { }
+
+ explicit ptr_set_adapter( const ptr_set_adapter& r )
+ : base_type( r )
+ { }
+
+ template< class U, class Set, class CA, bool b >
+ explicit ptr_set_adapter( const ptr_set_adapter<U,Set,CA,b>& r )
           : base_type( r )
         { }
         
@@ -291,8 +388,8 @@
          : base_type( clone )
         { }
 
- template< class U, class Set >
- ptr_set_adapter& operator=( const ptr_set_adapter<U,Set>& r )
+ template< class U, class Set, class CA, bool b >
+ ptr_set_adapter& operator=( const ptr_set_adapter<U,Set,CA,b>& r )
         {
             base_type::operator=( r );
             return *this;
@@ -406,12 +503,13 @@
     <
         class Key,
         class VoidPtrMultiSet,
- class CloneAllocator = heap_clone_allocator
+ class CloneAllocator = heap_clone_allocator,
+ bool Ordered = true
>
     class ptr_multiset_adapter :
- public ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrMultiSet,CloneAllocator>
+ public ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrMultiSet,CloneAllocator,Ordered>
     {
- typedef ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrMultiSet,CloneAllocator> base_type;
+ typedef ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrMultiSet,CloneAllocator,Ordered> base_type;
     
     public: // typedefs
     
@@ -422,8 +520,6 @@
         typedef Key key_type;
         typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
                        auto_type;
- typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiSet::key_compare
- key_compare;
         typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiSet::allocator_type
                        allocator_type;
     private:
@@ -438,23 +534,52 @@
         }
     
     public:
+ ptr_multiset_adapter()
+ { }
 
- ptr_multiset_adapter( const key_compare& comp = key_compare(),
- const allocator_type& a = allocator_type() )
+ template< class SizeType >
+ ptr_multiset_adapter( SizeType n,
+ ptr_container_detail::unordered_associative_container_tag tag )
+ : base_type( n, tag )
+ { }
+
+ template< class Comp >
+ explicit ptr_multiset_adapter( const Comp& comp,
+ const allocator_type& a )
         : base_type( comp, a )
         { }
-
+
+ template< class Hash, class Pred, class Allocator >
+ ptr_multiset_adapter( const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( hash, pred, a )
+ { }
+
         template< class InputIterator >
+ ptr_multiset_adapter( InputIterator first, InputIterator last )
+ : base_type( first, last )
+ { }
+
+ template< class InputIterator, class Comp >
         ptr_multiset_adapter( InputIterator first, InputIterator last,
- const key_compare& comp = key_compare(),
+ const Comp& comp,
                               const allocator_type& a = allocator_type() )
         : base_type( comp, a )
         {
             set_basic_clone_and_insert( first, last );
         }
 
- template< class U, class Set >
- explicit ptr_multiset_adapter( const ptr_multiset_adapter<U,Set>& r )
+ template< class InputIterator, class Hash, class Pred, class Allocator >
+ ptr_multiset_adapter( InputIterator first, InputIterator last,
+ const Hash& hash,
+ const Pred& pred,
+ const Allocator& a )
+ : base_type( first, last, hash, pred, a )
+ { }
+
+ template< class U, class Set, class CA, bool b >
+ explicit ptr_multiset_adapter( const ptr_multiset_adapter<U,Set,CA,b>& r )
           : base_type( r )
         { }
         
@@ -463,8 +588,8 @@
          : base_type( clone )
         { }
 
- template< class U, class Set >
- ptr_multiset_adapter& operator=( const ptr_multiset_adapter<U,Set>& r )
+ template< class U, class Set, class CA, bool b >
+ ptr_multiset_adapter& operator=( const ptr_multiset_adapter<U,Set,CA,b>& r )
         {
             base_type::operator=( r );
             return *this;

Modified: branches/CMake/release/boost/ptr_container/ptr_vector.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/ptr_vector.hpp (original)
+++ branches/CMake/release/boost/ptr_container/ptr_vector.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -44,7 +44,7 @@
 
         BOOST_PTR_CONTAINER_DEFINE_SEQEUENCE_MEMBERS( ptr_vector,
                                                       base_class,
- this_type );
+ this_type )
         
         explicit ptr_vector( size_type n,
                              const allocator_type& alloc = allocator_type() )

Modified: branches/CMake/release/boost/ptr_container/serialize_ptr_array.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/serialize_ptr_array.hpp (original)
+++ branches/CMake/release/boost/ptr_container/serialize_ptr_array.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -16,13 +16,13 @@
 {
 
 template<class Archive, class T, std::size_t N, class CloneAllocator>
-void save(Archive& ar, const ptr_array<T, N, CloneAllocator>& c, unsigned int version)
+void save(Archive& ar, const ptr_array<T, N, CloneAllocator>& c, unsigned int /*version*/)
 {
     ptr_container_detail::save_helper(ar, c);
 }
 
 template<class Archive, class T, std::size_t N, class CloneAllocator>
-void load(Archive& ar, ptr_array<T, N, CloneAllocator>& c, unsigned int version)
+void load(Archive& ar, ptr_array<T, N, CloneAllocator>& c, unsigned int /*version*/)
 {
     typedef ptr_array<T, N, CloneAllocator> container_type;
     typedef BOOST_DEDUCED_TYPENAME container_type::size_type size_type;

Modified: branches/CMake/release/boost/ptr_container/serialize_ptr_container.hpp
==============================================================================
Binary files. No diff available.

Modified: branches/CMake/release/boost/ptr_container/serialize_ptr_vector.hpp
==============================================================================
--- branches/CMake/release/boost/ptr_container/serialize_ptr_vector.hpp (original)
+++ branches/CMake/release/boost/ptr_container/serialize_ptr_vector.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -16,7 +16,7 @@
 {
 
 template<class Archive, class T, class CloneAllocator, class Allocator>
-void load(Archive& ar, ptr_vector<T, CloneAllocator, Allocator>& c, unsigned int version)
+void load(Archive& ar, ptr_vector<T, CloneAllocator, Allocator>& c, unsigned int /*version*/)
 {
     typedef ptr_vector<T, CloneAllocator, Allocator> container_type;
     typedef BOOST_DEDUCED_TYPENAME container_type::size_type size_type;

Modified: branches/CMake/release/boost/python/ptr.hpp
==============================================================================
--- branches/CMake/release/boost/python/ptr.hpp (original)
+++ branches/CMake/release/boost/python/ptr.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -8,7 +8,7 @@
 // http://www.boost.org/LICENSE_1_0.txt)
 //
 // Based on boost/ref.hpp, thus:
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2001 Peter Dimov
 
 # if _MSC_VER+0 >= 1020

Modified: branches/CMake/release/boost/range/as_literal.hpp
==============================================================================
--- branches/CMake/release/boost/range/as_literal.hpp (original)
+++ branches/CMake/release/boost/range/as_literal.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -8,8 +8,8 @@
 // For more information, see http://www.boost.org/libs/range/
 //
 
-#ifndef BOOST_RANGE_DETAIL_AS_LITERAL_HPP
-#define BOOST_RANGE_DETAIL_AS_LITERAL_HPP
+#ifndef BOOST_RANGE_AS_LITERAL_HPP
+#define BOOST_RANGE_AS_LITERAL_HPP
 
 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
 # pragma once
@@ -25,7 +25,9 @@
 #include <boost/detail/workaround.hpp>
 
 #include <cstring>
+#ifndef BOOST_NO_CWCHAR
 #include <cwchar>
+#endif
 
 namespace boost
 {
@@ -36,10 +38,12 @@
             return strlen( s );
         }
 
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
         inline std::size_t length( const wchar_t* s )
         {
             return wcslen( s );
         }
+#endif
 
         //
         // Remark: the compiler cannot choose between T* and T[sz]
@@ -57,7 +61,7 @@
             return true;
         }
 
-
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
         inline bool is_char_ptr( wchar_t* )
         {
             return true;
@@ -67,6 +71,7 @@
         {
             return true;
         }
+#endif
         
         template< class T >
         inline long is_char_ptr( T /* r */ )
@@ -107,22 +112,13 @@
     template< class Char, std::size_t sz >
     inline iterator_range<Char*> as_literal( Char (&arr)[sz] )
     {
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590)) && __BORLANDC__ >= 0x590
- return boost::make_iterator_range<Char*>( arr, arr + sz - 1 );
-#else
- return boost::make_iterator_range( arr, arr + sz - 1 );
-#endif
+ return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );
     }
-
     
     template< class Char, std::size_t 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
+ return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );
     }
 }
 

Modified: branches/CMake/release/boost/range/begin.hpp
==============================================================================
--- branches/CMake/release/boost/range/begin.hpp (original)
+++ branches/CMake/release/boost/range/begin.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -73,15 +73,15 @@
     // May this be discarded? Or is it needed for bad compilers?
     //
     template< typename T, std::size_t sz >
- inline const T* range_begin( const T (&array)[sz] )
+ inline const T* range_begin( const T (&a)[sz] )
     {
- return array;
+ return a;
     }
 
     template< typename T, std::size_t sz >
- inline T* range_begin( T (&array)[sz] )
+ inline T* range_begin( T (&a)[sz] )
     {
- return array;
+ return a;
     }
 
 

Modified: branches/CMake/release/boost/range/detail/as_literal.hpp
==============================================================================
--- branches/CMake/release/boost/range/detail/as_literal.hpp (original)
+++ branches/CMake/release/boost/range/detail/as_literal.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -8,8 +8,8 @@
 // For more information, see http://www.boost.org/libs/range/
 //
 
-#ifndef BOOST_RANGE_AS_LITERAL_HPP
-#define BOOST_RANGE_AS_LITERAL_HPP
+#ifndef BOOST_RANGE_DETAIL_AS_LITERAL_HPP
+#define BOOST_RANGE_DETAIL_AS_LITERAL_HPP
 
 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
 # pragma once

Modified: branches/CMake/release/boost/range/detail/implementation_help.hpp
==============================================================================
--- branches/CMake/release/boost/range/detail/implementation_help.hpp (original)
+++ branches/CMake/release/boost/range/detail/implementation_help.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -25,6 +25,8 @@
 {
     namespace range_detail
     {
+ template <typename T>
+ inline void boost_range_silence_warning( const T& ) { }
         
         /////////////////////////////////////////////////////////////////////
         // end() help
@@ -82,12 +84,14 @@
         template< class T, std::size_t sz >
         inline std::size_t array_size( T BOOST_RANGE_ARRAY_REF()[sz] )
         {
+ boost_range_silence_warning( boost_range_array );
             return sz;
         }
 
         template< class T, std::size_t sz >
         inline std::size_t array_size( const T BOOST_RANGE_ARRAY_REF()[sz] )
         {
+ boost_range_silence_warning( boost_range_array );
             return sz;
         }
 

Modified: branches/CMake/release/boost/range/end.hpp
==============================================================================
--- branches/CMake/release/boost/range/end.hpp (original)
+++ branches/CMake/release/boost/range/end.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -71,15 +71,15 @@
         //////////////////////////////////////////////////////////////////////
 
         template< typename T, std::size_t sz >
- inline const T* range_end( const T (&array)[sz] )
+ inline const T* range_end( const T (&a)[sz] )
         {
- return range_detail::array_end<T,sz>( array );
+ return range_detail::array_end<T,sz>( a );
         }
 
         template< typename T, std::size_t sz >
- inline T* range_end( T (&array)[sz] )
+ inline T* range_end( T (&a)[sz] )
         {
- return range_detail::array_end<T,sz>( array );
+ return range_detail::array_end<T,sz>( a );
         }
 
 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \

Modified: branches/CMake/release/boost/range/iterator_range.hpp
==============================================================================
--- branches/CMake/release/boost/range/iterator_range.hpp (original)
+++ branches/CMake/release/boost/range/iterator_range.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -11,8 +11,15 @@
 #ifndef BOOST_RANGE_ITERATOR_RANGE_HPP
 #define BOOST_RANGE_ITERATOR_RANGE_HPP
 
-// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch.
 #include <boost/config.hpp> // Define __STL_CONFIG_H, if appropriate.
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+ #pragma warning( push )
+ #pragma warning( disable : 4996 )
+#endif
+
+// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch.
 #ifndef BOOST_OLD_IOSTREAMS
 # if defined(__STL_CONFIG_H) && \
     !defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \
@@ -21,12 +28,13 @@
 # endif
 #endif // #ifndef BOOST_OLD_IOSTREAMS
 
-#include <boost/detail/workaround.hpp>
+#include <boost/assert.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/type_traits/is_abstract.hpp>
 #include <boost/range/functions.hpp>
 #include <boost/range/iterator.hpp>
 #include <boost/range/difference_type.hpp>
-#include <boost/iterator/iterator_traits.hpp>
-#include <boost/assert.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <iterator>
 #include <algorithm>
 #ifndef _STLP_NO_IOSTREAMS
@@ -38,10 +46,6 @@
 #endif // _STLP_NO_IOSTREAMS
 #include <cstddef>
 
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) || BOOST_WORKAROUND(BOOST_MSVC, == 1400)
- #pragma warning( disable : 4996 )
-#endif
-
 /*! \file
     Defines the \c iterator_class and related functions.
     \c iterator_range is a simple wrapper of iterator pair idiom. It provides
@@ -163,6 +167,12 @@
             //! iterator type
             typedef IteratorT iterator;
 
+ private: // for return value of operator()()
+ typedef BOOST_DEDUCED_TYPENAME
+ boost::mpl::if_< boost::is_abstract<value_type>,
+ reference, value_type >::type abstract_value_type;
+
+ public:
             iterator_range() : m_Begin( iterator() ), m_End( iterator() )
                 #ifndef NDEBUG
             , singular( true )
@@ -175,7 +185,7 @@
                 m_Begin(Begin), m_End(End)
                 #ifndef NDEBUG
             , singular(false)
- #endif
+ #endif
             {}
 
             //! Constructor from a Range
@@ -200,7 +210,7 @@
             template< class Range >
             iterator_range( const Range& r, iterator_range_detail::const_range_tag ) :
                 m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
- #ifndef NDEBUG
+ #ifndef NDEBUG
             , singular(false)
                 #endif
             {}
@@ -209,7 +219,7 @@
             template< class Range >
             iterator_range( Range& r, iterator_range_detail::range_tag ) :
                 m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
- #ifndef NDEBUG
+ #ifndef NDEBUG
             , singular(false)
                 #endif
             {}
@@ -350,8 +360,8 @@
            // When storing transform iterators, operator[]()
            // fails because it returns by reference. Therefore
            // operator()() is provided for these cases.
- //
- value_type operator()( difference_type at ) const
+ //
+ abstract_value_type operator()( difference_type at ) const
            {
                BOOST_ASSERT( at >= 0 && at < size() );
                return m_Begin[at];
@@ -380,13 +390,15 @@
             bool singular;
             #endif
 
- #ifndef NDEBUG
         public:
             bool is_singular() const
             {
+ #ifndef NDEBUG
                  return singular;
+ #else
+ return false;
+ #endif
             }
- #endif
 
         protected:
             //
@@ -639,5 +651,9 @@
 
 #undef BOOST_OLD_IOSTREAMS
 
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+ #pragma warning( pop )
+#endif
+
 #endif
 

Modified: branches/CMake/release/boost/range/sub_range.hpp
==============================================================================
--- branches/CMake/release/boost/range/sub_range.hpp (original)
+++ branches/CMake/release/boost/range/sub_range.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -11,18 +11,20 @@
 #ifndef BOOST_RANGE_SUB_RANGE_HPP
 #define BOOST_RANGE_SUB_RANGE_HPP
 
-#include <boost/detail/workaround.hpp>
-
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) || BOOST_WORKAROUND(BOOST_MSVC, == 1400)
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+ #pragma warning( push )
     #pragma warning( disable : 4996 )
 #endif
 
+#include <boost/detail/workaround.hpp>
 #include <boost/range/config.hpp>
 #include <boost/range/iterator_range.hpp>
 #include <boost/range/value_type.hpp>
 #include <boost/range/size_type.hpp>
 #include <boost/range/difference_type.hpp>
 #include <boost/assert.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/remove_reference.hpp>
 
 namespace boost
 {
@@ -41,12 +43,18 @@
         typedef BOOST_DEDUCED_TYPENAME range_difference<ForwardRange>::type difference_type;
         typedef BOOST_DEDUCED_TYPENAME range_size<ForwardRange>::type size_type;
         typedef BOOST_DEDUCED_TYPENAME base::reference reference;
+
+ public: // for return value of front/back
+ typedef BOOST_DEDUCED_TYPENAME
+ boost::mpl::if_< boost::is_reference<reference>,
+ const BOOST_DEDUCED_TYPENAME boost::remove_reference<reference>::type&,
+ reference >::type const_reference;
 
     public:
         sub_range() : base()
         { }
         
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) || BOOST_WORKAROUND(BOOST_MSVC, == 1400)
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500) )
         sub_range( const sub_range& r )
             : base( static_cast<const base&>( r ) )
         { }
@@ -112,7 +120,7 @@
             return base::front();
         }
 
- const value_type& front() const
+ const_reference front() const
         {
             return base::front();
         }
@@ -122,7 +130,7 @@
             return base::back();
         }
 
- const value_type& back() const
+ const_reference back() const
         {
             return base::back();
         }
@@ -132,7 +140,7 @@
             return base::operator[](sz);
         }
 
- const value_type& operator[]( difference_type sz ) const
+ const_reference operator[]( difference_type sz ) const
         {
             return base::operator[](sz);
         }
@@ -163,5 +171,9 @@
 
 } // namespace 'boost'
 
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+ #pragma warning( pop )
+#endif
+
 #endif
 

Modified: branches/CMake/release/boost/ref.hpp
==============================================================================
--- branches/CMake/release/boost/ref.hpp (original)
+++ branches/CMake/release/boost/ref.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -15,7 +15,7 @@
 //
 // ref.hpp - ref/cref, useful helper functions
 //
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2001, 2002 Peter Dimov
 // Copyright (C) 2002 David Abrahams
 //

Modified: branches/CMake/release/boost/spirit.hpp
==============================================================================
--- branches/CMake/release/boost/spirit.hpp (original)
+++ branches/CMake/release/boost/spirit.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,75 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001-2003 Daniel Nuffer
- Copyright (c) 2001-2003 Hartmut Kaiser
- Copyright (c) 2002-2003 Martin Wille
- Copyright (c) 2002 Juan Carlos Arevalo-Baeza
- Copyright (c) 2002 Raghavendra Satish
- Copyright (c) 2002 Jeff Westfahl
- Copyright (c) 2001 Bruce Florman
- Copyright (c) 2003 Giovanni Bajo
- Copyright (c) 2003 Vaclav Vesely
- Copyright (c) 2003 Jonathan de Halleux
- http://spirit.sourceforge.net/
- http://www.boost.org/libs/spirit
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the 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/spirit 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)
 =============================================================================*/
-#if !defined(SPIRIT_HPP)
-#define SPIRIT_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// If BOOST_SPIRIT_DEBUG is defined, the following header includes the
-// Spirit.Debug layer, otherwise the non-debug Spirit.Core is included.
-//
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/core.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit.Meta
-//
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/meta.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit.ErrorHandling
-//
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/error_handling.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit.Iterators
-//
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/iterator.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit.Symbols
-//
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/symbols.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit.Utilities
-//
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/utility.hpp>
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SPIRIT
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SPIRIT
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit.Attributes
-//
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/attribute.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic.hpp>
 
-#endif // !defined(SPIRIT_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,114 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ACTOR
 
-#include <boost/spirit/version.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Actors documentation and convention
-//
-// Actors
-//
-// Actors are predefined semantic action functors. They are used to do an
-// action on the parse result if the parser has had a successful match. An
-// example of actor is the append_actor described in the Spirit
-// documentation.
-//
-// The action takes place through a call to the () operator: single argument
-// () operator call for character parsers and two argument (first,last) call
-// for phrase parsers. Actors should implement at least one of the two ()
-// operator.
-//
-// Actor instances are not created direcly since they usually involve a
-// number of template parameters. Instead generator functions ("helper
-// functions") are provided to generate actors according to their arguments.
-// All helper functions have the "_a" suffix. For example, append_actor is
-// created using the append_a function.
-//
-// Policy holder actors and policy actions
-//
-// A lot of actors need to store reference to one or more objects. For
-// example, actions on container need to store a reference to the container.
-// Therefore, this kind of actor have been broken down into
-//
-// - a action policy that does the action (act method),
-// - a policy holder actor that stores the references and feeds the act
-// method.
-//
-// Policy holder actors
-//
-// Policy holder have the following naming convention:
-// <member>_ >> *<member> >> !value >> actor
-// where member are the policy stored member, they can be of type:
-//
-// - ref, a reference,
-// - const_ref, a const reference,
-// - value, by value,
-// - empty, no stored members
-// - !value states if the policy uses the parse result or not.
-//
-// The available policy holder are enumerated below:
-//
-// - empty_actor, nothing stored, feeds parse result
-// - value_actor, 1 object stored by value, feeds value
-// - ref_actor, 1 reference stored, feeds ref
-// - ref_value_actor, 1 reference stored, feeds ref and parse result
-//
-// Doc. convention
-//
-// - ref is a reference to an object stored in a policy holder actor,
-// - value_ref,value1_ref, value2_ref are a const reference stored in a
-// policy holder actor,
-// - value is the parse result in the single argument () operator,
-// - first,last are the parse result in the two argument () operator
-//
-// Actors (generator functions) and quick description
-//
-// - assign_a(ref) assign parse result to ref
-// - assign_a(ref, value_ref) assign value_ref to ref
-// - increment_a(ref) increment ref
-// - decrement_a(ref) decrement ref
-// - push_back_a(ref) push back the parse result in ref
-// - push_back_a(ref, value_ref) push back value_ref in ref
-// - push_front_a(ref) push front the parse result in ref
-// - push_front_a(ref, value_ref) push front value_ref in ref
-// - insert_key_a(ref,value_ref) insert value_ref in ref using the
-// parse result as key
-// - insert_at_a(ref, key_ref) insert the parse result in ref at key_ref
-// - insert_at_a(ref, key_ref insert value_ref in ref at key_ref
-// , value_ref)
-// - assign_key_a(ref, value_ref) assign value_ref in ref using the
-// parse result as key
-// - erase_a(ref, key) erase data at key from ref
-// - clear_a(ref) clears ref
-// - swap_a(aref, bref) swaps aref and bref
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include <boost/spirit/actor/ref_actor.hpp>
-#include <boost/spirit/actor/ref_value_actor.hpp>
-#include <boost/spirit/actor/ref_const_ref_actor.hpp>
-#include <boost/spirit/actor/ref_const_ref_value_actor.hpp>
-#include <boost/spirit/actor/ref_const_ref_const_ref_a.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_actor.hpp"
+#endif
 
-#include <boost/spirit/actor/assign_actor.hpp>
-#include <boost/spirit/actor/clear_actor.hpp>
-#include <boost/spirit/actor/increment_actor.hpp>
-#include <boost/spirit/actor/decrement_actor.hpp>
-#include <boost/spirit/actor/push_back_actor.hpp>
-#include <boost/spirit/actor/push_front_actor.hpp>
-#include <boost/spirit/actor/erase_actor.hpp>
-#include <boost/spirit/actor/insert_key_actor.hpp>
-#include <boost/spirit/actor/insert_at_actor.hpp>
-#include <boost/spirit/actor/assign_key_actor.hpp>
-#include <boost/spirit/actor/swap_actor.hpp>
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/assign_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/assign_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/assign_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,96 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_ASSIGN_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_ASSIGN_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ASSIGN_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ASSIGN_ACTOR
 
-#include <boost/spirit/actor/ref_value_actor.hpp>
-#include <boost/spirit/actor/ref_const_ref_actor.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy that applies the assignement operator.
- // (This doc uses convention available in actors.hpp)
- //
- // Actions (what it does):
- // ref = value;
- // ref = T(first,last);
- // ref = value_ref;
- //
- // Policy name:
- // assign_action
- //
- // Policy holder, corresponding helper method:
- // ref_value_actor, assign_a( ref );
- // ref_const_ref_actor, assign_a( ref, value_ref );
- //
- // () operators: both
- //
- // See also ref_value_actor and ref_const_ref_actor for more details.
- ///////////////////////////////////////////////////////////////////////////
- struct assign_action
- {
- template<
- typename T,
- typename ValueT
- >
- void act(T& ref_, ValueT const& value_) const
- {
- ref_ = value_;
- }
- template<
- typename T,
- typename IteratorT
- >
- void act(
- T& ref_,
- IteratorT const& first_,
- IteratorT const& last_
- ) const
- {
- typedef T value_type;
-#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
- value_type value(first_,last_);
-#else
- value_type value;
- std::copy(first_, last_, std::inserter(value, value.end()));
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_assign_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_assign_actor.hpp"
 #endif
- ref_ = value;
- }
- };
-
- // Deprecated. Please use assign_a
- template<typename T>
- inline ref_value_actor<T,assign_action> assign(T& ref_)
- {
- return ref_value_actor<T,assign_action>(ref_);
- }
 
- template<typename T>
- inline ref_value_actor<T,assign_action> assign_a(T& ref_)
- {
- return ref_value_actor<T,assign_action>(ref_);
- }
-
- template<
- typename T,
- typename ValueT
- >
- inline ref_const_ref_actor<T,ValueT,assign_action> assign_a(
- T& ref_,
- ValueT const& value_
- )
- {
- return ref_const_ref_actor<T,ValueT,assign_action>(ref_,value_);
- }
-
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_assign_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/assign_key_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/assign_key_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/assign_key_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,92 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_ASSIGN_KEY_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_ASSIGN_KEY_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ASSIGN_KEY_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ASSIGN_KEY_ACTOR
 
-#include <boost/spirit/actor/ref_const_ref_value_actor.hpp>
-#include <boost/spirit/actor/ref_const_ref_const_ref_a.hpp>
-
-namespace boost { namespace spirit {
-
- struct assign_key_action
- {
- template<
- typename T,
- typename ValueT,
- typename KeyT
- >
- void act(T& ref_, ValueT const& value_, KeyT const& key_) const
- {
- ref_[ key_ ] = value_;
- }
-
- template<
- typename T,
- typename ValueT,
- typename IteratorT
- >
- void act(
- T& ref_,
- ValueT const& value_,
- IteratorT const& first_,
- IteratorT const& last_
- ) const
- {
- typedef typename T::key_type key_type;
- key_type key(first_,last_);
-
- ref_[key] = value_;
- }
- };
-
- template<
- typename T,
- typename ValueT
- >
- inline ref_const_ref_value_actor<T,ValueT,assign_key_action>
- assign_key_a(T& ref_, ValueT const& value_)
- {
- return ref_const_ref_value_actor<T,ValueT,assign_key_action>(
- ref_,
- value_
- );
- }
-
- template<
- typename T,
- typename ValueT,
- typename KeyT
- >
- inline ref_const_ref_const_ref_actor<
- T,
- ValueT,
- KeyT,
- assign_key_action
- >
- assign_key_a(
- T& ref_,
- ValueT const& value_,
- KeyT const& key_
- )
- {
- return ref_const_ref_const_ref_actor<
- T,
- ValueT,
- KeyT,
- assign_key_action
- >(
- ref_,
- value_,
- key_
- );
- }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_assign_key_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_assign_key_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_assign_key_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/clear_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/clear_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/clear_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,58 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_CLEAR_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_CLEAR_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CLEAR_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CLEAR_ACTOR
 
-#include <boost/spirit/actor/ref_actor.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy that calls clear method.
- // (This doc uses convention available in actors.hpp)
- //
- // Actions (what it does):
- // ref.clear();
- //
- // Policy name:
- // clear_action
- //
- // Policy holder, corresponding helper method:
- // ref_actor, clear_a( ref );
- //
- // () operators: both.
- //
- // See also ref_actor for more details.
- ///////////////////////////////////////////////////////////////////////////
- struct clear_action
- {
- template<
- typename T
- >
- void act(T& ref_) const
- {
- ref_.clear();
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- // helper method that creates a and_assign_actor.
- ///////////////////////////////////////////////////////////////////////////
- template<typename T>
- inline ref_actor<T,clear_action> clear_a(T& ref_)
- {
- return ref_actor<T,clear_action>(ref_);
- }
-
-
-}}
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_clear_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_clear_actor.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_clear_actor.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/actor/decrement_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/decrement_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/decrement_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,56 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_DECREMENT_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_DECREMENT_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_DECREMENT_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_DECREMENT_ACTOR
 
-#include <boost/spirit/actor/ref_actor.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy that calls the -- operator on a reference.
- // (This doc uses convention available in actors.hpp)
- //
- // Actions:
- // --ref;
- //
- // Policy name:
- // decrement_action
- //
- // Policy holder, corresponding helper method:
- // ref_actor, decrement_a( ref );
- //
- // () operators: both.
- //
- // See also ref_actor for more details.
- ///////////////////////////////////////////////////////////////////////////
- struct decrement_action
- {
- template<
- typename T
- >
- void act(T& ref_) const
- {
- --ref_;
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- // helper method that creates a and_assign_actor.
- ///////////////////////////////////////////////////////////////////////////
- template<typename T>
- inline ref_actor<T,decrement_action> decrement_a(T& ref_)
- {
- return ref_actor<T,decrement_action>(ref_);
- }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_decrement_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_decrement_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_decrement_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/erase_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/erase_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/erase_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,85 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_ERASE_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_ERASE_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ERASE_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ERASE_ACTOR
 
-#include <boost/spirit/actor/ref_value_actor.hpp>
-#include <boost/spirit/actor/ref_const_ref_actor.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy that calss the erase method.
- // (This doc uses convention available in actors.hpp)
- //
- // Actions (what it does):
- // ref.erase( value );
- // ref.erase( T::key_type(first,last) );
- // ref.erase( key_ref );
- //
- // Policy name:
- // erase_action
- //
- // Policy holder, corresponding helper method:
- // ref_value_actor, erase_a( ref );
- // ref_const_ref_actor, erase_a( ref, key_ref );
- //
- // () operators: both
- //
- // See also ref_value_actor and ref_const_ref_actor for more details.
- ///////////////////////////////////////////////////////////////////////////
- struct erase_action
- {
- template<
- typename T,
- typename KeyT
- >
- void act(T& ref_, KeyT const& key_) const
- {
- ref_.erase(key_);
- }
- template<
- typename T,
- typename IteratorT
- >
- void act(
- T& ref_,
- IteratorT const& first_,
- IteratorT const& last_
- ) const
- {
- typedef typename T::key_type key_type;
- key_type key(first_,last_);
-
- ref_.erase(key);
- }
- };
-
- template<typename T>
- inline ref_value_actor<T,erase_action> erase_a(T& ref_)
- {
- return ref_value_actor<T,erase_action>(ref_);
- }
-
- template<
- typename T,
- typename KeyT
- >
- inline ref_const_ref_actor<T,KeyT,erase_action> erase_a(
- T& ref_,
- KeyT const& key_
- )
- {
- return ref_const_ref_actor<T,KeyT,erase_action>(ref_,key_);
- }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_erase_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_erase_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_erase_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/increment_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/increment_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/increment_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,56 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_INCREMENT_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_INCREMENT_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_INCREMENT_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_INCREMENT_ACTOR
 
-#include <boost/spirit/actor/ref_actor.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy that calls the ++ operator on a reference.
- // (This doc uses convention available in actors.hpp)
- //
- // Actions:
- // ++ref;
- //
- // Policy name:
- // increment_action
- //
- // Policy holder, corresponding helper method:
- // ref_actor, increment_a( ref );
- //
- // () operators: both.
- //
- // See also ref_actor for more details.
- ///////////////////////////////////////////////////////////////////////////
- struct increment_action
- {
- template<
- typename T
- >
- void act(T& ref_) const
- {
- ++ref_;
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- // helper method that creates a increment_actor.
- ///////////////////////////////////////////////////////////////////////////
- template<typename T>
- inline ref_actor<T,increment_action> increment_a(T& ref_)
- {
- return ref_actor<T,increment_action>(ref_);
- }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_increment_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_increment_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_increment_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/insert_at_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/insert_at_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/insert_at_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,117 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_INSERT_AT_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_INSERT_AT_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_INSERT_AT_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_INSERT_AT_ACTOR
 
-#include <boost/spirit/actor/ref_const_ref_value_actor.hpp>
-#include <boost/spirit/actor/ref_const_ref_const_ref_a.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy that insert data into an associative
- // container using a const reference to a key.
- // (This doc uses convention available in actors.hpp)
- //
- // Actions (what it does):
- // ref.insert( T::value_type(key_ref,value) );
- // ref.insert( T::value_type(key_ref, T::mapped_type(first,last)));;
- // ref.insert( T::value_type(key_ref,value_ref) );
- //
- // Policy name:
- // insert_at_action
- //
- // Policy holder, corresponding helper method:
- // ref_const_ref_value_actor, insert_at_a( ref, key_ref );
- // ref_const_ref_const_ref_actor, insert_a( ref, key_ref, value_ref );
- //
- // () operators: both
- //
- // See also ref_const_ref_value_actor and ref_const_ref_const_ref_actor
- // for more details.
- ///////////////////////////////////////////////////////////////////////////
- struct insert_at_action
- {
- template<
- typename T,
- typename ReferentT,
- typename ValueT
- >
- void act(
- T& ref_,
- ReferentT const& key_,
- ValueT const& value_
- ) const
- {
- typedef typename T::value_type value_type;
- ref_.insert( value_type(key_, value_) );
- }
-
- template<
- typename T,
- typename ReferentT,
- typename IteratorT
- >
- void act(
- T& ref_,
- ReferentT const& key_,
- IteratorT const& first_,
- IteratorT const& last_
- ) const
- {
- typedef typename T::mapped_type mapped_type;
- typedef typename T::value_type value_type;
-
- mapped_type value(first_,last_);
- value_type key_value(key_, value);
- ref_.insert( key_value );
- }
- };
-
- template<
- typename T,
- typename ReferentT
- >
- inline ref_const_ref_value_actor<T,ReferentT,insert_at_action>
- insert_at_a(
- T& ref_,
- ReferentT const& key_
- )
- {
- return ref_const_ref_value_actor<
- T,
- ReferentT,
- insert_at_action
- >(ref_,key_);
- }
-
- template<
- typename T,
- typename ReferentT,
- typename ValueT
- >
- inline ref_const_ref_const_ref_actor<T,ReferentT,ValueT,insert_at_action>
- insert_at_a(
- T& ref_,
- ReferentT const& key_,
- ValueT const& value_
- )
- {
- return ref_const_ref_const_ref_actor<
- T,
- ReferentT,
- ValueT,
- insert_at_action
- >(ref_,key_,value_);
- }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_insert_at_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_insert_at_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_insert_at_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/insert_key_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/insert_key_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/insert_key_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,93 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_INSERT_KEY_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_INSERT_KEY_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_INSERT_KEY_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_INSERT_KEY_ACTOR
 
-#include <boost/spirit/actor/ref_const_ref_value_actor.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy that insert data into an associative
- // container using a const reference to data.
- // (This doc uses convention available in actors.hpp)
- //
- // Actions (what it does):
- // ref.insert( T::value_type(value,value_ref) );
- // ref.insert( T::value_type(T::key_type(first,last), value_ref));;
- //
- // Policy name:
- // insert_key_action
- //
- // Policy holder, corresponding helper method:
- // ref_const_ref_value_actor, insert_key_a( ref, value_ref );
- //
- // () operators: both
- //
- // See also ref_const_ref_value_actor for more details.
- ///////////////////////////////////////////////////////////////////////////
- struct insert_key_action
- {
- template<
- typename T,
- typename ValueT,
- typename ReferentT
- >
- void act(
- T& ref_,
- ValueT const& value_,
- ReferentT const& key_
- ) const
- {
- typedef typename T::value_type value_type;
- value_type key_value(key_, value_);
- ref_.insert( key_value );
- }
-
- template<
- typename T,
- typename ValueT,
- typename IteratorT
- >
- void act(
- T& ref_,
- ValueT const& value_,
- IteratorT const& first_,
- IteratorT const& last_
- ) const
- {
- typedef typename T::key_type key_type;
- typedef typename T::value_type value_type;
-
- key_type key(first_,last_);
- value_type key_value(key, value_);
- ref_.insert( key_value );
- }
- };
-
- template<
- typename T,
- typename ValueT
- >
- inline ref_const_ref_value_actor<T,ValueT,insert_key_action> insert_key_a(
- T& ref_,
- ValueT const& value_
- )
- {
- return ref_const_ref_value_actor<
- T,
- ValueT,
- insert_key_action
- >(ref_,value_);
- }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_insert_key_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_insert_key_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_insert_key_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/push_back_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/push_back_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/push_back_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,97 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_PUSH_BACK_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_PUSH_BACK_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PUSH_BACK_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PUSH_BACK_ACTOR
 
-#include <boost/spirit/actor/ref_value_actor.hpp>
-#include <boost/spirit/actor/ref_const_ref_actor.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- //
- // A semantic action policy that appends a value to the back of a
- // container.
- // (This doc uses convention available in actors.hpp)
- //
- // Actions (what it does and what ref, value_ref must support):
- // ref.push_back( value );
- // ref.push_back( T::value_type(first,last) );
- // ref.push_back( value_ref );
- //
- // Policy name:
- // push_back_action
- //
- // Policy holder, corresponding helper method:
- // ref_value_actor, push_back_a( ref );
- // ref_const_ref_actor, push_back_a( ref, value_ref );
- //
- // () operators: both
- //
- // See also ref_value_actor and ref_const_ref_actor for more details.
- ///////////////////////////////////////////////////////////////////////////
- struct push_back_action
- {
- template<
- typename T,
- typename ValueT
- >
- void act(T& ref_, ValueT const& value_) const
- {
- ref_.push_back( value_ );
- }
- template<
- typename T,
- typename IteratorT
- >
- void act(
- T& ref_,
- IteratorT const& first_,
- IteratorT const& last_
- ) const
- {
- typedef typename T::value_type value_type;
- value_type value(first_,last_);
-
- ref_.push_back( value );
- }
- };
-
-// Deprecated interface. Use push_back_a
- template<typename T>
- inline ref_value_actor<T,push_back_action>
- append(T& ref_)
- {
- return ref_value_actor<T,push_back_action>(ref_);
- }
-
- template<typename T>
- inline ref_value_actor<T,push_back_action>
- push_back_a(T& ref_)
- {
- return ref_value_actor<T,push_back_action>(ref_);
- }
-
- template<
- typename T,
- typename ValueT
- >
- inline ref_const_ref_actor<T,ValueT,push_back_action>
- push_back_a(
- T& ref_,
- ValueT const& value_
- )
- {
- return ref_const_ref_actor<T,ValueT,push_back_action>(ref_,value_);
- }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_push_back_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_push_back_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_push_back_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/push_front_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/push_front_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/push_front_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,87 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_PUSH_FRONT_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_PUSH_FRONT_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PUSH_FRONT_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PUSH_FRONT_ACTOR
 
-#include <boost/spirit/actor/ref_value_actor.hpp>
-#include <boost/spirit/actor/ref_const_ref_actor.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- //
- // A semantic action policy that appends a value to the front of a
- // container.
- // (This doc uses convention available in actors.hpp)
- //
- // Actions (what it does and what ref, value_ref must support):
- // ref.push_front( value );
- // ref.push_front( T::value_type(first,last) );
- // ref.push_front( value_ref );
- //
- // Policy name:
- // push_front_action
- //
- // Policy holder, corresponding helper method:
- // ref_value_actor, push_front_a( ref );
- // ref_const_ref_actor, push_front_a( ref, value_ref );
- //
- // () operators: both
- //
- // See also ref_value_actor and ref_const_ref_actor for more details.
- ///////////////////////////////////////////////////////////////////////////
- struct push_front_action
- {
- template<
- typename T,
- typename ValueT
- >
- void act(T& ref_, ValueT const& value_) const
- {
- ref_.push_front( value_ );
- }
- template<
- typename T,
- typename IteratorT
- >
- void act(
- T& ref_,
- IteratorT const& first_,
- IteratorT const& last_
- ) const
- {
- typedef typename T::value_type value_type;
- value_type value(first_,last_);
-
- ref_.push_front( value );
- }
- };
-
- template<typename T>
- inline ref_value_actor<T,push_front_action> push_front_a(T& ref_)
- {
- return ref_value_actor<T,push_front_action>(ref_);
- }
-
- template<
- typename T,
- typename ValueT
- >
- inline ref_const_ref_actor<T,ValueT,push_front_action> push_front_a(
- T& ref_,
- ValueT const& value_
- )
- {
- return ref_const_ref_actor<T,ValueT,push_front_action>(ref_,value_);
- }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_push_front_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_push_front_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_push_front_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/ref_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/ref_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/ref_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,65 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_REF_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_REF_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_REF_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_REF_ACTOR
 
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy holder. This holder stores a reference to ref,
- // act methods are fead with this reference. The parse result is not used
- // by this holder.
- //
- // (This doc uses convention available in actors.hpp)
- //
- // Constructor:
- // ...(T& ref_);
- // where ref_ is stored.
- //
- // Action calls:
- // act(ref);
- //
- // () operators: both
- //
- ///////////////////////////////////////////////////////////////////////////
- template<
- typename T,
- typename ActionT
- >
- class ref_actor : public ActionT
- {
- private:
- T& ref;
- public:
- explicit
- ref_actor(T& ref_)
- : ref(ref_){}
-
-
- template<typename T2>
- void operator()(T2 const& /*val*/) const
- {
- this->act(ref); // defined in ActionT
- }
-
-
- template<typename IteratorT>
- void operator()(
- IteratorT const& /*first*/,
- IteratorT const& /*last*/
- ) const
- {
- this->act(ref); // defined in ActionT
- }
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_ref_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_ref_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_ref_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/ref_const_ref_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/ref_const_ref_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/ref_const_ref_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,73 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_REF_CONST_REF_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_REF_CONST_REF_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_REF_CONST_REF_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_REF_CONST_REF_ACTOR
 
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy holder. This holder stores a reference to ref
- // and a const reference to value_ref.
- // act methods are feed with ref and value_ref. The parse result is
- // not used by this holder.
- //
- // (This doc uses convention available in actors.hpp)
- //
- // Constructor:
- // ...(T& ref_, ValueT const& value_ref_);
- // where ref_ and value_ref_ are stored in the holder.
- //
- // Action calls:
- // act(ref, value_ref);
- //
- // () operators: both
- //
- ///////////////////////////////////////////////////////////////////////////
- template<
- typename T,
- typename ValueT,
- typename ActionT
- >
- class ref_const_ref_actor : public ActionT
- {
- private:
- T& ref;
- ValueT const& value_ref;
- public:
- ref_const_ref_actor(
- T& ref_,
- ValueT const& value_ref_
- )
- :
- ref(ref_),
- value_ref(value_ref_)
- {}
-
-
- template<typename T2>
- void operator()(T2 const& /*val*/) const
- {
- this->act(ref,value_ref); // defined in ActionT
- }
-
-
- template<typename IteratorT>
- void operator()(
- IteratorT const& /*first*/,
- IteratorT const& /*last*/
- ) const
- {
- this->act(ref,value_ref); // defined in ActionT
- }
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_ref_const_ref_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_ref_const_ref_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_ref_const_ref_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/ref_const_ref_const_ref_a.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/ref_const_ref_const_ref_a.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/ref_const_ref_const_ref_a.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,82 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_REF_CONST_REF_CONST_REF_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_REF_CONST_REF_CONST_REF_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_REF_CONST_REF_CONST_REF_A
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_REF_CONST_REF_CONST_REF_A
 
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy holder. This holder stores a reference to ref
- // , a const reference to value1_ref and a const reference to value2_ref.
- // Typically, value1_ref is a key and value2_ref is value for associative
- // container operations.
- // act methods are feed with ref, value1_ref, value2_ref. The parse result
- // is not used by this holder.
- //
- // (This doc uses convention available in actors.hpp)
- //
- // Constructor:
- // ...(
- // T& ref_,
- // Value1T const& value1_ref_,
- // Value2T const& value2_ref_ );
- // where ref_, value1_ref and value2_ref_ are stored in the holder.
- //
- // Action calls:
- // act(ref, value1_ref, value2_ref);
- //
- // () operators: both
- //
- ///////////////////////////////////////////////////////////////////////////
- template<
- typename T,
- typename Value1T,
- typename Value2T,
- typename ActionT
- >
- class ref_const_ref_const_ref_actor : public ActionT
- {
- private:
- T& ref;
- Value1T const& value1_ref;
- Value2T const& value2_ref;
- public:
- ref_const_ref_const_ref_actor(
- T& ref_,
- Value1T const& value1_ref_,
- Value2T const& value2_ref_
- )
- :
- ref(ref_),
- value1_ref(value1_ref_),
- value2_ref(value2_ref_)
- {}
-
-
- template<typename T2>
- void operator()(T2 const& /*val*/) const
- {
- this->act(ref,value1_ref,value2_ref); // defined in ActionT
- }
-
-
- template<typename IteratorT>
- void operator()(
- IteratorT const& /*first*/,
- IteratorT const& /*last*/
- ) const
- {
- this->act(ref,value1_ref,value2_ref); // defined in ActionT
- }
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/ref_const_ref_value_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/ref_const_ref_value_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/ref_const_ref_value_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,73 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_REF_CONST_REF_VALUE_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_REF_CONST_REF_VALUE_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_REF_CONST_REF_VALUE_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_REF_CONST_REF_VALUE_ACTOR
 
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy holder. This holder stores a reference to ref
- // and a const reference to value_ref.
- // act methods are feed with ref, value_ref and the parse result.
- //
- // (This doc uses convention available in actors.hpp)
- //
- // Constructor:
- // ...(T& ref_, ValueT const& value_ref_);
- // where ref_ and value_ref_ are stored in the holder.
- //
- // Action calls:
- // act(ref, value_ref, value);
- // act(ref, value_ref, first, last);
- //
- // () operators: both
- //
- ///////////////////////////////////////////////////////////////////////////
- template<
- typename T,
- typename ValueT,
- typename ActionT
- >
- class ref_const_ref_value_actor : public ActionT
- {
- private:
- T& ref;
- ValueT const& value_ref;
- public:
- ref_const_ref_value_actor(
- T& ref_,
- ValueT const& value_ref_
- )
- :
- ref(ref_),
- value_ref(value_ref_)
- {}
-
-
- template<typename T2>
- void operator()(T2 const& val_) const
- {
- this->act(ref,value_ref,val_); // defined in ActionT
- }
-
-
- template<typename IteratorT>
- void operator()(
- IteratorT const& first_,
- IteratorT const& last_
- ) const
- {
- this->act(ref,value_ref,first_,last_); // defined in ActionT
- }
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_ref_const_ref_value_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_ref_const_ref_value_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_ref_const_ref_value_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/ref_value_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/ref_value_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/ref_value_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,65 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_REF_VALUE_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_REF_VALUE_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_REF_VALUE_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_REF_VALUE_ACTOR
 
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy holder. This holder stores a reference to ref.
- // act methods are feed with ref and the parse result.
- //
- // (This doc uses convention available in actors.hpp)
- //
- // Constructor:
- // ...(T& ref_);
- // where ref_ is stored.
- //
- // Action calls:
- // act(ref, value);
- // act(ref, first,last);
- //
- // () operators: both
- //
- ///////////////////////////////////////////////////////////////////////////
- template<
- typename T,
- typename ActionT
- >
- class ref_value_actor : public ActionT
- {
- private:
- T& ref;
- public:
- explicit
- ref_value_actor(T& ref_)
- : ref(ref_){}
-
-
- template<typename T2>
- void operator()(T2 const& val_) const
- {
- this->act(ref,val_); // defined in ActionT
- }
-
-
- template<typename IteratorT>
- void operator()(
- IteratorT const& first_,
- IteratorT const& last_
- ) const
- {
- this->act(ref,first_,last_); // defined in ActionT
- }
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_ref_value_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_ref_value_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_ref_value_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/swap_actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/swap_actor.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/swap_actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,81 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Jonathan de Halleux (dehalleux_at_[hidden])
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTOR_SWAP_ACTOR_HPP
-#define BOOST_SPIRIT_ACTOR_SWAP_ACTOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SWAP_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SWAP_ACTOR
 
-#include <boost/spirit/actor/ref_value_actor.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- // Summary:
- // A semantic action policy that swaps values.
- // (This doc uses convention available in actors.hpp)
- //
- // Actions (what it does):
- // ref.swap( value_ref );
- //
- // Policy name:
- // swap_action
- //
- // Policy holder, corresponding helper method:
- // ref_value_actor, swap_a( ref );
- // ref_const_ref_actor, swap_a( ref, value_ref );
- //
- // () operators: both
- //
- // See also ref_value_actor and ref_const_ref_actor for more details.
- ///////////////////////////////////////////////////////////////////////////
- template<
- typename T
- >
- class swap_actor
- {
- private:
- T& ref;
- T& swap_ref;
-
- public:
- swap_actor(
- T& ref_,
- T& swap_ref_)
- : ref(ref_), swap_ref(swap_ref_)
- {};
-
- template<typename T2>
- void operator()(T2 const& /*val*/) const
- {
- ref.swap(swap_ref);
- }
-
-
- template<typename IteratorT>
- void operator()(
- IteratorT const& /*first*/,
- IteratorT const& /*last*/
- ) const
- {
- ref.swap(swap_ref);
- }
- };
-
- template<
- typename T
- >
- inline swap_actor<T> swap_a(
- T& ref_,
- T& swap_ref_
- )
- {
- return swap_actor<T>(ref_,swap_ref_);
- }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_swap_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_swap_actor.hpp"
+#endif
 
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_swap_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/actor/typeof.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/actor/typeof.hpp (original)
+++ branches/CMake/release/boost/spirit/actor/typeof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,70 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ACTOR_TYPEOF_HPP)
-#define BOOST_SPIRIT_ACTOR_TYPEOF_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
 
-#include <boost/typeof/typeof.hpp>
-
-namespace boost { namespace spirit {
-
- template<typename T, typename ActionT> class ref_actor;
-
- template<typename T, typename ActionT> class ref_value_actor;
-
- template<typename T, typename ValueT, typename ActionT>
-
- class ref_const_ref_actor;
- template<typename T, typename ValueT, typename ActionT>
-
- class ref_const_ref_value_actor;
- template<typename T, typename Value1T, typename Value2T, typename ActionT>
-
- class ref_const_ref_const_ref_actor;
-
- struct assign_action;
- struct clear_action;
- struct increment_action;
- struct decrement_action;
- struct push_back_action;
- struct push_front_action;
- struct insert_key_action;
- struct insert_at_action;
- struct assign_key_action;
-
- template<typename T> class swap_actor;
-
-}} // namespace boost::spirit
-
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_actor,2)
-#if !defined(BOOST_SPIRIT_CORE_TYPEOF_HPP)
-// this part also lives in the core master header and is deprecated there...
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_value_actor,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_const_ref_actor,3)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::assign_action)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::push_back_action)
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp"
 #endif
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_const_ref_value_actor,3)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_const_ref_const_ref_actor,4)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::clear_action)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::increment_action)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::decrement_action)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::push_front_action)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::insert_key_action)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::insert_at_action)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::assign_key_action)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::swap_actor,1)
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_typeof.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/attribute.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/attribute.hpp (original)
+++ branches/CMake/release/boost/spirit/attribute.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,38 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ATTRIBUTE_MAIN_HPP)
-#define BOOST_SPIRIT_ATTRIBUTE_MAIN_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ATTRIBUTE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ATTRIBUTE
 
-#include <boost/spirit/version.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_attribute.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_attribute.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_attribute.hpp>
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// Master header for Spirit.Attributes
-//
-///////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Phoenix predefined maximum limit. This limit defines the maximum
-// number of elements a tuple can hold. This number defaults to 3. The
-// actual maximum is rounded up in multiples of 3. Thus, if this value
-// is 4, the actual limit is 6. The ultimate maximum limit in this
-// implementation is 15.
-//
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(PHOENIX_LIMIT)
-#define PHOENIX_LIMIT 3
-#endif // !defined(PHOENIX_LIMIT)
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/attribute/parametric.hpp>
-#include <boost/spirit/attribute/closure.hpp>
-
-#endif // !defined(BOOST_SPIRIT_ATTRIBUTE_MAIN_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/attribute/closure.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/attribute/closure.hpp (original)
+++ branches/CMake/release/boost/spirit/attribute/closure.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,1079 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_CLOSURE_HPP
-#define BOOST_SPIRIT_CLOSURE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CLOSURE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CLOSURE
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/core/non_terminal/parser_context.hpp>
-#include <boost/spirit/attribute/parametric.hpp>
-#include <boost/spirit/attribute/closure_context.hpp>
-#include <boost/spirit/attribute/closure_fwd.hpp>
-
-#include <boost/spirit/phoenix/closures.hpp>
-#include <boost/spirit/phoenix/primitives.hpp>
-#include <boost/spirit/phoenix/casts.hpp>
-#include <boost/spirit/phoenix/operators.hpp>
-#include <boost/spirit/phoenix/tuple_helpers.hpp>
-
-#include <boost/static_assert.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit predefined maximum closure limit. This limit defines the maximum
-// number of elements a closure can hold. This number defaults to 3. The
-// actual maximum is rounded up in multiples of 3. Thus, if this value
-// is 4, the actual limit is 6. The ultimate maximum limit in this
-// implementation is 15.
-//
-// It should NOT be greater than PHOENIX_LIMIT!
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#if !defined(BOOST_SPIRIT_CLOSURE_LIMIT)
-#define BOOST_SPIRIT_CLOSURE_LIMIT PHOENIX_LIMIT
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_closure.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_closure.hpp"
 #endif
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// ensure BOOST_SPIRIT_CLOSURE_LIMIT <= PHOENIX_LIMIT and SPIRIT_CLOSURE_LIMIT <= 15
-//
-///////////////////////////////////////////////////////////////////////////////
-BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLOSURE_LIMIT <= PHOENIX_LIMIT);
-BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLOSURE_LIMIT <= 15);
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // closure_context class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ClosureT>
- class closure_context : public parser_context_base
- {
- public:
-
- typedef typename phoenix::tuple_element<0,
- typename ClosureT::tuple_t>::type attr_t;
- typedef ClosureT base_t;
- typedef closure_context_linker<closure_context<ClosureT> >
- context_linker_t;
-
- closure_context(ClosureT const& clos)
- : frame(clos) {}
-
- ~closure_context() {}
-
- template <typename ParserT, typename ScannerT>
- void pre_parse(ParserT const&, ScannerT const&) {}
-
- template <typename ResultT, typename ParserT, typename ScannerT>
- ResultT& post_parse(ResultT& hit, ParserT const&, ScannerT const&)
- { hit.value(frame[phoenix::tuple_index<0>()]); return hit; }
-
- private:
-
- phoenix::closure_frame<typename ClosureT::phoenix_closure_t> frame;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // init_closure_context class
- //
- // The init_closure_context class is a special parser context type
- // which additionally initializes a closure contained in the derived
- // parser with values from a given tuple. Please note, that this
- // given tuple does not contain the required values directly, it
- // contains phoenix::actor objects. These actors have to be
- // dereferenced to gain the values to be used for initialization
- // (this is done by the help of the phoenix::convert_actors<>
- // template).
- //
- ///////////////////////////////////////////////////////////////////////////
-
- template <typename ClosureT>
- class init_closure_context : public parser_context_base
- {
- typedef typename ClosureT::tuple_t tuple_t;
- typedef typename ClosureT::closure_t closure_t;
-
- public:
-
- init_closure_context(ClosureT const& clos)
- : frame(clos.subject(), phoenix::convert_actors<tuple_t>(clos.init)) {}
-
- ~init_closure_context() {}
-
- template <typename ParserT, typename ScannerT>
- void pre_parse(ParserT const& /*p*/, ScannerT const&) {}
-
- template <typename ResultT, typename ParserT, typename ScannerT>
- ResultT& post_parse(ResultT& hit, ParserT const&, ScannerT const&)
- { hit.value(frame[phoenix::tuple_index<0>()]); return hit; }
-
- private:
-
- phoenix::closure_frame<closure_t> frame;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // init_closure_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ParserT, typename ActorTupleT>
- struct init_closure_parser
- : public unary<ParserT, parser<init_closure_parser<ParserT, ActorTupleT> > >
- {
- typedef init_closure_parser<ParserT, ActorTupleT> self_t;
- typedef unary<ParserT, parser<self_t> > base_t;
- typedef typename ParserT::phoenix_closure_t closure_t;
- typedef typename ParserT::tuple_t tuple_t;
- typedef typename phoenix::tuple_element<0, tuple_t>::type attr_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, attr_t>::type type;
- };
-
- init_closure_parser(ParserT const& p, ActorTupleT const& init_)
- : base_t(p), init(init_) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse_main(ScannerT const& scan) const
- {
- return this->subject().parse_main(scan);
- }
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef init_closure_context<self_t> init_context_t;
- typedef parser_scanner_linker<ScannerT> scanner_t;
- typedef closure_context_linker<init_context_t> context_t;
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- BOOST_SPIRIT_CONTEXT_PARSE(
- scan, *this, scanner_t, context_t, result_t);
- }
-
- ActorTupleT init;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // closure class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename DerivedT
- , typename T0
- , typename T1
- , typename T2
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
- , typename T3
- , typename T4
- , typename T5
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
- , typename T6
- , typename T7
- , typename T8
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
- , typename T9
- , typename T10
- , typename T11
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
- , typename T12
- , typename T13
- , typename T14
- #endif
- #endif
- #endif
- #endif
- >
- struct closure :
- public phoenix::closure<
- T0, T1, T2
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
- , T3, T4, T5
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
- , T6, T7, T8
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
- , T9, T10, T11
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
- , T12, T13, T14
- #endif
- #endif
- #endif
- #endif
- >
- {
- typedef phoenix::closure<
- T0, T1, T2
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
- , T3, T4, T5
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
- , T6, T7, T8
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
- , T9, T10, T11
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
- , T12, T13, T14
- #endif
- #endif
- #endif
- #endif
- > phoenix_closure_t;
-
- typedef closure_context<DerivedT> context_t;
-
- template <typename DerivedT2>
- struct aux
- {
- DerivedT2& aux_derived()
- { return *static_cast<DerivedT2*>(this); }
-
- DerivedT2 const& aux_derived() const
- { return *static_cast<DerivedT2 const*>(this); }
-
- // initialization functions
- template <typename A>
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type
- >
- >
- operator()(A const &a) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef phoenix::tuple<a_t> actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a)
- )
- );
- }
-
- template <typename A, typename B>
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type
- >
- >
- operator()(A const &a, B const &b) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef phoenix::tuple<a_t, b_t> actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b)
- )
- );
- }
-
- template <typename A, typename B, typename C>
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type
- >
- >
- operator()(A const &a, B const &b, C const &c) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef phoenix::tuple<a_t, b_t, c_t> actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c)
- )
- );
- }
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
-
- template <
- typename A, typename B, typename C, typename D
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d)
- )
- );
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e)
- )
- );
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type,
- typename phoenix::as_actor<F>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e,
- F const &f
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef typename phoenix::as_actor<F>::type f_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t, f_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e),
- phoenix::as_actor<F>::convert(f)
- )
- );
- }
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type,
- typename phoenix::as_actor<F>::type,
- typename phoenix::as_actor<G>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e,
- F const &f, G const &g
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef typename phoenix::as_actor<F>::type f_t;
- typedef typename phoenix::as_actor<G>::type g_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t, f_t, g_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e),
- phoenix::as_actor<F>::convert(f),
- phoenix::as_actor<G>::convert(g)
- )
- );
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type,
- typename phoenix::as_actor<F>::type,
- typename phoenix::as_actor<G>::type,
- typename phoenix::as_actor<H>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e,
- F const &f, G const &g, H const &h
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef typename phoenix::as_actor<F>::type f_t;
- typedef typename phoenix::as_actor<G>::type g_t;
- typedef typename phoenix::as_actor<H>::type h_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e),
- phoenix::as_actor<F>::convert(f),
- phoenix::as_actor<G>::convert(g),
- phoenix::as_actor<H>::convert(h)
- )
- );
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type,
- typename phoenix::as_actor<F>::type,
- typename phoenix::as_actor<G>::type,
- typename phoenix::as_actor<H>::type,
- typename phoenix::as_actor<I>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e,
- F const &f, G const &g, H const &h, I const &i
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef typename phoenix::as_actor<F>::type f_t;
- typedef typename phoenix::as_actor<G>::type g_t;
- typedef typename phoenix::as_actor<H>::type h_t;
- typedef typename phoenix::as_actor<I>::type i_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e),
- phoenix::as_actor<F>::convert(f),
- phoenix::as_actor<G>::convert(g),
- phoenix::as_actor<H>::convert(h),
- phoenix::as_actor<I>::convert(i)
- )
- );
- }
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type,
- typename phoenix::as_actor<F>::type,
- typename phoenix::as_actor<G>::type,
- typename phoenix::as_actor<H>::type,
- typename phoenix::as_actor<I>::type,
- typename phoenix::as_actor<J>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e,
- F const &f, G const &g, H const &h, I const &i, J const &j
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef typename phoenix::as_actor<F>::type f_t;
- typedef typename phoenix::as_actor<G>::type g_t;
- typedef typename phoenix::as_actor<H>::type h_t;
- typedef typename phoenix::as_actor<I>::type i_t;
- typedef typename phoenix::as_actor<J>::type j_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e),
- phoenix::as_actor<F>::convert(f),
- phoenix::as_actor<G>::convert(g),
- phoenix::as_actor<H>::convert(h),
- phoenix::as_actor<I>::convert(i),
- phoenix::as_actor<J>::convert(j)
- )
- );
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type,
- typename phoenix::as_actor<F>::type,
- typename phoenix::as_actor<G>::type,
- typename phoenix::as_actor<H>::type,
- typename phoenix::as_actor<I>::type,
- typename phoenix::as_actor<J>::type,
- typename phoenix::as_actor<K>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e,
- F const &f, G const &g, H const &h, I const &i, J const &j,
- K const &k
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef typename phoenix::as_actor<F>::type f_t;
- typedef typename phoenix::as_actor<G>::type g_t;
- typedef typename phoenix::as_actor<H>::type h_t;
- typedef typename phoenix::as_actor<I>::type i_t;
- typedef typename phoenix::as_actor<J>::type j_t;
- typedef typename phoenix::as_actor<K>::type k_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
- k_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e),
- phoenix::as_actor<F>::convert(f),
- phoenix::as_actor<G>::convert(g),
- phoenix::as_actor<H>::convert(h),
- phoenix::as_actor<I>::convert(i),
- phoenix::as_actor<J>::convert(j),
- phoenix::as_actor<K>::convert(k)
- )
- );
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type,
- typename phoenix::as_actor<F>::type,
- typename phoenix::as_actor<G>::type,
- typename phoenix::as_actor<H>::type,
- typename phoenix::as_actor<I>::type,
- typename phoenix::as_actor<J>::type,
- typename phoenix::as_actor<K>::type,
- typename phoenix::as_actor<L>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e,
- F const &f, G const &g, H const &h, I const &i, J const &j,
- K const &k, L const &l
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef typename phoenix::as_actor<F>::type f_t;
- typedef typename phoenix::as_actor<G>::type g_t;
- typedef typename phoenix::as_actor<H>::type h_t;
- typedef typename phoenix::as_actor<I>::type i_t;
- typedef typename phoenix::as_actor<J>::type j_t;
- typedef typename phoenix::as_actor<K>::type k_t;
- typedef typename phoenix::as_actor<L>::type l_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
- k_t, l_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e),
- phoenix::as_actor<F>::convert(f),
- phoenix::as_actor<G>::convert(g),
- phoenix::as_actor<H>::convert(h),
- phoenix::as_actor<I>::convert(i),
- phoenix::as_actor<J>::convert(j),
- phoenix::as_actor<K>::convert(k),
- phoenix::as_actor<L>::convert(l)
- )
- );
- }
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type,
- typename phoenix::as_actor<F>::type,
- typename phoenix::as_actor<G>::type,
- typename phoenix::as_actor<H>::type,
- typename phoenix::as_actor<I>::type,
- typename phoenix::as_actor<J>::type,
- typename phoenix::as_actor<K>::type,
- typename phoenix::as_actor<L>::type,
- typename phoenix::as_actor<M>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e,
- F const &f, G const &g, H const &h, I const &i, J const &j,
- K const &k, L const &l, M const &m
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef typename phoenix::as_actor<F>::type f_t;
- typedef typename phoenix::as_actor<G>::type g_t;
- typedef typename phoenix::as_actor<H>::type h_t;
- typedef typename phoenix::as_actor<I>::type i_t;
- typedef typename phoenix::as_actor<J>::type j_t;
- typedef typename phoenix::as_actor<K>::type k_t;
- typedef typename phoenix::as_actor<L>::type l_t;
- typedef typename phoenix::as_actor<M>::type m_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
- k_t, l_t, m_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e),
- phoenix::as_actor<F>::convert(f),
- phoenix::as_actor<G>::convert(g),
- phoenix::as_actor<H>::convert(h),
- phoenix::as_actor<I>::convert(i),
- phoenix::as_actor<J>::convert(j),
- phoenix::as_actor<K>::convert(k),
- phoenix::as_actor<L>::convert(l),
- phoenix::as_actor<M>::convert(m)
- )
- );
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type,
- typename phoenix::as_actor<F>::type,
- typename phoenix::as_actor<G>::type,
- typename phoenix::as_actor<H>::type,
- typename phoenix::as_actor<I>::type,
- typename phoenix::as_actor<J>::type,
- typename phoenix::as_actor<K>::type,
- typename phoenix::as_actor<L>::type,
- typename phoenix::as_actor<M>::type,
- typename phoenix::as_actor<N>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e,
- F const &f, G const &g, H const &h, I const &i, J const &j,
- K const &k, L const &l, M const &m, N const &n
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef typename phoenix::as_actor<F>::type f_t;
- typedef typename phoenix::as_actor<G>::type g_t;
- typedef typename phoenix::as_actor<H>::type h_t;
- typedef typename phoenix::as_actor<I>::type i_t;
- typedef typename phoenix::as_actor<J>::type j_t;
- typedef typename phoenix::as_actor<K>::type k_t;
- typedef typename phoenix::as_actor<L>::type l_t;
- typedef typename phoenix::as_actor<M>::type m_t;
- typedef typename phoenix::as_actor<N>::type n_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
- k_t, l_t, m_t, n_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e),
- phoenix::as_actor<F>::convert(f),
- phoenix::as_actor<G>::convert(g),
- phoenix::as_actor<H>::convert(h),
- phoenix::as_actor<I>::convert(i),
- phoenix::as_actor<J>::convert(j),
- phoenix::as_actor<K>::convert(k),
- phoenix::as_actor<L>::convert(l),
- phoenix::as_actor<M>::convert(m),
- phoenix::as_actor<N>::convert(n)
- )
- );
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O
- >
- init_closure_parser<
- DerivedT2,
- phoenix::tuple<
- typename phoenix::as_actor<A>::type,
- typename phoenix::as_actor<B>::type,
- typename phoenix::as_actor<C>::type,
- typename phoenix::as_actor<D>::type,
- typename phoenix::as_actor<E>::type,
- typename phoenix::as_actor<F>::type,
- typename phoenix::as_actor<G>::type,
- typename phoenix::as_actor<H>::type,
- typename phoenix::as_actor<I>::type,
- typename phoenix::as_actor<J>::type,
- typename phoenix::as_actor<K>::type,
- typename phoenix::as_actor<L>::type,
- typename phoenix::as_actor<M>::type,
- typename phoenix::as_actor<N>::type,
- typename phoenix::as_actor<O>::type
- >
- >
- operator()(
- A const &a, B const &b, C const &c, D const &d, E const &e,
- F const &f, G const &g, H const &h, I const &i, J const &j,
- K const &k, L const &l, M const &m, N const &n, O const &o
- ) const
- {
- typedef typename phoenix::as_actor<A>::type a_t;
- typedef typename phoenix::as_actor<B>::type b_t;
- typedef typename phoenix::as_actor<C>::type c_t;
- typedef typename phoenix::as_actor<D>::type d_t;
- typedef typename phoenix::as_actor<E>::type e_t;
- typedef typename phoenix::as_actor<F>::type f_t;
- typedef typename phoenix::as_actor<G>::type g_t;
- typedef typename phoenix::as_actor<H>::type h_t;
- typedef typename phoenix::as_actor<I>::type i_t;
- typedef typename phoenix::as_actor<J>::type j_t;
- typedef typename phoenix::as_actor<K>::type k_t;
- typedef typename phoenix::as_actor<L>::type l_t;
- typedef typename phoenix::as_actor<M>::type m_t;
- typedef typename phoenix::as_actor<N>::type n_t;
- typedef typename phoenix::as_actor<O>::type o_t;
- typedef phoenix::tuple<
- a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
- k_t, l_t, m_t, n_t, o_t
- > actor_tuple_t;
-
- return init_closure_parser<DerivedT2, actor_tuple_t>(
- aux_derived(),
- actor_tuple_t(
- phoenix::as_actor<A>::convert(a),
- phoenix::as_actor<B>::convert(b),
- phoenix::as_actor<C>::convert(c),
- phoenix::as_actor<D>::convert(d),
- phoenix::as_actor<E>::convert(e),
- phoenix::as_actor<F>::convert(f),
- phoenix::as_actor<G>::convert(g),
- phoenix::as_actor<H>::convert(h),
- phoenix::as_actor<I>::convert(i),
- phoenix::as_actor<J>::convert(j),
- phoenix::as_actor<K>::convert(k),
- phoenix::as_actor<L>::convert(l),
- phoenix::as_actor<M>::convert(m),
- phoenix::as_actor<N>::convert(n),
- phoenix::as_actor<O>::convert(o)
- )
- );
- }
-
- #endif
- #endif
- #endif
- #endif
- };
-
- ~closure() {}
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // overloads for chseq_p and str_p taking in phoenix actors
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ActorT>
- struct container_begin
- {
- typedef container_begin<ActorT> self_t;
-
- template <typename TupleT>
- struct result
- {
- typedef typename phoenix::actor_result<ActorT, TupleT>
- ::plain_type::iterator type;
- };
-
- container_begin(ActorT actor_)
- : actor(actor_) {}
-
- template <typename TupleT>
- typename phoenix::actor_result<self_t, TupleT>::type
- eval(TupleT const& /*args*/) const
- { return actor().begin(); }
-
- ActorT actor;
- };
-
- template <typename ActorT>
- struct container_end
- {
- typedef container_begin<ActorT> self_t;
-
- template <typename TupleT>
- struct result
- {
- typedef typename phoenix::actor_result<ActorT, TupleT>
- ::plain_type::iterator type;
- };
-
- container_end(ActorT actor_)
- : actor(actor_) {}
-
- template <typename TupleT>
- typename phoenix::actor_result<self_t, TupleT>::type
- eval(TupleT const& /*args*/) const
- { return actor().end(); }
-
- ActorT actor;
- };
-
- template <typename BaseT>
- inline f_chseq<
- phoenix::actor<container_begin<phoenix::actor<BaseT> > >,
- phoenix::actor<container_end<phoenix::actor<BaseT> > >
- >
- f_chseq_p(phoenix::actor<BaseT> const& a)
- {
- typedef phoenix::actor<container_begin<phoenix::actor<BaseT> > >
- container_begin_t;
- typedef phoenix::actor<container_end<phoenix::actor<BaseT> > >
- container_end_t;
- typedef f_chseq<container_begin_t, container_end_t> result_t;
-
- return result_t(container_begin_t(a), container_end_t(a));
- }
-
- template <typename BaseT>
- inline f_strlit<
- phoenix::actor<container_begin<phoenix::actor<BaseT> > >,
- phoenix::actor<container_end<phoenix::actor<BaseT> > >
- >
- f_str_p(phoenix::actor<BaseT> const& a)
- {
- typedef phoenix::actor<container_begin<phoenix::actor<BaseT> > >
- container_begin_t;
- typedef phoenix::actor<container_end<phoenix::actor<BaseT> > >
- container_end_t;
- typedef f_strlit<container_begin_t, container_end_t> result_t;
-
- return result_t(container_begin_t(a), container_end_t(a));
- }
-
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_closure.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/attribute/closure_context.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/attribute/closure_context.hpp (original)
+++ branches/CMake/release/boost/spirit/attribute/closure_context.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,51 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_HPP)
-#define BOOST_SPIRIT_CLOSURE_CONTEXT_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CLOSURE_CONTEXT
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CLOSURE_CONTEXT
 
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_closure_context.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_closure_context.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_closure_context.hpp>
 
-#if !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
-#define BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// closure_context_linker
-// { helper template for the closure extendability }
-//
-// This classes can be 'overloaded' (defined elsewhere), to plug
-// in additional functionality into the closure parsing process.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template<typename ContextT>
-struct closure_context_linker : public ContextT
-{
- template <typename ParserT>
- closure_context_linker(ParserT const& p)
- : ContextT(p) {}
-
- template <typename ParserT, typename ScannerT>
- void pre_parse(ParserT const& p, ScannerT const& scan)
- { ContextT::pre_parse(p, scan); }
-
- template <typename ResultT, typename ParserT, typename ScannerT>
- ResultT&
- post_parse(ResultT& hit, ParserT const& p, ScannerT const& scan)
- { return ContextT::post_parse(hit, p, scan); }
-};
-
-#endif // !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
-
-#endif // BOOST_SPIRIT_CLOSURE_CONTEXT_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/attribute/closure_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/attribute/closure_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/attribute/closure_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,65 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_CLOSURE_FWD_HPP)
-#define BOOST_SPIRIT_CLOSURE_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CLOSURE_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CLOSURE_FWD
 
-#include <boost/spirit/phoenix/tuples.hpp>
-
-#if !defined(BOOST_SPIRIT_CLOSURE_LIMIT)
-# define BOOST_SPIRIT_CLOSURE_LIMIT PHOENIX_LIMIT
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_closure_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_closure_fwd.hpp"
 #endif
 
-namespace boost { namespace spirit {
-
- template<typename ClosureT>
- class closure_context;
-
- template <typename ClosureT>
- class init_closure_context;
-
- template <typename ParserT, typename ActorTupleT>
- struct init_closure_parser;
-
- template <
- typename DerivedT
- , typename T0 = phoenix::nil_t
- , typename T1 = phoenix::nil_t
- , typename T2 = phoenix::nil_t
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
- , typename T3 = phoenix::nil_t
- , typename T4 = phoenix::nil_t
- , typename T5 = phoenix::nil_t
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
- , typename T6 = phoenix::nil_t
- , typename T7 = phoenix::nil_t
- , typename T8 = phoenix::nil_t
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
- , typename T9 = phoenix::nil_t
- , typename T10 = phoenix::nil_t
- , typename T11 = phoenix::nil_t
-
- #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
- , typename T12 = phoenix::nil_t
- , typename T13 = phoenix::nil_t
- , typename T14 = phoenix::nil_t
-
- #endif
- #endif
- #endif
- #endif
- >
- struct closure;
-
-}} // namespace boost::spirit
-
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_closure_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/attribute/parametric.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/attribute/parametric.hpp (original)
+++ branches/CMake/release/boost/spirit/attribute/parametric.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,140 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_PARAMETRIC_HPP
-#define BOOST_SPIRIT_PARAMETRIC_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PARAMETRIC
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PARAMETRIC
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // f_chlit class [ functional version of chlit ]
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ChGenT>
- struct f_chlit : public char_parser<f_chlit<ChGenT> >
- {
- f_chlit(ChGenT chgen_)
- : chgen(chgen_) {}
-
- template <typename T>
- bool test(T ch) const
- { return ch == chgen(); }
-
- ChGenT chgen;
- };
-
- template <typename ChGenT>
- inline f_chlit<ChGenT>
- f_ch_p(ChGenT chgen)
- { return f_chlit<ChGenT>(chgen); }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // f_range class [ functional version of range ]
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ChGenAT, typename ChGenBT>
- struct f_range : public char_parser<f_range<ChGenAT, ChGenBT> >
- {
- f_range(ChGenAT first_, ChGenBT last_)
- : first(first_), last(last_)
- {}
-
- template <typename T>
- bool test(T ch) const
- {
- BOOST_SPIRIT_ASSERT(first() <= last());
- return (ch >= first()) && (ch <= last());
- }
-
- ChGenAT first;
- ChGenBT last;
- };
-
- template <typename ChGenAT, typename ChGenBT>
- inline f_range<ChGenAT, ChGenBT>
- f_range_p(ChGenAT first, ChGenBT last)
- { return f_range<ChGenAT, ChGenBT>(first, last); }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // f_chseq class [ functional version of chseq ]
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename IterGenAT, typename IterGenBT>
- class f_chseq : public parser<f_chseq<IterGenAT, IterGenBT> >
- {
- public:
-
- typedef f_chseq<IterGenAT, IterGenBT> self_t;
-
- f_chseq(IterGenAT first_, IterGenBT last_)
- : first(first_), last(last_) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- return impl::string_parser_parse<result_t>(first(), last(), scan);
- }
-
- private:
-
- IterGenAT first;
- IterGenBT last;
- };
-
- template <typename IterGenAT, typename IterGenBT>
- inline f_chseq<IterGenAT, IterGenBT>
- f_chseq_p(IterGenAT first, IterGenBT last)
- { return f_chseq<IterGenAT, IterGenBT>(first, last); }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // f_strlit class [ functional version of strlit ]
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename IterGenAT, typename IterGenBT>
- class f_strlit : public parser<f_strlit<IterGenAT, IterGenBT> >
- {
- public:
-
- typedef f_strlit<IterGenAT, IterGenBT> self_t;
-
- f_strlit(IterGenAT first, IterGenBT last)
- : seq(first, last) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- return impl::contiguous_parser_parse<result_t>
- (seq, scan, scan);
- }
-
- private:
-
- f_chseq<IterGenAT, IterGenBT> seq;
- };
-
- template <typename IterGenAT, typename IterGenBT>
- inline f_strlit<IterGenAT, IterGenBT>
- f_str_p(IterGenAT first, IterGenBT last)
- { return f_strlit<IterGenAT, IterGenBT>(first, last); }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_parametric.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_parametric.hpp"
+#endif
 
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_parametric.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/attribute/typeof.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/attribute/typeof.hpp (original)
+++ branches/CMake/release/boost/spirit/attribute/typeof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,64 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ATTRIBUTE_TYPEOF_HPP)
-#define BOOST_SPIRIT_ATTRIBUTE_TYPEOF_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
 
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/spirit/core/typeof.hpp>
-
-#include <boost/spirit/attribute/closure_fwd.hpp>
-
-namespace boost { namespace spirit {
-
- // parametric.hpp
- template<typename ChGenT> struct f_chlit;
- template<typename ChGenAT, typename ChGenBT> struct f_range;
- template<typename IterGenAT, typename IterGenBT> class f_chseq;
- template<typename IterGenAT, typename IterGenBT> class f_strlit;
-
-}} // namespace boost::spirit
-
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-
-// parametric.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::f_chlit,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::f_range,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::f_chseq,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::f_strlit,2)
-
-
-// closure.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure,BOOST_SPIRIT_CLOSURE_LIMIT)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure_context,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::init_closure_context,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::init_closure_parser,2)
-
-
-#if BOOST_SPIRIT_CLOSURE_LIMIT > 12
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure,12)
-#endif
-#if BOOST_SPIRIT_CLOSURE_LIMIT > 9
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure, 9)
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp"
 #endif
-#if BOOST_SPIRIT_CLOSURE_LIMIT > 6
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure, 6)
-#endif
-#if BOOST_SPIRIT_CLOSURE_LIMIT > 3
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure, 3)
-#endif
-
-
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_typeof.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core.hpp (original)
+++ branches/CMake/release/boost/spirit/core.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,74 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001-2003 Daniel Nuffer
- Copyright (c) 2001-2003 Hartmut Kaiser
- Copyright (c) 2002-2003 Martin Wille
- Copyright (c) 2002 Raghavendra Satish
- Copyright (c) 2001 Bruce Florman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_CORE_MAIN_HPP)
-#define BOOST_SPIRIT_CORE_MAIN_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CORE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CORE
 
-#include <boost/spirit/version.hpp>
-#include <boost/spirit/debug.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit.Core includes
-//
-///////////////////////////////////////////////////////////////////////////////
-
-// Spirit.Core.Kernel
-#include <boost/spirit/core/config.hpp>
-#include <boost/spirit/core/nil.hpp>
-#include <boost/spirit/core/match.hpp>
-#include <boost/spirit/core/parser.hpp>
-
-// Spirit.Core.Primitives
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/primitives/numerics.hpp>
-
-// Spirit.Core.Scanner
-#include <boost/spirit/core/scanner/scanner.hpp>
-#include <boost/spirit/core/scanner/skipper.hpp>
-
-// Spirit.Core.NonTerminal
-#include <boost/spirit/core/non_terminal/subrule.hpp>
-#include <boost/spirit/core/non_terminal/rule.hpp>
-#include <boost/spirit/core/non_terminal/grammar.hpp>
-
-// Spirit.Core.Composite
-#include <boost/spirit/core/composite/actions.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/core/composite/directives.hpp>
-#include <boost/spirit/core/composite/epsilon.hpp>
-#include <boost/spirit/core/composite/sequence.hpp>
-#include <boost/spirit/core/composite/sequential_and.hpp>
-#include <boost/spirit/core/composite/sequential_or.hpp>
-#include <boost/spirit/core/composite/alternative.hpp>
-#include <boost/spirit/core/composite/difference.hpp>
-#include <boost/spirit/core/composite/intersection.hpp>
-#include <boost/spirit/core/composite/exclusive_or.hpp>
-#include <boost/spirit/core/composite/kleene_star.hpp>
-#include <boost/spirit/core/composite/positive.hpp>
-#include <boost/spirit/core/composite/optional.hpp>
-#include <boost/spirit/core/composite/list.hpp>
-#include <boost/spirit/core/composite/no_actions.hpp>
-
-// Deprecated interface includes
-#include <boost/spirit/actor/assign_actor.hpp>
-#include <boost/spirit/actor/push_back_actor.hpp>
-
-#if defined(BOOST_SPIRIT_DEBUG)
- //////////////////////////////////
- #include <boost/spirit/debug/parser_names.hpp>
-
-#endif // BOOST_SPIRIT_DEBUG
-
-#endif // BOOST_SPIRIT_CORE_MAIN_HPP
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_core.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_core.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_core.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/assert.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/assert.hpp (original)
+++ branches/CMake/release/boost/spirit/core/assert.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,39 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ASSERT_HPP)
-#define BOOST_SPIRIT_ASSERT_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ASSERT
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ASSERT
 
-#include <boost/config.hpp>
-#include <boost/throw_exception.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_assert.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_assert.hpp"
+#endif
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// BOOST_SPIRIT_ASSERT is used throughout the framework. It can be
-// overridden by the user. If BOOST_SPIRIT_ASSERT_EXCEPTION is defined,
-// then that will be thrown, otherwise, BOOST_SPIRIT_ASSERT simply turns
-// into a plain assert()
-//
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_SPIRIT_ASSERT)
-#if defined(NDEBUG)
- #define BOOST_SPIRIT_ASSERT(x)
-#elif defined (BOOST_SPIRIT_ASSERT_EXCEPTION)
- #define BOOST_SPIRIT_ASSERT_AUX(f, l, x) BOOST_SPIRIT_ASSERT_AUX2(f, l, x)
- #define BOOST_SPIRIT_ASSERT_AUX2(f, l, x) \
- do{ if (!(x)) boost::throw_exception( \
- BOOST_SPIRIT_ASSERT_EXCEPTION(f "(" #l "): " #x)); } while(0)
- #define BOOST_SPIRIT_ASSERT(x) BOOST_SPIRIT_ASSERT_AUX(__FILE__, __LINE__, x)
-#else
- #include <cassert>
- #define BOOST_SPIRIT_ASSERT(x) assert(x)
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
-#endif // !defined(BOOST_SPIRIT_ASSERT)
+#include <boost/spirit/include/classic_assert.hpp>
 
-#endif // BOOST_SPIRIT_ASSERT_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/actions.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/actions.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/actions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,123 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ACTIONS_HPP
-#define BOOST_SPIRIT_ACTIONS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ACTIONS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ACTIONS
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // action class
- //
- // The action class binds a parser with a user defined semantic
- // action. Instances of action are never created manually. Instead,
- // action objects are typically created indirectly through
- // expression templates of the form:
- //
- // p[f]
- //
- // where p is a parser and f is a function or functor. The semantic
- // action may be a function or a functor. When the parser is
- // successful, the actor calls the scanner's action_policy policy
- // (see scanner.hpp):
- //
- // scan.do_action(actor, attribute, first, last);
- //
- // passing in these information:
- //
- // actor: The action's function or functor
- // attribute: The match (returned by the parser) object's
- // attribute (see match.hpp)
- // first: Iterator pointing to the start of the matching
- // portion of the input
- // last: Iterator pointing to one past the end of the
- // matching portion of the input
- //
- // It is the responsibility of the scanner's action_policy policy to
- // dispatch the function or functor as it sees fit. The expected
- // function or functor signature depends on the parser being
- // wrapped. In general, if the attribute type of the parser being
- // wrapped is a nil_t, the function or functor expect the signature:
- //
- // void func(Iterator first, Iterator last); // functions
- //
- // struct ftor // functors
- // {
- // void func(Iterator first, Iterator last) const;
- // };
- //
- // where Iterator is the type of the iterator that is being used and
- // first and last are the iterators pointing to the matching portion
- // of the input.
- //
- // If the attribute type of the parser being wrapped is not a nil_t,
- // the function or functor usually expect the signature:
- //
- // void func(T val); // functions
- //
- // struct ftor // functors
- // {
- // void func(T val) const;
- // };
- //
- // where T is the attribute type and val is the attribute value
- // returned by the parser being wrapped.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ParserT, typename ActionT>
- class action : public unary<ParserT, parser<action<ParserT, ActionT> > >
- {
- public:
-
- typedef action<ParserT, ActionT> self_t;
- typedef action_parser_category parser_category_t;
- typedef unary<ParserT, parser<self_t> > base_t;
- typedef ActionT predicate_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- action(ParserT const& p, ActionT const& a)
- : base_t(p)
- , actor(a) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename ScannerT::iterator_t iterator_t;
- typedef typename parser_result<self_t, ScannerT>::type result_t;
-
- scan.at_end(); // allow skipper to take effect
- iterator_t save = scan.first;
- result_t hit = this->subject().parse(scan);
- if (hit)
- {
- typename result_t::return_t val = hit.value();
- scan.do_action(actor, val, save, scan.first);
- }
- return hit;
- }
-
- ActionT const& predicate() const { return actor; }
-
- private:
-
- ActionT actor;
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_actions.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_actions.hpp"
+#endif
 
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_actions.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/core/composite/alternative.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/alternative.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/alternative.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,134 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ALTERNATIVE_HPP)
-#define BOOST_SPIRIT_ALTERNATIVE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ALTERNATIVE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ALTERNATIVE
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // alternative class
- //
- // Handles expressions of the form:
- //
- // a | b
- //
- // where a and b are parsers. The expression returns a composite
- // parser that matches a or b. One (not both) of the operands may
- // be a literal char, wchar_t or a primitive string char const*,
- // wchar_t const*.
- //
- // The expression is short circuit evaluated. b is never touched
- // when a is returns a successful match.
- //
- ///////////////////////////////////////////////////////////////////////////
- struct alternative_parser_gen;
-
- template <typename A, typename B>
- struct alternative
- : public binary<A, B, parser<alternative<A, B> > >
- {
- typedef alternative<A, B> self_t;
- typedef binary_parser_category parser_category_t;
- typedef alternative_parser_gen parser_generator_t;
- typedef binary<A, B, parser<self_t> > base_t;
-
- alternative(A const& a, B const& b)
- : base_t(a, b) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename ScannerT::iterator_t iterator_t;
- { // scope for save
- iterator_t save = scan.first;
- if (result_t hit = this->left().parse(scan))
- return hit;
- scan.first = save;
- }
- return this->right().parse(scan);
- }
- };
-
- struct alternative_parser_gen
- {
- template <typename A, typename B>
- struct result
- {
- typedef
- alternative<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- type;
- };
-
- template <typename A, typename B>
- static alternative<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- generate(A const& a, B const& b)
- {
- return alternative<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
- BOOST_DEDUCED_TYPENAME as_parser<B>::type>
- (as_parser<A>::convert(a), as_parser<B>::convert(b));
- }
- };
-
- template <typename A, typename B>
- alternative<A, B>
- operator|(parser<A> const& a, parser<B> const& b);
-
- template <typename A>
- alternative<A, chlit<char> >
- operator|(parser<A> const& a, char b);
-
- template <typename B>
- alternative<chlit<char>, B>
- operator|(char a, parser<B> const& b);
-
- template <typename A>
- alternative<A, strlit<char const*> >
- operator|(parser<A> const& a, char const* b);
-
- template <typename B>
- alternative<strlit<char const*>, B>
- operator|(char const* a, parser<B> const& b);
-
- template <typename A>
- alternative<A, chlit<wchar_t> >
- operator|(parser<A> const& a, wchar_t b);
-
- template <typename B>
- alternative<chlit<wchar_t>, B>
- operator|(wchar_t a, parser<B> const& b);
-
- template <typename A>
- alternative<A, strlit<wchar_t const*> >
- operator|(parser<A> const& a, wchar_t const* b);
-
- template <typename B>
- alternative<strlit<wchar_t const*>, B>
- operator|(wchar_t const* a, parser<B> const& b);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_alternative.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_alternative.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_alternative.hpp>
 
-#include <boost/spirit/core/composite/impl/alternative.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/composite.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/composite.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/composite.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,138 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_COMPOSITE_HPP)
-#define BOOST_SPIRIT_COMPOSITE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_COMPOSITE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_COMPOSITE
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/compressed_pair.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // unary class.
- //
- // Composite class composed of a single subject. This template class
- // is parameterized by the subject type S and a base class to
- // inherit from, BaseT. The unary class is meant to be a base class
- // to inherit from. The inheritance structure, given the BaseT
- // template parameter places the unary class in the middle of a
- // linear, single parent hierarchy. For instance, given a class S
- // and a base class B, a class D can derive from unary:
- //
- // struct D : public unary<S, B> {...};
- //
- // The inheritance structure is thus:
- //
- // B
- // |
- // unary (has S)
- // |
- // D
- //
- // The subject can be accessed from the derived class D as:
- // this->subject();
- //
- // Typically, the subject S is specified as typename S::embed_t.
- // embed_t specifies how the subject is embedded in the composite
- // (See parser.hpp for details).
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename S, typename BaseT>
- class unary : public BaseT
- {
- public:
-
- typedef BaseT base_t;
- typedef typename boost::call_traits<S>::param_type param_t;
- typedef typename boost::call_traits<S>::const_reference return_t;
- typedef S subject_t;
- typedef typename S::embed_t subject_embed_t;
-
- unary(param_t subj_)
- : base_t(), subj(subj_) {}
-
- unary(BaseT const& base, param_t subj_)
- : base_t(base), subj(subj_) {}
-
- return_t
- subject() const
- { return subj; }
-
- private:
-
- subject_embed_t subj;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // binary class.
- //
- // Composite class composed of a pair (left and right). This
- // template class is parameterized by the left and right subject
- // types A and B and a base class to inherit from, BaseT. The binary
- // class is meant to be a base class to inherit from. The
- // inheritance structure, given the BaseT template parameter places
- // the binary class in the middle of a linear, single parent
- // hierarchy. For instance, given classes X and Y and a base class
- // B, a class D can derive from binary:
- //
- // struct D : public binary<X, Y, B> {...};
- //
- // The inheritance structure is thus:
- //
- // B
- // |
- // binary (has X and Y)
- // |
- // D
- //
- // The left and right subjects can be accessed from the derived
- // class D as: this->left(); and this->right();
- //
- // Typically, the pairs X and Y are specified as typename X::embed_t
- // and typename Y::embed_t. embed_t specifies how the subject is
- // embedded in the composite (See parser.hpp for details).
- //
- ///////////////////////////////////////////////////////////////////////////////
- template <typename A, typename B, typename BaseT>
- class binary : public BaseT
- {
- public:
-
- typedef BaseT base_t;
- typedef typename boost::call_traits<A>::param_type left_param_t;
- typedef typename boost::call_traits<A>::const_reference left_return_t;
- typedef typename boost::call_traits<B>::param_type right_param_t;
- typedef typename boost::call_traits<B>::const_reference right_return_t;
- typedef A left_t;
- typedef typename A::embed_t left_embed_t;
- typedef B right_t;
- typedef typename B::embed_t right_embed_t;
-
- binary(left_param_t a, right_param_t b)
- : base_t(), subj(a, b) {}
-
- left_return_t
- left() const
- { return subj.first(); }
-
- right_return_t
- right() const
- { return subj.second(); }
-
- private:
-
- boost::compressed_pair<left_embed_t, right_embed_t> subj;
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_composite.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_composite.hpp"
+#endif
 
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_composite.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/core/composite/difference.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/difference.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/difference.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,137 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_DIFFERENCE_HPP)
-#define BOOST_SPIRIT_DIFFERENCE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_DIFFERENCE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_DIFFERENCE
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // difference: a - b; Matches a but not b
- //
- // Handles expressions of the form:
- //
- // a - b
- //
- // where a and b are parsers. The expression returns a composite
- // parser that matches a but not b. One (not both) of the operands
- // may be a literal char, wchar_t or a primitive string char const*,
- // wchar_t const*.
- //
- ///////////////////////////////////////////////////////////////////////////
- struct difference_parser_gen;
-
- template <typename A, typename B>
- struct difference
- : public binary<A, B, parser<difference<A, B> > >
- {
- typedef difference<A, B> self_t;
- typedef binary_parser_category parser_category_t;
- typedef difference_parser_gen parser_generator_t;
- typedef binary<A, B, parser<self_t> > base_t;
-
- difference(A const& a, B const& b)
- : base_t(a, b) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename ScannerT::iterator_t iterator_t;
- iterator_t save = scan.first;
- if (result_t hl = this->left().parse(scan))
- {
- std::swap(save, scan.first);
- result_t hr = this->right().parse(scan);
- if (!hr || (hr.length() < hl.length()))
- {
- scan.first = save;
- return hl;
- }
- }
-
- return scan.no_match();
- }
- };
-
- struct difference_parser_gen
- {
- template <typename A, typename B>
- struct result
- {
- typedef
- difference<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- type;
- };
-
- template <typename A, typename B>
- static difference<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- generate(A const& a, B const& b)
- {
- return difference<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
- BOOST_DEDUCED_TYPENAME as_parser<B>::type>
- (as_parser<A>::convert(a), as_parser<B>::convert(b));
- }
- };
-
- template <typename A, typename B>
- difference<A, B>
- operator-(parser<A> const& a, parser<B> const& b);
-
- template <typename A>
- difference<A, chlit<char> >
- operator-(parser<A> const& a, char b);
-
- template <typename B>
- difference<chlit<char>, B>
- operator-(char a, parser<B> const& b);
-
- template <typename A>
- difference<A, strlit<char const*> >
- operator-(parser<A> const& a, char const* b);
-
- template <typename B>
- difference<strlit<char const*>, B>
- operator-(char const* a, parser<B> const& b);
-
- template <typename A>
- difference<A, chlit<wchar_t> >
- operator-(parser<A> const& a, wchar_t b);
-
- template <typename B>
- difference<chlit<wchar_t>, B>
- operator-(wchar_t a, parser<B> const& b);
-
- template <typename A>
- difference<A, strlit<wchar_t const*> >
- operator-(parser<A> const& a, wchar_t const* b);
-
- template <typename B>
- difference<strlit<wchar_t const*>, B>
- operator-(wchar_t const* a, parser<B> const& b);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_difference.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_difference.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_difference.hpp>
 
-#include <boost/spirit/core/composite/impl/difference.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/directives.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/directives.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/directives.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,603 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_DIRECTIVES_HPP)
-#define BOOST_SPIRIT_DIRECTIVES_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_DIRECTIVES
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_DIRECTIVES
 
-///////////////////////////////////////////////////////////////////////////////
-#include <algorithm>
-
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/scanner/skipper.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/core/composite/impl/directives.ipp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // contiguous class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct lexeme_parser_gen;
-
- template <typename ParserT>
- struct contiguous
- : public unary<ParserT, parser<contiguous<ParserT> > >
- {
- typedef contiguous<ParserT> self_t;
- typedef unary_parser_category parser_category_t;
- typedef lexeme_parser_gen parser_generator_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- contiguous(ParserT const& p)
- : base_t(p) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- return impl::contiguous_parser_parse<result_t>
- (this->subject(), scan, scan);
- }
- };
-
- struct lexeme_parser_gen
- {
- template <typename ParserT>
- struct result {
-
- typedef contiguous<ParserT> type;
- };
-
- template <typename ParserT>
- static contiguous<ParserT>
- generate(parser<ParserT> const& subject)
- {
- return contiguous<ParserT>(subject.derived());
- }
-
- template <typename ParserT>
- contiguous<ParserT>
- operator[](parser<ParserT> const& subject) const
- {
- return contiguous<ParserT>(subject.derived());
- }
- };
-
- //////////////////////////////////
- const lexeme_parser_gen lexeme_d = lexeme_parser_gen();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // lexeme_scanner
- //
- // Given a Scanner, return the correct scanner type that
- // the lexeme_d uses. Scanner is assumed to be a phrase
- // level scanner (see skipper.hpp)
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ScannerT>
- struct lexeme_scanner
- {
- typedef scanner_policies<
- no_skipper_iteration_policy<
- typename ScannerT::iteration_policy_t>,
- typename ScannerT::match_policy_t,
- typename ScannerT::action_policy_t
- > policies_t;
-
- typedef typename
- rebind_scanner_policies<ScannerT, policies_t>::type type;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // inhibit_case_iteration_policy class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename BaseT>
- struct inhibit_case_iteration_policy : public BaseT
- {
- typedef BaseT base_t;
-
- inhibit_case_iteration_policy()
- : BaseT() {}
-
- template <typename PolicyT>
- inhibit_case_iteration_policy(PolicyT const& other)
- : BaseT(other) {}
-
- template <typename CharT>
- CharT filter(CharT ch) const
- { return impl::tolower_(ch); }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // inhibit_case class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct inhibit_case_parser_gen;
-
- template <typename ParserT>
- struct inhibit_case
- : public unary<ParserT, parser<inhibit_case<ParserT> > >
- {
- typedef inhibit_case<ParserT> self_t;
- typedef unary_parser_category parser_category_t;
- typedef inhibit_case_parser_gen parser_generator_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- inhibit_case(ParserT const& p)
- : base_t(p) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- return impl::inhibit_case_parser_parse<result_t>
- (this->subject(), scan, scan);
- }
- };
-
- template <int N>
- struct inhibit_case_parser_gen_base
- {
- // This hack is needed to make borland happy.
- // If these member operators were defined in the
- // inhibit_case_parser_gen class, or if this class
- // is non-templated, borland ICEs.
-
- static inhibit_case<strlit<char const*> >
- generate(char const* str)
- { return inhibit_case<strlit<char const*> >(str); }
-
- static inhibit_case<strlit<wchar_t const*> >
- generate(wchar_t const* str)
- { return inhibit_case<strlit<wchar_t const*> >(str); }
-
- static inhibit_case<chlit<char> >
- generate(char ch)
- { return inhibit_case<chlit<char> >(ch); }
-
- static inhibit_case<chlit<wchar_t> >
- generate(wchar_t ch)
- { return inhibit_case<chlit<wchar_t> >(ch); }
-
- template <typename ParserT>
- static inhibit_case<ParserT>
- generate(parser<ParserT> const& subject)
- { return inhibit_case<ParserT>(subject.derived()); }
-
- inhibit_case<strlit<char const*> >
- operator[](char const* str) const
- { return inhibit_case<strlit<char const*> >(str); }
-
- inhibit_case<strlit<wchar_t const*> >
- operator[](wchar_t const* str) const
- { return inhibit_case<strlit<wchar_t const*> >(str); }
-
- inhibit_case<chlit<char> >
- operator[](char ch) const
- { return inhibit_case<chlit<char> >(ch); }
-
- inhibit_case<chlit<wchar_t> >
- operator[](wchar_t ch) const
- { return inhibit_case<chlit<wchar_t> >(ch); }
-
- template <typename ParserT>
- inhibit_case<ParserT>
- operator[](parser<ParserT> const& subject) const
- { return inhibit_case<ParserT>(subject.derived()); }
- };
-
- //////////////////////////////////
- struct inhibit_case_parser_gen : public inhibit_case_parser_gen_base<0>
- {
- inhibit_case_parser_gen() {}
- };
-
- //////////////////////////////////
- // Depracated
- const inhibit_case_parser_gen nocase_d = inhibit_case_parser_gen();
-
- // Preferred syntax
- const inhibit_case_parser_gen as_lower_d = inhibit_case_parser_gen();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // as_lower_scanner
- //
- // Given a Scanner, return the correct scanner type that
- // the as_lower_d uses. Scanner is assumed to be a scanner
- // with an inhibit_case_iteration_policy.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ScannerT>
- struct as_lower_scanner
- {
- typedef scanner_policies<
- inhibit_case_iteration_policy<
- typename ScannerT::iteration_policy_t>,
- typename ScannerT::match_policy_t,
- typename ScannerT::action_policy_t
- > policies_t;
-
- typedef typename
- rebind_scanner_policies<ScannerT, policies_t>::type type;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // longest_alternative class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct longest_parser_gen;
-
- template <typename A, typename B>
- struct longest_alternative
- : public binary<A, B, parser<longest_alternative<A, B> > >
- {
- typedef longest_alternative<A, B> self_t;
- typedef binary_parser_category parser_category_t;
- typedef longest_parser_gen parser_generator_t;
- typedef binary<A, B, parser<self_t> > base_t;
-
- longest_alternative(A const& a, B const& b)
- : base_t(a, b) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typename ScannerT::iterator_t save = scan.first;
- result_t l = this->left().parse(scan);
- std::swap(scan.first, save);
- result_t r = this->right().parse(scan);
-
- if (l || r)
- {
- if (l.length() > r.length())
- {
- scan.first = save;
- return l;
- }
- return r;
- }
-
- return scan.no_match();
- }
- };
-
- struct longest_parser_gen
- {
- template <typename A, typename B>
- struct result {
-
- typedef typename
- impl::to_longest_alternative<alternative<A, B> >::result_t
- type;
- };
-
- template <typename A, typename B>
- static typename
- impl::to_longest_alternative<alternative<A, B> >::result_t
- generate(alternative<A, B> const& alt)
- {
- return impl::to_longest_alternative<alternative<A, B> >::
- convert(alt);
- }
-
- //'generate' for binary composite
- template <typename A, typename B>
- static
- longest_alternative<A, B>
- generate(A const &left, B const &right)
- {
- return longest_alternative<A, B>(left, right);
- }
-
- template <typename A, typename B>
- typename impl::to_longest_alternative<alternative<A, B> >::result_t
- operator[](alternative<A, B> const& alt) const
- {
- return impl::to_longest_alternative<alternative<A, B> >::
- convert(alt);
- }
- };
-
- const longest_parser_gen longest_d = longest_parser_gen();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // shortest_alternative class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct shortest_parser_gen;
-
- template <typename A, typename B>
- struct shortest_alternative
- : public binary<A, B, parser<shortest_alternative<A, B> > >
- {
- typedef shortest_alternative<A, B> self_t;
- typedef binary_parser_category parser_category_t;
- typedef shortest_parser_gen parser_generator_t;
- typedef binary<A, B, parser<self_t> > base_t;
-
- shortest_alternative(A const& a, B const& b)
- : base_t(a, b) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typename ScannerT::iterator_t save = scan.first;
- result_t l = this->left().parse(scan);
- std::swap(scan.first, save);
- result_t r = this->right().parse(scan);
-
- if (l || r)
- {
- if (l.length() < r.length() && l || !r)
- {
- scan.first = save;
- return l;
- }
- return r;
- }
-
- return scan.no_match();
- }
- };
-
- struct shortest_parser_gen
- {
- template <typename A, typename B>
- struct result {
-
- typedef typename
- impl::to_shortest_alternative<alternative<A, B> >::result_t
- type;
- };
-
- template <typename A, typename B>
- static typename
- impl::to_shortest_alternative<alternative<A, B> >::result_t
- generate(alternative<A, B> const& alt)
- {
- return impl::to_shortest_alternative<alternative<A, B> >::
- convert(alt);
- }
-
- //'generate' for binary composite
- template <typename A, typename B>
- static
- shortest_alternative<A, B>
- generate(A const &left, B const &right)
- {
- return shortest_alternative<A, B>(left, right);
- }
-
- template <typename A, typename B>
- typename impl::to_shortest_alternative<alternative<A, B> >::result_t
- operator[](alternative<A, B> const& alt) const
- {
- return impl::to_shortest_alternative<alternative<A, B> >::
- convert(alt);
- }
- };
-
- const shortest_parser_gen shortest_d = shortest_parser_gen();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // min_bounded class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename BoundsT>
- struct min_bounded_gen;
-
- template <typename ParserT, typename BoundsT>
- struct min_bounded
- : public unary<ParserT, parser<min_bounded<ParserT, BoundsT> > >
- {
- typedef min_bounded<ParserT, BoundsT> self_t;
- typedef unary_parser_category parser_category_t;
- typedef min_bounded_gen<BoundsT> parser_generator_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- min_bounded(ParserT const& p, BoundsT const& min__)
- : base_t(p)
- , min_(min__) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- result_t hit = this->subject().parse(scan);
- if (hit.has_valid_attribute() && hit.value() < min_)
- return scan.no_match();
- return hit;
- }
-
- BoundsT min_;
- };
-
- template <typename BoundsT>
- struct min_bounded_gen
- {
- min_bounded_gen(BoundsT const& min__)
- : min_(min__) {}
-
- template <typename DerivedT>
- min_bounded<DerivedT, BoundsT>
- operator[](parser<DerivedT> const& p) const
- { return min_bounded<DerivedT, BoundsT>(p.derived(), min_); }
-
- BoundsT min_;
- };
-
- template <typename BoundsT>
- inline min_bounded_gen<BoundsT>
- min_limit_d(BoundsT const& min_)
- { return min_bounded_gen<BoundsT>(min_); }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // max_bounded class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename BoundsT>
- struct max_bounded_gen;
-
- template <typename ParserT, typename BoundsT>
- struct max_bounded
- : public unary<ParserT, parser<max_bounded<ParserT, BoundsT> > >
- {
- typedef max_bounded<ParserT, BoundsT> self_t;
- typedef unary_parser_category parser_category_t;
- typedef max_bounded_gen<BoundsT> parser_generator_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- max_bounded(ParserT const& p, BoundsT const& max__)
- : base_t(p)
- , max_(max__) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- result_t hit = this->subject().parse(scan);
- if (hit.has_valid_attribute() && hit.value() > max_)
- return scan.no_match();
- return hit;
- }
-
- BoundsT max_;
- };
-
- template <typename BoundsT>
- struct max_bounded_gen
- {
- max_bounded_gen(BoundsT const& max__)
- : max_(max__) {}
-
- template <typename DerivedT>
- max_bounded<DerivedT, BoundsT>
- operator[](parser<DerivedT> const& p) const
- { return max_bounded<DerivedT, BoundsT>(p.derived(), max_); }
-
- BoundsT max_;
- };
-
- //////////////////////////////////
- template <typename BoundsT>
- inline max_bounded_gen<BoundsT>
- max_limit_d(BoundsT const& max_)
- { return max_bounded_gen<BoundsT>(max_); }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // bounded class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename BoundsT>
- struct bounded_gen;
-
- template <typename ParserT, typename BoundsT>
- struct bounded
- : public unary<ParserT, parser<bounded<ParserT, BoundsT> > >
- {
- typedef bounded<ParserT, BoundsT> self_t;
- typedef unary_parser_category parser_category_t;
- typedef bounded_gen<BoundsT> parser_generator_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- bounded(ParserT const& p, BoundsT const& min__, BoundsT const& max__)
- : base_t(p)
- , min_(min__)
- , max_(max__) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- result_t hit = this->subject().parse(scan);
- if (hit.has_valid_attribute() &&
- (hit.value() < min_ || hit.value() > max_))
- return scan.no_match();
- return hit;
- }
-
- BoundsT min_, max_;
- };
-
- template <typename BoundsT>
- struct bounded_gen
- {
- bounded_gen(BoundsT const& min__, BoundsT const& max__)
- : min_(min__)
- , max_(max__) {}
-
- template <typename DerivedT>
- bounded<DerivedT, BoundsT>
- operator[](parser<DerivedT> const& p) const
- { return bounded<DerivedT, BoundsT>(p.derived(), min_, max_); }
-
- BoundsT min_, max_;
- };
-
- template <typename BoundsT>
- inline bounded_gen<BoundsT>
- limit_d(BoundsT const& min_, BoundsT const& max_)
- { return bounded_gen<BoundsT>(min_, max_); }
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_directives.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_directives.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_directives.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/epsilon.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/epsilon.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/epsilon.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,272 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2002-2003 Martin Wille
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_EPSILON_HPP
-#define BOOST_SPIRIT_EPSILON_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_EPSILON
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_EPSILON
 
-////////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/meta/parser_traits.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/core/composite/no_actions.hpp>
-
-////////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// condition_parser class
-//
-// handles expresions of the form
-//
-// epsilon_p(cond)
-//
-// where cond is a function or a functor that returns a value suitable
-// to be used in boolean context. The expression returns a parser that
-// returns an empty match when the condition evaluates to true.
-//
-///////////////////////////////////////////////////////////////////////////////
- template <typename CondT, bool positive_ = true>
- struct condition_parser : parser<condition_parser<CondT, positive_> >
- {
- typedef condition_parser<CondT, positive_> self_t;
-
- // not explicit! (needed for implementation of if_p et al.)
- condition_parser(CondT const& cond_) : cond(cond_) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- if (positive_ == bool(cond())) // allow cond to return int
- return scan.empty_match();
- else
- return scan.no_match();
- }
-
- condition_parser<CondT, !positive_>
- negate() const
- { return condition_parser<CondT, !positive_>(cond); }
-
- private:
-
- CondT cond;
- };
-
-#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) || \
- BOOST_WORKAROUND(BOOST_MSVC, == 1400) || \
- BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
-// VC 7.1, VC8 and Sun CC <= 5.8 do not support general
-// expressions of non-type template parameters in instantiations
- template <typename CondT>
- inline condition_parser<CondT, false>
- operator~(condition_parser<CondT, true> const& p)
- { return p.negate(); }
-
- template <typename CondT>
- inline condition_parser<CondT, true>
- operator~(condition_parser<CondT, false> const& p)
- { return p.negate(); }
-#else // BOOST_WORKAROUND(BOOST_MSVC, == 1310) || == 1400
- template <typename CondT, bool positive>
- inline condition_parser<CondT, !positive>
- operator~(condition_parser<CondT, positive> const& p)
- { return p.negate(); }
-#endif // BOOST_WORKAROUND(BOOST_MSVC, == 1310) || == 1400
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// empty_match_parser class
-//
-// handles expressions of the form
-// epsilon_p(subject)
-// where subject is a parser. The expresion returns a composite
-// parser that returns an empty match if the subject parser matches.
-//
-///////////////////////////////////////////////////////////////////////////////
- struct empty_match_parser_gen;
- struct negated_empty_match_parser_gen;
-
- template <typename SubjectT>
- struct negated_empty_match_parser; // Forward declaration
-
- template<typename SubjectT>
- struct empty_match_parser
- : unary<SubjectT, parser<empty_match_parser<SubjectT> > >
- {
- typedef empty_match_parser<SubjectT> self_t;
- typedef unary<SubjectT, parser<self_t> > base_t;
- typedef unary_parser_category parser_category_t;
- typedef empty_match_parser_gen parser_genererator_t;
- typedef self_t embed_t;
-
- explicit empty_match_parser(SubjectT const& p) : base_t(p) {}
-
- template <typename ScannerT>
- struct result
- { typedef typename match_result<ScannerT, nil_t>::type type; };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typename ScannerT::iterator_t save(scan.first);
-
- typedef typename no_actions_scanner<ScannerT>::policies_t
- policies_t;
-
- bool matches = this->subject().parse(
- scan.change_policies(policies_t(scan)));
- if (matches)
- {
- scan.first = save; // reset the position
- return scan.empty_match();
- }
- else
- {
- return scan.no_match();
- }
- }
-
- negated_empty_match_parser<SubjectT>
- negate() const
- { return negated_empty_match_parser<SubjectT>(this->subject()); }
- };
-
- template<typename SubjectT>
- struct negated_empty_match_parser
- : public unary<SubjectT, parser<negated_empty_match_parser<SubjectT> > >
- {
- typedef negated_empty_match_parser<SubjectT> self_t;
- typedef unary<SubjectT, parser<self_t> > base_t;
- typedef unary_parser_category parser_category_t;
- typedef negated_empty_match_parser_gen parser_genererator_t;
-
- explicit negated_empty_match_parser(SubjectT const& p) : base_t(p) {}
-
- template <typename ScannerT>
- struct result
- { typedef typename match_result<ScannerT, nil_t>::type type; };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typename ScannerT::iterator_t save(scan.first);
-
- typedef typename no_actions_scanner<ScannerT>::policies_t
- policies_t;
-
- bool matches = this->subject().parse(
- scan.change_policies(policies_t(scan)));
- if (!matches)
- {
- scan.first = save; // reset the position
- return scan.empty_match();
- }
- else
- {
- return scan.no_match();
- }
- }
-
- empty_match_parser<SubjectT>
- negate() const
- { return empty_match_parser<SubjectT>(this->subject()); }
- };
-
- struct empty_match_parser_gen
- {
- template <typename SubjectT>
- struct result
- { typedef empty_match_parser<SubjectT> type; };
-
- template <typename SubjectT>
- static empty_match_parser<SubjectT>
- generate(parser<SubjectT> const& subject)
- { return empty_match_parser<SubjectT>(subject.derived()); }
- };
-
- struct negated_empty_match_parser_gen
- {
- template <typename SubjectT>
- struct result
- { typedef negated_empty_match_parser<SubjectT> type; };
-
- template <typename SubjectT>
- static negated_empty_match_parser<SubjectT>
- generate(parser<SubjectT> const& subject)
- { return negated_empty_match_parser<SubjectT>(subject.derived()); }
- };
-
- //////////////////////////////
- template <typename SubjectT>
- inline negated_empty_match_parser<SubjectT>
- operator~(empty_match_parser<SubjectT> const& p)
- { return p.negate(); }
-
- template <typename SubjectT>
- inline empty_match_parser<SubjectT>
- operator~(negated_empty_match_parser<SubjectT> const& p)
- { return p.negate(); }
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// epsilon_ parser and parser generator class
-//
-// Operates as primitive parser that always matches an empty sequence.
-//
-// Also operates as a parser generator. According to the type of the
-// argument an instance of empty_match_parser<> (when the argument is
-// a parser) or condition_parser<> (when the argument is not a parser)
-// is returned by operator().
-//
-///////////////////////////////////////////////////////////////////////////////
- namespace impl
- {
- template <typename SubjectT>
- struct epsilon_selector
- {
- typedef typename as_parser<SubjectT>::type subject_t;
- typedef typename
- mpl::if_<
- is_parser<subject_t>
- ,empty_match_parser<subject_t>
- ,condition_parser<subject_t>
- >::type type;
- };
- }
-
- struct epsilon_parser : public parser<epsilon_parser>
- {
- typedef epsilon_parser self_t;
-
- epsilon_parser() {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- { return scan.empty_match(); }
-
- template <typename SubjectT>
- typename impl::epsilon_selector<SubjectT>::type
- operator()(SubjectT const& subject) const
- {
- typedef typename impl::epsilon_selector<SubjectT>::type result_t;
- return result_t(subject);
- }
- };
-
- epsilon_parser const epsilon_p = epsilon_parser();
- epsilon_parser const eps_p = epsilon_parser();
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_epsilon.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_epsilon.hpp"
+#endif
 
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_epsilon.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/core/composite/exclusive_or.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/exclusive_or.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/exclusive_or.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,138 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_EXCLUSIVE_OR_HPP)
-#define BOOST_SPIRIT_EXCLUSIVE_OR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_EXCLUSIVE_OR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_EXCLUSIVE_OR
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // exclusive_or class
- //
- // Handles expressions of the form:
- //
- // a ^ b
- //
- // where a and b are parsers. The expression returns a composite
- // parser that matches a or b but not both. One (not both) of the
- // operands may be a literal char, wchar_t or a primitive string
- // char const*, wchar_t const*.
- //
- ///////////////////////////////////////////////////////////////////////////
- struct exclusive_or_parser_gen;
-
- template <typename A, typename B>
- struct exclusive_or
- : public binary<A, B, parser<exclusive_or<A, B> > >
- {
- typedef exclusive_or<A, B> self_t;
- typedef binary_parser_category parser_category_t;
- typedef exclusive_or_parser_gen parser_generator_t;
- typedef binary<A, B, parser<self_t> > base_t;
-
- exclusive_or(A const& a, B const& b)
- : base_t(a, b) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename ScannerT::iterator_t iterator_t;
-
- iterator_t save = scan.first;
- result_t l = this->left().parse(scan);
- std::swap(save, scan.first);
- result_t r = this->right().parse(scan);
-
- if (l ? !bool(r) : bool(r))
- {
- if (l)
- scan.first = save;
- return l ? l : r;
- }
-
- return scan.no_match();
- }
- };
-
- struct exclusive_or_parser_gen
- {
- template <typename A, typename B>
- struct result
- {
- typedef
- exclusive_or<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- type;
- };
-
- template <typename A, typename B>
- static exclusive_or<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- generate(A const& a, B const& b)
- {
- return exclusive_or<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
- BOOST_DEDUCED_TYPENAME as_parser<B>::type>
- (as_parser<A>::convert(a), as_parser<B>::convert(b));
- }
- };
-
- template <typename A, typename B>
- exclusive_or<A, B>
- operator^(parser<A> const& a, parser<B> const& b);
-
- template <typename A>
- exclusive_or<A, chlit<char> >
- operator^(parser<A> const& a, char b);
-
- template <typename B>
- exclusive_or<chlit<char>, B>
- operator^(char a, parser<B> const& b);
-
- template <typename A>
- exclusive_or<A, strlit<char const*> >
- operator^(parser<A> const& a, char const* b);
-
- template <typename B>
- exclusive_or<strlit<char const*>, B>
- operator^(char const* a, parser<B> const& b);
-
- template <typename A>
- exclusive_or<A, chlit<wchar_t> >
- operator^(parser<A> const& a, wchar_t b);
-
- template <typename B>
- exclusive_or<chlit<wchar_t>, B>
- operator^(wchar_t a, parser<B> const& b);
-
- template <typename A>
- exclusive_or<A, strlit<wchar_t const*> >
- operator^(parser<A> const& a, wchar_t const* b);
-
- template <typename B>
- exclusive_or<strlit<wchar_t const*>, B>
- operator^(wchar_t const* a, parser<B> const& b);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_exclusive_or.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_exclusive_or.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_exclusive_or.hpp>
 
-#include <boost/spirit/core/composite/impl/exclusive_or.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/intersection.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/intersection.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/intersection.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,138 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_INTERSECTION_HPP)
-#define BOOST_SPIRIT_INTERSECTION_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_INTERSECTION
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_INTERSECTION
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // intersection class
- //
- // Handles expressions of the form:
- //
- // a & b
- //
- // where a and b are parsers. The expression returns a composite
- // parser that matches a and b. One (not both) of the operands may
- // be a literal char, wchar_t or a primitive string char const*,
- // wchar_t const*.
- //
- // The expression is short circuit evaluated. b is never touched
- // when a is returns a no-match.
- //
- ///////////////////////////////////////////////////////////////////////////
- struct intersection_parser_gen;
-
- template <typename A, typename B>
- struct intersection
- : public binary<A, B, parser<intersection<A, B> > >
- {
- typedef intersection<A, B> self_t;
- typedef binary_parser_category parser_category_t;
- typedef intersection_parser_gen parser_generator_t;
- typedef binary<A, B, parser<self_t> > base_t;
-
- intersection(A const& a, B const& b)
- : base_t(a, b) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename ScannerT::iterator_t iterator_t;
- iterator_t save = scan.first;
- if (result_t hl = this->left().parse(scan))
- {
- ScannerT bscan(scan.first, scan.first, scan);
- scan.first = save;
- result_t hr = this->right().parse(bscan);
- if (hl.length() == hr.length())
- return hl;
- }
-
- return scan.no_match();
- }
- };
-
- struct intersection_parser_gen
- {
- template <typename A, typename B>
- struct result
- {
- typedef
- intersection<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- type;
- };
-
- template <typename A, typename B>
- static intersection<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- generate(A const& a, B const& b)
- {
- return intersection<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
- BOOST_DEDUCED_TYPENAME as_parser<B>::type>
- (as_parser<A>::convert(a), as_parser<B>::convert(b));
- }
- };
-
- template <typename A, typename B>
- intersection<A, B>
- operator&(parser<A> const& a, parser<B> const& b);
-
- template <typename A>
- intersection<A, chlit<char> >
- operator&(parser<A> const& a, char b);
-
- template <typename B>
- intersection<chlit<char>, B>
- operator&(char a, parser<B> const& b);
-
- template <typename A>
- intersection<A, strlit<char const*> >
- operator&(parser<A> const& a, char const* b);
-
- template <typename B>
- intersection<strlit<char const*>, B>
- operator&(char const* a, parser<B> const& b);
-
- template <typename A>
- intersection<A, chlit<wchar_t> >
- operator&(parser<A> const& a, wchar_t b);
-
- template <typename B>
- intersection<chlit<wchar_t>, B>
- operator&(wchar_t a, parser<B> const& b);
-
- template <typename A>
- intersection<A, strlit<wchar_t const*> >
- operator&(parser<A> const& a, wchar_t const* b);
-
- template <typename B>
- intersection<strlit<wchar_t const*>, B>
- operator&(wchar_t const* a, parser<B> const& b);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_intersection.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_intersection.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_intersection.hpp>
 
-#include <boost/spirit/core/composite/impl/intersection.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/kleene_star.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/kleene_star.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/kleene_star.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,96 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_KLEENE_STAR_HPP)
-#define BOOST_SPIRIT_KLEENE_STAR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_KLEENE_STAR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_KLEENE_STAR
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // kleene_star class
- //
- // Handles expressions of the form:
- //
- // *a
- //
- // where a is a parser. The expression returns a composite
- // parser that matches its subject zero (0) or more times.
- //
- ///////////////////////////////////////////////////////////////////////////
- struct kleene_star_parser_gen;
-
- template <typename S>
- struct kleene_star
- : public unary<S, parser<kleene_star<S> > >
- {
- typedef kleene_star<S> self_t;
- typedef unary_parser_category parser_category_t;
- typedef kleene_star_parser_gen parser_generator_t;
- typedef unary<S, parser<self_t> > base_t;
-
- kleene_star(S const& a)
- : base_t(a) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename ScannerT::iterator_t iterator_t;
- result_t hit = scan.empty_match();
-
- for (;;)
- {
- iterator_t save = scan.first;
- if (result_t next = this->subject().parse(scan))
- {
- scan.concat_match(hit, next);
- }
- else
- {
- scan.first = save;
- return hit;
- }
- }
- }
- };
-
- struct kleene_star_parser_gen
- {
- template <typename S>
- struct result
- {
- typedef kleene_star<S> type;
- };
-
- template <typename S>
- static kleene_star<S>
- generate(parser<S> const& a)
- {
- return kleene_star<S>(a.derived());
- }
- };
-
- //////////////////////////////////
- template <typename S>
- kleene_star<S>
- operator*(parser<S> const& a);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_kleene_star.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_kleene_star.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_kleene_star.hpp>
 
-#include <boost/spirit/core/composite/impl/kleene_star.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/list.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/list.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/list.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,69 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_LIST_HPP)
-#define BOOST_SPIRIT_LIST_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_LIST
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_LIST
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // operator% is defined as:
- // a % b ---> a >> *(b >> a)
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename A, typename B>
- sequence<A, kleene_star<sequence<B, A> > >
- operator%(parser<A> const& a, parser<B> const& b);
-
- template <typename A>
- sequence<A, kleene_star<sequence<chlit<char>, A> > >
- operator%(parser<A> const& a, char b);
-
- template <typename B>
- sequence<chlit<char>, kleene_star<sequence<B, chlit<char> > > >
- operator%(char a, parser<B> const& b);
-
- template <typename A>
- sequence<A, kleene_star<sequence<strlit<char const*>, A> > >
- operator%(parser<A> const& a, char const* b);
-
- template <typename B>
- sequence<strlit<char const*>,
- kleene_star<sequence<B, strlit<char const*> > > >
- operator%(char const* a, parser<B> const& b);
-
- template <typename A>
- sequence<A, kleene_star<sequence<chlit<wchar_t>, A> > >
- operator%(parser<A> const& a, wchar_t b);
-
- template <typename B>
- sequence<chlit<wchar_t>, kleene_star<sequence<B, chlit<wchar_t> > > >
- operator%(wchar_t a, parser<B> const& b);
-
- template <typename A>
- sequence<A, kleene_star<sequence<strlit<wchar_t const*>, A> > >
- operator%(parser<A> const& a, wchar_t const* b);
-
- template <typename B>
- sequence<strlit<wchar_t const*>,
- kleene_star<sequence<B, strlit<wchar_t const*> > > >
- operator%(wchar_t const* a, parser<B> const& b);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_list.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_list.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_list.hpp>
 
-#include <boost/spirit/core/composite/impl/list.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/no_actions.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/no_actions.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/no_actions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,163 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2003 Vaclav Vesely
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_NO_ACTIONS_HPP)
-#define BOOST_SPIRIT_NO_ACTIONS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_NO_ACTIONS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_NO_ACTIONS
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/core/non_terminal/rule.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_no_actions.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_no_actions.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_no_actions.hpp>
 
-namespace boost {
-namespace spirit {
-//-----------------------------------------------------------------------------
-// no_actions_action_policy
-
-template<typename BaseT = action_policy>
-struct no_actions_action_policy:
- public BaseT
-{
- typedef BaseT base_t;
-
- no_actions_action_policy():
- BaseT()
- {}
-
- template<typename PolicyT>
- no_actions_action_policy(PolicyT const& other):
- BaseT(other)
- {}
-
- template<typename ActorT, typename AttrT, typename IteratorT>
- void
- do_action(
- ActorT const& actor,
- AttrT& val,
- IteratorT const& first,
- IteratorT const& last) const
- {}
-};
-
-//-----------------------------------------------------------------------------
-// no_actions_scanner
-
-
-namespace detail
-{
- template <typename ActionPolicy>
- struct compute_no_actions_action_policy
- {
- typedef no_actions_action_policy<ActionPolicy> type;
- };
-
- template <typename ActionPolicy>
- struct compute_no_actions_action_policy<no_actions_action_policy<ActionPolicy> >
- {
- typedef no_actions_action_policy<ActionPolicy> type;
- };
-}
-
-template<typename ScannerT = scanner<> >
-struct no_actions_scanner
-{
- typedef scanner_policies<
- typename ScannerT::iteration_policy_t,
- typename ScannerT::match_policy_t,
- typename detail::compute_no_actions_action_policy<typename ScannerT::action_policy_t>::type
- > policies_t;
-
- typedef typename
- rebind_scanner_policies<ScannerT, policies_t>::type type;
-};
-
-#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
-
-template<typename ScannerT = scanner<> >
-struct no_actions_scanner_list
-{
- typedef
- scanner_list<
- ScannerT,
- typename no_actions_scanner<ScannerT>::type
- >
- type;
-};
-
-#endif // BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
-
-//-----------------------------------------------------------------------------
-// no_actions_parser
-
-struct no_actions_parser_gen;
-
-template<typename ParserT>
-struct no_actions_parser:
- public unary<ParserT, parser<no_actions_parser<ParserT> > >
-{
- typedef no_actions_parser<ParserT> self_t;
- typedef unary_parser_category parser_category_t;
- typedef no_actions_parser_gen parser_generator_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- template<typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- no_actions_parser(ParserT const& p)
- : base_t(p)
- {}
-
- template<typename ScannerT>
- typename result<ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename no_actions_scanner<ScannerT>::policies_t policies_t;
-
- return this->subject().parse(scan.change_policies(policies_t(scan)));
- }
-};
-
-//-----------------------------------------------------------------------------
-// no_actions_parser_gen
-
-struct no_actions_parser_gen
-{
- template<typename ParserT>
- struct result
- {
- typedef no_actions_parser<ParserT> type;
- };
-
- template<typename ParserT>
- static no_actions_parser<ParserT>
- generate(parser<ParserT> const& subject)
- {
- return no_actions_parser<ParserT>(subject.derived());
- }
-
- template<typename ParserT>
- no_actions_parser<ParserT>
- operator[](parser<ParserT> const& subject) const
- {
- return no_actions_parser<ParserT>(subject.derived());
- }
-};
-
-//-----------------------------------------------------------------------------
-// no_actions_d
-
-const no_actions_parser_gen no_actions_d = no_actions_parser_gen();
-
-//-----------------------------------------------------------------------------
-} // namespace spirit
-} // namespace boost
-
-#endif // !defined(BOOST_SPIRIT_NO_ACTIONS_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/operators.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/operators.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/operators.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,26 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_OPERATORS_HPP)
-#define BOOST_SPIRIT_OPERATORS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_OPERATORS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_OPERATORS
 
-#include <boost/spirit/core/composite/sequence.hpp>
-#include <boost/spirit/core/composite/sequential_and.hpp>
-#include <boost/spirit/core/composite/sequential_or.hpp>
-#include <boost/spirit/core/composite/alternative.hpp>
-#include <boost/spirit/core/composite/difference.hpp>
-#include <boost/spirit/core/composite/intersection.hpp>
-#include <boost/spirit/core/composite/exclusive_or.hpp>
-#include <boost/spirit/core/composite/kleene_star.hpp>
-#include <boost/spirit/core/composite/positive.hpp>
-#include <boost/spirit/core/composite/optional.hpp>
-#include <boost/spirit/core/composite/list.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_operators.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_operators.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_operators.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/core/composite/optional.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/optional.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/optional.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,90 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_OPTIONAL_HPP)
-#define BOOST_SPIRIT_OPTIONAL_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_OPTIONAL
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_OPTIONAL
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // optional class
- //
- // Handles expressions of the form:
- //
- // !a
- //
- // where a is a parser. The expression returns a composite
- // parser that matches its subject zero (0) or one (1) time.
- //
- ///////////////////////////////////////////////////////////////////////////
- struct optional_parser_gen;
-
- template <typename S>
- struct optional
- : public unary<S, parser<optional<S> > >
- {
- typedef optional<S> self_t;
- typedef unary_parser_category parser_category_t;
- typedef optional_parser_gen parser_generator_t;
- typedef unary<S, parser<self_t> > base_t;
-
- optional(S const& a)
- : base_t(a) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename ScannerT::iterator_t iterator_t;
- iterator_t save = scan.first;
- if (result_t r = this->subject().parse(scan))
- {
- return r;
- }
- else
- {
- scan.first = save;
- return scan.empty_match();
- }
- }
- };
-
- struct optional_parser_gen
- {
- template <typename S>
- struct result
- {
- typedef optional<S> type;
- };
-
- template <typename S>
- static optional<S>
- generate(parser<S> const& a)
- {
- return optional<S>(a.derived());
- }
- };
-
- template <typename S>
- optional<S>
- operator!(parser<S> const& a);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_optional.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_optional.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_optional.hpp>
 
-#include <boost/spirit/core/composite/impl/optional.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/positive.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/positive.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/positive.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,99 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_POSITIVE_HPP)
-#define BOOST_SPIRIT_POSITIVE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_POSITIVE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_POSITIVE
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // positive class
- //
- // Handles expressions of the form:
- //
- // +a
- //
- // where a is a parser. The expression returns a composite
- // parser that matches its subject one (1) or more times.
- //
- ///////////////////////////////////////////////////////////////////////////
- struct positive_parser_gen;
-
- template <typename S>
- struct positive
- : public unary<S, parser<positive<S> > >
- {
- typedef positive<S> self_t;
- typedef unary_parser_category parser_category_t;
- typedef positive_parser_gen parser_generator_t;
- typedef unary<S, parser<self_t> > base_t;
-
- positive(S const& a)
- : base_t(a) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename ScannerT::iterator_t iterator_t;
- result_t hit = this->subject().parse(scan);
-
- if (hit)
- {
- for (;;)
- {
- iterator_t save = scan.first;
- if (result_t next = this->subject().parse(scan))
- {
- scan.concat_match(hit, next);
- }
- else
- {
- scan.first = save;
- break;
- }
- }
- }
- return hit;
- }
- };
-
- struct positive_parser_gen
- {
- template <typename S>
- struct result
- {
- typedef positive<S> type;
- };
-
- template <typename S>
- static positive<S>
- generate(parser<S> const& a)
- {
- return positive<S>(a.derived());
- }
- };
-
- template <typename S>
- inline positive<S>
- operator+(parser<S> const& a);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_positive.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_positive.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_positive.hpp>
 
-#include <boost/spirit/core/composite/impl/positive.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/sequence.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/sequence.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/sequence.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,129 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SEQUENCE_HPP)
-#define BOOST_SPIRIT_SEQUENCE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SEQUENCE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SEQUENCE
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // sequence class
- //
- // Handles expressions of the form:
- //
- // a >> b
- //
- // where a and b are parsers. The expression returns a composite
- // parser that matches a and b in sequence. One (not both) of the
- // operands may be a literal char, wchar_t or a primitive string
- // char const*, wchar_t const*.
- //
- //////////////////////////////////////////////////////////////////////////
- struct sequence_parser_gen;
-
- template <typename A, typename B>
- struct sequence : public binary<A, B, parser<sequence<A, B> > >
- {
- typedef sequence<A, B> self_t;
- typedef binary_parser_category parser_category_t;
- typedef sequence_parser_gen parser_generator_t;
- typedef binary<A, B, parser<self_t> > base_t;
-
- sequence(A const& a, B const& b)
- : base_t(a, b) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- if (result_t ma = this->left().parse(scan))
- if (result_t mb = this->right().parse(scan))
- {
- scan.concat_match(ma, mb);
- return ma;
- }
- return scan.no_match();
- }
- };
-
- struct sequence_parser_gen
- {
- template <typename A, typename B>
- struct result
- {
- typedef
- sequence<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- type;
- };
-
- template <typename A, typename B>
- static sequence<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- generate(A const& a, B const& b)
- {
- return sequence<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
- BOOST_DEDUCED_TYPENAME as_parser<B>::type>
- (as_parser<A>::convert(a), as_parser<B>::convert(b));
- }
- };
-
- template <typename A, typename B>
- sequence<A, B>
- operator>>(parser<A> const& a, parser<B> const& b);
-
- template <typename A>
- sequence<A, chlit<char> >
- operator>>(parser<A> const& a, char b);
-
- template <typename B>
- sequence<chlit<char>, B>
- operator>>(char a, parser<B> const& b);
-
- template <typename A>
- sequence<A, strlit<char const*> >
- operator>>(parser<A> const& a, char const* b);
-
- template <typename B>
- sequence<strlit<char const*>, B>
- operator>>(char const* a, parser<B> const& b);
-
- template <typename A>
- sequence<A, chlit<wchar_t> >
- operator>>(parser<A> const& a, wchar_t b);
-
- template <typename B>
- sequence<chlit<wchar_t>, B>
- operator>>(wchar_t a, parser<B> const& b);
-
- template <typename A>
- sequence<A, strlit<wchar_t const*> >
- operator>>(parser<A> const& a, wchar_t const* b);
-
- template <typename B>
- sequence<strlit<wchar_t const*>, B>
- operator>>(wchar_t const* a, parser<B> const& b);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_sequence.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_sequence.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_sequence.hpp>
 
-#include <boost/spirit/core/composite/impl/sequence.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/sequential_and.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/sequential_and.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/sequential_and.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,72 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SEQUENTIAL_AND_HPP)
-#define BOOST_SPIRIT_SEQUENTIAL_AND_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SEQUENTIAL_AND
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SEQUENTIAL_AND
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // sequential-and operators
- //
- // Handles expressions of the form:
- //
- // a && b
- //
- // Same as a >> b.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename A, typename B>
- sequence<A, B>
- operator&&(parser<A> const& a, parser<B> const& b);
-
- template <typename A>
- sequence<A, chlit<char> >
- operator&&(parser<A> const& a, char b);
-
- template <typename B>
- sequence<chlit<char>, B>
- operator&&(char a, parser<B> const& b);
-
- template <typename A>
- sequence<A, strlit<char const*> >
- operator&&(parser<A> const& a, char const* b);
-
- template <typename B>
- sequence<strlit<char const*>, B>
- operator&&(char const* a, parser<B> const& b);
-
- template <typename A>
- sequence<A, chlit<wchar_t> >
- operator&&(parser<A> const& a, wchar_t b);
-
- template <typename B>
- sequence<chlit<wchar_t>, B>
- operator&&(wchar_t a, parser<B> const& b);
-
- template <typename A>
- sequence<A, strlit<wchar_t const*> >
- operator&&(parser<A> const& a, wchar_t const* b);
-
- template <typename B>
- sequence<strlit<wchar_t const*>, B>
- operator&&(wchar_t const* a, parser<B> const& b);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_sequential_and.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_sequential_and.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_sequential_and.hpp>
 
-#include <boost/spirit/core/composite/impl/sequential_and.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/composite/sequential_or.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/composite/sequential_or.hpp (original)
+++ branches/CMake/release/boost/spirit/core/composite/sequential_or.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,150 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- Copyright (c) 2002 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SEQUENTIAL_OR_HPP)
-#define BOOST_SPIRIT_SEQUENTIAL_OR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SEQUENTIAL_OR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SEQUENTIAL_OR
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // sequential-or class
- //
- // Handles expressions of the form:
- //
- // a || b
- //
- // Equivalent to
- //
- // a | b | a >> b;
- //
- // where a and b are parsers. The expression returns a composite
- // parser that matches matches a or b in sequence. One (not both) of
- // the operands may be a literal char, wchar_t or a primitive string
- // char const*, wchar_t const*.
- //
- ///////////////////////////////////////////////////////////////////////////
- struct sequential_or_parser_gen;
-
- template <typename A, typename B>
- struct sequential_or : public binary<A, B, parser<sequential_or<A, B> > >
- {
- typedef sequential_or<A, B> self_t;
- typedef binary_parser_category parser_category_t;
- typedef sequential_or_parser_gen parser_generator_t;
- typedef binary<A, B, parser<self_t> > base_t;
-
- sequential_or(A const& a, B const& b)
- : base_t(a, b) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename ScannerT::iterator_t iterator_t;
- { // scope for save
- iterator_t save = scan.first;
- if (result_t ma = this->left().parse(scan))
- {
- save = scan.first;
- if (result_t mb = this->right().parse(scan))
- {
- // matched a b
- scan.concat_match(ma, mb);
- return ma;
- }
- else
- {
- // matched a
- scan.first = save;
- return ma;
- }
- }
- scan.first = save;
- }
-
- // matched b
- return this->right().parse(scan);
- }
- };
-
- struct sequential_or_parser_gen
- {
- template <typename A, typename B>
- struct result
- {
- typedef
- sequential_or<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- type;
- };
-
- template <typename A, typename B>
- static sequential_or<
- typename as_parser<A>::type
- , typename as_parser<B>::type
- >
- generate(A const& a, B const& b)
- {
- return sequential_or<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
- BOOST_DEDUCED_TYPENAME as_parser<B>::type>
- (as_parser<A>::convert(a), as_parser<B>::convert(b));
- }
- };
-
- template <typename A, typename B>
- sequential_or<A, B>
- operator||(parser<A> const& a, parser<B> const& b);
-
- template <typename A>
- sequential_or<A, chlit<char> >
- operator||(parser<A> const& a, char b);
-
- template <typename B>
- sequential_or<chlit<char>, B>
- operator||(char a, parser<B> const& b);
-
- template <typename A>
- sequential_or<A, strlit<char const*> >
- operator||(parser<A> const& a, char const* b);
-
- template <typename B>
- sequential_or<strlit<char const*>, B>
- operator||(char const* a, parser<B> const& b);
-
- template <typename A>
- sequential_or<A, chlit<wchar_t> >
- operator||(parser<A> const& a, wchar_t b);
-
- template <typename B>
- sequential_or<chlit<wchar_t>, B>
- operator||(wchar_t a, parser<B> const& b);
-
- template <typename A>
- sequential_or<A, strlit<wchar_t const*> >
- operator||(parser<A> const& a, wchar_t const* b);
-
- template <typename B>
- sequential_or<strlit<wchar_t const*>, B>
- operator||(wchar_t const* a, parser<B> const& b);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_sequential_or.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_sequential_or.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_sequential_or.hpp>
 
-#include <boost/spirit/core/composite/impl/sequential_or.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/config.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/config.hpp (original)
+++ branches/CMake/release/boost/spirit/core/config.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,63 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_CONFIG_HPP)
-#define BOOST_SPIRIT_CONFIG_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CONFIG
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CONFIG
 
-#include <boost/config.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Compiler check:
-//
-// Historically, Spirit supported a lot of compilers, including (to some
-// extent) poorly conforming compilers such as VC6. Spirit v1.6.x will be
-// the last release that will support older poorly conforming compilers.
-// Starting from Spirit v1.8.0, ill conforming compilers will not be
-// supported. If you are still using one of these older compilers, you can
-// still use Spirit v1.6.x.
-//
-// The reason why Spirit v1.6.x worked on old non-conforming compilers is
-// that the authors laboriously took the trouble of searching for
-// workarounds to make these compilers happy. The process takes a lot of
-// time and energy, especially when one encounters the dreaded ICE or
-// "Internal Compiler Error". Sometimes searching for a single workaround
-// takes days or even weeks. Sometimes, there are no known workarounds. This
-// stifles progress a lot. And, as the library gets more progressive and
-// takes on more advanced C++ techniques, the difficulty is escalated to
-// even new heights.
-//
-// Spirit v1.6.x will still be supported. Maintenance and bug fixes will
-// still be applied. There will still be active development for the back-
-// porting of new features introduced in Spirit v1.8.0 (and Spirit 1.9.0)
-// to lesser able compilers; hopefully, fueled by contributions from the
-// community. For instance, there is already a working AST tree back-port
-// for VC6 and VC7 by Peder Holt.
-//
-// If you got here somehow, your compiler is known to be poorly conforming
-// WRT ANSI/ISO C++ standard. Library implementers get a bad reputation when
-// someone attempts to compile the code on a non-conforming compiler. She'll
-// be confronted with tons of compiler errors when she tries to compile the
-// library. Such errors will somehow make less informed users conclude that
-// the code is poorly written. It's better for the user to see a message
-// "sorry, this code has not been ported to your compiler yet", than to see
-// pages and pages of compiler error messages.
-//
-/////////////////////////////////////////////////////////////////////////////////
-#if (defined(BOOST_MSVC) && (BOOST_MSVC < 1310)) \
- || (defined(__BORLANDC__) && (__BORLANDC__ <= 0x570)) \
- || (defined(__GNUC__) && (__GNUC__ < 3)) \
- || (defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
-# error "Compiler not supported. See note in <boost/spirit/core/config.hpp>"
-#else
-// Pass... Compiler supported.
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_config.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_config.hpp"
 #endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_config.hpp>
 
-
+#endif

Modified: branches/CMake/release/boost/spirit/core/match.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/match.hpp (original)
+++ branches/CMake/release/boost/spirit/core/match.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,181 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_MATCH_HPP)
-#define BOOST_SPIRIT_MATCH_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_MATCH
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_MATCH
 
-#include <boost/spirit/core/config.hpp>
-#include <boost/spirit/core/nil.hpp>
-#include <boost/call_traits.hpp>
-#include <boost/optional.hpp>
-#include <boost/spirit/core/assert.hpp>
-#include <boost/spirit/core/safe_bool.hpp>
-#include <boost/spirit/core/impl/match_attr_traits.ipp>
-#include <boost/type_traits/add_const.hpp>
-#include <boost/type_traits/is_reference.hpp>
-
-namespace boost { namespace spirit
-{
- ///////////////////////////////////////////////////////////////////////////
- //
- // match class
- //
- // The match holds the result of a parser. A match object evaluates
- // to true when a successful match is found, otherwise false. The
- // length of the match is the number of characters (or tokens) that
- // is successfully matched. This can be queried through its length()
- // member function. A negative value means that the match is
- // unsucessful.
- //
- // Each parser may have an associated attribute. This attribute is
- // also returned back to the client on a successful parse through
- // the match object. The match's value() member function returns the
- // match's attribute.
- //
- // A match attribute is valid:
- //
- // * on a successful match
- // * when its value is set through the value(val) member function
- // * if it is assigned or copied from a compatible match object
- // (e.g. match<double> from match<int>) with a valid attribute.
- //
- // The match attribute is undefined:
- //
- // * on an unsuccessful match
- // * when an attempt to copy or assign from another match object
- // with an incompatible attribute type (e.g. match<std::string>
- // from match<int>).
- //
- // The member function has_valid_attribute() can be queried to know if
- // it is safe to get the match's attribute. The attribute may be set
- // through the member function value(v) where v is the new attribute
- // value.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename T = nil_t>
- class match : public safe_bool<match<T> >
- {
-
- public:
-
- typedef typename boost::optional<T> optional_type;
- typedef typename optional_type::argument_type ctor_param_t;
- typedef typename optional_type::reference_const_type return_t;
- typedef T attr_t;
-
- match();
- explicit match(std::size_t length);
- match(std::size_t length, ctor_param_t val);
-
- bool operator!() const;
- std::ptrdiff_t length() const;
- bool has_valid_attribute() const;
- return_t value() const;
- void swap(match& other);
-
- template <typename T2>
- match(match<T2> const& other)
- : len(other.length()), val()
- {
- impl::match_attr_traits<T>::copy(val, other);
- }
-
- template <typename T2>
- match&
- operator=(match<T2> const& other)
- {
- impl::match_attr_traits<T>::assign(val, other);
- len = other.length();
- return *this;
- }
-
- template <typename MatchT>
- void
- concat(MatchT const& other)
- {
- BOOST_SPIRIT_ASSERT(*this && other);
- len += other.length();
- }
-
- template <typename ValueT>
- void
- value(ValueT const& val_)
- {
- impl::match_attr_traits<T>::set_value(val, val_, is_reference<T>());
- }
-
- bool operator_bool() const
- {
- return len >= 0;
- }
-
- private:
-
- std::ptrdiff_t len;
- optional_type val;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // match class specialization for nil_t values
- //
- ///////////////////////////////////////////////////////////////////////////
- template <>
- class match<nil_t> : public safe_bool<match<nil_t> >
- {
- public:
-
- typedef nil_t attr_t;
- typedef nil_t return_t;
-
- match();
- explicit match(std::size_t length);
- match(std::size_t length, nil_t);
-
- bool operator!() const;
- bool has_valid_attribute() const;
- std::ptrdiff_t length() const;
- nil_t value() const;
- void value(nil_t);
- void swap(match& other);
-
- template <typename T>
- match(match<T> const& other)
- : len(other.length()) {}
-
- template <typename T>
- match<>&
- operator=(match<T> const& other)
- {
- len = other.length();
- return *this;
- }
-
- template <typename T>
- void
- concat(match<T> const& other)
- {
- BOOST_SPIRIT_ASSERT(*this && other);
- len += other.length();
- }
-
- bool operator_bool() const
- {
- return len >= 0;
- }
-
- private:
-
- std::ptrdiff_t len;
- };
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_match.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_match.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
-#include <boost/spirit/core/impl/match.ipp>
+#include <boost/spirit/include/classic_match.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/nil.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/nil.hpp (original)
+++ branches/CMake/release/boost/spirit/core/nil.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,19 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_NIL_HPP)
-#define BOOST_SPIRIT_NIL_HPP
-
-namespace boost { namespace spirit
-{
- struct nil_t {};
-}}
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_NIL
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_NIL
 
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_nil.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_nil.hpp"
 #endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_nil.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/non_terminal/grammar.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/non_terminal/grammar.hpp (original)
+++ branches/CMake/release/boost/spirit/core/non_terminal/grammar.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,81 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2002-2003 Martin Wille
- Copyright (c) 2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_GRAMMAR_HPP)
-#define BOOST_SPIRIT_GRAMMAR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_GRAMMAR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_GRAMMAR
 
-///////////////////////////////////////////////////////////////////////////////
-#if defined(BOOST_SPIRIT_THREADSAFE) && defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
-#undef BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_grammar.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_grammar.hpp"
 #endif
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/non_terminal/parser_context.hpp>
-#include <boost/spirit/core/non_terminal/impl/grammar.ipp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// grammar class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename DerivedT, typename ContextT = parser_context<> >
-struct grammar
- : public parser<DerivedT>
- , public ContextT::base_t
- , public context_aux<ContextT, DerivedT>
- BOOST_SPIRIT_GRAMMAR_ID
-{
- typedef grammar<DerivedT, ContextT> self_t;
- typedef DerivedT const& embed_t;
- typedef typename ContextT::context_linker_t context_t;
- typedef typename context_t::attr_t attr_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, attr_t>::type type;
- };
-
- grammar() {}
- ~grammar() { impl::grammar_destruct(this); }
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse_main(ScannerT const& scan) const
- { return impl::grammar_parser_parse<0>(this, scan); }
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef parser_scanner_linker<ScannerT> scanner_t;
- BOOST_SPIRIT_CONTEXT_PARSE(scan, *this, scanner_t, context_t, result_t)
- }
-
- template <int N>
- impl::entry_grammar<DerivedT, N, ContextT>
- use_parser() const
- { return impl::entry_grammar<DerivedT, N, ContextT>( this->derived()); }
-
- BOOST_SPIRIT_GRAMMAR_STATE
-};
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
-
-#undef BOOST_SPIRIT_GRAMMAR_ID
-#undef BOOST_SPIRIT_GRAMMAR_ACCESS
-#undef BOOST_SPIRIT_GRAMMAR_STATE
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_grammar.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/non_terminal/parser_context.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/non_terminal/parser_context.hpp (original)
+++ branches/CMake/release/boost/spirit/core/non_terminal/parser_context.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,147 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_PARSER_CONTEXT_HPP)
-#define BOOST_SPIRIT_PARSER_CONTEXT_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSER_CONTEXT
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSER_CONTEXT
 
-///////////////////////////////////////////////////////////////////////////////
-namespace boost
-{
- namespace spirit
- {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // default_parser_context_base class { default context base }
- //
- ///////////////////////////////////////////////////////////////////////////
- struct default_parser_context_base
- {
- template <typename DerivedT>
- struct aux {};
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_context_base class { base class of all context classes }
- //
- ///////////////////////////////////////////////////////////////////////////
- struct parser_context_base {};
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_context class { default context }
- //
- ///////////////////////////////////////////////////////////////////////////
- struct nil_t;
- template<typename ContextT> struct parser_context_linker;
-
- template<typename AttrT = nil_t>
- struct parser_context : parser_context_base
- {
- typedef AttrT attr_t;
- typedef default_parser_context_base base_t;
- typedef parser_context_linker<parser_context<AttrT> > context_linker_t;
-
- template <typename ParserT>
- parser_context(ParserT const&) {}
-
- template <typename ParserT, typename ScannerT>
- void
- pre_parse(ParserT const&, ScannerT const&) {}
-
- template <typename ResultT, typename ParserT, typename ScannerT>
- ResultT&
- post_parse(ResultT& hit, ParserT const&, ScannerT const&)
- { return hit; }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // context_aux class
- //
- // context_aux<ContextT, DerivedT> is a class derived from the
- // ContextT's nested base_t::base<DerivedT> template class. (see
- // default_parser_context_base::aux for an example).
- //
- // Basically, this class provides ContextT dependent optional
- // functionality to the derived class DerivedT through the CRTP
- // idiom (Curiously recurring template pattern).
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ContextT, typename DerivedT>
- struct context_aux : public ContextT::base_t::template aux<DerivedT> {};
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_scanner_linker and parser_scanner_linker classes
- // { helper templates for the rule extensibility }
- //
- // This classes can be 'overloaded' (defined elsewhere), to plug
- // in additional functionality into the non-terminal parsing process.
- //
- ///////////////////////////////////////////////////////////////////////////
- #if !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
- #define BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED
-
- template<typename ScannerT>
- struct parser_scanner_linker : public ScannerT
- {
- parser_scanner_linker(ScannerT const scan_) : ScannerT(scan_) {}
- };
-
- #endif // !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
-
- //////////////////////////////////
- #if !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
- #define BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED
-
- template<typename ContextT>
- struct parser_context_linker : public ContextT
- {
- template <typename ParserT>
- parser_context_linker(ParserT const& p)
- : ContextT(p) {}
-
- template <typename ParserT, typename ScannerT>
- void pre_parse(ParserT const& p, ScannerT const& scan)
- { ContextT::pre_parse(p, scan); }
-
- template <typename ResultT, typename ParserT, typename ScannerT>
- ResultT&
- post_parse(ResultT& hit, ParserT const& p, ScannerT const& scan)
- { return ContextT::post_parse(hit, p, scan); }
- };
-
- #endif // !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // BOOST_SPIRIT_CONTEXT_PARSE helper macro
- //
- // The original implementation uses a template class. However, we
- // need to lessen the template instantiation depth to help inferior
- // compilers that sometimes choke on deep template instantiations.
- // The objective is to avoid code redundancy. A macro, in this case
- // is an obvious solution. Sigh!
- //
- // WARNING: INTERNAL USE ONLY. NOT FOR PUBLIC CONSUMPTION.
- //
- ///////////////////////////////////////////////////////////////////////////
- #define BOOST_SPIRIT_CONTEXT_PARSE(scan, this_, scanner_t, context_t, result_t) \
- scanner_t scan_wrap(scan); \
- context_t context_wrap(this_); \
- context_wrap.pre_parse(this_, scan_wrap); \
- result_t hit = parse_main(scan); \
- return context_wrap.post_parse(hit, this_, scan_wrap);
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_parser_context.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_parser_context.hpp"
+#endif
 
- } // namespace spirit
-} // namespace boost
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_parser_context.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/core/non_terminal/parser_id.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/non_terminal/parser_id.hpp (original)
+++ branches/CMake/release/boost/spirit/core/non_terminal/parser_id.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,118 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2001 Daniel Nuffer
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_PARSER_ID_HPP)
-#define BOOST_SPIRIT_PARSER_ID_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSER_ID
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSER_ID
 
-#if defined(BOOST_SPIRIT_DEBUG)
-# include <ostream>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_parser_id.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_parser_id.hpp"
 #endif
 
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_id class
- //
- ///////////////////////////////////////////////////////////////////////////
- class parser_id
- {
- public:
- parser_id() : p(0) {}
- explicit parser_id(void const* prule) : p(prule) {}
- parser_id(std::size_t l_) : l(l_) {}
-
- bool operator==(parser_id const& x) const { return p == x.p; }
- bool operator!=(parser_id const& x) const { return !(*this == x); }
- bool operator<(parser_id const& x) const { return p < x.p; }
- std::size_t to_long() const { return l; }
-
- private:
-
- union
- {
- void const* p;
- std::size_t l;
- };
- };
-
- #if defined(BOOST_SPIRIT_DEBUG)
- inline std::ostream&
- operator<<(std::ostream& out, parser_id const& rid)
- {
- out << (unsigned int)rid.to_long();
- return out;
- }
- #endif
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_tag_base class: base class of all parser tags
- //
- ///////////////////////////////////////////////////////////////////////////
- struct parser_tag_base {};
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_address_tag class: tags a parser with its address
- //
- ///////////////////////////////////////////////////////////////////////////
- struct parser_address_tag : parser_tag_base
- {
- parser_id id() const
- { return parser_id(reinterpret_cast<std::size_t>(this)); }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_tag class: tags a parser with an integer ID
- //
- ///////////////////////////////////////////////////////////////////////////
- template <int N>
- struct parser_tag : parser_tag_base
- {
- static parser_id id()
- { return parser_id(std::size_t(N)); }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // dynamic_parser_tag class: tags a parser with a dynamically changeable
- // integer ID
- //
- ///////////////////////////////////////////////////////////////////////////
- class dynamic_parser_tag : public parser_tag_base
- {
- public:
-
- dynamic_parser_tag()
- : tag(std::size_t(0)) {}
-
- parser_id
- id() const
- {
- return
- tag.to_long()
- ? tag
- : parser_id(reinterpret_cast<std::size_t>(this));
- }
-
- void set_id(parser_id id) { tag = id; }
-
- private:
-
- parser_id tag;
- };
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
-
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_parser_id.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/non_terminal/rule.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/non_terminal/rule.hpp (original)
+++ branches/CMake/release/boost/spirit/core/non_terminal/rule.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,171 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_RULE_HPP)
-#define BOOST_SPIRIT_RULE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_RULE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_RULE
 
-#include <boost/static_assert.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit predefined maximum number of simultaneously usable different
-// scanner types.
-//
-// This limit defines the maximum number of of possible different scanner
-// types for which a specific rule<> may be used. If this isn't defined, a
-// rule<> may be used with one scanner type only (multiple scanner support
-// is disabled).
-//
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT)
-# define BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT 1
-#endif
-
-// Ensure a meaningful maximum number of simultaneously usable scanner types
-BOOST_STATIC_ASSERT(BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 0);
-
-#include <boost/scoped_ptr.hpp>
-#include <boost/spirit/core/non_terminal/impl/rule.ipp>
-
-#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
-# include <boost/preprocessor/enum_params.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_rule.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_rule.hpp"
 #endif
 
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // scanner_list (a fake scanner)
- //
- // Typically, rules are tied to a specific scanner type and
- // a particular rule cannot be used with anything else. Sometimes
- // there's a need for rules that can accept more than one scanner
- // type. The scanner_list<S0, ...SN> can be used as a template
- // parameter to the rule class to specify up to the number of
- // scanner types defined by the BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT
- // constant. Example:
- //
- // rule<scanner_list<ScannerT0, ScannerT1> > r;
- //
- // *** This feature is available only to compilers that support
- // partial template specialization. ***
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- BOOST_PP_ENUM_PARAMS(
- BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,
- typename ScannerT
- )
- >
- struct scanner_list : scanner_base {};
-
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // rule class
- //
- // The rule is a polymorphic parser that acts as a named place-
- // holder capturing the behavior of an EBNF expression assigned to
- // it.
- //
- // The rule is a template class parameterized by:
- //
- // 1) scanner (scanner_t, see scanner.hpp),
- // 2) the rule's context (context_t, see parser_context.hpp)
- // 3) an arbitrary tag (tag_t, see parser_id.hpp) that allows
- // a rule to be tagged for identification.
- //
- // These template parameters may be specified in any order. The
- // scanner will default to scanner<> when it is not specified.
- // The context will default to parser_context when not specified.
- // The tag will default to parser_address_tag when not specified.
- //
- // The definition of the rule (its right hand side, RHS) held by
- // the rule through a scoped_ptr. When a rule is seen in the RHS
- // of an assignment or copy construction EBNF expression, the rule
- // is held by the LHS rule by reference.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename T0 = nil_t
- , typename T1 = nil_t
- , typename T2 = nil_t
- >
- class rule
- : public impl::rule_base<
- rule<T0, T1, T2>
- , rule<T0, T1, T2> const&
- , T0, T1, T2>
- {
- public:
-
- typedef rule<T0, T1, T2> self_t;
- typedef impl::rule_base<
- self_t
- , self_t const&
- , T0, T1, T2>
- base_t;
-
- typedef typename base_t::scanner_t scanner_t;
- typedef typename base_t::attr_t attr_t;
- typedef impl::abstract_parser<scanner_t, attr_t> abstract_parser_t;
-
- rule() : ptr() {}
- ~rule() {}
-
- rule(rule const& r)
- : ptr(new impl::concrete_parser<rule, scanner_t, attr_t>(r)) {}
-
- template <typename ParserT>
- rule(ParserT const& p)
- : ptr(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p)) {}
-
- template <typename ParserT>
- rule& operator=(ParserT const& p)
- {
- ptr.reset(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p));
- return *this;
- }
-
- rule& operator=(rule const& r)
- {
- ptr.reset(new impl::concrete_parser<rule, scanner_t, attr_t>(r));
- return *this;
- }
-
- rule<T0, T1, T2>
- copy() const
- {
- return rule<T0, T1, T2>(ptr.get() ? ptr->clone() : 0);
- }
-
- private:
- friend class impl::rule_base_access;
-
- abstract_parser_t*
- get() const
- {
- return ptr.get();
- }
-
- rule(abstract_parser_t* ptr)
- : ptr(ptr) {}
-
- rule(abstract_parser_t const* ptr)
- : ptr(ptr) {}
-
- scoped_ptr<abstract_parser_t> ptr;
- };
-
-}} // namespace boost::spirit
+#include <boost/spirit/include/classic_rule.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/core/non_terminal/subrule.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/non_terminal/subrule.hpp (original)
+++ branches/CMake/release/boost/spirit/core/non_terminal/subrule.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,296 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SUBRULE_HPP)
-#define BOOST_SPIRIT_SUBRULE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SUBRULE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SUBRULE
 
-#include <boost/config.hpp>
-#include <boost/static_assert.hpp>
-
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/non_terminal/parser_context.hpp>
-
-#include <boost/spirit/core/non_terminal/subrule_fwd.hpp>
-#include <boost/spirit/core/non_terminal/impl/subrule.ipp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // subrules_scanner class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ScannerT, typename ListT>
- struct subrules_scanner : public ScannerT
- {
- typedef ScannerT scanner_t;
- typedef ListT list_t;
- typedef subrules_scanner<ScannerT, ListT> self_t;
-
- subrules_scanner(ScannerT const& scan, ListT const& list_)
- : ScannerT(scan), list(list_) {}
-
- template <typename PoliciesT>
- struct rebind_policies
- {
- typedef typename rebind_scanner_policies<ScannerT, PoliciesT>::type
- rebind_scanner;
- typedef subrules_scanner<rebind_scanner, ListT> type;
- };
-
- template <typename PoliciesT>
- subrules_scanner<
- typename rebind_scanner_policies<ScannerT, PoliciesT>::type,
- ListT>
- change_policies(PoliciesT const& policies) const
- {
- typedef subrules_scanner<
- BOOST_DEDUCED_TYPENAME
- rebind_scanner_policies<ScannerT, PoliciesT>::type,
- ListT>
- subrules_scanner_t;
-
- return subrules_scanner_t(
- ScannerT::change_policies(policies),
- list);
- }
-
- template <typename IteratorT>
- struct rebind_iterator
- {
- typedef typename rebind_scanner_iterator<ScannerT, IteratorT>::type
- rebind_scanner;
- typedef subrules_scanner<rebind_scanner, ListT> type;
- };
-
- template <typename IteratorT>
- subrules_scanner<
- typename rebind_scanner_iterator<ScannerT, IteratorT>::type,
- ListT>
- change_iterator(IteratorT const& first, IteratorT const &last) const
- {
- typedef subrules_scanner<
- BOOST_DEDUCED_TYPENAME
- rebind_scanner_iterator<ScannerT, IteratorT>::type,
- ListT>
- subrules_scanner_t;
-
- return subrules_scanner_t(
- ScannerT::change_iterator(first, last),
- list);
- }
-
- ListT const& list;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // subrule_scanner type computer class
- //
- // This computer ensures that the scanner will not be recursively
- // instantiated if it's not needed.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ScannerT, typename ListT>
- struct subrules_scanner_finder
- {
- typedef subrules_scanner<ScannerT, ListT> type;
- };
-
- template <typename ScannerT, typename ListT>
- struct subrules_scanner_finder<subrules_scanner<ScannerT, ListT>, ListT>
- {
- typedef subrules_scanner<ScannerT, ListT> type;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // subrule_list class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename FirstT, typename RestT>
- struct subrule_list : public parser<subrule_list<FirstT, RestT> >
- {
- typedef subrule_list<FirstT, RestT> self_t;
- typedef FirstT first_t;
- typedef RestT rest_t;
-
- subrule_list(FirstT const& first_, RestT const& rest_)
- : first(first_), rest(rest_) {}
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<FirstT, ScannerT>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename subrules_scanner_finder<ScannerT, self_t>::type
- subrules_scanner_t;
- subrules_scanner_t g_arg(scan, *this);
- return first.start.parse(g_arg);
- }
-
- template <int ID, typename DefT, typename ContextT>
- subrule_list<
- FirstT,
- subrule_list<
- subrule_parser<ID, DefT, ContextT>,
- RestT> >
- operator,(subrule_parser<ID, DefT, ContextT> const& rhs)
- {
- return subrule_list<
- FirstT,
- subrule_list<
- subrule_parser<ID, DefT, ContextT>,
- RestT> >(
- first,
- subrule_list<
- subrule_parser<ID, DefT, ContextT>,
- RestT>(rhs, rest));
- }
-
- FirstT first;
- RestT rest;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // subrule_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <int ID, typename DefT, typename ContextT>
- struct subrule_parser
- : public parser<subrule_parser<ID, DefT, ContextT> >
- {
- typedef subrule_parser<ID, DefT, ContextT> self_t;
- typedef subrule<ID, ContextT> subrule_t;
- typedef DefT def_t;
-
- BOOST_STATIC_CONSTANT(int, id = ID);
-
- template <typename ScannerT>
- struct result
- {
- typedef typename
- impl::get_subrule_parser_result<
- DefT, ScannerT, typename subrule_t::attr_t>::type type;
- };
-
- subrule_parser(subrule_t const& start_, DefT const& rhs_)
- : rhs(rhs_), start(start_) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- // This will only be called when parsing single subrules.
- typedef subrule_list<self_t, nil_t> list_t;
- typedef subrules_scanner<ScannerT, list_t> scanner_t;
-
- list_t list(*this, nil_t());
- scanner_t g_arg(scan, list);
- return start.parse(g_arg);
- }
-
- template <int ID2, typename DefT2, typename ContextT2>
- inline subrule_list<
- self_t,
- subrule_list<
- subrule_parser<ID2, DefT2, ContextT2>,
- nil_t> >
- operator,(subrule_parser<ID2, DefT2, ContextT2> const& rhs) const
- {
- return subrule_list<
- self_t,
- subrule_list<
- subrule_parser<ID2, DefT2, ContextT2>,
- nil_t> >(
- *this,
- subrule_list<
- subrule_parser<ID2, DefT2, ContextT2>, nil_t>(
- rhs, nil_t()));
- }
-
- typename DefT::embed_t rhs;
- subrule_t const& start;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // subrule class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <int ID, typename ContextT>
- struct subrule
- : public parser<subrule<ID, ContextT> >
- , public ContextT::base_t
- , public context_aux<ContextT, subrule<ID, ContextT> >
- {
- typedef subrule<ID, ContextT> self_t;
- typedef subrule<ID, ContextT> const& embed_t;
-
- typedef typename ContextT::context_linker_t context_t;
- typedef typename context_t::attr_t attr_t;
-
- BOOST_STATIC_CONSTANT(int, id = ID);
-
- template <typename ScannerT>
- struct result
- {
- typedef typename
- impl::get_subrule_result<ID, ScannerT, attr_t>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse_main(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- result_t result;
- impl::parse_subrule<result_t, ScannerT, ID>::
- do_(result, scan);
- return result;
- }
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef parser_scanner_linker<ScannerT> scanner_t;
- BOOST_SPIRIT_CONTEXT_PARSE(
- scan, *this, scanner_t, context_t, result_t);
- }
-
- template <typename DefT>
- subrule_parser<ID, DefT, ContextT>
- operator=(parser<DefT> const& rhs) const
- {
- return subrule_parser<ID, DefT, ContextT>(*this, rhs.derived());
- }
-
- private:
-
- // assignment of subrules is not allowed. Use subrules
- // with identical IDs if you want to have aliases.
-
- subrule& operator=(subrule const&);
-
- template <int ID2, typename ContextT2>
- subrule& operator=(subrule<ID2, ContextT2> const&);
- };
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_subrule.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_subrule.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_subrule.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/non_terminal/subrule_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/non_terminal/subrule_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/core/non_terminal/subrule_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,31 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SUBRULE_FWD_HPP)
-#define BOOST_SPIRIT_SUBRULE_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SUBRULE_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SUBRULE_FWD
 
-#include <boost/spirit/core/non_terminal/parser_context.hpp>
-
-namespace boost { namespace spirit {
-
- template <int ID, typename ContextT = parser_context<> >
- struct subrule;
-
- template <int ID, typename DefT, typename ContextT = parser_context<> >
- struct subrule_parser;
-
- template <typename ScannerT, typename ListT>
- struct subrules_scanner;
-
- template <typename FirstT, typename RestT>
- struct subrule_list;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_subrule_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_subrule_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_subrule_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/parser.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/parser.hpp (original)
+++ branches/CMake/release/boost/spirit/core/parser.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,219 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_PARSER_HPP)
-#define BOOST_SPIRIT_PARSER_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSER
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSER
 
-#include <boost/config.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/spirit/core/scanner/scanner.hpp>
-#include <boost/spirit/core/nil.hpp>
-
-namespace boost { namespace spirit
-{
- template <typename ParserT, typename ActionT>
- class action; // forward declaration
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Parser categories
- //
- // Helper template classes to distinguish different types of
- // parsers. The following categories are the most generic. More
- // specific types may inherit from these. Each parser has a typedef
- // parser_category_t that defines its category. By default, if one
- // is not specified, it will inherit from the base parser class
- // which typedefs its parser_category_t as plain_parser_category.
- //
- // - plain parser has nothing special
- // - binary parser has subject a and b (e.g. alternative)
- // - unary parser has single subject (e.g. kleene star)
- // - action parser has an attached action parser
- //
- ///////////////////////////////////////////////////////////////////////////
- struct plain_parser_category {};
- struct binary_parser_category : plain_parser_category {};
- struct unary_parser_category : plain_parser_category {};
- struct action_parser_category : unary_parser_category {};
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_result metafunction
- //
- // Given a scanner type ScannerT and a parser type ParserT, the
- // parser_result metafunction provides the actual result of the
- // parser.
- //
- // Usage:
- //
- // typename parser_result<ParserT, ScannerT>::type
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ParserT, typename ScannerT>
- struct parser_result
- {
- typedef typename boost::remove_reference<ParserT>::type parser_type;
- typedef typename parser_type::template result<ScannerT>::type type;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser class
- //
- // This class is a protocol base class for all parsers. This is
- // essentially an interface contract. The parser class does not
- // really know how to parse anything but instead relies on the
- // template parameter DerivedT (which obviously is assumed to be a
- // subclass) to do the actual parsing.
- //
- // Concrete sub-classes inheriting from parser must have a
- // corresponding member function parse(...) compatible with the
- // conceptual Interface:
- //
- // template <typename ScannerT>
- // RT parse(ScannerT const& scan) const;
- //
- // where RT is the desired return type of the parser and ScannerT
- // scan is the scanner (see scanner.hpp).
- //
- // Concrete sub-classes inheriting from parser in most cases need to
- // have a nested meta-function result that returns the result type
- // of the parser's parse member function, given a scanner type. The
- // meta-function has the form:
- //
- // template <typename ScannerT>
- // struct result
- // {
- // typedef RT type;
- // };
- //
- // where RT is the desired return type of the parser. This is
- // usually, but not always, dependent on the template parameter
- // ScannerT. If a parser does not supply a result metafunction, a
- // default is provided by the base parser class.
- //
- // The parser's derived() member function returns a reference to the
- // parser as its derived object.
- //
- // An operator[] is provided. The operator returns a semantic action
- // handler (see actions.hpp).
- //
- // Each parser has a typedef embed_t. This typedef specifies how a
- // parser is embedded in a composite (see composite.hpp). By
- // default, if one is not specified, the parser will be embedded by
- // value. That is, a copy of the parser is placed as a member
- // variable of the composite. Most parsers are embedded by value. In
- // certain situations however, this is not desirable or possible.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename DerivedT>
- struct parser
- {
- typedef DerivedT embed_t;
- typedef DerivedT derived_t;
- typedef plain_parser_category parser_category_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, nil_t>::type type;
- };
-
- DerivedT& derived()
- {
- return *static_cast<DerivedT*>(this);
- }
-
- DerivedT const& derived() const
- {
- return *static_cast<DerivedT const*>(this);
- }
-
- template <typename ActionT>
- action<DerivedT, ActionT>
- operator[](ActionT const& actor) const
- {
- return action<DerivedT, ActionT>(derived(), actor);
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parse_info
- //
- // Results returned by the free parse functions:
- //
- // stop: points to the final parse position (i.e parsing
- // processed the input up to this point).
- //
- // hit: true if parsing is successful. This may be full:
- // the parser consumed all the input, or partial:
- // the parser consumed only a portion of the input.
- //
- // full: true when we have a full hit (i.e the parser
- // consumed all the input.
- //
- // length: The number of characters consumed by the parser.
- // This is valid only if we have a successful hit
- // (either partial or full).
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename IteratorT = char const*>
- struct parse_info
- {
- IteratorT stop;
- bool hit;
- bool full;
- std::size_t length;
-
- parse_info(
- IteratorT const& stop_ = IteratorT(),
- bool hit_ = false,
- bool full_ = false,
- std::size_t length_ = 0)
- : stop(stop_)
- , hit(hit_)
- , full(full_)
- , length(length_) {}
-
- template <typename ParseInfoT>
- parse_info(ParseInfoT const& pi)
- : stop(pi.stop)
- , hit(pi.hit)
- , full(pi.full)
- , length(pi.length) {}
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Generic parse function
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename IteratorT, typename DerivedT>
- parse_info<IteratorT>
- parse(
- IteratorT const& first,
- IteratorT const& last,
- parser<DerivedT> const& p);
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Parse function for null terminated strings
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename CharT, typename DerivedT>
- parse_info<CharT const*>
- parse(
- CharT const* str,
- parser<DerivedT> const& p);
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_parser.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_parser.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_parser.hpp>
 
-#include <boost/spirit/core/impl/parser.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/core/primitives/numerics.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/primitives/numerics.hpp (original)
+++ branches/CMake/release/boost/spirit/core/primitives/numerics.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,285 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_NUMERICS_HPP
-#define BOOST_SPIRIT_NUMERICS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_NUMERICS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_NUMERICS
 
-#include <boost/config.hpp>
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/directives.hpp>
-
-#include <boost/spirit/core/primitives/numerics_fwd.hpp>
-#include <boost/spirit/core/primitives/impl/numerics.ipp>
-
-namespace boost { namespace spirit
-{
- ///////////////////////////////////////////////////////////////////////////
- //
- // uint_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename T,
- int Radix,
- unsigned MinDigits,
- int MaxDigits
- >
- struct uint_parser : parser<uint_parser<T, Radix, MinDigits, MaxDigits> >
- {
- typedef uint_parser<T, Radix, MinDigits, MaxDigits> self_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, T>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef impl::uint_parser_impl<T, Radix, MinDigits, MaxDigits> impl_t;
- typedef typename parser_result<impl_t, ScannerT>::type result_t;
- return impl::contiguous_parser_parse<result_t>(impl_t(), scan, scan);
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // int_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename T,
- int Radix,
- unsigned MinDigits,
- int MaxDigits
- >
- struct int_parser : parser<int_parser<T, Radix, MinDigits, MaxDigits> >
- {
- typedef int_parser<T, Radix, MinDigits, MaxDigits> self_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, T>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef impl::int_parser_impl<T, Radix, MinDigits, MaxDigits> impl_t;
- typedef typename parser_result<impl_t, ScannerT>::type result_t;
- return impl::contiguous_parser_parse<result_t>(impl_t(), scan, scan);
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // uint_parser/int_parser instantiations
- //
- ///////////////////////////////////////////////////////////////////////////
- int_parser<int> const
- int_p = int_parser<int>();
-
- uint_parser<unsigned> const
- uint_p = uint_parser<unsigned>();
-
- uint_parser<unsigned, 2> const
- bin_p = uint_parser<unsigned, 2>();
-
- uint_parser<unsigned, 8> const
- oct_p = uint_parser<unsigned, 8>();
-
- uint_parser<unsigned, 16> const
- hex_p = uint_parser<unsigned, 16>();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // sign_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- namespace impl
- {
- // Utility to extract the prefix sign ('-' | '+')
- template <typename ScannerT>
- bool extract_sign(ScannerT const& scan, std::size_t& count);
- }
-
- struct sign_parser : public parser<sign_parser>
- {
- typedef sign_parser self_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, bool>::type type;
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_numerics.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_numerics.hpp"
+#endif
 
- sign_parser() {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- if (!scan.at_end())
- {
- std::size_t length;
- typename ScannerT::iterator_t save(scan.first);
- bool neg = impl::extract_sign(scan, length);
- if (length)
- return scan.create_match(1, neg, save, scan.first);
- }
- return scan.no_match();
- }
- };
-
- sign_parser const sign_p = sign_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // default real number policies
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct ureal_parser_policies
- {
- // trailing dot policy suggested suggested by Gustavo Guerra
- BOOST_STATIC_CONSTANT(bool, allow_leading_dot = true);
- BOOST_STATIC_CONSTANT(bool, allow_trailing_dot = true);
- BOOST_STATIC_CONSTANT(bool, expect_dot = false);
-
- typedef uint_parser<T, 10, 1, -1> uint_parser_t;
- typedef int_parser<T, 10, 1, -1> int_parser_t;
-
- template <typename ScannerT>
- static typename match_result<ScannerT, nil_t>::type
- parse_sign(ScannerT& scan)
- {
- return scan.no_match();
- }
-
- template <typename ScannerT>
- static typename parser_result<uint_parser_t, ScannerT>::type
- parse_n(ScannerT& scan)
- {
- return uint_parser_t().parse(scan);
- }
-
- template <typename ScannerT>
- static typename parser_result<chlit<>, ScannerT>::type
- parse_dot(ScannerT& scan)
- {
- return ch_p('.').parse(scan);
- }
-
- template <typename ScannerT>
- static typename parser_result<uint_parser_t, ScannerT>::type
- parse_frac_n(ScannerT& scan)
- {
- return uint_parser_t().parse(scan);
- }
-
- template <typename ScannerT>
- static typename parser_result<chlit<>, ScannerT>::type
- parse_exp(ScannerT& scan)
- {
- return as_lower_d['e'].parse(scan);
- }
-
- template <typename ScannerT>
- static typename parser_result<int_parser_t, ScannerT>::type
- parse_exp_n(ScannerT& scan)
- {
- return int_parser_t().parse(scan);
- }
- };
-
- template <typename T>
- struct real_parser_policies : public ureal_parser_policies<T>
- {
- template <typename ScannerT>
- static typename parser_result<sign_parser, ScannerT>::type
- parse_sign(ScannerT& scan)
- {
- return sign_p.parse(scan);
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // real_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename T,
- typename RealPoliciesT
- >
- struct real_parser
- : public parser<real_parser<T, RealPoliciesT> >
- {
- typedef real_parser<T, RealPoliciesT> self_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, T>::type type;
- };
-
- real_parser() {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- return impl::real_parser_impl<result_t, T, RealPoliciesT>::parse(scan);
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // real_parser instantiations
- //
- ///////////////////////////////////////////////////////////////////////////
- real_parser<double, ureal_parser_policies<double> > const
- ureal_p = real_parser<double, ureal_parser_policies<double> >();
-
- real_parser<double, real_parser_policies<double> > const
- real_p = real_parser<double, real_parser_policies<double> >();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // strict reals (do not allow plain integers (no decimal point))
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct strict_ureal_parser_policies : public ureal_parser_policies<T>
- {
- BOOST_STATIC_CONSTANT(bool, expect_dot = true);
- };
-
- template <typename T>
- struct strict_real_parser_policies : public real_parser_policies<T>
- {
- BOOST_STATIC_CONSTANT(bool, expect_dot = true);
- };
-
- real_parser<double, strict_ureal_parser_policies<double> > const
- strict_ureal_p
- = real_parser<double, strict_ureal_parser_policies<double> >();
-
- real_parser<double, strict_real_parser_policies<double> > const
- strict_real_p
- = real_parser<double, strict_real_parser_policies<double> >();
-
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_numerics.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/core/primitives/numerics_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/primitives/numerics_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/core/primitives/numerics_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,83 +1,23 @@
 /*=============================================================================
- Copyright (C) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_NUMERICS_FWD_HPP)
-# define BOOST_SPIRIT_NUMERICS_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_NUMERICS_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_NUMERICS_FWD
 
-namespace boost { namespace spirit
-{
- ///////////////////////////////////////////////////////////////////////////
- //
- // uint_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename T = unsigned,
- int Radix = 10,
- unsigned MinDigits = 1,
- int MaxDigits = -1
- >
- struct uint_parser;
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // int_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename T = unsigned,
- int Radix = 10,
- unsigned MinDigits = 1,
- int MaxDigits = -1
- >
- struct int_parser;
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // sign_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct sign_parser;
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // default real number policies
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct ureal_parser_policies;
-
- template <typename T>
- struct real_parser_policies;
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // real_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename T = double,
- typename RealPoliciesT = ureal_parser_policies<T>
- >
- struct real_parser;
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // strict reals (do not allow plain integers (no decimal point))
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct strict_ureal_parser_policies;
-
- template <typename T>
- struct strict_real_parser_policies;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_numerics_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_numerics_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_numerics_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/primitives/primitives.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/primitives/primitives.hpp (original)
+++ branches/CMake/release/boost/spirit/core/primitives/primitives.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,650 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2003 Martin Wille
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_PRIMITIVES_HPP)
-#define BOOST_SPIRIT_PRIMITIVES_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PRIMITIVES
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PRIMITIVES
 
-#include <boost/ref.hpp>
-#include <boost/spirit/core/assert.hpp>
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/impl/directives.ipp>
-#include <boost/spirit/core/primitives/impl/primitives.ipp>
-
-#ifdef BOOST_MSVC
-#pragma warning (push)
-#pragma warning(disable : 4512)
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_primitives.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_primitives.hpp"
 #endif
 
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // char_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename DerivedT>
- struct char_parser : public parser<DerivedT>
- {
- typedef DerivedT self_t;
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<
- ScannerT,
- typename ScannerT::value_t
- >::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename ScannerT::value_t value_t;
- typedef typename ScannerT::iterator_t iterator_t;
-
- if (!scan.at_end())
- {
- value_t ch = *scan;
- if (this->derived().test(ch))
- {
- iterator_t save(scan.first);
- ++scan.first;
- return scan.create_match(1, ch, save, scan.first);
- }
- }
- return scan.no_match();
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // negation of char_parsers
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename PositiveT>
- struct negated_char_parser
- : public char_parser<negated_char_parser<PositiveT> >
- {
- typedef negated_char_parser<PositiveT> self_t;
- typedef PositiveT positive_t;
-
- negated_char_parser(positive_t const& p)
- : positive(p.derived()) {}
-
- template <typename T>
- bool test(T ch) const
- {
- return !positive.test(ch);
- }
-
- positive_t const positive;
- };
-
- template <typename ParserT>
- inline negated_char_parser<ParserT>
- operator~(char_parser<ParserT> const& p)
- {
- return negated_char_parser<ParserT>(p.derived());
- }
-
- template <typename ParserT>
- inline ParserT
- operator~(negated_char_parser<ParserT> const& n)
- {
- return n.positive;
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // chlit class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename CharT = char>
- struct chlit : public char_parser<chlit<CharT> >
- {
- chlit(CharT ch_)
- : ch(ch_) {}
-
- template <typename T>
- bool test(T ch_) const
- {
- return ch_ == ch;
- }
-
- CharT ch;
- };
-
- template <typename CharT>
- inline chlit<CharT>
- ch_p(CharT ch)
- {
- return chlit<CharT>(ch);
- }
-
- // This should take care of ch_p("a") "bugs"
- template <typename CharT, std::size_t N>
- inline chlit<CharT>
- ch_p(CharT const (& str)[N])
- {
- // ch_p's argument should be a single character or a null-terminated
- // string with a single character
- BOOST_STATIC_ASSERT(N < 3);
- return chlit<CharT>(str[0]);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // range class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename CharT = char>
- struct range : public char_parser<range<CharT> >
- {
- range(CharT first_, CharT last_)
- : first(first_), last(last_)
- {
- BOOST_SPIRIT_ASSERT(!(last < first));
- }
-
- template <typename T>
- bool test(T ch) const
- {
- return !(CharT(ch) < first) && !(last < CharT(ch));
- }
-
- CharT first;
- CharT last;
- };
-
- template <typename CharT>
- inline range<CharT>
- range_p(CharT first, CharT last)
- {
- return range<CharT>(first, last);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // chseq class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename IteratorT = char const*>
- class chseq : public parser<chseq<IteratorT> >
- {
- public:
-
- typedef chseq<IteratorT> self_t;
-
- chseq(IteratorT first_, IteratorT last_)
- : first(first_), last(last_) {}
-
- chseq(IteratorT first_)
- : first(first_), last(impl::get_last(first_)) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename boost::unwrap_reference<IteratorT>::type striter_t;
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- return impl::string_parser_parse<result_t>(
- striter_t(first),
- striter_t(last),
- scan);
- }
-
- private:
-
- IteratorT first;
- IteratorT last;
- };
-
- template <typename CharT>
- inline chseq<CharT const*>
- chseq_p(CharT const* str)
- {
- return chseq<CharT const*>(str);
- }
-
- template <typename IteratorT>
- inline chseq<IteratorT>
- chseq_p(IteratorT first, IteratorT last)
- {
- return chseq<IteratorT>(first, last);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // strlit class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename IteratorT = char const*>
- class strlit : public parser<strlit<IteratorT> >
- {
- public:
-
- typedef strlit<IteratorT> self_t;
-
- strlit(IteratorT first, IteratorT last)
- : seq(first, last) {}
-
- strlit(IteratorT first)
- : seq(first) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- return impl::contiguous_parser_parse<result_t>
- (seq, scan, scan);
- }
-
- private:
-
- chseq<IteratorT> seq;
- };
-
- template <typename CharT>
- inline strlit<CharT const*>
- str_p(CharT const* str)
- {
- return strlit<CharT const*>(str);
- }
-
- template <typename CharT>
- inline strlit<CharT *>
- str_p(CharT * str)
- {
- return strlit<CharT *>(str);
- }
-
- template <typename IteratorT>
- inline strlit<IteratorT>
- str_p(IteratorT first, IteratorT last)
- {
- return strlit<IteratorT>(first, last);
- }
-
- // This should take care of str_p('a') "bugs"
- template <typename CharT>
- inline chlit<CharT>
- str_p(CharT ch)
- {
- return chlit<CharT>(ch);
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // nothing_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct nothing_parser : public parser<nothing_parser>
- {
- typedef nothing_parser self_t;
-
- nothing_parser() {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- return scan.no_match();
- }
- };
-
- nothing_parser const nothing_p = nothing_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // anychar_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct anychar_parser : public char_parser<anychar_parser>
- {
- typedef anychar_parser self_t;
-
- anychar_parser() {}
-
- template <typename CharT>
- bool test(CharT) const
- {
- return true;
- }
- };
-
- anychar_parser const anychar_p = anychar_parser();
-
- inline nothing_parser
- operator~(anychar_parser)
- {
- return nothing_p;
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // alnum_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct alnum_parser : public char_parser<alnum_parser>
- {
- typedef alnum_parser self_t;
-
- alnum_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::isalnum_(ch);
- }
- };
-
- alnum_parser const alnum_p = alnum_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // alpha_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct alpha_parser : public char_parser<alpha_parser>
- {
- typedef alpha_parser self_t;
-
- alpha_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::isalpha_(ch);
- }
- };
-
- alpha_parser const alpha_p = alpha_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // cntrl_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct cntrl_parser : public char_parser<cntrl_parser>
- {
- typedef cntrl_parser self_t;
-
- cntrl_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::iscntrl_(ch);
- }
- };
-
- cntrl_parser const cntrl_p = cntrl_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // digit_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct digit_parser : public char_parser<digit_parser>
- {
- typedef digit_parser self_t;
-
- digit_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::isdigit_(ch);
- }
- };
-
- digit_parser const digit_p = digit_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // graph_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct graph_parser : public char_parser<graph_parser>
- {
- typedef graph_parser self_t;
-
- graph_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::isgraph_(ch);
- }
- };
-
- graph_parser const graph_p = graph_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // lower_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct lower_parser : public char_parser<lower_parser>
- {
- typedef lower_parser self_t;
-
- lower_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::islower_(ch);
- }
- };
-
- lower_parser const lower_p = lower_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // print_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct print_parser : public char_parser<print_parser>
- {
- typedef print_parser self_t;
-
- print_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::isprint_(ch);
- }
- };
-
- print_parser const print_p = print_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // punct_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct punct_parser : public char_parser<punct_parser>
- {
- typedef punct_parser self_t;
-
- punct_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::ispunct_(ch);
- }
- };
-
- punct_parser const punct_p = punct_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // blank_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct blank_parser : public char_parser<blank_parser>
- {
- typedef blank_parser self_t;
-
- blank_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::isblank_(ch);
- }
- };
-
- blank_parser const blank_p = blank_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // space_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct space_parser : public char_parser<space_parser>
- {
- typedef space_parser self_t;
-
- space_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::isspace_(ch);
- }
- };
-
- space_parser const space_p = space_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // upper_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct upper_parser : public char_parser<upper_parser>
- {
- typedef upper_parser self_t;
-
- upper_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::isupper_(ch);
- }
- };
-
- upper_parser const upper_p = upper_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // xdigit_parser class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct xdigit_parser : public char_parser<xdigit_parser>
- {
- typedef xdigit_parser self_t;
-
- xdigit_parser() {}
-
- template <typename CharT>
- bool test(CharT ch) const
- {
- return impl::isxdigit_(ch);
- }
- };
-
- xdigit_parser const xdigit_p = xdigit_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // eol_parser class (contributed by Martin Wille)
- //
- ///////////////////////////////////////////////////////////////////////////
- struct eol_parser : public parser<eol_parser>
- {
- typedef eol_parser self_t;
-
- eol_parser() {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typename ScannerT::iterator_t save = scan.first;
- std::size_t len = 0;
-
- if (!scan.at_end() && *scan == '\r') // CR
- {
- ++scan.first;
- ++len;
- }
-
- // Don't call skipper here
- if (scan.first != scan.last && *scan == '\n') // LF
- {
- ++scan.first;
- ++len;
- }
-
- if (len)
- return scan.create_match(len, nil_t(), save, scan.first);
- return scan.no_match();
- }
- };
-
- eol_parser const eol_p = eol_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // end_parser class (suggested by Markus Schöpflin)
- //
- ///////////////////////////////////////////////////////////////////////////
- struct end_parser : public parser<end_parser>
- {
- typedef end_parser self_t;
-
- end_parser() {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- if (scan.at_end())
- return scan.empty_match();
- return scan.no_match();
- }
- };
-
- end_parser const end_p = end_parser();
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // the pizza_p parser :-)
- //
- ///////////////////////////////////////////////////////////////////////////
- inline strlit<char const*> const
- pizza_p(char const* your_favorite_pizza)
- {
- return your_favorite_pizza;
- }
-
-}} // namespace boost::spirit
-
-#ifdef BOOST_MSVC
-#pragma warning (pop)
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_primitives.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/core/safe_bool.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/safe_bool.hpp (original)
+++ branches/CMake/release/boost/spirit/core/safe_bool.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,59 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SAFE_BOOL_HPP)
-#define BOOST_SPIRIT_SAFE_BOOL_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SAFE_BOOL
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SAFE_BOOL
 
-#include <boost/config.hpp>
-#include <boost/detail/workaround.hpp>
-
-namespace boost { namespace spirit
-{
- namespace impl
- {
- template <typename T>
- struct no_base {};
-
- template <typename T>
- struct safe_bool_impl
- {
-#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
- void stub(T*) {};
- typedef void (safe_bool_impl::*type)(T*);
-#else
- typedef T* TP; // workaround to make parsing easier
- TP stub;
- typedef TP safe_bool_impl::*type;
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_safe_bool.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_safe_bool.hpp"
 #endif
- };
- }
-
- template <typename DerivedT, typename BaseT = impl::no_base<DerivedT> >
- struct safe_bool : BaseT
- {
- private:
- typedef impl::safe_bool_impl<DerivedT> impl_t;
- typedef typename impl_t::type bool_type;
-
- public:
- operator bool_type() const
- {
- return static_cast<const DerivedT*>(this)->operator_bool() ?
- &impl_t::stub : 0;
- }
-
- operator bool_type()
- {
- return static_cast<DerivedT*>(this)->operator_bool() ?
- &impl_t::stub : 0;
- }
- };
-}}
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_safe_bool.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/scanner/scanner.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/scanner/scanner.hpp (original)
+++ branches/CMake/release/boost/spirit/core/scanner/scanner.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,324 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2002 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SCANNER_HPP)
-#define BOOST_SPIRIT_SCANNER_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SCANNER
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SCANNER
 
-#include <iterator>
-#include <boost/config.hpp>
-#include <boost/spirit/core/match.hpp>
-#include <boost/spirit/core/non_terminal/parser_id.hpp>
-#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
-
-#include <boost/spirit/core/scanner/scanner_fwd.hpp>
-
-namespace boost { namespace spirit
-{
- ///////////////////////////////////////////////////////////////////////////
- //
- // iteration_policy class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct iteration_policy
- {
- template <typename ScannerT>
- void
- advance(ScannerT const& scan) const
- {
- ++scan.first;
- }
-
- template <typename ScannerT>
- bool at_end(ScannerT const& scan) const
- {
- return scan.first == scan.last;
- }
-
- template <typename T>
- T filter(T ch) const
- {
- return ch;
- }
-
- template <typename ScannerT>
- typename ScannerT::ref_t
- get(ScannerT const& scan) const
- {
- return *scan.first;
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // match_policy class
- //
- ///////////////////////////////////////////////////////////////////////////
- struct match_policy
- {
- template <typename T>
- struct result { typedef match<T> type; };
-
- const match<nil_t>
- no_match() const
- {
- return match<nil_t>();
- }
-
- const match<nil_t>
- empty_match() const
- {
- return match<nil_t>(0, nil_t());
- }
-
- template <typename AttrT, typename IteratorT>
- match<AttrT>
- create_match(
- std::size_t length,
- AttrT const& val,
- IteratorT const& /*first*/,
- IteratorT const& /*last*/) const
- {
- return match<AttrT>(length, val);
- }
-
- template <typename MatchT, typename IteratorT>
- void group_match(
- MatchT& /*m*/,
- parser_id const& /*id*/,
- IteratorT const& /*first*/,
- IteratorT const& /*last*/) const {}
-
- template <typename Match1T, typename Match2T>
- void concat_match(Match1T& l, Match2T const& r) const
- {
- l.concat(r);
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // match_result class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename MatchPolicyT, typename T>
- struct match_result
- {
- typedef typename MatchPolicyT::template result<T>::type type;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // action_policy class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename AttrT>
- struct attributed_action_policy
- {
- template <typename ActorT, typename IteratorT>
- static void
- call(
- ActorT const& actor,
- AttrT& val,
- IteratorT const&,
- IteratorT const&)
- {
- actor(val);
- }
- };
-
- //////////////////////////////////
- template <>
- struct attributed_action_policy<nil_t>
- {
- template <typename ActorT, typename IteratorT>
- static void
- call(
- ActorT const& actor,
- nil_t,
- IteratorT const& first,
- IteratorT const& last)
- {
- actor(first, last);
- }
- };
-
- //////////////////////////////////
- struct action_policy
- {
- template <typename ActorT, typename AttrT, typename IteratorT>
- void
- do_action(
- ActorT const& actor,
- AttrT& val,
- IteratorT const& first,
- IteratorT const& last) const
- {
- attributed_action_policy<AttrT>::call(actor, val, first, last);
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // scanner_policies class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename IterationPolicyT,
- typename MatchPolicyT,
- typename ActionPolicyT>
- struct scanner_policies :
- public IterationPolicyT,
- public MatchPolicyT,
- public ActionPolicyT
- {
- typedef IterationPolicyT iteration_policy_t;
- typedef MatchPolicyT match_policy_t;
- typedef ActionPolicyT action_policy_t;
-
- scanner_policies(
- IterationPolicyT const& i_policy = IterationPolicyT(),
- MatchPolicyT const& m_policy = MatchPolicyT(),
- ActionPolicyT const& a_policy = ActionPolicyT())
- : IterationPolicyT(i_policy)
- , MatchPolicyT(m_policy)
- , ActionPolicyT(a_policy) {}
-
- template <typename ScannerPoliciesT>
- scanner_policies(ScannerPoliciesT const& policies)
- : IterationPolicyT(policies)
- , MatchPolicyT(policies)
- , ActionPolicyT(policies) {}
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // scanner_policies_base class: the base class of all scanners
- //
- ///////////////////////////////////////////////////////////////////////////
- struct scanner_base {};
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // scanner class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename IteratorT,
- typename PoliciesT>
- class scanner : public PoliciesT, public scanner_base
- {
- public:
-
- typedef IteratorT iterator_t;
- typedef PoliciesT policies_t;
-
- typedef typename boost::detail::
- iterator_traits<IteratorT>::value_type value_t;
- typedef typename boost::detail::
- iterator_traits<IteratorT>::reference ref_t;
- typedef typename boost::
- call_traits<IteratorT>::param_type iter_param_t;
-
- scanner(
- IteratorT& first_,
- iter_param_t last_,
- PoliciesT const& policies = PoliciesT())
- : PoliciesT(policies), first(first_), last(last_)
- {
- at_end();
- }
-
- scanner(scanner const& other)
- : PoliciesT(other), first(other.first), last(other.last) {}
-
- scanner(scanner const& other, IteratorT& first_)
- : PoliciesT(other), first(first_), last(other.last) {}
-
- template <typename PoliciesT1>
- scanner(scanner<IteratorT, PoliciesT1> const& other)
- : PoliciesT(other), first(other.first), last(other.last) {}
-
- bool
- at_end() const
- {
- typedef typename PoliciesT::iteration_policy_t iteration_policy_t;
- return iteration_policy_t::at_end(*this);
- }
-
- value_t
- operator*() const
- {
- typedef typename PoliciesT::iteration_policy_t iteration_policy_t;
- return iteration_policy_t::filter(iteration_policy_t::get(*this));
- }
-
- scanner const&
- operator++() const
- {
- typedef typename PoliciesT::iteration_policy_t iteration_policy_t;
- iteration_policy_t::advance(*this);
- return *this;
- }
-
- template <typename PoliciesT2>
- struct rebind_policies
- {
- typedef scanner<IteratorT, PoliciesT2> type;
- };
-
- template <typename PoliciesT2>
- scanner<IteratorT, PoliciesT2>
- change_policies(PoliciesT2 const& policies) const
- {
- return scanner<IteratorT, PoliciesT2>(first, last, policies);
- }
-
- template <typename IteratorT2>
- struct rebind_iterator
- {
- typedef scanner<IteratorT2, PoliciesT> type;
- };
-
- template <typename IteratorT2>
- scanner<IteratorT2, PoliciesT>
- change_iterator(IteratorT2 const& first_, IteratorT2 const &last_) const
- {
- return scanner<IteratorT2, PoliciesT>(first_, last_, *this);
- }
-
- IteratorT& first;
- IteratorT const last;
-
- private:
-
- scanner&
- operator=(scanner const& other);
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // rebind_scanner_policies class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ScannerT, typename PoliciesT>
- struct rebind_scanner_policies
- {
- typedef typename ScannerT::template
- rebind_policies<PoliciesT>::type type;
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_scanner.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_scanner.hpp"
+#endif
 
- //////////////////////////////////
- template <typename ScannerT, typename IteratorT>
- struct rebind_scanner_iterator
- {
- typedef typename ScannerT::template
- rebind_iterator<IteratorT>::type type;
- };
-}}
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_scanner.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/core/scanner/scanner_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/scanner/scanner_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/core/scanner/scanner_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,48 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SCANNER_FWD_HPP)
-#define BOOST_SPIRIT_SCANNER_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SCANNER_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SCANNER_FWD
 
-namespace boost { namespace spirit
-{
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // policy classes
- //
- ///////////////////////////////////////////////////////////////////////////
- struct iteration_policy;
- struct action_policy;
- struct match_policy;
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // scanner_policies class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename IterationPolicyT = iteration_policy,
- typename MatchPolicyT = match_policy,
- typename ActionPolicyT = action_policy>
- struct scanner_policies;
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // scanner class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename IteratorT = char const*,
- typename PoliciesT = scanner_policies<> >
- class scanner;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_scanner_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_scanner_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_scanner_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/scanner/skipper.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/scanner/skipper.hpp (original)
+++ branches/CMake/release/boost/spirit/core/scanner/skipper.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,192 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SKIPPER_HPP)
-#define BOOST_SPIRIT_SKIPPER_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SKIPPER
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SKIPPER
 
-///////////////////////////////////////////////////////////////////////////////
-#include <cctype>
-
-#include <boost/spirit/core/scanner/scanner.hpp>
-#include <boost/spirit/core/primitives/impl/primitives.ipp>
-
-#include <boost/spirit/core/scanner/skipper_fwd.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // skipper_iteration_policy class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename BaseT>
- struct skipper_iteration_policy : public BaseT
- {
- typedef BaseT base_t;
-
- skipper_iteration_policy()
- : BaseT() {}
-
- template <typename PolicyT>
- skipper_iteration_policy(PolicyT const& other)
- : BaseT(other) {}
-
- template <typename ScannerT>
- void
- advance(ScannerT const& scan) const
- {
- BaseT::advance(scan);
- scan.skip(scan);
- }
-
- template <typename ScannerT>
- bool
- at_end(ScannerT const& scan) const
- {
- scan.skip(scan);
- return BaseT::at_end(scan);
- }
-
- template <typename ScannerT>
- void
- skip(ScannerT const& scan) const
- {
- while (!BaseT::at_end(scan) && impl::isspace_(BaseT::get(scan)))
- BaseT::advance(scan);
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // no_skipper_iteration_policy class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename BaseT>
- struct no_skipper_iteration_policy : public BaseT
- {
- typedef BaseT base_t;
-
- no_skipper_iteration_policy()
- : BaseT() {}
-
- template <typename PolicyT>
- no_skipper_iteration_policy(PolicyT const& other)
- : BaseT(other) {}
-
- template <typename ScannerT>
- void
- skip(ScannerT const& /*scan*/) const {}
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // skip_parser_iteration_policy class
- //
- ///////////////////////////////////////////////////////////////////////////
- namespace impl
- {
- template <typename ST, typename ScannerT, typename BaseT>
- void
- skipper_skip(
- ST const& s,
- ScannerT const& scan,
- skipper_iteration_policy<BaseT> const&);
-
- template <typename ST, typename ScannerT, typename BaseT>
- void
- skipper_skip(
- ST const& s,
- ScannerT const& scan,
- no_skipper_iteration_policy<BaseT> const&);
-
- template <typename ST, typename ScannerT>
- void
- skipper_skip(
- ST const& s,
- ScannerT const& scan,
- iteration_policy const&);
- }
-
- template <typename ParserT, typename BaseT>
- class skip_parser_iteration_policy : public skipper_iteration_policy<BaseT>
- {
- public:
-
- typedef skipper_iteration_policy<BaseT> base_t;
-
- skip_parser_iteration_policy(
- ParserT const& skip_parser,
- base_t const& base = base_t())
- : base_t(base), subject(skip_parser) {}
-
- template <typename PolicyT>
- skip_parser_iteration_policy(PolicyT const& other)
- : base_t(other), subject(other.skipper()) {}
-
- template <typename ScannerT>
- void
- skip(ScannerT const& scan) const
- {
- impl::skipper_skip(subject, scan, scan);
- }
-
- ParserT const&
- skipper() const
- {
- return subject;
- }
-
- private:
-
- ParserT const& subject;
- };
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Free parse functions using the skippers
- //
- ///////////////////////////////////////////////////////////////////////////////
- template <typename IteratorT, typename ParserT, typename SkipT>
- parse_info<IteratorT>
- parse(
- IteratorT const& first,
- IteratorT const& last,
- parser<ParserT> const& p,
- parser<SkipT> const& skip);
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Parse function for null terminated strings using the skippers
- //
- ///////////////////////////////////////////////////////////////////////////////
- template <typename CharT, typename ParserT, typename SkipT>
- parse_info<CharT const*>
- parse(
- CharT const* str,
- parser<ParserT> const& p,
- parser<SkipT> const& skip);
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // phrase_scanner_t and wide_phrase_scanner_t
- //
- // The most common scanners. Use these typedefs when you need
- // a scanner that skips white spaces.
- //
- ///////////////////////////////////////////////////////////////////////////////
- typedef skipper_iteration_policy<> iter_policy_t;
- typedef scanner_policies<iter_policy_t> scanner_policies_t;
- typedef scanner<char const*, scanner_policies_t> phrase_scanner_t;
- typedef scanner<wchar_t const*, scanner_policies_t> wide_phrase_scanner_t;
-
- ///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_skipper.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_skipper.hpp"
+#endif
 
-#include <boost/spirit/core/scanner/impl/skipper.ipp>
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_skipper.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/scanner/skipper_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/scanner/skipper_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/core/scanner/skipper_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,28 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SKIPPER_FWD_HPP)
-#define BOOST_SPIRIT_SKIPPER_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SKIPPER_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SKIPPER_FWD
 
-#include <boost/spirit/core/scanner/scanner_fwd.hpp>
-
-namespace boost { namespace spirit {
-
- template <typename BaseT = iteration_policy>
- struct skipper_iteration_policy;
-
- template <typename BaseT = iteration_policy>
- struct no_skipper_iteration_policy;
-
- template <typename ParserT, typename BaseT = iteration_policy>
- class skip_parser_iteration_policy;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_skipper_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_skipper_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_skipper_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/core/typeof.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/core/typeof.hpp (original)
+++ branches/CMake/release/boost/spirit/core/typeof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,335 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_CORE_TYPEOF_HPP)
-#define BOOST_SPIRIT_CORE_TYPEOF_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
 
-#include <boost/config.hpp>
-#include <boost/cstdint.hpp>
-
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/spirit/core/nil.hpp>
-#include <boost/spirit/core/primitives/numerics_fwd.hpp>
-#include <boost/spirit/core/scanner/scanner_fwd.hpp>
-#include <boost/spirit/core/scanner/skipper_fwd.hpp>
-#include <boost/spirit/core/non_terminal/subrule_fwd.hpp>
-
-namespace boost { namespace spirit {
-
- // parser.hpp
- template <typename IteratorT> struct parse_info;
- struct plain_parser_category;
- struct binary_parser_category;
- struct unary_parser_category;
- struct action_parser_category;
-
- // match.hpp
- template<typename T> class match;
-
- // primitives/primitives.hpp
- template<class ParserT> struct negated_char_parser;
- template<typename CharT> struct chlit;
- template<typename CharT> struct range;
- template<typename IteratorT> class chseq;
- template<typename IteratorT> class strlit;
- struct nothing_parser;
- struct anychar_parser;
- struct alnum_parser;
- struct alpha_parser;
- struct cntrl_parser;
- struct digit_parser;
- struct xdigit_parser;
- struct graph_parser;
- struct upper_parser;
- struct lower_parser;
- struct print_parser;
- struct punct_parser;
- struct blank_parser;
- struct space_parser;
- struct eol_parser;
- struct end_parser;
-
- // non_terminal/parser_context.hpp
- template<typename T> struct parser_context;
-
- // non_terminal/parser_id.hpp
- class parser_id;
- template<int N> struct parser_tag;
- class dynamic_parser_tag;
- struct parser_address_tag;
-
- // non_terminal/rule.hpp
- template<typename T0, typename T1, typename T2> class rule;
-
- // non_terminal/grammar.hpp
- template<class DerivedT, typename ContextT> struct grammar;
-
- // composite.hpp
- template<class ParserT, typename ActionT> class action;
- template<class A, class B> struct alternative;
- template<class A, class B> struct difference;
- template<class A, class B> struct exclusive_or;
- template<class A, class B> struct intersection;
- template<class a, class b> struct sequence;
- template<class A, class B> struct sequential_or;
- template<class S> struct kleene_star;
- template<class S> struct positive;
- template<class S> struct optional;
- // composite/directives.hpp
- template<class ParserT> struct contiguous;
- template<class ParserT> struct inhibit_case;
- template<class BaseT> struct inhibit_case_iteration_policy;
- template<class A, class B> struct longest_alternative;
- template<class A, class B> struct shortest_alternative;
- template<class ParserT, typename BoundsT> struct min_bounded;
- template<class ParserT, typename BoundsT> struct max_bounded;
- template<class ParserT, typename BoundsT> struct bounded;
- // composite/no_actions.hpp
- template<class Parser> struct no_actions_parser;
- template<class Base> struct no_actions_action_policy;
- // composite/epsilon.hpp
- struct epsilon_parser;
- template<typename CondT, bool positive> struct condition_parser;
- template<typename SubjectT> struct empty_match_parser;
- template<typename SubjectT> struct negated_empty_match_parser;
-
- // deprecated assign/push_back actor -- they live somewhere else, now
- struct assign_action;
- struct push_back_action;
- template<typename T, typename ActionT> class ref_value_actor;
- template<typename T, typename ValueT, typename ActionT>
- class ref_const_ref_actor;
-
-}} // namespace boost::spirit
-
-
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-
-// parser.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parse_info,1)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::plain_parser_category)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::binary_parser_category)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::unary_parser_category)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::action_parser_category)
-
-
-// nil.hpp (included directly)
-
-#if !defined(BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED)
-// registration guard to decouple the iterators from the core
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::nil_t)
-# define BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED
-#endif
-
-// match.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::match, 1)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::match<boost::spirit::nil_t>)
-
-
-// primitives/primitives.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::negated_char_parser, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::chlit, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::range, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::chseq, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::strlit, 1)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::nothing_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::anychar_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::alnum_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::alpha_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::cntrl_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::digit_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::xdigit_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::graph_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::upper_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::lower_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::print_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::punct_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::blank_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::space_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::eol_parser)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::end_parser)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chlit<char>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chlit<wchar_t>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::range<char>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::range<wchar_t>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chseq<char const *>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chseq<wchar_t const *>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strlit<char const *>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strlit<wchar_t const *>)
-
-
-// primitives/numerics.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::int_parser, (class)(int)(unsigned)(int))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::uint_parser, (class)(int)(unsigned)(int))
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::sign_parser)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::real_parser, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::real_parser_policies, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ureal_parser_policies, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::strict_real_parser_policies, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::strict_ureal_parser_policies, 1)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::int_parser, (class)(int))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::uint_parser, (class)(int))
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::int_parser<boost::int32_t>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::uint_parser<boost::uint32_t>)
-#if !defined(BOOST_NO_INT64_T)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::int_parser<boost::int64_t>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::uint_parser<boost::uint64_t>)
-#endif
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::real_parser_policies<float>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::real_parser_policies<double>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::ureal_parser_policies<float>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::ureal_parser_policies<double>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strict_real_parser_policies<float>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strict_real_parser_policies<double>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strict_ureal_parser_policies<float>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strict_ureal_parser_policies<double>)
-
-
-// scanner/scanner.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner_policies,3)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::iteration_policy)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::action_policy)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::match_policy)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner_policies,2)
-
-
-// scanner/skipper.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::skipper_iteration_policy,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::no_skipper_iteration_policy,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::skip_parser_iteration_policy,2)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::skipper_iteration_policy<>)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::skip_parser_iteration_policy,1)
-
-
-// non_terminal/parser_context.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parser_context,1)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::parser_context<boost::spirit::nil_t>)
-
-
-// non_terminal/parser_id.hpp
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::parser_id)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parser_tag, (int))
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::dynamic_parser_tag)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::parser_address_tag)
-
-
-// non_terminal/subrule.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrule,(int)(class))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrule_parser,(int)(class)(class))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrule_list,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrules_scanner,2)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrule,(int))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrule_parser,(int)(class))
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<0>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<1>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<2>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<3>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<4>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<5>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<6>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<7>)
-
-
-// non_terminal/rule.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::rule,3)
-#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner_list,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner_list,BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT)
-#endif
-
-
-// non_terminal/grammar.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar,2)
-
-
-// composite.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::action, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::alternative, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::difference, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::exclusive_or, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::intersection, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::sequence, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::sequential_or, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::kleene_star, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::positive, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::optional, 1)
-
-
-// composite/directives.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::contiguous, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::inhibit_case, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::inhibit_case_iteration_policy,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::longest_alternative, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::shortest_alternative, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::min_bounded, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::max_bounded, 2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::bounded, 2)
-
-
-// composite/no_actions.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::no_actions_parser, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::no_actions_action_policy, 1)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::no_actions_action_policy<boost::spirit::action_policy>)
-
-
-// composite/epsilon.hpp
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::epsilon_parser)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::condition_parser, (class)(bool))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::empty_match_parser, 1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::negated_empty_match_parser, 1)
-
-
-#if !defined(BOOST_SPIRIT_ACTOR_TYPEOF_HPP)
-// deprecated assign/push_back actor -- they live somewhere else, now
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_value_actor,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_const_ref_actor,3)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::assign_action)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::push_back_action)
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp"
 #endif
 
-
-#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1400)) && BOOST_MSVC >= 1400
-namespace boost { namespace spirit {
-
- nil_t & operator* (nil_t);
- nil_t & operator+ (nil_t);
-
-} } // namespace ::boost::spirit::type_of
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
-
+#include <boost/spirit/include/classic_typeof.hpp>
 
 #endif
-

Modified: branches/CMake/release/boost/spirit/debug.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/debug.hpp (original)
+++ branches/CMake/release/boost/spirit/debug.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,146 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP)
-#define BOOST_SPIRIT_DEBUG_MAIN_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_DEBUG
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_DEBUG
 
-///////////////////////////////////////////////////////////////////////////
-#if defined(BOOST_SPIRIT_DEBUG)
-
-#include <boost/spirit/version.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit.Debug includes and defines
-//
-///////////////////////////////////////////////////////////////////////////////
-
- #include <iostream>
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // The BOOST_SPIRIT_DEBUG_OUT defines the stream object, which should be used
- // for debug diagnostics. This defaults to std::cout.
- //
- ///////////////////////////////////////////////////////////////////////////
- #if !defined(BOOST_SPIRIT_DEBUG_OUT)
- #define BOOST_SPIRIT_DEBUG_OUT std::cout
- #endif
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // The BOOST_SPIRIT_DEBUG_PRINT_SOME constant defines the number of characters
- // from the stream to be printed for diagnosis. This defaults to the first
- // 20 characters.
- //
- ///////////////////////////////////////////////////////////////////////////
- #if !defined(BOOST_SPIRIT_DEBUG_PRINT_SOME)
- #define BOOST_SPIRIT_DEBUG_PRINT_SOME 20
- #endif
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Additional BOOST_SPIRIT_DEBUG_FLAGS control the level of diagnostics printed
- // Basic constants are defined in debug/minimal.hpp.
- //
- ///////////////////////////////////////////////////////////////////////////
- #define BOOST_SPIRIT_DEBUG_FLAGS_NODES 0x0001 // node diagnostics
- #define BOOST_SPIRIT_DEBUG_FLAGS_ESCAPE_CHAR 0x0002 // escape_char_parse diagnostics
- #define BOOST_SPIRIT_DEBUG_FLAGS_TREES 0x0004 // parse tree/ast diagnostics
- #define BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES 0x0008 // closure diagnostics
- #define BOOST_SPIRIT_DEBUG_FLAGS_SLEX 0x8000 // slex diagnostics
-
- #define BOOST_SPIRIT_DEBUG_FLAGS_MAX 0xFFFF // print maximal diagnostics
-
- #if !defined(BOOST_SPIRIT_DEBUG_FLAGS)
- #define BOOST_SPIRIT_DEBUG_FLAGS BOOST_SPIRIT_DEBUG_FLAGS_MAX
- #endif
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // By default all nodes are traced (even those, not registered with
- // BOOST_SPIRIT_DEBUG_RULE et.al. - see below). The following constant may be
- // used to redefine this default.
- //
- ///////////////////////////////////////////////////////////////////////////
- #if !defined(BOOST_SPIRIT_DEBUG_TRACENODE)
- #define BOOST_SPIRIT_DEBUG_TRACENODE (true)
- #endif // !defined(BOOST_SPIRIT_DEBUG_TRACENODE)
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Helper macros for giving rules and subrules a name accessible through
- // parser_name() functions (see parser_names.hpp).
- //
- // Additionally, the macros BOOST_SPIRIT_DEBUG_RULE, SPIRIT_DEBUG_NODE and
- // BOOST_SPIRIT_DEBUG_GRAMMAR enable/disable the tracing of the
- // correspondingnode accordingly to the PP constant
- // BOOST_SPIRIT_DEBUG_TRACENODE.
- //
- // The macros BOOST_SPIRIT_DEBUG_TRACE_RULE, BOOST_SPIRIT_DEBUG_TRACE_NODE
- // and BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR allow to specify a flag to define,
- // whether the corresponding node is to be traced or not.
- //
- ///////////////////////////////////////////////////////////////////////////
- #if !defined(BOOST_SPIRIT_DEBUG_RULE)
- #define BOOST_SPIRIT_DEBUG_RULE(r) \
- ::boost::spirit::impl::get_node_registry().register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
- #endif // !defined(BOOST_SPIRIT_DEBUG_RULE)
-
- #if !defined(BOOST_SPIRIT_DEBUG_NODE)
- #define BOOST_SPIRIT_DEBUG_NODE(r) \
- ::boost::spirit::impl::get_node_registry().register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
- #endif // !defined(BOOST_SPIRIT_DEBUG_NODE)
-
- #if !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
- #define BOOST_SPIRIT_DEBUG_GRAMMAR(r) \
- ::boost::spirit::impl::get_node_registry().register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
- #endif // !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
-
- #if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE)
- #define BOOST_SPIRIT_DEBUG_TRACE_RULE(r, t) \
- ::boost::spirit::impl::get_node_registry().register_node(&r, #r, (t))
- #endif // !defined(BOOST_SPIRIT_TRACE_RULE)
-
- #if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
- #define BOOST_SPIRIT_DEBUG_TRACE_NODE(r, t) \
- ::boost::spirit::impl::get_node_registry().register_node(&r, #r, (t))
- #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
-
- #if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
- #define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR(r, t) \
- ::boost::spirit::impl::get_node_registry().register_node(&r, #r, (t))
- #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
-
- #if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
- #define BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME(r, n, t) \
- ::boost::spirit::impl::get_node_registry().register_node(&r, (n), (t))
- #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
-
- #if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
- #define BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME(r, n, t) \
- ::boost::spirit::impl::get_node_registry().register_node(&r, (n), (t))
- #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
-
- #if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
- #define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(r, n, t) \
- ::boost::spirit::impl::get_node_registry().register_node(&r, (n), (t))
- #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
-
- //////////////////////////////////
- #include <boost/spirit/debug/debug_node.hpp>
-
-#else
- //////////////////////////////////
- #include <boost/spirit/debug/minimal.hpp>
-
-#endif // BOOST_SPIRIT_DEBUG
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_debug.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_debug.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_debug.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/debug/debug_node.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/debug/debug_node.hpp (original)
+++ branches/CMake/release/boost/spirit/debug/debug_node.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,315 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- Copyright (c) 2003 Gustavo Guerra
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_DEBUG_NODE_HPP)
-#define BOOST_SPIRIT_DEBUG_NODE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_DEBUG_NODE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_DEBUG_NODE
 
-#if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP)
-#error "You must include boost/spirit/debug.hpp, not boost/spirit/debug/debug_node.hpp"
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_debug_node.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_debug_node.hpp"
 #endif
 
-#if defined(BOOST_SPIRIT_DEBUG)
-
-#include <string>
-
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp> // for iscntrl_
-
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Debug helper classes for rules, which ensure maximum non-intrusiveness of
-// the Spirit debug support
-//
-///////////////////////////////////////////////////////////////////////////////
-
-namespace impl {
-
- struct token_printer_aux_for_chars
- {
- template<typename CharT>
- static void print(std::ostream& o, CharT c)
- {
- if (c == static_cast<CharT>('\a'))
- o << "\\a";
-
- else if (c == static_cast<CharT>('\b'))
- o << "\\b";
-
- else if (c == static_cast<CharT>('\f'))
- o << "\\f";
-
- else if (c == static_cast<CharT>('\n'))
- o << "\\n";
-
- else if (c == static_cast<CharT>('\r'))
- o << "\\r";
-
- else if (c == static_cast<CharT>('\t'))
- o << "\\t";
-
- else if (c == static_cast<CharT>('\v'))
- o << "\\v";
-
- else if (iscntrl_(c))
- o << "\\" << static_cast<int>(c);
-
- else
- o << static_cast<char>(c);
- }
- };
-
- // for token types where the comparison with char constants wouldn't work
- struct token_printer_aux_for_other_types
- {
- template<typename CharT>
- static void print(std::ostream& o, CharT c)
- {
- o << c;
- }
- };
-
- template <typename CharT>
- struct token_printer_aux
- : mpl::if_<
- mpl::and_<
- is_convertible<CharT, char>,
- is_convertible<char, CharT> >,
- token_printer_aux_for_chars,
- token_printer_aux_for_other_types
- >::type
- {
- };
-
- template<typename CharT>
- inline void token_printer(std::ostream& o, CharT c)
- {
- #if !defined(BOOST_SPIRIT_DEBUG_TOKEN_PRINTER)
-
- token_printer_aux<CharT>::print(o, c);
-
- #else
-
- BOOST_SPIRIT_DEBUG_TOKEN_PRINTER(o, c);
-
- #endif
- }
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Dump infos about the parsing state of a rule
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
- template <typename IteratorT>
- inline void
- print_node_info(bool hit, int level, bool close, std::string const& name,
- IteratorT first, IteratorT last)
- {
- if (!name.empty())
- {
- for (int i = 0; i < level; ++i)
- BOOST_SPIRIT_DEBUG_OUT << " ";
- if (close)
- {
- if (hit)
- BOOST_SPIRIT_DEBUG_OUT << "/";
- else
- BOOST_SPIRIT_DEBUG_OUT << "#";
- }
- BOOST_SPIRIT_DEBUG_OUT << name << ":\t\"";
- IteratorT iter = first;
- IteratorT ilast = last;
- for (int j = 0; j < BOOST_SPIRIT_DEBUG_PRINT_SOME; ++j)
- {
- if (iter == ilast)
- break;
-
- token_printer(BOOST_SPIRIT_DEBUG_OUT, *iter);
- ++iter;
- }
- BOOST_SPIRIT_DEBUG_OUT << "\"\n";
- }
- }
-#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
-
-#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
- template <typename ResultT>
- inline ResultT &
- print_closure_info(ResultT &hit, int level, std::string const& name)
- {
- if (!name.empty())
- {
- for (int i = 0; i < level-1; ++i)
- BOOST_SPIRIT_DEBUG_OUT << " ";
-
- // for now, print out the return value only
- BOOST_SPIRIT_DEBUG_OUT << "^" << name << ":\t";
- if (hit.has_valid_attribute())
- BOOST_SPIRIT_DEBUG_OUT << hit.value();
- else
- BOOST_SPIRIT_DEBUG_OUT << "undefined attribute";
- BOOST_SPIRIT_DEBUG_OUT << "\n";
- }
- return hit;
- }
-#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
-
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Implementation note: The parser_context_linker, parser_scanner_linker and
-// closure_context_linker classes are wrapped by a PP constant to allow
-// redefinition of this classes outside of Spirit
-//
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
-#define BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_context_linker is a debug wrapper for the ContextT template
- // parameter of the rule<>, subrule<> and the grammar<> classes
- //
- ///////////////////////////////////////////////////////////////////////////
- template<typename ContextT>
- struct parser_context_linker : public ContextT
- {
- typedef ContextT base_t;
-
- template <typename ParserT>
- parser_context_linker(ParserT const& p)
- : ContextT(p) {}
-
- template <typename ParserT, typename ScannerT>
- void pre_parse(ParserT const& p, ScannerT &scan)
- {
- this->base_t::pre_parse(p, scan);
-
-#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
- if (trace_parser(p.derived())) {
- impl::print_node_info(
- false,
- scan.get_level(),
- false,
- parser_name(p.derived()),
- scan.first,
- scan.last);
- }
- scan.get_level()++;
-#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
- }
-
- template <typename ResultT, typename ParserT, typename ScannerT>
- ResultT& post_parse(ResultT& hit, ParserT const& p, ScannerT &scan)
- {
-#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
- --scan.get_level();
- if (trace_parser(p.derived())) {
- impl::print_node_info(
- hit,
- scan.get_level(),
- true,
- parser_name(p.derived()),
- scan.first,
- scan.last);
- }
-#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
-
- return this->base_t::post_parse(hit, p, scan);
- }
- };
-
-#endif // !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
-
-#if !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
-#define BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED
-
-///////////////////////////////////////////////////////////////////////////////
-// This class is to avoid linker problems and to ensure a real singleton
-// 'level' variable
- struct debug_support
- {
- int& get_level()
- {
- static int level = 0;
- return level;
- }
- };
-
- template<typename ScannerT>
- struct parser_scanner_linker : public ScannerT
- {
- parser_scanner_linker(ScannerT const &scan_) : ScannerT(scan_)
- {}
-
- int &get_level()
- { return debug.get_level(); }
-
- private: debug_support debug;
- };
-
-#endif // !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
-
-#if !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
-#define BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // closure_context_linker is a debug wrapper for the closure template
- // parameter of the rule<>, subrule<> and grammar classes
- //
- ///////////////////////////////////////////////////////////////////////////
-
- template<typename ContextT>
- struct closure_context_linker : public parser_context_linker<ContextT>
- {
- typedef parser_context_linker<ContextT> base_t;
-
- template <typename ParserT>
- closure_context_linker(ParserT const& p)
- : parser_context_linker<ContextT>(p) {}
-
- template <typename ParserT, typename ScannerT>
- void pre_parse(ParserT const& p, ScannerT &scan)
- { this->base_t::pre_parse(p, scan); }
-
- template <typename ResultT, typename ParserT, typename ScannerT>
- ResultT&
- post_parse(ResultT& hit, ParserT const& p, ScannerT &scan)
- {
-#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
- if (hit && trace_parser(p.derived())) {
- // for now, print out the return value only
- return impl::print_closure_info(
- this->base_t::post_parse(hit, p, scan),
- scan.get_level(),
- parser_name(p.derived())
- );
- }
-#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
-
- return this->base_t::post_parse(hit, p, scan);
- }
- };
-
-#endif // !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
-
-}} // namespace boost::spirit
-
-#endif // defined(BOOST_SPIRIT_DEBUG)
-
-#endif // !defined(BOOST_SPIRIT_DEBUG_NODE_HPP)
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_debug_node.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/debug/minimal.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/debug/minimal.hpp (original)
+++ branches/CMake/release/boost/spirit/debug/minimal.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,82 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_MINIMAL_DEBUG_HPP)
-#define BOOST_SPIRIT_MINIMAL_DEBUG_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_MINIMAL
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_MINIMAL
 
-#if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP)
-#error "You must include boost/spirit/debug.hpp, not boost/spirit/debug/minimal.hpp"
-#endif
-///////////////////////////////////////////////////////////////////////////////
-//
-// Minimum debugging tools support
-//
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_SPIRIT_DEBUG_OUT)
-#define BOOST_SPIRIT_DEBUG_OUT std::cout
-#endif
-
-///////////////////////////////////////////////////////////////////////////
-//
-// BOOST_SPIRIT_DEBUG_FLAGS controls the level of diagnostics printed
-//
-///////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_SPIRIT_DEBUG_FLAGS_NONE)
-#define BOOST_SPIRIT_DEBUG_FLAGS_NONE 0x0000 // no diagnostics at all
-#endif
-
-#if !defined(BOOST_SPIRIT_DEBUG_FLAGS_MAX)
-#define BOOST_SPIRIT_DEBUG_FLAGS_MAX 0xFFFF // print maximal diagnostics
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_minimal.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_minimal.hpp"
 #endif
 
-#if !defined(BOOST_SPIRIT_DEBUG_FLAGS)
-#define BOOST_SPIRIT_DEBUG_FLAGS SPIRIT_DEBUG_FLAGS_MAX
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_minimal.hpp>
 
-#if !defined(BOOST_SPIRIT_DEBUG_PRINT_SOME)
-#define BOOST_SPIRIT_DEBUG_PRINT_SOME 20
 #endif
-
-#if !defined(BOOST_SPIRIT_DEBUG_RULE)
-#define BOOST_SPIRIT_DEBUG_RULE(r)
-#endif // !defined(BOOST_SPIRIT_DEBUG_RULE)
-
-#if !defined(BOOST_SPIRIT_DEBUG_NODE)
-#define BOOST_SPIRIT_DEBUG_NODE(r)
-#endif // !defined(BOOST_SPIRIT_DEBUG_NODE)
-
-#if !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
-#define BOOST_SPIRIT_DEBUG_GRAMMAR(r)
-#endif // !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
-
-#if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE)
-#define BOOST_SPIRIT_DEBUG_TRACE_RULE(r, t)
-#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE)
-
-#if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
-#define BOOST_SPIRIT_DEBUG_TRACE_NODE(r, t)
-#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
-
-#if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
-#define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR(r, t)
-#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
-
-#if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
-#define BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME(r, n, t)
-#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
-
-#if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
-#define BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME(r, n, t)
-#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
-
-#if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
-#define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(r, n, t)
-#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
-
-#endif // !defined(BOOST_SPIRIT_MINIMAL_DEBUG_HPP)

Modified: branches/CMake/release/boost/spirit/debug/parser_names.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/debug/parser_names.hpp (original)
+++ branches/CMake/release/boost/spirit/debug/parser_names.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,250 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_PARSER_NAMES_HPP)
-#define BOOST_SPIRIT_PARSER_NAMES_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSER_NAMES
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSER_NAMES
 
-#if defined(BOOST_SPIRIT_DEBUG)
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_parser_names.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_parser_names.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_parser_names.hpp>
 
-//////////////////////////////////
-#include <boost/spirit/core.hpp>
-
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Declaration of helper functions, which return the name of a concrete
-// parser instance. The functions are specialized on the parser types. The
-// functions declared in this file are for the predefined parser types from
-// the Spirit core library only, so additional functions might be provided as
-// needed.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-// from actions.hpp
- template <typename ParserT, typename ActionT>
- std::string
- parser_name(action<ParserT, ActionT> const& p);
-
-///////////////////////////////////////////////////////////////////////////////
-// from directives.hpp
- template <typename ParserT>
- std::string
- parser_name(contiguous<ParserT> const& p);
-
- template <typename ParserT>
- std::string
- parser_name(inhibit_case<ParserT> const& p);
-
- template <typename A, typename B>
- std::string
- parser_name(longest_alternative<A, B> const& p);
-
- template <typename A, typename B>
- std::string
- parser_name(shortest_alternative<A, B> const& p);
-
-///////////////////////////////////////////////////////////////////////////////
-// from grammar.hpp
- template <typename DerivedT, typename ContextT>
- std::string
- parser_name(grammar<DerivedT, ContextT> const& p);
-
-///////////////////////////////////////////////////////////////////////////////
-// from numerics.hpp
- template <typename T, int Radix, unsigned MinDigits, int MaxDigits>
- std::string
- parser_name(uint_parser<T, Radix, MinDigits, MaxDigits> const& p);
-
- template <typename T, int Radix, unsigned MinDigits, int MaxDigits>
- std::string
- parser_name(int_parser<T, Radix, MinDigits, MaxDigits> const& p);
-
- template <typename T, typename RealPoliciesT>
- std::string
- parser_name(real_parser<T, RealPoliciesT> const& p);
-
-///////////////////////////////////////////////////////////////////////////////
-// from operators.hpp
- template <typename A, typename B>
- std::string
- parser_name(sequence<A, B> const& p);
-
- template <typename A, typename B>
- std::string
- parser_name(sequential_or<A, B> const& p);
-
- template <typename A, typename B>
- std::string
- parser_name(alternative<A, B> const& p);
-
- template <typename A, typename B>
- std::string
- parser_name(intersection<A, B> const& p);
-
- template <typename A, typename B>
- std::string
- parser_name(difference<A, B> const& p);
-
- template <typename A, typename B>
- std::string
- parser_name(exclusive_or<A, B> const& p);
-
- template <typename S>
- std::string
- parser_name(optional<S> const& p);
-
- template <typename S>
- std::string
- parser_name(kleene_star<S> const& p);
-
- template <typename S>
- std::string
- parser_name(positive<S> const& p);
-
-///////////////////////////////////////////////////////////////////////////////
-// from parser.hpp
- template <typename DerivedT>
- std::string
- parser_name(parser<DerivedT> const& p);
-
-///////////////////////////////////////////////////////////////////////////////
-// from primitives.hpp
- template <typename DerivedT>
- std::string
- parser_name(char_parser<DerivedT> const &p);
-
- template <typename CharT>
- std::string
- parser_name(chlit<CharT> const &p);
-
- template <typename CharT>
- std::string
- parser_name(range<CharT> const &p);
-
- template <typename IteratorT>
- std::string
- parser_name(chseq<IteratorT> const &p);
-
- template <typename IteratorT>
- std::string
- parser_name(strlit<IteratorT> const &p);
-
- std::string
- parser_name(nothing_parser const &p);
-
- std::string
- parser_name(epsilon_parser const &p);
-
- std::string
- parser_name(anychar_parser const &p);
-
- std::string
- parser_name(alnum_parser const &p);
-
- std::string
- parser_name(alpha_parser const &p);
-
- std::string
- parser_name(cntrl_parser const &p);
-
- std::string
- parser_name(digit_parser const &p);
-
- std::string
- parser_name(graph_parser const &p);
-
- std::string
- parser_name(lower_parser const &p);
-
- std::string
- parser_name(print_parser const &p);
-
- std::string
- parser_name(punct_parser const &p);
-
- std::string
- parser_name(blank_parser const &p);
-
- std::string
- parser_name(space_parser const &p);
-
- std::string
- parser_name(upper_parser const &p);
-
- std::string
- parser_name(xdigit_parser const &p);
-
- std::string
- parser_name(eol_parser const &p);
-
- std::string
- parser_name(end_parser const &p);
-
-///////////////////////////////////////////////////////////////////////////////
-// from rule.hpp
- template<typename T0, typename T1, typename T2>
- std::string
- parser_name(rule<T0, T1, T2> const& p);
-
-///////////////////////////////////////////////////////////////////////////////
-// from subrule.hpp
- template <typename FirstT, typename RestT>
- std::string
- parser_name(subrule_list<FirstT, RestT> const &p);
-
- template <int ID, typename DefT, typename ContextT>
- std::string
- parser_name(subrule_parser<ID, DefT, ContextT> const &p);
-
- template <int ID, typename ContextT>
- std::string
- parser_name(subrule<ID, ContextT> const &p);
-
-///////////////////////////////////////////////////////////////////////////////
-// from chset.hpp
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Decide, if a node is to be traced or not
-//
-///////////////////////////////////////////////////////////////////////////////
- template<
- typename DerivedT, typename EmbedT,
- typename T0, typename T1, typename T2
- >
- bool
- trace_parser(impl::rule_base<DerivedT, EmbedT, T0, T1, T2>
- const& p);
-
- template <typename DerivedT, typename ContextT>
- bool
- trace_parser(grammar<DerivedT, ContextT> const& p);
-
- template <int ID, typename ContextT>
- bool
- trace_parser(subrule<ID, ContextT> const& p);
-
- template <typename ParserT, typename ActorTupleT>
- struct init_closure_parser;
-
- template <typename ParserT, typename ActorTupleT>
- bool
- trace_parser(init_closure_parser<ParserT, ActorTupleT> const& p);
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
-
-//////////////////////////////////
-#include <boost/spirit/debug/impl/parser_names.ipp>
-
-#endif // defined(BOOST_SPIRIT_DEBUG)
-
-#endif // !defined(BOOST_SPIRIT_PARSER_NAMES_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/debug/typeof.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/debug/typeof.hpp (original)
+++ branches/CMake/release/boost/spirit/debug/typeof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,36 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_DEBUG_TYPEOF_HPP)
-#define BOOST_SPIRIT_DEBUG_TYPEOF_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
 
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/spirit/core/typeof.hpp>
-
-
-namespace boost { namespace spirit {
-
- // debug_node.hpp
- template<typename ContextT> struct parser_context_linker;
- template<typename ScannerT> struct scanner_context_linker;
- template<typename ContextT> struct closure_context_linker;
-
-}} // namespace boost::spirit
-
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-
-// debug_node.hpp
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parser_context_linker,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner_context_linker,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure_context_linker,1)
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_typeof.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/dynamic.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,29 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002 Juan Carlos Arevalo-Baeza
- Copyright (c) 2002-2003 Martin Wille
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_DYNAMIC_HPP
-#define BOOST_SPIRIT_DYNAMIC_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_DYNAMIC
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_DYNAMIC
 
-#include <boost/spirit/version.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_dynamic.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_dynamic.hpp"
+#endif
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// Master header for Spirit.Dynamic
-//
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/dynamic/if.hpp>
-#include <boost/spirit/dynamic/for.hpp>
-#include <boost/spirit/dynamic/while.hpp>
-#include <boost/spirit/dynamic/lazy.hpp>
-#include <boost/spirit/dynamic/stored_rule.hpp>
-#include <boost/spirit/dynamic/rule_alias.hpp>
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_dynamic.hpp>
 
-////////////////////////////////////////////////////////////////////////////////
-#endif // BOOST_SPIRIT_DYNAMIC_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/dynamic/for.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic/for.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic/for.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,183 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002-2003 Martin Wille
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_FOR_HPP
-#define BOOST_SPIRIT_FOR_HPP
-////////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/dynamic/impl/conditions.ipp>
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_FOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_FOR
 
-////////////////////////////////////////////////////////////////////////////////
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_for.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_for.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_for.hpp>
 
-namespace boost { namespace spirit
-{
- namespace impl
- {
-
- template <typename FuncT>
- struct for_functor
- {
- typedef typename boost::call_traits<FuncT>::param_type param_t;
-
- for_functor(param_t f) : func(f) {}
- for_functor() {}
- FuncT func;
- };
-
- template <typename InitF>
- struct for_init_functor : for_functor<InitF>
- {
- typedef for_functor<InitF> base_t;
- typedef typename base_t::param_t param_t;
-
- for_init_functor(param_t f) : base_t(f) {}
- for_init_functor() : base_t() {}
- void init() const { /*return*/ this->func(); }
- };
-
- template <typename StepF>
- struct for_step_functor : for_functor<StepF>
- {
- typedef for_functor<StepF> base_t;
- typedef typename base_t::param_t param_t;
-
- for_step_functor(param_t f) : base_t(f) {}
- for_step_functor() : base_t() {}
- void step() const { /*return*/ this->func(); }
- };
-
- //////////////////////////////////
- // for_parser
- template
- <
- typename InitF, typename CondT, typename StepF,
- typename ParsableT
- >
- struct for_parser
- : private for_init_functor<InitF>
- , private for_step_functor<StepF>
- , private condition_evaluator<typename as_parser<CondT>::type>
- , public unary
- <
- typename as_parser<ParsableT>::type,
- parser< for_parser<InitF, CondT, StepF, ParsableT> >
- >
- {
- typedef for_parser<InitF, CondT, StepF, ParsableT> self_t;
- typedef as_parser<CondT> cond_as_parser_t;
- typedef typename cond_as_parser_t::type condition_t;
- typedef condition_evaluator<condition_t> eval_t;
- typedef as_parser<ParsableT> as_parser_t;
- typedef typename as_parser_t::type parser_t;
- typedef unary< parser_t, parser< self_t > > base_t;
-
-
- //////////////////////////////
- // constructor, saves init, condition and step functors
- // for later use the parse member function
- for_parser
- (
- InitF const &i, CondT const &c, StepF const &s,
- ParsableT const &p
- )
- : for_init_functor<InitF>(i)
- , for_step_functor<StepF>(s)
- , eval_t(cond_as_parser_t::convert(c))
- , base_t(as_parser_t::convert(p))
- { }
-
- for_parser()
- : for_init_functor<InitF>()
- , for_step_functor<StepF>()
- , eval_t()
- , base_t()
- {}
-
- //////////////////////////////
- // parse member function
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const &scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type
- result_t;
- typedef typename parser_result<parser_t, ScannerT>::type
- body_result_t;
-
- typename ScannerT::iterator_t save(scan.first);
-
- std::size_t length = 0;
- int eval_length = 0;
-
- this->init();
- while ((eval_length = this->evaluate(scan))>=0)
- {
- length += eval_length;
- body_result_t tmp(this->subject().parse(scan));
- if (tmp)
- {
- length+=tmp.length();
- }
- else
- {
- return scan.no_match();
- }
- this->step();
- }
-
- boost::spirit::nil_t attr;
- return scan.create_match
- (length, attr, save, scan.first);
- }
- };
-
- //////////////////////////////////
- // for_parser_gen generates takes the body parser in brackets
- // and returns the for_parser
- template <typename InitF, typename CondT, typename StepF>
- struct for_parser_gen
- {
- for_parser_gen(InitF const &i, CondT const &c, StepF const &s)
- : init(i)
- , condition(c)
- , step(s)
- {}
-
- template <typename ParsableT>
- for_parser<InitF, CondT, StepF, ParsableT>
- operator[](ParsableT const &p) const
- {
- return for_parser<InitF, CondT, StepF, ParsableT>
- (init, condition, step, p);
- }
-
- InitF const &init;
- CondT const &condition;
- StepF const &step;
- };
- } // namespace impl
-
- //////////////////////////////
- // for_p, returns for-parser generator
- // Usage: spirit::for_p(init-ftor, condition, step-ftor)[body]
- template
- <
- typename InitF, typename ConditionT, typename StepF
- >
- impl::for_parser_gen<InitF, ConditionT, StepF>
- for_p(InitF const &init_f, ConditionT const &condition, StepF const &step_f)
- {
- return impl::for_parser_gen<InitF, ConditionT, StepF>
- (init_f, condition, step_f);
- }
-
-}} // namespace boost::spirit
-
-#endif // BOOST_SPIRIT_FOR_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/dynamic/if.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic/if.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic/if.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,225 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002 Juan Carlos Arevalo-Baeza
- Copyright (c) 2002-2003 Martin Wille
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_IF_HPP
-#define BOOST_SPIRIT_IF_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_IF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_IF
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/dynamic/impl/conditions.ipp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_if.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_if.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_if.hpp>
 
-namespace boost { namespace spirit {
-
- namespace impl {
-
- //////////////////////////////////
- // if-else-parser, holds two alternative parsers and a conditional functor
- // that selects between them.
- template <typename ParsableTrueT, typename ParsableFalseT, typename CondT>
- struct if_else_parser
- : public condition_evaluator<typename as_parser<CondT>::type>
- , public binary
- <
- typename as_parser<ParsableTrueT>::type,
- typename as_parser<ParsableFalseT>::type,
- parser< if_else_parser<ParsableTrueT, ParsableFalseT, CondT> >
- >
- {
- typedef if_else_parser<ParsableTrueT, ParsableFalseT, CondT> self_t;
-
- typedef as_parser<ParsableTrueT> as_parser_true_t;
- typedef as_parser<ParsableFalseT> as_parser_false_t;
- typedef typename as_parser_true_t::type parser_true_t;
- typedef typename as_parser_false_t::type parser_false_t;
- typedef as_parser<CondT> cond_as_parser_t;
- typedef typename cond_as_parser_t::type condition_t;
-
- typedef binary<parser_true_t, parser_false_t, parser<self_t> > base_t;
- typedef condition_evaluator<condition_t> eval_t;
-
- if_else_parser
- (
- ParsableTrueT const& p_true,
- ParsableFalseT const& p_false,
- CondT const& cond_
- )
- : eval_t(cond_as_parser_t::convert(cond_))
- , base_t
- (
- as_parser_true_t::convert(p_true),
- as_parser_false_t::convert(p_false)
- )
- { }
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, nil_t>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result
- <parser_true_t, ScannerT>::type then_result_t;
- typedef typename parser_result
- <parser_false_t, ScannerT>::type else_result_t;
-
- typename ScannerT::iterator_t const save(scan.first);
-
- std::ptrdiff_t length = this->evaluate(scan);
- if (length >= 0)
- {
- then_result_t then_result(this->left().parse(scan));
- if (then_result)
- {
- length += then_result.length();
- return scan.create_match(std::size_t(length), nil_t(), save, scan.first);
- }
- }
- else
- {
- else_result_t else_result(this->right().parse(scan));
- if (else_result)
- {
- length = else_result.length();
- return scan.create_match(std::size_t(length), nil_t(), save, scan.first);
- }
- }
- return scan.no_match();
- }
- };
-
- //////////////////////////////////
- // if-else-parser generator, takes the false-parser in brackets
- // and returns the if-else-parser.
- template <typename ParsableTrueT, typename CondT>
- struct if_else_parser_gen
- {
- if_else_parser_gen(ParsableTrueT const& p_true_, CondT const& cond_)
- : p_true(p_true_)
- , cond(cond_) {}
-
- template <typename ParsableFalseT>
- if_else_parser
- <
- ParsableTrueT,
- ParsableFalseT,
- CondT
- >
- operator[](ParsableFalseT const& p_false) const
- {
- return if_else_parser<ParsableTrueT, ParsableFalseT, CondT>
- (
- p_true,
- p_false,
- cond
- );
- }
-
- ParsableTrueT const &p_true;
- CondT const &cond;
- };
-
- //////////////////////////////////
- // if-parser, conditionally runs a parser is a functor condition is true.
- // If the condition is fales, it fails the parse.
- // It can optionally become an if-else-parser through the member else_p.
- template <typename ParsableT, typename CondT>
- struct if_parser
- : public condition_evaluator<typename as_parser<CondT>::type>
- , public unary
- <
- typename as_parser<ParsableT>::type,
- parser<if_parser<ParsableT, CondT> > >
- {
- typedef if_parser<ParsableT, CondT> self_t;
- typedef as_parser<ParsableT> as_parser_t;
- typedef typename as_parser_t::type parser_t;
-
- typedef as_parser<CondT> cond_as_parser_t;
- typedef typename cond_as_parser_t::type condition_t;
- typedef condition_evaluator<condition_t> eval_t;
- typedef unary<parser_t, parser<self_t> > base_t;
-
- if_parser(ParsableT const& p, CondT const& cond_)
- : eval_t(cond_as_parser_t::convert(cond_))
- , base_t(as_parser_t::convert(p))
- , else_p(p, cond_)
- {}
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, nil_t>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<parser_t, ScannerT>::type t_result_t;
- typename ScannerT::iterator_t const save(scan.first);
-
- std::ptrdiff_t length = this->evaluate(scan);
- if (length >= 0)
- {
- t_result_t then_result(this->subject().parse(scan));
- if (then_result)
- {
- length += then_result.length();
- return scan.create_match(std::size_t(length), nil_t(), save, scan.first);
- }
- return scan.no_match();
- }
- return scan.empty_match();
- }
-
- if_else_parser_gen<ParsableT, CondT> else_p;
- };
-
- //////////////////////////////////
- // if-parser generator, takes the true-parser in brackets and returns the
- // if-parser.
- template <typename CondT>
- struct if_parser_gen
- {
- if_parser_gen(CondT const& cond_) : cond(cond_) {}
-
- template <typename ParsableT>
- if_parser
- <
- ParsableT,
- CondT
- >
- operator[](ParsableT const& subject) const
- {
- return if_parser<ParsableT, CondT>(subject, cond);
- }
-
- CondT const &cond;
- };
-
-} // namespace impl
-
-//////////////////////////////////
-// if_p function, returns "if" parser generator
-
-template <typename CondT>
-impl::if_parser_gen<CondT>
-if_p(CondT const& cond)
-{
- return impl::if_parser_gen<CondT>(cond);
-}
-
-}} // namespace boost::spirit
-
-#endif // BOOST_SPIRIT_IF_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/dynamic/lazy.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic/lazy.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic/lazy.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,62 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Joel de Guzman
- Copyright (c) 2003 Vaclav Vesely
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_LAZY_HPP
-#define BOOST_SPIRIT_LAZY_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_LAZY
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_LAZY
 
-////////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/phoenix/actor.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_lazy.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_lazy.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_lazy.hpp>
 
-////////////////////////////////////////////////////////////////////////////////
-
-namespace boost { namespace spirit
-{
- ////////////////////////////////////////////////////////////////////////////
- //
- // lazy_parser, holds phoenix actor which returns a spirit parser.
- //
- ////////////////////////////////////////////////////////////////////////////
-
- template<class ActorT>
- struct lazy_parser : parser<lazy_parser<ActorT> >
- {
- typedef lazy_parser<ActorT> self_t;
- typedef typename phoenix::actor_result<
- ActorT, phoenix::tuple<> >::plain_type actor_result_t;
-
- template<typename ScannerT>
- struct result
- {
- typedef typename
- parser_result<actor_result_t, ScannerT>::type
- type;
- };
-
- lazy_parser(ActorT const& actor_)
- : actor(actor_) {}
-
- template<typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- { return actor().parse(scan); }
-
- ActorT actor;
- };
-
- //////////////////////////////
- // lazy_p, returns lazy_parser
- // Usage: lazy_p(actor)
- template<class ActorT>
- lazy_parser<ActorT> lazy_p(ActorT const& actor)
- { return lazy_parser<ActorT>(actor); }
-
-}} // namespace boost::spirit
-
-#endif // BOOST_SPIRIT_LAZY_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/dynamic/rule_alias.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic/rule_alias.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic/rule_alias.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,72 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_RULE_ALIAS_HPP)
-#define BOOST_SPIRIT_RULE_ALIAS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_RULE_ALIAS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_RULE_ALIAS
 
-#include <boost/spirit/core/parser.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // rule_alias class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ParserT>
- class rule_alias :
- public parser<rule_alias<ParserT> >
- {
- public:
-
- typedef rule_alias<ParserT> self_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- rule_alias()
- : ptr(0) {}
-
- rule_alias(ParserT const& p)
- : ptr(&p) {}
-
- rule_alias&
- operator=(ParserT const& p)
- {
- ptr = &p;
- return *this;
- }
-
- template <typename ScannerT>
- typename parser_result<ParserT, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- if (ptr)
- return ptr->parse(scan);
- else
- return scan.no_match();
- }
-
- ParserT const&
- get() const
- {
- assert(ptr != 0);
- return *ptr;
- }
-
- private:
-
- ParserT const* ptr; // hold it by pointer
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_rule_alias.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_rule_alias.hpp"
+#endif
 
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_rule_alias.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/dynamic/select.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic/select.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic/select.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,237 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_SELECT_HPP
-#define BOOST_SPIRIT_SELECT_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SELECT
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SELECT
 
-#include <boost/preprocessor/repeat.hpp>
-#include <boost/preprocessor/enum.hpp>
-#include <boost/preprocessor/enum_params.hpp>
-#include <boost/preprocessor/enum_params_with_defaults.hpp>
-#include <boost/preprocessor/inc.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/preprocessor/facilities/intercept.hpp>
-
-#include <boost/spirit/core/parser.hpp>
-
-#include <boost/spirit/phoenix/tuples.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit predefined maximum number of possible embedded select_p parsers.
-// It should NOT be greater than PHOENIX_LIMIT!
-//
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_SPIRIT_SELECT_LIMIT)
-#define BOOST_SPIRIT_SELECT_LIMIT PHOENIX_LIMIT
-#endif // !defined(BOOST_SPIRIT_SELECT_LIMIT)
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// ensure BOOST_SPIRIT_SELECT_LIMIT <= PHOENIX_LIMIT and
-// BOOST_SPIRIT_SELECT_LIMIT > 0
-// BOOST_SPIRIT_SELECT_LIMIT <= 15
-//
-// [Pushed this down a little to make CW happy with BOOST_STATIC_ASSERT]
-// [Otherwise, it complains: 'boost_static_assert_test_42' redefined]
-//
-///////////////////////////////////////////////////////////////////////////////
-BOOST_STATIC_ASSERT(BOOST_SPIRIT_SELECT_LIMIT <= PHOENIX_LIMIT);
-BOOST_STATIC_ASSERT(BOOST_SPIRIT_SELECT_LIMIT > 0);
-BOOST_STATIC_ASSERT(BOOST_SPIRIT_SELECT_LIMIT <= 15);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Calculate the required amount of tuple members rounded up to the nearest
-// integer dividable by 3
-//
-///////////////////////////////////////////////////////////////////////////////
-#if BOOST_SPIRIT_SELECT_LIMIT > 12
-#define BOOST_SPIRIT_SELECT_LIMIT_A 15
-#elif BOOST_SPIRIT_SELECT_LIMIT > 9
-#define BOOST_SPIRIT_SELECT_LIMIT_A 12
-#elif BOOST_SPIRIT_SELECT_LIMIT > 6
-#define BOOST_SPIRIT_SELECT_LIMIT_A 9
-#elif BOOST_SPIRIT_SELECT_LIMIT > 3
-#define BOOST_SPIRIT_SELECT_LIMIT_A 6
-#else
-#define BOOST_SPIRIT_SELECT_LIMIT_A 3
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_select.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_select.hpp"
 #endif
 
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The select_default_no_fail and select_default_fail structs are used to
-// distinguish two different behaviours for the select_parser in case that not
-// any of the given sub-parsers match.
-//
-// If the select_parser is used with the select_default_no_fail behaviour,
-// then in case of no matching sub-parser the whole select_parser returns an
-// empty match and the value -1.
-//
-// If the select_parser is used with the select_default_fail behaviour, then
-// in case of no matching sub-parser the whole select_parser fails to match at
-// all.
-//
-///////////////////////////////////////////////////////////////////////////////
-struct select_default_no_fail {};
-struct select_default_fail {};
-
-}} // namespace boost::spirit
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/dynamic/impl/select.ipp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-template <typename TupleT, typename BehaviourT, typename T>
-struct select_parser
-: public parser<select_parser<TupleT, BehaviourT, T> >
-{
- typedef select_parser<TupleT, BehaviourT, T> self_t;
-
- select_parser(TupleT const &t_)
- : t(t_)
- {}
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, T>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
-
- if (!scan.at_end()) {
- return impl::parse_tuple_element<
- TupleT::length, result_t, TupleT, BehaviourT>::do_(t, scan);
- }
- return impl::select_match_gen<result_t, BehaviourT>::do_(scan);
- }
-
- TupleT const t;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-template <typename BehaviourT, typename T = int>
-struct select_parser_gen {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // This generates different select_parser_gen::operator()() functions with
- // an increasing number of parser parameters:
- //
- // template <typename ParserT0, ...>
- // select_parser<
- // phoenix::tuple<
- // typename impl::as_embedded_parser<ParserT0>::type,
- // ...
- // >,
- // BehaviourT,
- // T
- // >
- // operator()(ParserT0 const &p0, ...) const
- // {
- // typedef impl::as_embedded_parser<ParserT0> parser_t0;
- // ...
- //
- // typedef phoenix::tuple<
- // parser_t0::type,
- // ...
- // > tuple_t;
- // typedef select_parser<tuple_t, BehaviourT, T> result_t;
- //
- // return result_t(tuple_t(
- // parser_t0::convert(p0),
- // ...
- // ));
- // }
- //
- // The number of generated functions depends on the maximum tuple member
- // limit defined by the PHOENIX_LIMIT pp constant.
- //
- ///////////////////////////////////////////////////////////////////////////
- #define BOOST_SPIRIT_SELECT_EMBEDDED(z, N, _) \
- typename impl::as_embedded_parser<BOOST_PP_CAT(ParserT, N)>::type \
- /**/
- #define BOOST_SPIRIT_SELECT_EMBEDDED_TYPEDEF(z, N, _) \
- typedef impl::as_embedded_parser<BOOST_PP_CAT(ParserT, N)> \
- BOOST_PP_CAT(parser_t, N); \
- /**/
- #define BOOST_SPIRIT_SELECT_CONVERT(z, N, _) \
- BOOST_PP_CAT(parser_t, N)::convert(BOOST_PP_CAT(p, N)) \
- /**/
-
- #define BOOST_SPIRIT_SELECT_PARSER(z, N, _) \
- template < \
- BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename ParserT) \
- > \
- select_parser< \
- phoenix::tuple< \
- BOOST_PP_ENUM_ ## z(BOOST_PP_INC(N), \
- BOOST_SPIRIT_SELECT_EMBEDDED, _) \
- >, \
- BehaviourT, \
- T \
- > \
- operator()( \
- BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_INC(N), \
- ParserT, const &p) \
- ) const \
- { \
- BOOST_PP_REPEAT_ ## z(BOOST_PP_INC(N), \
- BOOST_SPIRIT_SELECT_EMBEDDED_TYPEDEF, _) \
- \
- typedef phoenix::tuple< \
- BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_INC(N), \
- typename parser_t, ::type BOOST_PP_INTERCEPT) \
- > tuple_t; \
- typedef select_parser<tuple_t, BehaviourT, T> result_t; \
- \
- return result_t(tuple_t( \
- BOOST_PP_ENUM_ ## z(BOOST_PP_INC(N), \
- BOOST_SPIRIT_SELECT_CONVERT, _) \
- )); \
- } \
- /**/
-
- BOOST_PP_REPEAT(BOOST_SPIRIT_SELECT_LIMIT_A,
- BOOST_SPIRIT_SELECT_PARSER, _)
-
- #undef BOOST_SPIRIT_SELECT_PARSER
- #undef BOOST_SPIRIT_SELECT_CONVERT
- #undef BOOST_SPIRIT_SELECT_EMBEDDED_TYPEDEF
- #undef BOOST_SPIRIT_SELECT_EMBEDDED
- ///////////////////////////////////////////////////////////////////////////
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Predefined parser generator helper objects
-//
-///////////////////////////////////////////////////////////////////////////////
-select_parser_gen<select_default_no_fail> const select_p =
- select_parser_gen<select_default_no_fail>();
-
-select_parser_gen<select_default_fail> const select_fail_p =
- select_parser_gen<select_default_fail>();
-
-#undef BOOST_SPIRIT_SELECT_LIMIT_A
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_select.hpp>
 
-#endif // BOOST_SPIRIT_SELECT_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/dynamic/stored_rule.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic/stored_rule.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic/stored_rule.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,123 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_STORED_RULE_HPP)
-#define BOOST_SPIRIT_STORED_RULE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_STORED_RULE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_STORED_RULE
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/core/non_terminal/impl/rule.ipp>
-#include <boost/spirit/dynamic/rule_alias.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include <boost/spirit/dynamic/stored_rule_fwd.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // stored_rule class
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename T0
- , typename T1
- , typename T2
- , bool EmbedByValue
- >
- class stored_rule
- : public impl::rule_base<
- stored_rule<T0, T1, T2, EmbedByValue>
- , typename mpl::if_c<
- EmbedByValue
- , stored_rule<T0, T1, T2, true>
- , stored_rule<T0, T1, T2> const&>::type
- , T0, T1, T2>
- {
- public:
-
- typedef stored_rule<T0, T1, T2, EmbedByValue> self_t;
- typedef impl::rule_base<
- self_t
- , typename mpl::if_c<
- EmbedByValue
- , stored_rule<T0, T1, T2, true>
- , self_t const&>::type
- , T0, T1, T2>
- base_t;
-
- typedef typename base_t::scanner_t scanner_t;
- typedef typename base_t::attr_t attr_t;
- typedef impl::abstract_parser<scanner_t, attr_t> abstract_parser_t;
- typedef rule_alias<self_t> alias_t;
-
- stored_rule() : ptr() {}
- ~stored_rule() {}
-
- stored_rule(stored_rule const& r)
- : ptr(r.ptr) {}
-
- template <typename ParserT>
- stored_rule(ParserT const& p)
- : ptr(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p)) {}
-
- template <typename ParserT>
- stored_rule& operator=(ParserT const& p)
- {
- ptr.reset(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p));
- return *this;
- }
-
- stored_rule& operator=(stored_rule const& r)
- {
- // If this is placed above the templatized assignment
- // operator, VC6 incorrectly complains ambiguity with
- // r1 = r2, where r1 and r2 are both rules.
- ptr = r.ptr;
- return *this;
- }
-
- stored_rule<T0, T1, T2, true>
- copy() const
- {
- return stored_rule<T0, T1, T2, true>(ptr);
- }
-
- alias_t
- alias() const
- {
- return alias_t(*this);
- }
-
- private:
-
- friend class impl::rule_base_access;
- friend class stored_rule<T0, T1, T2, !EmbedByValue>;
-
-#if defined(__GNUC__) && (__GNUC__ < 3)
- public:
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_stored_rule.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_stored_rule.hpp"
 #endif
- abstract_parser_t*
- get() const
- {
- return ptr.get();
- }
-#if defined(__GNUC__) && (__GNUC__ < 3)
- private:
-#endif
-
- stored_rule(shared_ptr<abstract_parser_t> const& ptr)
- : ptr(ptr) {}
 
- shared_ptr<abstract_parser_t> ptr;
- };
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_stored_rule.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/dynamic/stored_rule_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic/stored_rule_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic/stored_rule_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,27 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_STORED_RULE_FWD_HPP)
-#define BOOST_SPIRIT_STORED_RULE_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_STORED_RULE_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_STORED_RULE_FWD
 
-#include <boost/spirit/core/nil.hpp>
-
-namespace boost { namespace spirit {
-
- template <
- typename T0 = nil_t
- , typename T1 = nil_t
- , typename T2 = nil_t
- , bool EmbedByValue = false
- >
- class stored_rule;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_stored_rule_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_stored_rule_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_stored_rule_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/dynamic/switch.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic/switch.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic/switch.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,255 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_SWITCH_HPP
-#define BOOST_SPIRIT_SWITCH_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SWITCH
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SWITCH
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// The default_p parser generator template uses the following magic number
-// as the corresponding case label value inside the generated switch()
-// statements. If this number conflicts with your code, please pick a
-// different one.
-//
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_SPIRIT_DEFAULTCASE_MAGIC)
-#define BOOST_SPIRIT_DEFAULTCASE_MAGIC 0x15F97A7
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_switch.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_switch.hpp"
 #endif
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit predefined maximum number of possible case_p/default_p case branch
-// parsers.
-//
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_SPIRIT_SWITCH_CASE_LIMIT)
-#define BOOST_SPIRIT_SWITCH_CASE_LIMIT 3
-#endif // !defined(BOOST_SPIRIT_SWITCH_CASE_LIMIT)
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/static_assert.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Ensure BOOST_SPIRIT_SELECT_LIMIT > 0
-//
-///////////////////////////////////////////////////////////////////////////////
-BOOST_STATIC_ASSERT(BOOST_SPIRIT_SWITCH_CASE_LIMIT > 0);
-
-#include <boost/spirit/core/config.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/epsilon.hpp>
-#include <boost/spirit/dynamic/impl/switch.ipp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The switch_parser allows to build switch like parsing constructs, which
-// will have much better perfomance as comparable straight solutions.
-//
-// Input stream driven syntax:
-//
-// switch_p
-// [
-// case_p<'a'>
-// (...parser to use, if the next character is 'a'...),
-// case_p<'b'>
-// (...parser to use, if the next character is 'b'...),
-// default_p
-// (...parser to use, if nothing was matched before...)
-// ]
-//
-// General syntax:
-//
-// switch_p(...lazy expression returning the switch condition value...)
-// [
-// case_p<1>
-// (...parser to use, if the switch condition value is 1...),
-// case_p<2>
-// (...parser to use, if the switch condition value is 2...),
-// default_p
-// (...parser to use, if nothing was matched before...)
-// ]
-//
-// The maximum number of possible case_p branches is defined by the p constant
-// BOOST_SPIRIT_SWITCH_CASE_LIMIT (this value defaults to 3 if not otherwise
-// defined).
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CaseT, typename CondT = impl::get_next_token_cond>
-struct switch_parser
-: public unary<CaseT, parser<switch_parser<CaseT, CondT> > >
-{
- typedef switch_parser<CaseT, CondT> self_t;
- typedef unary_parser_category parser_category_t;
- typedef unary<CaseT, parser<self_t> > base_t;
-
- switch_parser(CaseT const &case_)
- : base_t(case_), cond(CondT())
- {}
-
- switch_parser(CaseT const &case_, CondT const &cond_)
- : base_t(case_), cond(cond_)
- {}
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, nil_t>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- return this->subject().parse(scan,
- impl::make_cond_functor<CondT>::do_(cond));
- }
-
- CondT cond;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-template <typename CondT>
-struct switch_cond_parser
-{
- switch_cond_parser(CondT const &cond_)
- : cond(cond_)
- {}
-
- template <typename ParserT>
- switch_parser<ParserT, CondT>
- operator[](parser<ParserT> const &p) const
- {
- return switch_parser<ParserT, CondT>(p.derived(), cond);
- }
-
- CondT const &cond;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-template <int N, typename ParserT, bool IsDefault>
-struct case_parser
-: public unary<ParserT, parser<case_parser<N, ParserT, IsDefault> > >
-{
- typedef case_parser<N, ParserT, IsDefault> self_t;
- typedef unary_parser_category parser_category_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- typedef typename base_t::subject_t self_subject_t;
-
- BOOST_STATIC_CONSTANT(int, value = N);
- BOOST_STATIC_CONSTANT(bool, is_default = IsDefault);
- BOOST_STATIC_CONSTANT(bool, is_simple = true);
- BOOST_STATIC_CONSTANT(bool, is_epsilon = (
- is_default && boost::is_same<self_subject_t, epsilon_parser>::value
- ));
-
- case_parser(parser<ParserT> const &p)
- : base_t(p.derived())
- {}
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, nil_t>::type type;
- };
-
- template <typename ScannerT, typename CondT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan, CondT const &cond) const
- {
- typedef impl::default_case<self_t> default_t;
-
- if (!scan.at_end()) {
- typedef impl::default_delegate_parse<
- value, is_default, default_t::value> default_parse_t;
-
- typename ScannerT::iterator_t const save(scan.first);
- return default_parse_t::parse(cond(scan), *this,
- *this, scan, save);
- }
-
- return default_t::is_epsilon ? scan.empty_match() : scan.no_match();
- }
-
- template <int N1, typename ParserT1, bool IsDefault1>
- impl::compound_case_parser<
- self_t, case_parser<N1, ParserT1, IsDefault1>, IsDefault1
- >
- operator, (case_parser<N1, ParserT1, IsDefault1> const &p) const
- {
- // If the following compile time assertion fires, you've probably used
- // more than one default_p case inside the switch_p parser construct.
- BOOST_STATIC_ASSERT(!is_default || !IsDefault1);
-
- typedef case_parser<N1, ParserT1, IsDefault1> right_t;
- return impl::compound_case_parser<self_t, right_t, IsDefault1>(*this, p);
- }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-struct switch_parser_gen {
-
-// This generates a switch parser, which is driven by the condition value
-// returned by the lazy parameter expression 'cond'. This may be a parser,
-// which result is used or a phoenix actor, which will be dereferenced to
-// obtain the switch condition value.
- template <typename CondT>
- switch_cond_parser<CondT>
- operator()(CondT const &cond) const
- {
- return switch_cond_parser<CondT>(cond);
- }
-
-// This generates a switch parser, which is driven by the next character/token
-// found in the input stream.
- template <typename CaseT>
- switch_parser<CaseT>
- operator[](parser<CaseT> const &p) const
- {
- return switch_parser<CaseT>(p.derived());
- }
-};
-
-switch_parser_gen const switch_p = switch_parser_gen();
-
-///////////////////////////////////////////////////////////////////////////////
-template <int N, typename ParserT>
-inline case_parser<N, ParserT, false>
-case_p(parser<ParserT> const &p)
-{
- return case_parser<N, ParserT, false>(p);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-struct default_parser_gen
-: public case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, epsilon_parser, true>
-{
- default_parser_gen()
- : case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, epsilon_parser, true>
- (epsilon_p)
- {}
-
- template <typename ParserT>
- case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, ParserT, true>
- operator()(parser<ParserT> const &p) const
- {
- return case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, ParserT, true>(p);
- }
-};
-
-default_parser_gen const default_p = default_parser_gen();
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_switch.hpp>
 
-#endif // BOOST_SPIRIT_SWITCH_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/dynamic/typeof.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic/typeof.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic/typeof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,85 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_DYNAMIC_TYPEOF_HPP)
-#define BOOST_SPIRIT_DYNAMIC_TYPEOF_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
 
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/spirit/core/typeof.hpp>
-
-#include <boost/spirit/dynamic/stored_rule_fwd.hpp>
-
-namespace boost { namespace spirit {
-
- // if.hpp
- template <class ParsableT, typename CondT> struct if_parser;
- template <class ParsableTrueT, class ParsableFalseT, typename CondT>
- struct if_else_parser;
-
- // for.hpp
- namespace impl {
- template<typename InitF, typename CondT, typename StepF, class ParsableT>
- struct for_parser;
- }
-
- // while.hpp
- template<typename ParsableT, typename CondT, bool is_do_parser>
- struct while_parser;
-
- // lazy.hpp
- template<typename ActorT> struct lazy_parser;
-
- // rule_alias.hpp
- template <typename ParserT> class rule_alias;
-
- // switch.hpp
- template <typename CaseT, typename CondT> struct switch_parser;
- template <int N, class ParserT, bool IsDefault> struct case_parser;
-
- // select.hpp
- template <typename TupleT, typename BehaviourT, typename T>
- struct select_parser;
-
-}} // namespace boost::spirit
-
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-// if.hpp
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::if_parser,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::if_else_parser,3)
-
-// for.hpp
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::impl::for_parser,4)
-
-// while.hpp
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::while_parser,(class)(class)(bool))
-
-// lazy.hpp
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::lazy_parser,1)
-
-// stored_rule.hpp (has forward header)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::stored_rule,(typename)(typename)(typename)(bool))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::stored_rule,3)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::stored_rule,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::stored_rule,1)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::stored_rule<>)
-
-// rule_alias.hpp
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::rule_alias,1)
-
-// switch.hpp
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::switch_parser,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::case_parser,(int)(class)(bool))
-
-// select.hpp
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::select_parser,3)
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_typeof.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/dynamic/while.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/dynamic/while.hpp (original)
+++ branches/CMake/release/boost/spirit/dynamic/while.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,185 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002-2003 Martin Wille
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_WHILE_HPP
-#define BOOST_SPIRIT_WHILE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_WHILE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_WHILE
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/dynamic/impl/conditions.ipp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_while.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_while.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_while.hpp>
 
-////////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
- namespace impl {
-
- //////////////////////////////////
- // while parser
- // object are created by while_parser_gen and do_parser_gen
- template <typename ParsableT, typename CondT, bool is_do_parser>
- struct while_parser
- : public condition_evaluator< typename as_parser<CondT>::type >
- , public unary // the parent stores a copy of the body parser
- <
- typename as_parser<ParsableT>::type,
- parser<while_parser<ParsableT, CondT, is_do_parser> >
- >
- {
- typedef while_parser<ParsableT, CondT, is_do_parser> self_t;
-
- typedef as_parser<ParsableT> as_parser_t;
- typedef typename as_parser_t::type parser_t;
- typedef as_parser<CondT> cond_as_parser_t;
- typedef typename cond_as_parser_t::type condition_t;
-
- typedef unary<parser_t, parser<self_t> > base_t;
- typedef condition_evaluator<condition_t> eval_t;
-
-
- //////////////////////////////
- // constructor, saves condition and body parser
- while_parser(ParsableT const &body, CondT const &cond)
- : eval_t(cond_as_parser_t::convert(cond))
- , base_t(as_parser_t::convert(body))
- {}
-
- //////////////////////////////
- // result type computer.
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result
- <ScannerT, nil_t>::type type;
- };
-
- //////////////////////////////
- // parse member function
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<parser_t, ScannerT>::type sresult_t;
- typedef typename ScannerT::iterator_t iterator_t;
-
- iterator_t save(scan.first);
- std::size_t length = 0;
- int eval_length = 0;
-
- bool dont_check_condition = is_do_parser;
-
- while (dont_check_condition || (eval_length=this->evaluate(scan))>=0)
- {
- dont_check_condition = false;
- length += eval_length;
- sresult_t tmp(this->subject().parse(scan));
- if (tmp)
- {
- length+=tmp.length();
- }
- else
- {
- return scan.no_match();
- }
- }
- return scan.create_match(length, nil_t(), save, scan.first);
- }
- };
-
- //////////////////////////////////
- // while-parser generator, takes the body-parser in brackets
- // and returns the actual while-parser.
- template <typename CondT>
- struct while_parser_gen
- {
- //////////////////////////////
- // constructor, saves the condition for use by operator[]
- while_parser_gen(CondT const& cond_) : cond(cond_) {}
-
- //////////////////////////////
- // operator[] returns the actual while-parser object
- template <typename ParsableT>
- while_parser<ParsableT, CondT, false>
- operator[](ParsableT const &subject) const
- {
- return while_parser<ParsableT, CondT, false>(subject, cond);
- }
- private:
-
- //////////////////////////////
- // the condition is stored by reference here.
- // this should not cause any harm since object of type
- // while_parser_gen<> are only used as temporaries
- // the while-parser object constructed by the operator[]
- // stores a copy of the condition.
- CondT const &cond;
- };
-
- //////////////////////////////////
- // do-while-parser generator, takes the condition as
- // parameter to while_p member function and returns the
- // actual do-while-parser.
- template <typename ParsableT>
- struct do_while_parser_gen
- {
- //////////////////////////////
- // constructor. saves the body parser for use by while_p.
- explicit do_while_parser_gen(ParsableT const &body_parser)
- : body(body_parser)
- {}
-
- //////////////////////////////
- // while_p returns the actual while-parser object
- template <typename CondT>
- while_parser<ParsableT, CondT, true>
- while_p(CondT cond) const
- {
- return while_parser<ParsableT, CondT, true>(body, cond);
- }
- private:
-
- //////////////////////////////
- // the body is stored by reference here
- // this should not cause any harm since object of type
- // do_while_parser_gen<> are only used as temporaries
- // the while-parser object constructed by the while_p
- // member function stores a copy of the body parser.
- ParsableT const &body;
- };
-
- struct do_parser_gen
- {
- inline do_parser_gen() {}
-
- template <typename ParsableT>
- impl::do_while_parser_gen<ParsableT>
- operator[](ParsableT const& body) const
- {
- return impl::do_while_parser_gen<ParsableT>(body);
- }
- };
-} // namespace impl
-
-//////////////////////////////////
-// while_p function, while-parser generator
-// Usage: spirit::while_p(Condition)[Body]
-template <typename CondT>
-impl::while_parser_gen<CondT>
-while_p(CondT const& cond)
-{
- return impl::while_parser_gen<CondT>(cond);
-}
-
-//////////////////////////////////
-// do_p functor, do-while-parser generator
-// Usage: spirit::do_p[Body].while_p(Condition)
-impl::do_parser_gen const do_p = impl::do_parser_gen();
-
-}} // namespace boost::spirit
-
-#endif // BOOST_SPIRIT_WHILE_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/error_handling.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/error_handling.hpp (original)
+++ branches/CMake/release/boost/spirit/error_handling.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,22 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ERROR_HANDLING_MAIN_HPP)
-#define BOOST_SPIRIT_ERROR_HANDLING_MAIN_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ERROR_HANDLING
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ERROR_HANDLING
 
-#include <boost/spirit/version.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_error_handling.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_error_handling.hpp"
+#endif
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// Master header for Spirit.ErrorHandling
-//
-///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_error_handling.hpp>
 
-#include <boost/spirit/error_handling/exceptions.hpp>
-
-#endif // !defined(BOOST_SPIRIT_ERROR_HANDLING_MAIN_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/error_handling/exceptions.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/error_handling/exceptions.hpp (original)
+++ branches/CMake/release/boost/spirit/error_handling/exceptions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,361 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_EXCEPTIONS_HPP
-#define BOOST_SPIRIT_EXCEPTIONS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_EXCEPTIONS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_EXCEPTIONS
 
-#include <boost/config.hpp>
-#include <boost/throw_exception.hpp>
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <exception>
-
-#include <boost/spirit/error_handling/exceptions_fwd.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_error_base class
- //
- // This is the base class of parser_error (see below). This may be
- // used to catch any type of parser error.
- //
- // This exception shouldn't propagate outside the parser. However to
- // avoid quirks of many platforms/implementations which fall outside
- // the C++ standard, we derive parser_error_base from std::exception
- // to allow a single catch handler to catch all exceptions.
- //
- ///////////////////////////////////////////////////////////////////////////
- class parser_error_base : public std::exception
- {
- protected:
-
- parser_error_base() {}
- virtual ~parser_error_base() throw() {}
-
- public:
-
- parser_error_base(parser_error_base const& rhs)
- : std::exception(rhs) {}
- parser_error_base& operator=(parser_error_base const&)
- {
- return *this;
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // parser_error class
- //
- // Generic parser exception class. This is the base class for all
- // parser exceptions. The exception holds the iterator position
- // where the error was encountered in its member variable "where".
- // The parser_error also holds information regarding the error
- // (error descriptor) in its member variable "descriptor".
- //
- // The throw_ function creates and throws a parser_error given
- // an iterator and an error descriptor.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ErrorDescrT, typename IteratorT>
- struct parser_error : public parser_error_base
- {
- typedef ErrorDescrT error_descr_t;
- typedef IteratorT iterator_t;
-
- parser_error(IteratorT where_, ErrorDescrT descriptor_)
- : where(where_), descriptor(descriptor_) {}
-
- parser_error(parser_error const& rhs)
- : parser_error_base(rhs)
- , where(rhs.where), descriptor(rhs.descriptor) {}
-
- parser_error&
- operator=(parser_error const& rhs)
- {
- where = rhs.where;
- descriptor = rhs.descriptor;
- return *this;
- }
-
- virtual
- ~parser_error() throw() {}
-
- virtual const char*
- what() const throw()
- {
- return "boost::spirit::parser_error";
- }
-
- IteratorT where;
- ErrorDescrT descriptor;
- };
-
- //////////////////////////////////
- template <typename ErrorDescrT, typename IteratorT>
- inline void
- throw_(IteratorT where, ErrorDescrT descriptor)
- {
- boost::throw_exception(
- parser_error<ErrorDescrT, IteratorT>(where, descriptor));
- }
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // assertive_parser class
- //
- // An assertive_parser class is a parser that throws an exception
- // in response to a parsing failure. The assertive_parser throws a
- // parser_error exception rather than returning an unsuccessful
- // match to signal that the parser failed to match the input.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ErrorDescrT, typename ParserT>
- struct assertive_parser
- : public unary<ParserT, parser<assertive_parser<ErrorDescrT, ParserT> > >
- {
- typedef assertive_parser<ErrorDescrT, ParserT> self_t;
- typedef unary<ParserT, parser<self_t> > base_t;
- typedef unary_parser_category parser_category_t;
-
- assertive_parser(ParserT const& parser, ErrorDescrT descriptor)
- : base_t(parser), descriptor(descriptor) {}
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<ParserT, ScannerT>::type result_t;
- typedef typename ScannerT::iterator_t iterator_t;
-
- result_t hit = this->subject().parse(scan);
- if (!hit)
- {
- throw_(scan.first, descriptor);
- }
- return hit;
- }
-
- ErrorDescrT descriptor;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // assertion class
- //
- // assertive_parsers are never instantiated directly. The assertion
- // class is used to indirectly create an assertive_parser object.
- // Before declaring the grammar, we declare some assertion objects.
- // Examples:
- //
- // enum Errors
- // {
- // program_expected, begin_expected, end_expected
- // };
- //
- // assertion<Errors> expect_program(program_expected);
- // assertion<Errors> expect_begin(begin_expected);
- // assertion<Errors> expect_end(end_expected);
- //
- // Now, we can use these assertions as wrappers around parsers:
- //
- // expect_end(str_p("end"))
- //
- // Take note that although the example uses enums to hold the
- // information regarding the error (error desccriptor), we are free
- // to use other types such as integers and strings. Enums are
- // convenient for error handlers to easily catch since C++ treats
- // enums as unique types.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ErrorDescrT>
- struct assertion
- {
- assertion(ErrorDescrT descriptor_)
- : descriptor(descriptor_) {}
-
- template <typename ParserT>
- assertive_parser<ErrorDescrT, ParserT>
- operator()(ParserT const& parser) const
- {
- return assertive_parser<ErrorDescrT, ParserT>(parser, descriptor);
- }
-
- ErrorDescrT descriptor;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // error_status<T>
- //
- // Where T is an attribute type compatible with the match attribute
- // of the fallback_parser's subject (defaults to nil_t). The class
- // error_status reports the result of an error handler (see
- // fallback_parser). result can be one of:
- //
- // fail: quit and fail (return a no_match)
- // retry: attempt error recovery, possibly moving the scanner
- // accept: force success returning a matching length, moving
- // the scanner appropriately and returning an attribute
- // value
- // rethrow: rethrows the error.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct error_status
- {
- enum result_t { fail, retry, accept, rethrow };
-
- error_status(
- result_t result_ = fail,
- std::ptrdiff_t length = -1,
- T const& value_ = T())
- : result(result_), length(length), value(value_) {}
-
- result_t result;
- std::ptrdiff_t length;
- T value;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // fallback_parser class
- //
- // Handles exceptions of type parser_error<ErrorDescrT, IteratorT>
- // thrown somewhere inside its embedded ParserT object. The class
- // sets up a try block before delegating parsing to its subject.
- // When an exception is caught, the catch block then calls the
- // HandlerT object. HandlerT may be a function or a functor (with
- // an operator() member function) compatible with the interface:
- //
- // error_status<T>
- // handler(ScannerT const& scan, ErrorT error);
- //
- // Where scan points to the scanner state prior to parsing and error
- // is the error that arose (see parser_error). The handler must
- // return an error_status<T> object (see above).
- //
- ///////////////////////////////////////////////////////////////////////////
- namespace impl
- {
- template <typename RT, typename ParserT, typename ScannerT>
- RT fallback_parser_parse(ParserT const& p, ScannerT const& scan);
- }
-
- template <typename ErrorDescrT, typename ParserT, typename HandlerT>
- struct fallback_parser
- : public unary<ParserT,
- parser<fallback_parser<ErrorDescrT, ParserT, HandlerT> > >
- {
- typedef fallback_parser<ErrorDescrT, ParserT, HandlerT>
- self_t;
- typedef ErrorDescrT
- error_descr_t;
- typedef unary<ParserT, parser<self_t> >
- base_t;
- typedef unary_parser_category
- parser_category_t;
-
- fallback_parser(ParserT const& parser, HandlerT const& handler_)
- : base_t(parser), handler(handler_) {}
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- return impl::fallback_parser_parse<result_t>(*this, scan);
- }
-
- HandlerT handler;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // guard class
- //
- // fallback_parser objects are not instantiated directly. The guard
- // class is used to indirectly create a fallback_parser object.
- // guards are typically predeclared just like assertions (see the
- // assertion class above; the example extends the previous example
- // introduced in the assertion class above):
- //
- // guard<Errors> my_guard;
- //
- // Errors, in this example is the error descriptor type we want to
- // detect; This is essentially the ErrorDescrT template parameter
- // of the fallback_parser class.
- //
- // my_guard may now be used in a grammar declaration as:
- //
- // my_guard(p)[h]
- //
- // where p is a parser, h is a function or functor compatible with
- // fallback_parser's HandlerT (see above).
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ErrorDescrT, typename ParserT>
- struct guard_gen : public unary<ParserT, nil_t>
- {
- typedef guard<ErrorDescrT> parser_generator_t;
- typedef unary_parser_category parser_category_t;
-
- guard_gen(ParserT const& p)
- : unary<ParserT, nil_t>(p) {}
-
- template <typename HandlerT>
- fallback_parser<ErrorDescrT, ParserT, HandlerT>
- operator[](HandlerT const& handler) const
- {
- return fallback_parser<ErrorDescrT, ParserT, HandlerT>
- (this->subject(), handler);
- }
- };
-
- template <typename ErrorDescrT>
- struct guard
- {
- template <typename ParserT>
- struct result
- {
- typedef guard_gen<ErrorDescrT, ParserT> type;
- };
-
- template <typename ParserT>
- static guard_gen<ErrorDescrT, ParserT>
- generate(ParserT const& parser)
- {
- return guard_gen<ErrorDescrT, ParserT>(parser);
- }
-
- template <typename ParserT>
- guard_gen<ErrorDescrT, ParserT>
- operator()(ParserT const& parser) const
- {
- return guard_gen<ErrorDescrT, ParserT>(parser);
- }
- };
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_exceptions.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_exceptions.hpp"
+#endif
 
-#include <boost/spirit/error_handling/impl/exceptions.ipp>
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_exceptions.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/error_handling/exceptions_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/error_handling/exceptions_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/error_handling/exceptions_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,37 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_EXCEPTIONS_FWD_HPP)
-#define BOOST_SPIRIT_EXCEPTIONS_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_EXCEPTIONS_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_EXCEPTIONS_FWD
 
-#include <boost/spirit/core/nil.hpp>
-
-namespace boost { namespace spirit {
-
- template <typename ErrorDescrT, typename IteratorT = char const*>
- struct parser_error;
-
- template <typename ErrorDescrT, typename ParserT>
- struct assertive_parser;
-
- template <typename ErrorDescrT>
- struct assertion;
-
- template <typename T = nil_t>
- struct error_status;
-
- template <typename ErrorDescrT, typename ParserT, typename HandlerT>
- struct fallback_parser;
-
- template <typename ErrorDescrT>
- struct guard;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_exceptions_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_exceptions_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_exceptions_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/error_handling/typeof.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/error_handling/typeof.hpp (original)
+++ branches/CMake/release/boost/spirit/error_handling/typeof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,34 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ERROR_HANDLING_TYPEOF_HPP)
-#define BOOST_SPIRIT_ERROR_HANDLING_TYPEOF_HPP
-
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/spirit/core/typeof.hpp>
-
-#include <boost/spirit/error_handling/exceptions_fwd.hpp>
-
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-
-// exceptions.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parser_error,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::assertive_parser,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::error_status,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fallback_parser,3)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::guard,1)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::error_status<>)
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
 
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_typeof.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/iterator.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/iterator.hpp (original)
+++ branches/CMake/release/boost/spirit/iterator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,26 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Daniel Nuffer
- Copyright (c) 2003 Giovanni Bajo
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ITERATOR_MAIN_HPP)
-#define BOOST_SPIRIT_ITERATOR_MAIN_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ITERATOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ITERATOR
 
-#include <boost/spirit/version.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_iterator.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_iterator.hpp"
+#endif
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// Master header for Spirit.Iterators
-//
-///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_iterator.hpp>
 
-#include <boost/spirit/iterator/file_iterator.hpp>
-#include <boost/spirit/iterator/fixed_size_queue.hpp>
-#include <boost/spirit/iterator/position_iterator.hpp>
-#include <boost/spirit/iterator/multi_pass.hpp>
-
-#endif // !defined(BOOST_SPIRIT_ITERATOR_MAIN_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/iterator/file_iterator.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/iterator/file_iterator.hpp (original)
+++ branches/CMake/release/boost/spirit/iterator/file_iterator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,225 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Giovanni Bajo
- Copyright (c) 2003 Thomas Witt
- Copyright (c) 2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_FILE_ITERATOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_FILE_ITERATOR
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// File Iterator structure
-//
-// The new structure is designed on layers. The top class (used by the user)
-// is file_iterator, which implements a full random access iterator through
-// the file, and some specific member functions (constructor that opens
-// the file, make_end() to generate the end iterator, operator bool to check
-// if the file was opened correctly).
-//
-// file_iterator implements the random access iterator interface by the means
-// of boost::iterator_adaptor, that is inhering an object created with it.
-// iterator_adaptor gets a low-level file iterator implementation (with just
-// a few member functions) and a policy (that basically describes to it how
-// the low-level file iterator interface is). The advantage is that
-// with boost::iterator_adaptor only 5 functions are needed to implement
-// a fully conformant random access iterator, instead of dozens of functions
-// and operators.
-//
-// There are two low-level file iterators implemented in this module. The
-// first (std_file_iterator) uses cstdio stream functions (fopen/fread), which
-// support full buffering, and is available everywhere (it's standard C++).
-// The second (mmap_file_iterator) is currently available only on Windows
-// platforms, and uses memory mapped files, which gives a decent speed boost.
-//
-///////////////////////////////////////////////////////////////////////////////
-//
-// TODO LIST:
-//
-// - In the Win32 mmap iterator, we could check if keeping a handle to the
-// opened file is really required. If it's not, we can just store the file
-// length (for make_end()) and save performance. Notice that this should be
-// tested under different Windows versions, the behaviour might change.
-// - Add some error support (by the means of some exceptions) in case of
-// low-level I/O failure.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef BOOST_SPIRIT_FILE_ITERATOR_HPP
-#define BOOST_SPIRIT_FILE_ITERATOR_HPP
-
-#include <string>
-#include <boost/config.hpp>
-#include <boost/iterator_adaptors.hpp>
-#include <boost/spirit/core/safe_bool.hpp>
-
-#include <boost/spirit/iterator/file_iterator_fwd.hpp>
-
-#if !defined(BOOST_SPIRIT_FILEITERATOR_STD)
-# if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) \
- && !defined(BOOST_DISABLE_WIN32)
-# define BOOST_SPIRIT_FILEITERATOR_WINDOWS
-# elif defined(BOOST_HAS_UNISTD_H)
-extern "C"
-{
-# include <unistd.h>
-}
-# ifdef _POSIX_MAPPED_FILES
-# define BOOST_SPIRIT_FILEITERATOR_POSIX
-# endif // _POSIX_MAPPED_FILES
-# endif // BOOST_HAS_UNISTD_H
-
-# if !defined(BOOST_SPIRIT_FILEITERATOR_WINDOWS) && \
- !defined(BOOST_SPIRIT_FILEITERATOR_POSIX)
-# define BOOST_SPIRIT_FILEITERATOR_STD
-# endif
-#endif // BOOST_SPIRIT_FILEITERATOR_STD
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-template <
- typename CharT = char,
- typename BaseIterator =
-#ifdef BOOST_SPIRIT_FILEITERATOR_STD
- fileiter_impl::std_file_iterator<CharT>
-#else
- fileiter_impl::mmap_file_iterator<CharT>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_file_iterator.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_file_iterator.hpp"
 #endif
-> class file_iterator;
-
-///////////////////////////////////////////////////////////////////////////////
-namespace fileiter_impl {
-
- /////////////////////////////////////////////////////////////////////////
- //
- // file_iter_generator
- //
- // Template meta-function to invoke boost::iterator_adaptor
- // NOTE: This cannot be moved into the implementation file because of
- // a bug of MSVC 7.0 and previous versions (base classes types are
- // looked up at compilation time, not instantion types, and
- // file_iterator would break).
- //
- /////////////////////////////////////////////////////////////////////////
-
-#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
- BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
-#error "Please use at least Boost V1.31.0 while compiling the file_iterator class!"
-#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
-
- template <typename CharT, typename BaseIteratorT>
- struct file_iter_generator
- {
- public:
- typedef BaseIteratorT adapted_t;
- typedef typename adapted_t::value_type value_type;
-
- typedef boost::iterator_adaptor <
- file_iterator<CharT, BaseIteratorT>,
- adapted_t,
- value_type const,
- std::random_access_iterator_tag,
- boost::use_default,
- std::ptrdiff_t
- > type;
- };
-
-#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
-
-///////////////////////////////////////////////////////////////////////////////
-} /* namespace impl */
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// file_iterator
-//
-// Iterates through an opened file.
-//
-// The main iterator interface is implemented by the iterator_adaptors
-// library, which wraps a conforming iterator interface around the
-// impl::BaseIterator class. This class merely derives the iterator_adaptors
-// generated class to implement the custom constructors and make_end()
-// member function.
-//
-///////////////////////////////////////////////////////////////////////////////
 
-template<typename CharT, typename BaseIteratorT>
-class file_iterator
- : public fileiter_impl::file_iter_generator<CharT, BaseIteratorT>::type,
- public safe_bool<file_iterator<CharT, BaseIteratorT> >
-{
-private:
- typedef typename
- fileiter_impl::file_iter_generator<CharT, BaseIteratorT>::type
- base_t;
- typedef typename
- fileiter_impl::file_iter_generator<CharT, BaseIteratorT>::adapted_t
- adapted_t;
-
-public:
- file_iterator()
- {}
-
- file_iterator(std::string fileName)
- : base_t(adapted_t(fileName))
- {}
-
- file_iterator(const base_t& iter)
- : base_t(iter)
- {}
-
- inline file_iterator& operator=(const base_t& iter);
- file_iterator make_end(void);
-
- // operator bool. This borrows a trick from boost::shared_ptr to avoid
- // to interfere with arithmetic operations.
- bool operator_bool(void) const
- { return this->base(); }
-
-private:
- friend class ::boost::iterator_core_access;
-
- typename base_t::reference dereference() const
- {
- return this->base_reference().get_cur_char();
- }
-
- void increment()
- {
- this->base_reference().next_char();
- }
-
- void decrement()
- {
- this->base_reference().prev_char();
- }
-
- void advance(typename base_t::difference_type n)
- {
- this->base_reference().advance(n);
- }
-
- template <
- typename OtherDerivedT, typename OtherIteratorT,
- typename V, typename C, typename R, typename D
- >
- typename base_t::difference_type distance_to(
- iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
- const &x) const
- {
- return x.base().distance(this->base_reference());
- }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-}} /* namespace boost::spirit */
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/iterator/impl/file_iterator.ipp> /* implementation */
-
-#endif /* BOOST_SPIRIT_FILE_ITERATOR_HPP */
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_file_iterator.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/iterator/file_iterator_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/iterator/file_iterator_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/iterator/file_iterator_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,34 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_FILE_ITERATOR_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_FILE_ITERATOR_FWD
 
-#if !defined(BOOST_SPIRIT_FILE_ITERATOR_FWD_HPP)
-#define BOOST_SPIRIT_FILE_ITERATOR_FWD_HPP
-
-namespace boost { namespace spirit {
-
- namespace fileiter_impl
- {
- template <typename CharT = char>
- class std_file_iterator;
-
- // may never be defined -- so what...
- template <typename CharT = char>
- class mmap_file_iterator;
- }
-
- // no defaults here -- too much dependencies
- template <
- typename CharT,
- typename BaseIterator
- > class file_iterator;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_file_iterator_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_file_iterator_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_file_iterator_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/iterator/fixed_size_queue.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/iterator/fixed_size_queue.hpp (original)
+++ branches/CMake/release/boost/spirit/iterator/fixed_size_queue.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,398 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001, Daniel C. Nuffer
- Copyright (c) 2003, Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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 FIXED_SIZE_QUEUE
-#define FIXED_SIZE_QUEUE
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_FIXED_SIZE_QUEUE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_FIXED_SIZE_QUEUE
 
-#include <cstdlib>
-#include <iterator>
-#include <cstddef>
-
-#include <boost/spirit/core/assert.hpp> // for BOOST_SPIRIT_ASSERT
-
-// FIXES for broken compilers
-#include <boost/config.hpp>
-#include <boost/iterator_adaptors.hpp>
-
-#define BOOST_SPIRIT_ASSERT_FSQ_SIZE \
- BOOST_SPIRIT_ASSERT(((m_tail + N + 1) - m_head) % (N+1) == m_size % (N+1)) \
- /**/
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-namespace impl {
-
-#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
- BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
-#error "Please use at least Boost V1.31.0 while compiling the fixed_size_queue class!"
-#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
-
-template <typename QueueT, typename T, typename PointerT>
-class fsq_iterator
-: public boost::iterator_adaptor<
- fsq_iterator<QueueT, T, PointerT>,
- PointerT,
- T,
- std::random_access_iterator_tag
- >
-{
-public:
- typedef typename QueueT::position_t position;
- typedef boost::iterator_adaptor<
- fsq_iterator<QueueT, T, PointerT>, PointerT, T,
- std::random_access_iterator_tag
- > base_t;
-
- fsq_iterator() {}
- fsq_iterator(position const &p_) : p(p_) {}
-
- position const &get_position() const { return p; }
-
-private:
- friend class boost::iterator_core_access;
-
- typename base_t::reference dereference() const
- {
- return p.self->m_queue[p.pos];
- }
-
- void increment()
- {
- ++p.pos;
- if (p.pos == QueueT::MAX_SIZE+1)
- p.pos = 0;
- }
-
- void decrement()
- {
- if (p.pos == 0)
- p.pos = QueueT::MAX_SIZE;
- else
- --p.pos;
- }
-
- template <
- typename OtherDerivedT, typename OtherIteratorT,
- typename V, typename C, typename R, typename D
- >
- bool equal(iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
- const &x) const
- {
- position const &rhs_pos =
- static_cast<OtherDerivedT const &>(x).get_position();
- return (p.self == rhs_pos.self) && (p.pos == rhs_pos.pos);
- }
-
- template <
- typename OtherDerivedT, typename OtherIteratorT,
- typename V, typename C, typename R, typename D
- >
- typename base_t::difference_type distance_to(
- iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
- const &x) const
- {
- typedef typename base_t::difference_type diff_t;
-
- position const &p2 =
- static_cast<OtherDerivedT const &>(x).get_position();
- std::size_t pos1 = p.pos;
- std::size_t pos2 = p2.pos;
-
- // Undefined behaviour if the iterators come from different
- // containers
- BOOST_SPIRIT_ASSERT(p.self == p2.self);
-
- if (pos1 < p.self->m_head)
- pos1 += QueueT::MAX_SIZE;
- if (pos2 < p2.self->m_head)
- pos2 += QueueT::MAX_SIZE;
-
- if (pos2 > pos1)
- return diff_t(pos2 - pos1);
- else
- return -diff_t(pos1 - pos2);
- }
-
- void advance(typename base_t::difference_type n)
- {
- // Notice that we don't care values of n that can
- // wrap around more than one time, since it would
- // be undefined behaviour anyway (going outside
- // the begin/end range). Negative wrapping is a bit
- // cumbersome because we don't want to case p.pos
- // to signed.
- if (n < 0)
- {
- n = -n;
- if (p.pos < (std::size_t)n)
- p.pos = QueueT::MAX_SIZE+1 - (n - p.pos);
- else
- p.pos -= n;
- }
- else
- {
- p.pos += n;
- if (p.pos >= QueueT::MAX_SIZE+1)
- p.pos -= QueueT::MAX_SIZE+1;
- }
- }
-
-private:
- position p;
-};
-
-#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
-
-///////////////////////////////////////////////////////////////////////////////
-} /* namespace impl */
-
-template <typename T, std::size_t N>
-class fixed_size_queue
-{
-private:
- struct position
- {
- fixed_size_queue* self;
- std::size_t pos;
-
- position() : self(0), pos(0) {}
-
- // The const_cast here is just to avoid to have two different
- // position structures for the const and non-const case.
- // The const semantic is guaranteed by the iterator itself
- position(const fixed_size_queue* s, std::size_t p)
- : self(const_cast<fixed_size_queue*>(s)), pos(p)
- {}
- };
-
-public:
- // Declare the iterators
- typedef impl::fsq_iterator<fixed_size_queue<T, N>, T, T*> iterator;
- typedef impl::fsq_iterator<fixed_size_queue<T, N>, T const, T const*>
- const_iterator;
- typedef position position_t;
-
- friend class impl::fsq_iterator<fixed_size_queue<T, N>, T, T*>;
- friend class impl::fsq_iterator<fixed_size_queue<T, N>, T const, T const*>;
-
- fixed_size_queue();
- fixed_size_queue(const fixed_size_queue& x);
- fixed_size_queue& operator=(const fixed_size_queue& x);
- ~fixed_size_queue();
-
- void push_back(const T& e);
- void push_front(const T& e);
- void serve(T& e);
- void pop_front();
-
- bool empty() const
- {
- return m_size == 0;
- }
-
- bool full() const
- {
- return m_size == N;
- }
-
- iterator begin()
- {
- return iterator(position(this, m_head));
- }
-
- const_iterator begin() const
- {
- return const_iterator(position(this, m_head));
- }
-
- iterator end()
- {
- return iterator(position(this, m_tail));
- }
-
- const_iterator end() const
- {
- return const_iterator(position(this, m_tail));
- }
-
- std::size_t size() const
- {
- return m_size;
- }
-
- T& front()
- {
- return m_queue[m_head];
- }
-
- const T& front() const
- {
- return m_queue[m_head];
- }
-
-private:
- // Redefine the template parameters to avoid using partial template
- // specialization on the iterator policy to extract N.
- BOOST_STATIC_CONSTANT(std::size_t, MAX_SIZE = N);
-
- std::size_t m_head;
- std::size_t m_tail;
- std::size_t m_size;
- T m_queue[N+1];
-};
-
-template <typename T, std::size_t N>
-inline
-fixed_size_queue<T, N>::fixed_size_queue()
- : m_head(0)
- , m_tail(0)
- , m_size(0)
-{
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-}
-
-template <typename T, std::size_t N>
-inline
-fixed_size_queue<T, N>::fixed_size_queue(const fixed_size_queue& x)
- : m_head(x.m_head)
- , m_tail(x.m_tail)
- , m_size(x.m_size)
-{
- copy(x.begin(), x.end(), begin());
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-}
-
-template <typename T, std::size_t N>
-inline fixed_size_queue<T, N>&
-fixed_size_queue<T, N>::operator=(const fixed_size_queue& x)
-{
- if (this != &x)
- {
- m_head = x.m_head;
- m_tail = x.m_tail;
- m_size = x.m_size;
- copy(x.begin(), x.end(), begin());
- }
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-
- return *this;
-}
-
-template <typename T, std::size_t N>
-inline
-fixed_size_queue<T, N>::~fixed_size_queue()
-{
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-}
-
-template <typename T, std::size_t N>
-inline void
-fixed_size_queue<T, N>::push_back(const T& e)
-{
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-
- BOOST_SPIRIT_ASSERT(!full());
-
- m_queue[m_tail] = e;
- ++m_size;
- ++m_tail;
- if (m_tail == N+1)
- m_tail = 0;
-
-
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-}
-
-template <typename T, std::size_t N>
-inline void
-fixed_size_queue<T, N>::push_front(const T& e)
-{
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-
- BOOST_SPIRIT_ASSERT(!full());
-
- if (m_head == 0)
- m_head = N;
- else
- --m_head;
-
- m_queue[m_head] = e;
- ++m_size;
-
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-}
-
-
-template <typename T, std::size_t N>
-inline void
-fixed_size_queue<T, N>::serve(T& e)
-{
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-
- e = m_queue[m_head];
- pop_front();
-}
-
-
-
-template <typename T, std::size_t N>
-inline void
-fixed_size_queue<T, N>::pop_front()
-{
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-
- ++m_head;
- if (m_head == N+1)
- m_head = 0;
- --m_size;
-
- BOOST_SPIRIT_ASSERT(m_size <= N+1);
- BOOST_SPIRIT_ASSERT_FSQ_SIZE;
- BOOST_SPIRIT_ASSERT(m_head <= N+1);
- BOOST_SPIRIT_ASSERT(m_tail <= N+1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_fixed_size_queue.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_fixed_size_queue.hpp"
+#endif
 
-#undef BOOST_SPIRIT_ASSERT_FSQ_SIZE
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_fixed_size_queue.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/iterator/multi_pass.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/iterator/multi_pass.hpp (original)
+++ branches/CMake/release/boost/spirit/iterator/multi_pass.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,1299 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001, Daniel C. Nuffer
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ITERATOR_MULTI_PASS_HPP
-#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_HPP
-
-#include <boost/config.hpp>
-#include <boost/throw_exception.hpp>
-#include <deque>
-#include <iterator>
-#include <iostream>
-#include <algorithm> // for std::swap
-#include <exception> // for std::exception
-#include <boost/limits.hpp>
-#include <boost/iterator.hpp>
-
-#include <boost/spirit/core/assert.hpp> // for BOOST_SPIRIT_ASSERT
-#include <boost/spirit/iterator/fixed_size_queue.hpp>
-#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
-
-#include <boost/spirit/iterator/multi_pass_fwd.hpp>
-
-namespace boost { namespace spirit {
-
-namespace impl {
- template <typename T>
- inline void mp_swap(T& t1, T& t2);
-}
-
-namespace multi_pass_policies
-{
-
-///////////////////////////////////////////////////////////////////////////////
-// class ref_counted
-// Implementation of an OwnershipPolicy used by multi_pass.
-//
-// Implementation modified from RefCounted class from the Loki library by
-// Andrei Alexandrescu
-///////////////////////////////////////////////////////////////////////////////
-class ref_counted
-{
- protected:
- ref_counted()
- : count(new std::size_t(1))
- {}
-
- ref_counted(ref_counted const& x)
- : count(x.count)
- {}
-
- // clone is called when a copy of the iterator is made, so increment
- // the ref-count.
- void clone()
- {
- ++*count;
- }
-
- // called when a copy is deleted. Decrement the ref-count. Return
- // value of true indicates that the last copy has been released.
- bool release()
- {
- if (!--*count)
- {
- delete count;
- count = 0;
- return true;
- }
- return false;
- }
-
- void swap(ref_counted& x)
- {
- impl::mp_swap(count, x.count);
- }
-
- public:
- // returns true if there is only one iterator in existence.
- // std_deque StoragePolicy will free it's buffered data if this
- // returns true.
- bool unique() const
- {
- return *count == 1;
- }
-
- private:
- std::size_t* count;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// class first_owner
-// Implementation of an OwnershipPolicy used by multi_pass
-// This ownership policy dictates that the first iterator created will
-// determine the lifespan of the shared components. This works well for
-// spirit, since no dynamic allocation of iterators is done, and all copies
-// are make on the stack.
-//
-// There is a caveat about using this policy together with the std_deque
-// StoragePolicy. Since first_owner always returns false from unique(),
-// std_deque will only release the queued data if clear_queue() is called.
-///////////////////////////////////////////////////////////////////////////////
-class first_owner
-{
- protected:
- first_owner()
- : first(true)
- {}
-
- first_owner(first_owner const&)
- : first(false)
- {}
-
- void clone()
- {
- }
-
- // return true to indicate deletion of resources
- bool release()
- {
- return first;
- }
-
- void swap(first_owner&)
- {
- // if we're the first, we still remain the first, even if assigned
- // to, so don't swap first_. swap is only called from operator=
- }
-
- public:
- bool unique() const
- {
- return false; // no way to know, so always return false
- }
-
- private:
- bool first;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// class illegal_backtracking
-// thrown by buf_id_check CheckingPolicy if an instance of an iterator is
-// used after another one has invalidated the queue
-///////////////////////////////////////////////////////////////////////////////
-class illegal_backtracking : public std::exception
-{
-public:
-
- illegal_backtracking() throw() {}
- ~illegal_backtracking() throw() {}
-
- virtual const char*
- what() const throw()
- { return "boost::spirit::illegal_backtracking"; }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// class buf_id_check
-// Implementation of the CheckingPolicy used by multi_pass
-// This policy is most effective when used together with the std_deque
-// StoragePolicy.
-// If used with the fixed_size_queue StoragePolicy, it will not detect
-// iterator derefereces that are out of the range of the queue.
-///////////////////////////////////////////////////////////////////////////////
-class buf_id_check
-{
- protected:
- buf_id_check()
- : shared_buf_id(new unsigned long(0))
- , buf_id(0)
- {}
-
- buf_id_check(buf_id_check const& x)
- : shared_buf_id(x.shared_buf_id)
- , buf_id(x.buf_id)
- {}
-
- // will be called from the destructor of the last iterator.
- void destroy()
- {
- delete shared_buf_id;
- shared_buf_id = 0;
- }
-
- void swap(buf_id_check& x)
- {
- impl::mp_swap(shared_buf_id, x.shared_buf_id);
- impl::mp_swap(buf_id, x.buf_id);
- }
-
- // called to verify that everything is okay.
- void check() const
- {
- if (buf_id != *shared_buf_id)
- {
- boost::throw_exception(illegal_backtracking());
- }
- }
-
- // called from multi_pass::clear_queue, so we can increment the count
- void clear_queue()
- {
- ++*shared_buf_id;
- ++buf_id;
- }
-
- private:
- unsigned long* shared_buf_id;
- unsigned long buf_id;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// class no_check
-// Implementation of the CheckingPolicy used by multi_pass
-// It does not do anything :-)
-///////////////////////////////////////////////////////////////////////////////
-class no_check
-{
- protected:
- no_check() {}
- no_check(no_check const&) {}
- void destroy() {}
- void swap(no_check&) {}
- void check() const {}
- void clear_queue() {}
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// class std_deque
-// Implementation of the StoragePolicy used by multi_pass
-// This stores all data in a std::deque, and keeps an offset to the current
-// position. It stores all the data unless there is only one
-// iterator using the queue.
-// Note: a position is used instead of an iterator, because a push_back on
-// a deque can invalidate any iterators.
-///////////////////////////////////////////////////////////////////////////////
-class std_deque
-{
- public:
-
-template <typename ValueT>
-class inner
-{
- private:
-
- typedef std::deque<ValueT> queue_type;
- queue_type* queuedElements;
- mutable typename queue_type::size_type queuePosition;
-
- protected:
- inner()
- : queuedElements(new queue_type)
- , queuePosition(0)
- {}
-
- inner(inner const& x)
- : queuedElements(x.queuedElements)
- , queuePosition(x.queuePosition)
- {}
-
- // will be called from the destructor of the last iterator.
- void destroy()
- {
- BOOST_SPIRIT_ASSERT(NULL != queuedElements);
- delete queuedElements;
- queuedElements = 0;
- }
-
- void swap(inner& x)
- {
- impl::mp_swap(queuedElements, x.queuedElements);
- impl::mp_swap(queuePosition, x.queuePosition);
- }
-
- // This is called when the iterator is dereferenced. It's a template
- // method so we can recover the type of the multi_pass iterator
- // and call unique and access the m_input data member.
- template <typename MultiPassT>
- static typename MultiPassT::reference dereference(MultiPassT const& mp)
- {
- if (mp.queuePosition == mp.queuedElements->size())
- {
- // check if this is the only iterator
- if (mp.unique())
- {
- // free up the memory used by the queue.
- if (mp.queuedElements->size() > 0)
- {
- mp.queuedElements->clear();
- mp.queuePosition = 0;
- }
- }
- return mp.get_input();
- }
- else
- {
- return (*mp.queuedElements)[mp.queuePosition];
- }
- }
-
- // This is called when the iterator is incremented. It's a template
- // method so we can recover the type of the multi_pass iterator
- // and call unique and access the m_input data member.
- template <typename MultiPassT>
- static void increment(MultiPassT& mp)
- {
- if (mp.queuePosition == mp.queuedElements->size())
- {
- // check if this is the only iterator
- if (mp.unique())
- {
- // free up the memory used by the queue.
- if (mp.queuedElements->size() > 0)
- {
- mp.queuedElements->clear();
- mp.queuePosition = 0;
- }
- }
- else
- {
- mp.queuedElements->push_back(mp.get_input());
- ++mp.queuePosition;
- }
- mp.advance_input();
- }
- else
- {
- ++mp.queuePosition;
- }
-
- }
-
- // called to forcibly clear the queue
- void clear_queue()
- {
- queuedElements->clear();
- queuePosition = 0;
- }
-
- // called to determine whether the iterator is an eof iterator
- template <typename MultiPassT>
- static bool is_eof(MultiPassT const& mp)
- {
- return mp.queuePosition == mp.queuedElements->size() &&
- mp.input_at_eof();
- }
-
- // called by operator==
- bool equal_to(inner const& x) const
- {
- return queuePosition == x.queuePosition;
- }
-
- // called by operator<
- bool less_than(inner const& x) const
- {
- return queuePosition < x.queuePosition;
- }
-}; // class inner
-
-}; // class std_deque
-
-
-///////////////////////////////////////////////////////////////////////////////
-// class fixed_size_queue
-// Implementation of the StoragePolicy used by multi_pass
-// fixed_size_queue keeps a circular buffer (implemented by
-// boost::spirit::fixed_size_queue class) that is size N+1 and stores N elements.
-// It is up to the user to ensure that there is enough look ahead for their
-// grammar. Currently there is no way to tell if an iterator is pointing
-// to forgotten data. The leading iterator will put an item in the queue
-// and remove one when it is incremented. No dynamic allocation is done,
-// except on creation of the queue (fixed_size_queue constructor).
-///////////////////////////////////////////////////////////////////////////////
-template < std::size_t N>
-class fixed_size_queue
-{
- public:
-
-template <typename ValueT>
-class inner
-{
- private:
-
- typedef boost::spirit::fixed_size_queue<ValueT, N> queue_type;
- queue_type * queuedElements;
- mutable typename queue_type::iterator queuePosition;
-
- protected:
- inner()
- : queuedElements(new queue_type)
- , queuePosition(queuedElements->begin())
- {}
-
- inner(inner const& x)
- : queuedElements(x.queuedElements)
- , queuePosition(x.queuePosition)
- {}
-
- // will be called from the destructor of the last iterator.
- void destroy()
- {
- BOOST_SPIRIT_ASSERT(NULL != queuedElements);
- delete queuedElements;
- queuedElements = 0;
- }
-
- void swap(inner& x)
- {
- impl::mp_swap(queuedElements, x.queuedElements);
- impl::mp_swap(queuePosition, x.queuePosition);
- }
-
- // This is called when the iterator is dereferenced. It's a template
- // method so we can recover the type of the multi_pass iterator
- // and access the m_input data member.
- template <typename MultiPassT>
- static typename MultiPassT::reference dereference(MultiPassT const& mp)
- {
- if (mp.queuePosition == mp.queuedElements->end())
- {
- return mp.get_input();
- }
- else
- {
- return *mp.queuePosition;
- }
- }
-
- // This is called when the iterator is incremented. It's a template
- // method so we can recover the type of the multi_pass iterator
- // and access the m_input data member.
- template <typename MultiPassT>
- static void increment(MultiPassT& mp)
- {
- if (mp.queuePosition == mp.queuedElements->end())
- {
- // don't let the queue get larger than N
- if (mp.queuedElements->size() >= N)
- mp.queuedElements->pop_front();
-
- mp.queuedElements->push_back(mp.get_input());
- mp.advance_input();
- }
- ++mp.queuePosition;
- }
-
- // no-op
- void clear_queue()
- {}
-
- // called to determine whether the iterator is an eof iterator
- template <typename MultiPassT>
- static bool is_eof(MultiPassT const& mp)
- {
- return mp.queuePosition == mp.queuedElements->end() &&
- mp.input_at_eof();
- }
-
- // called by operator==
- bool equal_to(inner const& x) const
- {
- return queuePosition == x.queuePosition;
- }
-
- // called by operator<
- bool less_than(inner const& x) const
- {
- return queuePosition < x.queuePosition;
- }
-}; // class inner
-
-}; // class fixed_size_queue
-
-
-///////////////////////////////////////////////////////////////////////////////
-// class input_iterator
-// Implementation of the InputPolicy used by multi_pass
-// input_iterator encapsulates an input iterator of type InputT
-///////////////////////////////////////////////////////////////////////////////
-class input_iterator
-{
- public:
-
-template <typename InputT>
-class inner
-{
- private:
- typedef
- typename boost::detail::iterator_traits<InputT>::value_type
- result_type;
-
- public:
- typedef result_type value_type;
-
- private:
- struct Data {
- Data(InputT const &input_)
- : input(input_), was_initialized(false)
- {}
-
- InputT input;
- value_type curtok;
- bool was_initialized;
- };
-
- // Needed by compilers not implementing the resolution to DR45. For
- // reference, see
- // http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#45.
-
- friend struct Data;
-
- public:
- typedef
- typename boost::detail::iterator_traits<InputT>::difference_type
- difference_type;
- typedef
- typename boost::detail::iterator_traits<InputT>::pointer
- pointer;
- typedef
- typename boost::detail::iterator_traits<InputT>::reference
- reference;
-
- protected:
- inner()
- : data(0)
- {}
-
- inner(InputT x)
- : data(new Data(x))
- {}
-
- inner(inner const& x)
- : data(x.data)
- {}
-
- void destroy()
- {
- delete data;
- data = 0;
- }
-
- bool same_input(inner const& x) const
- {
- return data == x.data;
- }
-
- typedef
- typename boost::detail::iterator_traits<InputT>::value_type
- value_t;
- void swap(inner& x)
- {
- impl::mp_swap(data, x.data);
- }
-
- void ensure_initialized() const
- {
- if (data && !data->was_initialized) {
- data->curtok = *data->input; // get the first token
- data->was_initialized = true;
- }
- }
-
- public:
- reference get_input() const
- {
- BOOST_SPIRIT_ASSERT(NULL != data);
- ensure_initialized();
- return data->curtok;
- }
-
- void advance_input()
- {
- BOOST_SPIRIT_ASSERT(NULL != data);
- data->was_initialized = false; // should get the next token
- ++data->input;
- }
-
- bool input_at_eof() const
- {
- return !data || data->input == InputT();
- }
-
- private:
- Data *data;
-};
-
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// class lex_input
-// Implementation of the InputPolicy used by multi_pass
-// lex_input gets tokens (ints) from yylex()
-///////////////////////////////////////////////////////////////////////////////
-class lex_input
-{
- public:
-
-template <typename InputT>
-class inner
-{
- public:
- typedef int value_type;
- typedef std::ptrdiff_t difference_type;
- typedef int* pointer;
- typedef int& reference;
-
- protected:
- inner()
- : curtok(new int(0))
- {}
-
- inner(InputT x)
- : curtok(new int(x))
- {}
-
- inner(inner const& x)
- : curtok(x.curtok)
- {}
-
- void destroy()
- {
- delete curtok;
- curtok = 0;
- }
-
- bool same_input(inner const& x) const
- {
- return curtok == x.curtok;
- }
-
- void swap(inner& x)
- {
- impl::mp_swap(curtok, x.curtok);
- }
-
- public:
- reference get_input() const
- {
- return *curtok;
- }
-
- void advance_input()
- {
- extern int yylex();
- *curtok = yylex();
- }
-
- bool input_at_eof() const
- {
- return *curtok == 0;
- }
-
- private:
- int* curtok;
-
-};
-
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// class functor_input
-// Implementation of the InputPolicy used by multi_pass
-// functor_input gets tokens from a functor
-// Note: the functor must have a typedef for result_type
-// It also must have a static variable of type result_type defined to
-// represent eof that is called eof.
-///////////////////////////////////////////////////////////////////////////////
-class functor_input
-{
- public:
-
-template <typename FunctorT>
-class inner
-{
- typedef typename FunctorT::result_type result_type;
- public:
- typedef result_type value_type;
- typedef std::ptrdiff_t difference_type;
- typedef result_type* pointer;
- typedef result_type& reference;
-
- protected:
- inner()
- : ftor(0)
- , curtok(0)
- {}
-
- inner(FunctorT const& x)
- : ftor(new FunctorT(x))
- , curtok(new result_type((*ftor)()))
- {}
-
- inner(inner const& x)
- : ftor(x.ftor)
- , curtok(x.curtok)
- {}
-
- void destroy()
- {
- delete ftor;
- ftor = 0;
- delete curtok;
- curtok = 0;
- }
-
- bool same_input(inner const& x) const
- {
- return ftor == x.ftor;
- }
-
- void swap(inner& x)
- {
- impl::mp_swap(curtok, x.curtok);
- impl::mp_swap(ftor, x.ftor);
- }
-
- public:
- reference get_input() const
- {
- return *curtok;
- }
-
- void advance_input()
- {
- if (curtok) {
- *curtok = (*ftor)();
- }
- }
-
- bool input_at_eof() const
- {
- return !curtok || *curtok == ftor->eof;
- }
-
- FunctorT& get_functor() const
- {
- return *ftor;
- }
-
-
- private:
- FunctorT* ftor;
- result_type* curtok;
-
-};
-
-};
-
-} // namespace multi_pass_policies
-
-///////////////////////////////////////////////////////////////////////////////
-// iterator_base_creator
-///////////////////////////////////////////////////////////////////////////////
-
-namespace iterator_ { namespace impl {
-
-// Meta-function to generate a std::iterator<> base class for multi_pass. This
-// is used mainly to improve conformance of compilers not supporting PTS
-// and thus relying on inheritance to recognize an iterator.
-// We are using boost::iterator<> because it offers an automatic workaround
-// for broken std::iterator<> implementations.
-template <typename InputPolicyT, typename InputT>
-struct iterator_base_creator
-{
- typedef typename InputPolicyT::BOOST_NESTED_TEMPLATE inner<InputT> input_t;
-
- typedef boost::iterator
- <
- std::forward_iterator_tag,
- typename input_t::value_type,
- typename input_t::difference_type,
- typename input_t::pointer,
- typename input_t::reference
- > type;
-};
-
-}}
-
-///////////////////////////////////////////////////////////////////////////////
-// class template multi_pass
-///////////////////////////////////////////////////////////////////////////////
-
-// The default multi_pass instantiation uses a ref-counted std_deque scheme.
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-class multi_pass
- : public OwnershipPolicy
- , public CheckingPolicy
- , public StoragePolicy::template inner<
- typename InputPolicy::template inner<InputT>::value_type>
- , public InputPolicy::template inner<InputT>
- , public iterator_::impl::iterator_base_creator<InputPolicy, InputT>::type
-{
- typedef OwnershipPolicy OP;
- typedef CheckingPolicy CHP;
- typedef typename StoragePolicy::template inner<
- typename InputPolicy::template inner<InputT>::value_type> SP;
- typedef typename InputPolicy::template inner<InputT> IP;
- typedef typename
- iterator_::impl::iterator_base_creator<InputPolicy, InputT>::type
- IB;
-
- public:
- typedef typename IB::value_type value_type;
- typedef typename IB::difference_type difference_type;
- typedef typename IB::reference reference;
- typedef typename IB::pointer pointer;
- typedef InputT iterator_type;
-
- multi_pass();
- explicit multi_pass(InputT input);
-
-#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
- multi_pass(int);
-#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
-
- ~multi_pass();
-
- multi_pass(multi_pass const&);
- multi_pass& operator=(multi_pass const&);
-
- void swap(multi_pass& x);
-
- reference operator*() const;
- pointer operator->() const;
- multi_pass& operator++();
- multi_pass operator++(int);
-
- void clear_queue();
-
- bool operator==(const multi_pass& y) const;
- bool operator<(const multi_pass& y) const;
-
- private: // helper functions
- bool is_eof() const;
-};
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-multi_pass()
- : OP()
- , CHP()
- , SP()
- , IP()
-{
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-multi_pass(InputT input)
- : OP()
- , CHP()
- , SP()
- , IP(input)
-{
-}
-
-#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
- // The standard library shipped with gcc-3.1 has a bug in
- // bits/basic_string.tcc. It tries to use iter::iter(0) to
- // construct an iterator. Ironically, this happens in sanity
- // checking code that isn't required by the standard.
- // The workaround is to provide an additional constructor that
- // ignores its int argument and behaves like the default constructor.
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-multi_pass(int)
- : OP()
- , CHP()
- , SP()
- , IP()
-{
-}
-#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-~multi_pass()
-{
- if (OP::release())
- {
- CHP::destroy();
- SP::destroy();
- IP::destroy();
- }
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-multi_pass(
- multi_pass const& x)
- : OP(x)
- , CHP(x)
- , SP(x)
- , IP(x)
-{
- OP::clone();
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>&
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-operator=(
- multi_pass const& x)
-{
- multi_pass temp(x);
- temp.swap(*this);
- return *this;
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline void
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-swap(multi_pass& x)
-{
- OP::swap(x);
- CHP::swap(x);
- SP::swap(x);
- IP::swap(x);
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-typename multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-reference
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-operator*() const
-{
- CHP::check();
- return SP::dereference(*this);
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-typename multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-pointer
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-operator->() const
-{
- return &(operator*());
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>&
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-operator++()
-{
- CHP::check();
- SP::increment(*this);
- return *this;
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-operator++(int)
-{
- multi_pass
- <
- InputT,
- InputPolicy,
- OwnershipPolicy,
- CheckingPolicy,
- StoragePolicy
- > tmp(*this);
-
- ++*this;
-
- return tmp;
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline void
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-clear_queue()
-{
- SP::clear_queue();
- CHP::clear_queue();
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline bool
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-is_eof() const
-{
- return SP::is_eof(*this);
-}
-
-///// Comparisons
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline bool
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-operator==(const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
- StoragePolicy>& y) const
-{
- bool is_eof_ = SP::is_eof(*this);
- bool y_is_eof_ = SP::is_eof(y);
-
- if (is_eof_ && y_is_eof_)
- {
- return true; // both are EOF
- }
- else if (is_eof_ ^ y_is_eof_)
- {
- return false; // one is EOF, one isn't
- }
- else if (!IP::same_input(y))
- {
- return false;
- }
- else
- {
- return SP::equal_to(y);
- }
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline bool
-multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
-operator<(const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
- StoragePolicy>& y) const
-{
- return SP::less_than(y);
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-bool operator!=(
- const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
- StoragePolicy>& x,
- const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
- StoragePolicy>& y)
-{
- return !(x == y);
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-bool operator>(
- const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
- StoragePolicy>& x,
- const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
- StoragePolicy>& y)
-{
- return y < x;
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-bool operator>=(
- const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
- StoragePolicy>& x,
- const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
- StoragePolicy>& y)
-{
- return !(x < y);
-}
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-inline
-bool operator<=(
- const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
- StoragePolicy>& x,
- const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
- StoragePolicy>& y)
-{
- return !(y < x);
-}
-
-///// Generator function
-template <typename InputT>
-inline multi_pass<InputT>
-make_multi_pass(InputT i)
-{
- return multi_pass<InputT>(i);
-}
-
-// this could be a template typedef, since such a thing doesn't
-// exist in C++, we'll use inheritance to accomplish the same thing.
-
-template <typename InputT, std::size_t N>
-class look_ahead :
- public multi_pass<
- InputT,
- multi_pass_policies::input_iterator,
- multi_pass_policies::first_owner,
- multi_pass_policies::no_check,
- multi_pass_policies::fixed_size_queue<N> >
-{
- typedef multi_pass<
- InputT,
- multi_pass_policies::input_iterator,
- multi_pass_policies::first_owner,
- multi_pass_policies::no_check,
- multi_pass_policies::fixed_size_queue<N> > base_t;
- public:
- look_ahead()
- : base_t() {}
-
- explicit look_ahead(InputT x)
- : base_t(x) {}
-
- look_ahead(look_ahead const& x)
- : base_t(x) {}
-
-#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
- look_ahead(int) // workaround for a bug in the library
- : base_t() {} // shipped with gcc 3.1
-#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
-
- // default generated operators destructor and assignment operator are okay.
-};
-
-template
-<
- typename InputT,
- typename InputPolicy,
- typename OwnershipPolicy,
- typename CheckingPolicy,
- typename StoragePolicy
->
-void swap(
- multi_pass<
- InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy
- > &x,
- multi_pass<
- InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy
- > &y)
-{
- x.swap(y);
-}
-
-namespace impl {
-
- template <typename T>
- inline void mp_swap(T& t1, T& t2)
- {
- using std::swap;
- using boost::spirit::swap;
- swap(t1, t2);
- }
-}
-
-}} // namespace boost::spirit
-
-#endif // BOOST_SPIRIT_ITERATOR_MULTI_PASS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_MULTI_PASS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_MULTI_PASS
 
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_multi_pass.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_multi_pass.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_multi_pass.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/iterator/multi_pass_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/iterator/multi_pass_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/iterator/multi_pass_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,42 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_HPP)
-#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_MULTI_PASS_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_MULTI_PASS_FWD
 
-#include <cstddef>
-
-namespace boost { namespace spirit {
-
- namespace multi_pass_policies
- {
- class ref_counted;
- class first_owner;
- class buf_id_check;
- class no_check;
- class std_deque;
- template<std::size_t N> class fixed_size_queue;
- class input_iterator;
- class lex_input;
- class functor_input;
- }
-
- template
- <
- typename InputT,
- typename InputPolicy = multi_pass_policies::input_iterator,
- typename OwnershipPolicy = multi_pass_policies::ref_counted,
- typename CheckingPolicy = multi_pass_policies::buf_id_check,
- typename StoragePolicy = multi_pass_policies::std_deque
- >
- class multi_pass;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_multi_pass_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_multi_pass_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_multi_pass_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/iterator/position_iterator.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/iterator/position_iterator.hpp (original)
+++ branches/CMake/release/boost/spirit/iterator/position_iterator.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,429 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002 Juan Carlos Arevalo-Baeza
- Copyright (c) 2002-2006 Hartmut Kaiser
- Copyright (c) 2003 Giovanni Bajo
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_POSITION_ITERATOR_HPP
-#define BOOST_SPIRIT_POSITION_ITERATOR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_POSITION_ITERATOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_POSITION_ITERATOR
 
-#include <string>
-#include <boost/config.hpp>
-#include <boost/concept_check.hpp>
-
-#include <boost/spirit/iterator/position_iterator_fwd.hpp>
-
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// file_position_without_column
-//
-// A structure to hold positional information. This includes the file,
-// and the line number
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename String>
-struct file_position_without_column_base {
- String file;
- int line;
-
- file_position_without_column_base(String const& file_ = String(),
- int line_ = 1):
- file (file_),
- line (line_)
- {}
-
- bool operator==(const file_position_without_column_base& fp) const
- { return line == fp.line && file == fp.file; }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// file_position
-//
-// This structure holds complete file position, including file name,
-// line and column number
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename String>
-struct file_position_base : public file_position_without_column_base<String> {
- int column;
-
- file_position_base(String const& file_ = String(),
- int line_ = 1, int column_ = 1):
- file_position_without_column_base<String> (file_, line_),
- column (column_)
- {}
-
- bool operator==(const file_position_base& fp) const
- { return column == fp.column && this->line == fp.line && this->file == fp.file; }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// position_policy<>
-//
-// This template is the policy to handle the file position. It is specialized
-// on the position type. Providing a custom file_position also requires
-// providing a specialization of this class.
-//
-// Policy interface:
-//
-// Default constructor of the custom position class must be accessible.
-// set_tab_chars(unsigned int chars) - Set the tabstop width
-// next_char(PositionT& pos) - Notify that a new character has been
-// processed
-// tabulation(PositionT& pos) - Notify that a tab character has been
-// processed
-// next_line(PositionT& pos) - Notify that a new line delimiter has
-// been reached.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename PositionT> class position_policy;
-
-///////////////////////////////////////////////////////////////////////////////
-}} /* namespace boost::spirit */
-
-
-// This must be included here for full compatibility with old MSVC
-#include "boost/spirit/iterator/impl/position_iterator.ipp"
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// position_iterator
-//
-// It wraps an iterator, and keeps track of the current position in the input,
-// as it gets incremented.
-//
-// The wrapped iterator must be at least a Forward iterator. The position
-// iterator itself will always be a non-mutable Forward iterator.
-//
-// In order to have begin/end iterators constructed, the end iterator must be
-// empty constructed. Similar to what happens with stream iterators. The begin
-// iterator must be constructed from both, the begin and end iterators of the
-// wrapped iterator type. This is necessary to implement the lookahead of
-// characters necessary to parse CRLF sequences.
-//
-// In order to extract the current positional data from the iterator, you may
-// use the get_position member function.
-//
-// You can also use the set_position member function to reset the current
-// position to something new.
-//
-// The structure that holds the current position can be customized through a
-// template parameter, and the class position_policy must be specialized
-// on the new type to define how to handle it. Currently, it's possible
-// to choose between the file_position and file_position_without_column
-// (which saves some overhead if managing current column is not required).
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
- BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
-#error "Please use at least Boost V1.31.0 while compiling the position_iterator class!"
-#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Uses the newer iterator_adaptor version (should be released with
-// Boost V1.31.0)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename ForwardIteratorT,
- typename PositionT,
- typename SelfT
->
-class position_iterator
-: public iterator_::impl::position_iterator_base_generator<
- SelfT,
- ForwardIteratorT,
- PositionT
- >::type,
- public position_policy<PositionT>
-{
-private:
-
- typedef position_policy<PositionT> position_policy_t;
- typedef typename iterator_::impl::position_iterator_base_generator<
- SelfT,
- ForwardIteratorT,
- PositionT
- >::type base_t;
- typedef typename iterator_::impl::position_iterator_base_generator<
- SelfT,
- ForwardIteratorT,
- PositionT
- >::main_iter_t main_iter_t;
-
-public:
-
- typedef PositionT position_t;
-
- position_iterator()
- : _isend(true)
- {}
-
- position_iterator(
- const ForwardIteratorT& begin,
- const ForwardIteratorT& end)
- : base_t(begin), _end(end), _pos(PositionT()), _isend(begin == end)
- {}
-
- template <typename FileNameT>
- position_iterator(
- const ForwardIteratorT& begin,
- const ForwardIteratorT& end,
- FileNameT fileName)
- : base_t(begin), _end(end), _pos(PositionT(fileName)),
- _isend(begin == end)
- {}
-
- template <typename FileNameT, typename LineT>
- position_iterator(
- const ForwardIteratorT& begin,
- const ForwardIteratorT& end,
- FileNameT fileName, LineT line)
- : base_t(begin), _end(end), _pos(PositionT(fileName, line)),
- _isend(begin == end)
- {}
-
- template <typename FileNameT, typename LineT, typename ColumnT>
- position_iterator(
- const ForwardIteratorT& begin,
- const ForwardIteratorT& end,
- FileNameT fileName, LineT line, ColumnT column)
- : base_t(begin), _end(end), _pos(PositionT(fileName, line, column)),
- _isend(begin == end)
- {}
-
- position_iterator(
- const ForwardIteratorT& begin,
- const ForwardIteratorT& end,
- const PositionT& pos)
- : base_t(begin), _end(end), _pos(pos), _isend(begin == end)
- {}
-
- position_iterator(const position_iterator& iter)
- : base_t(iter.base()), position_policy_t(iter),
- _end(iter._end), _pos(iter._pos), _isend(iter._isend)
- {}
-
- position_iterator& operator=(const position_iterator& iter)
- {
- base_t::operator=(iter);
- position_policy_t::operator=(iter);
- _end = iter._end;
- _pos = iter._pos;
- _isend = iter._isend;
- return *this;
- }
-
- void set_position(PositionT const& newpos) { _pos = newpos; }
- PositionT& get_position() { return _pos; }
- PositionT const& get_position() const { return _pos; }
-
- void set_tabchars(unsigned int chars)
- {
- // This function (which comes from the position_policy) has a
- // different name on purpose, to avoid messing with using
- // declarations or qualified calls to access the base template
- // function, which might break some compilers.
- this->position_policy_t::set_tab_chars(chars);
- }
-
-private:
- friend class boost::iterator_core_access;
-
- void increment()
- {
- typename base_t::reference val = *(this->base());
- if (val == '\n' || val == '\r') {
- ++this->base_reference();
- if (this->base_reference() != _end) {
- typename base_t::reference val2 = *(this->base());
- if ((val == '\n' && val2 == '\r')
- || (val == '\r' && val2 == '\n'))
- {
- ++this->base_reference();
- }
- }
- this->next_line(_pos);
- static_cast<main_iter_t &>(*this).newline();
- }
- else if (val == '\t') {
- this->tabulation(_pos);
- ++this->base_reference();
- }
- else {
- this->next_char(_pos);
- ++this->base_reference();
- }
-
- // The iterator is at the end only if it's the same
- // of the
- _isend = (this->base_reference() == _end);
- }
-
- template <
- typename OtherDerivedT, typename OtherIteratorT,
- typename V, typename C, typename R, typename D
- >
- bool equal(iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
- const &x) const
- {
- OtherDerivedT const &rhs = static_cast<OtherDerivedT const &>(x);
- bool x_is_end = rhs._isend;
-
- return (_isend && x_is_end) ||
- (!_isend && !x_is_end && this->base() == rhs.base());
- }
-
-protected:
-
- void newline(void)
- {}
-
- ForwardIteratorT _end;
- PositionT _pos;
- bool _isend;
-};
-
-#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// position_iterator2
-//
-// Equivalent to position_iterator, but it is able to extract the current
-// line into a string. This is very handy for error reports.
-//
-// Notice that the footprint of this class is higher than position_iterator,
-// (how much depends on how bulky the underlying iterator is), so it should
-// be used only if necessary.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template
-<
- typename ForwardIteratorT,
- typename PositionT
->
-class position_iterator2
- : public position_iterator
- <
- ForwardIteratorT,
- PositionT,
- position_iterator2<ForwardIteratorT, PositionT>
- >
-{
- typedef position_iterator
- <
- ForwardIteratorT,
- PositionT,
- position_iterator2<ForwardIteratorT, PositionT> // JDG 4-15-03
- > base_t;
-
-public:
- typedef typename base_t::value_type value_type;
- typedef PositionT position_t;
-
- position_iterator2()
- {}
-
- position_iterator2(
- const ForwardIteratorT& begin,
- const ForwardIteratorT& end):
- base_t(begin, end),
- _startline(begin)
- {}
-
- template <typename FileNameT>
- position_iterator2(
- const ForwardIteratorT& begin,
- const ForwardIteratorT& end,
- FileNameT file):
- base_t(begin, end, file),
- _startline(begin)
- {}
-
- template <typename FileNameT, typename LineT>
- position_iterator2(
- const ForwardIteratorT& begin,
- const ForwardIteratorT& end,
- FileNameT file, LineT line):
- base_t(begin, end, file, line),
- _startline(begin)
- {}
-
- template <typename FileNameT, typename LineT, typename ColumnT>
- position_iterator2(
- const ForwardIteratorT& begin,
- const ForwardIteratorT& end,
- FileNameT file, LineT line, ColumnT column):
- base_t(begin, end, file, line, column),
- _startline(begin)
- {}
-
- position_iterator2(
- const ForwardIteratorT& begin,
- const ForwardIteratorT& end,
- const PositionT& pos):
- base_t(begin, end, pos),
- _startline(begin)
- {}
-
- position_iterator2(const position_iterator2& iter)
- : base_t(iter), _startline(iter._startline)
- {}
-
- position_iterator2& operator=(const position_iterator2& iter)
- {
- base_t::operator=(iter);
- _startline = iter._startline;
- return *this;
- }
-
- ForwardIteratorT get_currentline_begin(void) const
- { return _startline; }
-
- ForwardIteratorT get_currentline_end(void) const
- { return get_endline(); }
-
- std::basic_string<value_type> get_currentline(void) const
- {
- return std::basic_string<value_type>
- (get_currentline_begin(), get_currentline_end());
- }
-
-protected:
- ForwardIteratorT _startline;
-
- friend class position_iterator<ForwardIteratorT, PositionT,
- position_iterator2<ForwardIteratorT, PositionT> >;
-
- ForwardIteratorT get_endline() const
- {
- ForwardIteratorT endline = _startline;
- while (endline != this->_end && *endline != '\r' && *endline != '\n')
- {
- ++endline;
- }
- return endline;
- }
-
- void newline(void)
- { _startline = this->base(); }
-};
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_position_iterator.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_position_iterator.hpp"
+#endif
 
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_position_iterator.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/iterator/position_iterator_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/iterator/position_iterator_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/iterator/position_iterator_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,56 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- Copyright (c) 2002-2006 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_POSITION_ITERATOR_FWD_HPP)
-#define BOOST_SPIRIT_POSITION_ITERATOR_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_POSITION_ITERATOR_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_POSITION_ITERATOR_FWD
 
-#include <string>
-#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
-#include <boost/spirit/core/nil.hpp>
-
-namespace boost { namespace spirit {
-
- template <typename String = std::string>
- struct file_position_base;
-
- typedef file_position_base<std::string> file_position;
-
- template <typename String = std::string>
- struct file_position_without_column_base;
-
- typedef file_position_without_column_base<std::string> file_position_without_column;
-
- template <
- typename ForwardIteratorT,
- typename PositionT = file_position_base<
- std::basic_string<
- typename boost::detail::iterator_traits<ForwardIteratorT>::value_type
- >
- >,
- typename SelfT = nil_t
- >
- class position_iterator;
-
- template
- <
- typename ForwardIteratorT,
- typename PositionT = file_position_base<
- std::basic_string<
- typename boost::detail::iterator_traits<ForwardIteratorT>::value_type
- >
- >
- >
- class position_iterator2;
-
- template <typename PositionT> class position_policy;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_position_iterator_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_position_iterator_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_position_iterator_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/iterator/typeof.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/iterator/typeof.hpp (original)
+++ branches/CMake/release/boost/spirit/iterator/typeof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,93 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ITERATOR_TYPEOF_HPP)
-#define BOOST_SPIRIT_ITERATOR_TYPEOF_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
 
-#include <boost/typeof/typeof.hpp>
-#include <boost/typeof/std/string.hpp>
-
-#include <boost/spirit/iterator/multi_pass_fwd.hpp>
-#include <boost/spirit/iterator/file_iterator_fwd.hpp>
-#include <boost/spirit/iterator/position_iterator_fwd.hpp>
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-namespace boost { namespace spirit {
-
- // external (from core)
- struct nil_t;
-
- // fixed_size_queue.hpp
- template<typename T, std::size_t N> class fixed_size_queue;
- template<typename QueueT, typename T, typename PointerT>
- class fsq_iterator;
-
-}} // namespace boost::spirit
-
-
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-
-#if !defined(BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::nil_t)
-# define BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp"
 #endif
 
-
-// multi_pass.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::multi_pass,5)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::ref_counted)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::first_owner)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::buf_id_check)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::no_check)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::std_deque)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::multi_pass_policies::fixed_size_queue,(BOOST_TYPEOF_INTEGRAL(std::size_t)))
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::input_iterator)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::lex_input)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::functor_input)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::multi_pass,3)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::multi_pass,1)
-
-
-// file_iterator.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::file_iterator,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fileiter_impl::std_file_iterator,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fileiter_impl::mmap_file_iterator,1)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::fileiter_impl::std_file_iterator<char>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::fileiter_impl::std_file_iterator<wchar_t>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::fileiter_impl::mmap_file_iterator<char>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::fileiter_impl::mmap_file_iterator<wchar_t>)
-
-
-// fixed_size_queue.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fixed_size_queue,(typename)(BOOST_TYPEOF_INTEGRAL(std::size_t)))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fsq_iterator,3)
-
-
-// position_iterator.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::position_iterator,3)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::position_iterator2,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::position_policy,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::file_position_base,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::file_position_without_column_base,1)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::file_position)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::file_position_base<std::basic_string<wchar_t> >)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::file_position_without_column)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::file_position_without_column_base<std::basic_string<wchar_t> >)
-
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_typeof.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/meta.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/meta.hpp (original)
+++ branches/CMake/release/boost/spirit/meta.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,27 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_META_MAIN_HPP)
-#define BOOST_SPIRIT_META_MAIN_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_META
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_META
 
-#include <boost/spirit/version.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Master header for Spirit.Meta
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include <boost/spirit/meta/fundamental.hpp>
-#include <boost/spirit/meta/parser_traits.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-#include <boost/spirit/meta/traverse.hpp>
-
-#endif // BOOST_SPIRIT_CORE_MAIN_HPP
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_meta.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_meta.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_meta.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/meta/as_parser.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/meta/as_parser.hpp (original)
+++ branches/CMake/release/boost/spirit/meta/as_parser.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,109 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_AS_PARSER_HPP)
-#define BOOST_SPIRIT_AS_PARSER_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_AS_PARSER
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_AS_PARSER
 
-#include <boost/spirit/core/primitives/primitives.hpp>
-
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Helper templates to derive the parser type from an auxilliary type
- // and to generate an object of the required parser type given an
- // auxilliary object. Supported types to convert are parsers,
- // single characters and character strings.
- //
- ///////////////////////////////////////////////////////////////////////////
- namespace impl
- {
- template<typename T>
- struct default_as_parser
- {
- typedef T type;
- static type const& convert(type const& p)
- {
- return p;
- }
- };
-
- struct char_as_parser
- {
- typedef chlit<char> type;
- static type convert(char ch)
- {
- return type(ch);
- }
- };
-
- struct wchar_as_parser
- {
- typedef chlit<wchar_t> type;
- static type convert(wchar_t ch)
- {
- return type(ch);
- }
- };
-
- struct string_as_parser
- {
- typedef strlit<char const*> type;
- static type convert(char const* str)
- {
- return type(str);
- }
- };
-
- struct wstring_as_parser
- {
- typedef strlit<wchar_t const*> type;
- static type convert(wchar_t const* str)
- {
- return type(str);
- }
- };
- }
-
- template<typename T>
- struct as_parser : impl::default_as_parser<T> {};
-
- template<>
- struct as_parser<char> : impl::char_as_parser {};
-
- template<>
- struct as_parser<wchar_t> : impl::wchar_as_parser {};
-
- template<>
- struct as_parser<char*> : impl::string_as_parser {};
-
- template<>
- struct as_parser<char const*> : impl::string_as_parser {};
-
- template<>
- struct as_parser<wchar_t*> : impl::wstring_as_parser {};
-
- template<>
- struct as_parser<wchar_t const*> : impl::wstring_as_parser {};
-
- template<int N>
- struct as_parser<char[N]> : impl::string_as_parser {};
-
- template<int N>
- struct as_parser<wchar_t[N]> : impl::wstring_as_parser {};
-
- template<int N>
- struct as_parser<char const[N]> : impl::string_as_parser {};
-
- template<int N>
- struct as_parser<wchar_t const[N]> : impl::wstring_as_parser {};
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_as_parser.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_as_parser.hpp"
+#endif
 
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_as_parser.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/meta/fundamental.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/meta/fundamental.hpp (original)
+++ branches/CMake/release/boost/spirit/meta/fundamental.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,52 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_FUNDAMENTAL_HPP)
-#define BOOST_SPIRIT_FUNDAMENTAL_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_FUNDAMENTAL
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_FUNDAMENTAL
 
-#include <boost/spirit/meta/impl/fundamental.ipp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_fundamental.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_fundamental.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_fundamental.hpp>
 
-namespace boost { namespace spirit
-{
- ///////////////////////////////////////////////////////////////////////////
- //
- // Helper template for counting the number of nodes contained in a
- // given parser type.
- // All parser_category type parsers are counted as nodes.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ParserT>
- struct node_count {
-
- typedef typename ParserT::parser_category_t parser_category_t;
- typedef typename impl::nodes<parser_category_t>
- ::template count<ParserT, mpl::int_<0> > count_t;
-
- BOOST_STATIC_CONSTANT(int, value = count_t::value);
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Helper template for counting the number of leaf nodes contained in a
- // given parser type.
- // Only plain_parser_category type parsers are counted as leaf nodes.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ParserT>
- struct leaf_count {
-
- typedef typename ParserT::parser_category_t parser_category_t;
- typedef typename impl::leafs<parser_category_t>
- ::template count<ParserT, mpl::int_<0> > count_t;
-
- BOOST_STATIC_CONSTANT(int, value = count_t::value);
- };
-
-}} // namespace boost::spirit
-
-#endif // !defined(BOOST_SPIRIT_FUNDAMENTAL_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/meta/parser_traits.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/meta/parser_traits.hpp (original)
+++ branches/CMake/release/boost/spirit/meta/parser_traits.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,316 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- Copyright (c) 2003 Martin Wille
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_PARSER_TRAITS_HPP)
-#define BOOST_SPIRIT_PARSER_TRAITS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSER_TRAITS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSER_TRAITS
 
-#include <boost/type_traits/is_base_and_derived.hpp>
-#include <boost/static_assert.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_parser_traits.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_parser_traits.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_parser_traits.hpp>
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/meta/impl/parser_traits.ipp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Parser traits templates
-//
-// Used to determine the type and several other characteristics of a given
-// parser type.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The is_parser traits template can be used to tell wether a given
-// class is a parser.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T>
-struct is_parser
-{
- BOOST_STATIC_CONSTANT(bool, value =
- (::boost::is_base_and_derived<parser<T>, T>::value));
-
-// [JDG 2/3/03] simplified implementation by
-// using boost::is_base_and_derived
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The is_unary_composite traits template can be used to tell if a given
-// parser is a unary parser as for instance kleene_star or optional.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename UnaryT>
-struct is_unary_composite {
-
- BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<
- typename UnaryT::parser_category_t, unary_parser_category>::value));
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The is_acction_parser traits template can be used to tell if a given
-// parser is a action parser, i.e. it is a composite consisting of a
-// auxilliary parser and an attached semantic action.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename ActionT>
-struct is_action_parser {
-
- BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<
- typename ActionT::parser_category_t, action_parser_category>::value));
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The is_binary_composite traits template can be used to tell if a given
-// parser is a binary parser as for instance sequence or difference.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename BinaryT>
-struct is_binary_composite {
-
- BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<
- typename BinaryT::parser_category_t, binary_parser_category>::value));
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The is_composite_parser traits template can be used to tell if a given
-// parser is a unary or a binary parser composite type.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CompositeT>
-struct is_composite_parser {
-
- BOOST_STATIC_CONSTANT(bool, value = (
- ::boost::spirit::is_unary_composite<CompositeT>::value ||
- ::boost::spirit::is_binary_composite<CompositeT>::value));
-};
-
-///////////////////////////////////////////////////////////////////////////////
-template <typename ParserT>
-struct is_alternative {
-
- BOOST_STATIC_CONSTANT(bool, value = (
- ::boost::spirit::impl::parser_type_traits<ParserT>::is_alternative));
-};
-
-template <typename ParserT>
-struct is_sequence {
-
- BOOST_STATIC_CONSTANT(bool, value = (
- ::boost::spirit::impl::parser_type_traits<ParserT>::is_sequence));
-};
-
-template <typename ParserT>
-struct is_sequential_or {
-
- BOOST_STATIC_CONSTANT(bool, value = (
- ::boost::spirit::impl::parser_type_traits<ParserT>::is_sequential_or));
-};
-
-template <typename ParserT>
-struct is_intersection {
-
- BOOST_STATIC_CONSTANT(bool, value = (
- ::boost::spirit::impl::parser_type_traits<ParserT>::is_intersection));
-};
-
-template <typename ParserT>
-struct is_difference {
-
- BOOST_STATIC_CONSTANT(bool, value = (
- ::boost::spirit::impl::parser_type_traits<ParserT>::is_difference));
-};
-
-template <typename ParserT>
-struct is_exclusive_or {
-
- BOOST_STATIC_CONSTANT(bool, value = (
- ::boost::spirit::impl::parser_type_traits<ParserT>::is_exclusive_or));
-};
-
-template <typename ParserT>
-struct is_optional {
-
- BOOST_STATIC_CONSTANT(bool, value = (
- ::boost::spirit::impl::parser_type_traits<ParserT>::is_optional));
-};
-
-template <typename ParserT>
-struct is_kleene_star {
-
- BOOST_STATIC_CONSTANT(bool, value = (
- ::boost::spirit::impl::parser_type_traits<ParserT>::is_kleene_star));
-};
-
-template <typename ParserT>
-struct is_positive {
-
- BOOST_STATIC_CONSTANT(bool, value = (
- ::boost::spirit::impl::parser_type_traits<ParserT>::is_positive));
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Parser extraction templates
-//
-///////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The unary_subject template can be used to return the type of the
-// parser used as the subject of an unary parser.
-// If the parser under inspection is not an unary type parser the compilation
-// will fail.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename UnaryT>
-struct unary_subject {
-
- BOOST_STATIC_ASSERT(::boost::spirit::is_unary_composite<UnaryT>::value);
- typedef typename UnaryT::subject_t type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The get_unary_subject template function returns the parser object, which
-// is used as the subject of an unary parser.
-// If the parser under inspection is not an unary type parser the compilation
-// will fail.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename UnaryT>
-inline typename unary_subject<UnaryT>::type const &
-get_unary_subject(UnaryT const &unary_)
-{
- BOOST_STATIC_ASSERT(::boost::spirit::is_unary_composite<UnaryT>::value);
- return unary_.subject();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The binary_left_subject and binary_right_subject templates can be used to
-// return the types of the parsers used as the left and right subject of an
-// binary parser.
-// If the parser under inspection is not a binary type parser the compilation
-// will fail.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename BinaryT>
-struct binary_left_subject {
-
- BOOST_STATIC_ASSERT(::boost::spirit::is_binary_composite<BinaryT>::value);
- typedef typename BinaryT::left_t type;
-};
-
-template <typename BinaryT>
-struct binary_right_subject {
-
- BOOST_STATIC_ASSERT(::boost::spirit::is_binary_composite<BinaryT>::value);
- typedef typename BinaryT::right_t type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The get_binary_left_subject and get_binary_right_subject template functions
-// return the parser object, which is used as the left or right subject of a
-// binary parser.
-// If the parser under inspection is not a binary type parser the compilation
-// will fail.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename BinaryT>
-inline typename binary_left_subject<BinaryT>::type const &
-get_binary_left_subject(BinaryT const &binary_)
-{
- BOOST_STATIC_ASSERT(::boost::spirit::is_binary_composite<BinaryT>::value);
- return binary_.left();
-}
-
-template <typename BinaryT>
-inline typename binary_right_subject<BinaryT>::type const &
-get_binary_right_subject(BinaryT const &binary_)
-{
- BOOST_STATIC_ASSERT(::boost::spirit::is_binary_composite<BinaryT>::value);
- return binary_.right();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The action_subject template can be used to return the type of the
-// parser used as the subject of an action parser.
-// If the parser under inspection is not an action type parser the compilation
-// will fail.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename ActionT>
-struct action_subject {
-
- BOOST_STATIC_ASSERT(::boost::spirit::is_action_parser<ActionT>::value);
- typedef typename ActionT::subject_t type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The get_action_subject template function returns the parser object, which
-// is used as the subject of an action parser.
-// If the parser under inspection is not an action type parser the compilation
-// will fail.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename ActionT>
-inline typename action_subject<ActionT>::type const &
-get_action_subject(ActionT const &action_)
-{
- BOOST_STATIC_ASSERT(::boost::spirit::is_action_parser<ActionT>::value);
- return action_.subject();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The semantic_action template can be used to return the type of the
-// attached semantic action of an action parser.
-// If the parser under inspection is not an action type parser the compilation
-// will fail.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename ActionT>
-struct semantic_action {
-
- BOOST_STATIC_ASSERT(::boost::spirit::is_action_parser<ActionT>::value);
- typedef typename ActionT::predicate_t type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The get_semantic_action template function returns the attached semantic
-// action of an action parser.
-// If the parser under inspection is not an action type parser the compilation
-// will fail.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename ActionT>
-inline typename semantic_action<ActionT>::type const &
-get_semantic_action(ActionT const &action_)
-{
- BOOST_STATIC_ASSERT(::boost::spirit::is_action_parser<ActionT>::value);
- return action_.predicate();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
-
-#endif // !defined(BOOST_SPIRIT_PARSER_TRAITS_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/meta/refactoring.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/meta/refactoring.hpp (original)
+++ branches/CMake/release/boost/spirit/meta/refactoring.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,274 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_REFACTORING_HPP
-#define BOOST_SPIRIT_REFACTORING_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_REFACTORING
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_REFACTORING
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/static_assert.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-#include <boost/spirit/meta/impl/refactoring.ipp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// refactor_unary_parser class
-//
-// This helper template allows to attach an unary operation to a newly
-// constructed parser, which combines the subject of the left operand of
-// the original given parser (BinaryT) with the right operand of the
-// original binary parser through the original binary operation and
-// rewraps the resulting parser with the original unary operator.
-//
-// For instance given the parser:
-// *some_parser - another_parser
-//
-// will be refactored to:
-// *(some_parser - another_parser)
-//
-// If the parser to refactor is not a unary parser, no refactoring is done
-// at all.
-//
-// The original parser should be a binary_parser_category parser,
-// else the compilation will fail
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template <typename NestedT = non_nested_refactoring>
-class refactor_unary_gen;
-
-template <typename BinaryT, typename NestedT = non_nested_refactoring>
-class refactor_unary_parser :
- public parser<refactor_unary_parser<BinaryT, NestedT> > {
-
-public:
- // the parser to refactor has to be at least a binary_parser_category
- // parser
- BOOST_STATIC_ASSERT((
- boost::is_convertible<typename BinaryT::parser_category_t,
- binary_parser_category>::value
- ));
-
- refactor_unary_parser(BinaryT const& binary_, NestedT const& nested_)
- : binary(binary_), nested(nested_) {}
-
- typedef refactor_unary_parser<BinaryT, NestedT> self_t;
- typedef refactor_unary_gen<NestedT> parser_generator_t;
- typedef typename BinaryT::left_t::parser_category_t parser_category_t;
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- return impl::refactor_unary_type<NestedT>::
- parse(*this, scan, binary, nested);
- }
-
-private:
- typename as_parser<BinaryT>::type::embed_t binary;
- typename NestedT::embed_t nested;
-};
-
-//////////////////////////////////
-template <typename NestedT>
-class refactor_unary_gen {
-
-public:
- typedef refactor_unary_gen<NestedT> embed_t;
-
- refactor_unary_gen(NestedT const& nested_ = non_nested_refactoring())
- : nested(nested_) {}
-
- template <typename ParserT>
- refactor_unary_parser<ParserT, NestedT>
- operator[](parser<ParserT> const& subject) const
- {
- return refactor_unary_parser<ParserT, NestedT>
- (subject.derived(), nested);
- }
-
-private:
- typename NestedT::embed_t nested;
-};
-
-const refactor_unary_gen<> refactor_unary_d = refactor_unary_gen<>();
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// refactor_action_parser class
-//
-// This helper template allows to attach an action taken from the left
-// operand of the given binary parser to a newly constructed parser,
-// which combines the subject of the left operand of the original binary
-// parser with the right operand of the original binary parser by means of
-// the original binary operator parser.
-//
-// For instance the parser:
-// some_parser[some_attached_functor] - another_parser
-//
-// will be refactored to:
-// (some_parser - another_parser)[some_attached_functor]
-//
-// If the left operand to refactor is not an action parser, no refactoring
-// is done at all.
-//
-// The original parser should be a binary_parser_category parser,
-// else the compilation will fail
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template <typename NestedT = non_nested_refactoring>
-class refactor_action_gen;
-
-template <typename BinaryT, typename NestedT = non_nested_refactoring>
-class refactor_action_parser :
- public parser<refactor_action_parser<BinaryT, NestedT> > {
-
-public:
- // the parser to refactor has to be at least a binary_parser_category
- // parser
- BOOST_STATIC_ASSERT((
- boost::is_convertible<typename BinaryT::parser_category_t,
- binary_parser_category>::value
- ));
-
- refactor_action_parser(BinaryT const& binary_, NestedT const& nested_)
- : binary(binary_), nested(nested_) {}
-
- typedef refactor_action_parser<BinaryT, NestedT> self_t;
- typedef refactor_action_gen<NestedT> parser_generator_t;
- typedef typename BinaryT::left_t::parser_category_t parser_category_t;
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- return impl::refactor_action_type<NestedT>::
- parse(*this, scan, binary, nested);
- }
-
-private:
- typename as_parser<BinaryT>::type::embed_t binary;
- typename NestedT::embed_t nested;
-};
-
-//////////////////////////////////
-template <typename NestedT>
-class refactor_action_gen {
-
-public:
- typedef refactor_action_gen<NestedT> embed_t;
-
- refactor_action_gen(NestedT const& nested_ = non_nested_refactoring())
- : nested(nested_) {}
-
- template <typename ParserT>
- refactor_action_parser<ParserT, NestedT>
- operator[](parser<ParserT> const& subject) const
- {
- return refactor_action_parser<ParserT, NestedT>
- (subject.derived(), nested);
- }
-
-private:
- typename NestedT::embed_t nested;
-};
-
-const refactor_action_gen<> refactor_action_d = refactor_action_gen<>();
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// attach_action_parser class
-//
-// This helper template allows to attach an action given separately
-// to to all parsers, out of which the given parser is constructed and
-// reconstructs a new parser having the same structure.
-//
-// For instance the parser:
-// (some_parser >> another_parser)[some_attached_functor]
-//
-// will be refactored to:
-// some_parser[some_attached_functor]
-// >> another_parser[some_attached_functor]
-//
-// The original parser should be a action_parser_category parser,
-// else the compilation will fail
-//
-// If the parser, to which the action is attached is not an binary parser,
-// no refactoring is done at all.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template <typename NestedT = non_nested_refactoring>
-class attach_action_gen;
-
-template <typename ActionT, typename NestedT = non_nested_refactoring>
-class attach_action_parser :
- public parser<attach_action_parser<ActionT, NestedT> > {
-
-public:
- // the parser to refactor has to be at least a action_parser_category
- // parser
- BOOST_STATIC_ASSERT((
- boost::is_convertible<typename ActionT::parser_category_t,
- action_parser_category>::value
- ));
-
- attach_action_parser(ActionT const& actor_, NestedT const& nested_)
- : actor(actor_), nested(nested_) {}
-
- typedef attach_action_parser<ActionT, NestedT> self_t;
- typedef attach_action_gen<NestedT> parser_generator_t;
- typedef typename ActionT::parser_category_t parser_category_t;
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- return impl::attach_action_type<NestedT>::
- parse(*this, scan, actor, nested);
- }
-
-private:
- typename as_parser<ActionT>::type::embed_t actor;
- typename NestedT::embed_t nested;
-};
-
-//////////////////////////////////
-template <typename NestedT>
-class attach_action_gen {
-
-public:
- typedef attach_action_gen<NestedT> embed_t;
-
- attach_action_gen(NestedT const& nested_ = non_nested_refactoring())
- : nested(nested_) {}
-
- template <typename ParserT, typename ActionT>
- attach_action_parser<action<ParserT, ActionT>, NestedT>
- operator[](action<ParserT, ActionT> const& actor) const
- {
- return attach_action_parser<action<ParserT, ActionT>, NestedT>
- (actor, nested);
- }
-
-private:
- typename NestedT::embed_t nested;
-};
-
-const attach_action_gen<> attach_action_d = attach_action_gen<>();
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
-
-#endif // BOOST_SPIRIT_REFACTORING_HPP
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_refactoring.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_refactoring.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_refactoring.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/meta/traverse.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/meta/traverse.hpp (original)
+++ branches/CMake/release/boost/spirit/meta/traverse.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,218 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_TRAVERSE_HPP)
-#define BOOST_SPIRIT_TRAVERSE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TRAVERSE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TRAVERSE
 
-#include <boost/spirit/meta/impl/traverse.ipp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_traverse.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_traverse.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_traverse.hpp>
 
-namespace boost { namespace spirit
-{
- ///////////////////////////////////////////////////////////////////////////
- //
- // Post-order traversal of auxilliary parsers.
- //
- ///////////////////////////////////////////////////////////////////////////
- struct post_order
- {
- // Return the parser type, which is generated as the result of the
- // traverse function below.
-
- template <typename MetaT, typename ParserT>
- struct result
- {
- typedef typename
- traverse_post_order_return<
- MetaT
- , ParserT
- , traverse_post_order_env<0, 0, 0, 0>
- >::type
- type;
- };
-
- // Traverse a given parser and refactor it with the help of the given
- // MetaT metafunction template.
-
- template <typename MetaT, typename ParserT>
- static typename result<MetaT, ParserT>::type
- traverse(MetaT const &meta_, ParserT const &parser_)
- {
- typedef typename ParserT::parser_category_t parser_category_t;
- return impl::traverse_post_order<parser_category_t>::generate(
- meta_, parser_, traverse_post_order_env<0, 0, 0, 0>());
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Transform policies
- //
- // The following policy classes could be used to assemble some new
- // transformation metafunction which uses identity transformations
- // for some parser_category type parsers.
- //
- ///////////////////////////////////////////////////////////////////////////
-
- ///////////////////////////////////////////////////////////////////////////
- // transform plain parsers
- template <typename TransformT>
- struct plain_identity_policy
- {
- template <typename ParserT, typename EnvT>
- struct plain_result
- {
- // plain parsers should be embedded and returned correctly
- typedef typename ParserT::embed_t type;
- };
-
- template <typename ParserT, typename EnvT>
- typename parser_traversal_plain_result<TransformT, ParserT, EnvT>::type
- generate_plain(ParserT const &parser_, EnvT const& /*env*/) const
- {
- return parser_;
- }
- };
-
- //////////////////////////////////
- // transform unary parsers
- template <typename UnaryT, typename SubjectT>
- struct unary_identity_policy_return
- {
- typedef typename UnaryT::parser_generator_t parser_generator_t;
- typedef typename parser_generator_t
- ::template result<SubjectT>::type type;
- };
-
- template <typename TransformT>
- struct unary_identity_policy
- {
- template <typename UnaryT, typename SubjectT, typename EnvT>
- struct unary_result
- {
- typedef
- typename unary_identity_policy_return<UnaryT, SubjectT>::type
- type;
- };
-
- template <typename UnaryT, typename SubjectT, typename EnvT>
- typename parser_traversal_unary_result<
- TransformT, UnaryT, SubjectT, EnvT>::type
- generate_unary(
- UnaryT const &, SubjectT const &subject_, EnvT const& /*env*/) const
- {
- typedef typename UnaryT::parser_generator_t parser_generator_t;
- return parser_generator_t::template generate<SubjectT>(subject_);
- }
- };
-
- //////////////////////////////////
- // transform action parsers
- template <typename TransformT>
- struct action_identity_policy
- {
- template <typename ActionT, typename SubjectT, typename EnvT>
- struct action_result
- {
- typedef action<SubjectT, typename ActionT::predicate_t> type;
- };
-
- template <typename ActionT, typename SubjectT, typename EnvT>
- typename parser_traversal_action_result<
- TransformT, ActionT, SubjectT, EnvT
- >::type
- generate_action(ActionT const &action_, SubjectT const &subject_,
- EnvT const& /*env*/) const
- {
- return subject_[action_.predicate()];
- }
- };
-
- //////////////////////////////////
- // transform binary parsers
- template <typename BinaryT, typename LeftT, typename RightT>
- struct binary_identity_policy_return
- {
- typedef typename BinaryT::parser_generator_t parser_generator_t;
- typedef typename parser_generator_t
- ::template result<LeftT, RightT>::type type;
- };
-
- template <typename TransformT>
- struct binary_identity_policy
- {
- template <typename BinaryT, typename LeftT
- , typename RightT, typename EnvT>
- struct binary_result {
-
- typedef typename
- binary_identity_policy_return<BinaryT, LeftT, RightT>::type
- type;
- };
-
- template <typename BinaryT, typename LeftT
- , typename RightT, typename EnvT>
- typename parser_traversal_binary_result<
- TransformT, BinaryT, LeftT, RightT, EnvT
- >::type
- generate_binary(
- BinaryT const &, LeftT const& left_
- , RightT const& right_, EnvT const& /*env*/) const
- {
- typedef typename BinaryT::parser_generator_t parser_generator_t;
- return parser_generator_t::
- template generate<LeftT, RightT>(left_, right_);
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // transform_policies template
- //
- // The transform_policies template metafunction could serve as a
- // base class for new metafunctions to be passed to the traverse meta
- // template (see above), where only minimal parts have to be
- // overwritten.
- //
- ///////////////////////////////////////////////////////////////////////////
-
- template <
- typename TransformT,
- typename PlainPolicyT = plain_identity_policy<TransformT>,
- typename UnaryPolicyT = unary_identity_policy<TransformT>,
- typename ActionPolicyT = action_identity_policy<TransformT>,
- typename BinaryPolicyT = binary_identity_policy<TransformT>
- >
- struct transform_policies :
- public PlainPolicyT,
- public UnaryPolicyT,
- public ActionPolicyT,
- public BinaryPolicyT
- {
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // Identity transformation
- //
- // The identity_transform metafunction supplied to the traverse
- // template will generate a new parser, which will be exactly
- // identical to the parser given as the parameter to the traverse
- // metafunction. I.e. the following conceptual 'equation' will be
- // always true:
- //
- // some_parser ==
- // post_order::traverse(identity_transform(), some_parser)
- //
- ///////////////////////////////////////////////////////////////////////////
-
- struct identity_transform : transform_policies<identity_transform> {};
-
-}} // namespace boost::spirit
-
-#endif // !defined(BOOST_SPIRIT_TRAVERSE_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/phoenix.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,26 +1,23 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2002 Joel de Guzman
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-#if !defined(BOOST_SPIRIT_PHOENIX_HPP)
-#define BOOST_SPIRIT_PHOENIX_HPP
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_PHOENIX
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PHOENIX
 
-#include <boost/spirit/phoenix/tuples.hpp>
-#include <boost/spirit/phoenix/tuple_helpers.hpp>
-#include <boost/spirit/phoenix/actor.hpp>
-#include <boost/spirit/phoenix/primitives.hpp>
-#include <boost/spirit/phoenix/composite.hpp>
-#include <boost/spirit/phoenix/functions.hpp>
-#include <boost/spirit/phoenix/operators.hpp>
-#include <boost/spirit/phoenix/special_ops.hpp>
-#include <boost/spirit/phoenix/statements.hpp>
-#include <boost/spirit/phoenix/binders.hpp>
-#include <boost/spirit/phoenix/closures.hpp>
-#include <boost/spirit/phoenix/casts.hpp>
-#include <boost/spirit/phoenix/new.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1.hpp"
+#endif
 
-#endif // !defined(BOOST_SPIRIT_PHOENIX_HPP)
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/phoenix1.hpp>
+
+#endif

Modified: branches/CMake/release/boost/spirit/phoenix/actor.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/actor.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/actor.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,596 +1,20 @@
 /*=============================================================================
- Phoenix v1.2
- Copyright (c) 2001-2002 Joel de Guzman
-
- Use, modification and distribution is subject to the 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 PHOENIX_ACTOR_HPP
-#define PHOENIX_ACTOR_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/phoenix/tuples.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-// These are forward declared here because we cannot include impl.hpp
-// or operators.hpp yet but the actor's assignment operator and index
-// operator are required to be members.
-
-//////////////////////////////////
-struct assign_op;
-struct index_op;
-
-//////////////////////////////////
-namespace impl {
-
- template <typename OperationT, typename BaseT, typename B>
- struct make_binary1;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// unpack_tuple class
-//
-// This class is used to unpack a supplied tuple such, that the members of
-// this tuple will be handled as if they would be supplied separately.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename TupleT>
-struct unpack_tuple : public TupleT {
-
- typedef TupleT tuple_t;
-
- unpack_tuple() {}
- unpack_tuple(tuple_t const &tuple_) : TupleT(tuple_) {}
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// actor class
-//
-// This class is a protocol class for all actors. This class is
-// essentially an interface contract. The actor class does not
-// really know how how to act on anything but instead relies on the
-// template parameter BaseT (from which the actor will derive from)
-// to do the actual action.
-//
-// An actor is a functor that is capable of accepting arguments up
-// to a predefined maximum. It is up to the base class to do the
-// actual processing or possibly to limit the arity (no. of
-// arguments) passed in. Upon invocation of the functor through a
-// supplied operator(), the actor funnels the arguments passed in
-// by the client into a tuple and calls the base eval member
-// function.
-//
-// Schematically:
-//
-// arg0 ---------|
-// arg1 ---------|
-// arg2 ---------|---> tupled_args ---> base.eval
-// ... |
-// argN ---------|
-//
-// actor::operator()(arg0, arg1... argN)
-// ---> BaseT::eval(tupled_args);
-//
-// Actor base classes from which this class inherits from are
-// expected to have a corresponding member function eval compatible
-// with the conceptual Interface:
-//
-// template <typename TupleT>
-// actor_return_type
-// eval(TupleT const& args) const;
-//
-// where args are the actual arguments passed in by the client
-// funneled into a tuple (see tuple.hpp for details).
-//
-// The actor_return_type can be anything. Base classes are free to
-// return any type, even argument dependent types (types that are
-// deduced from the types of the arguments). After evaluating the
-// parameters and doing some computations or actions, the eval
-// member function concludes by returning something back to the
-// client. To do this, the forwarding function (the actor's
-// operator()) needs to know the return type of the eval member
-// function that it is calling. For this purpose, actor base
-// classes are required to provide a nested template class:
-//
-// template <typename TupleT>
-// struct result;
-//
-// This auxiliary class provides the result type information
-// returned by the eval member function of a base actor class. The
-// nested template class result should have a typedef 'type' that
-// reflects the return type of its member function eval. It is
-// basically a type computer that answers the question "given
-// arguments packed into a TupleT type, what will be the result
-// type of the eval member function of ActorT?". The template class
-// actor_result queries this to extract the return type of an
-// actor. Example:
-//
-// typedef typename actor_result<ActorT, TupleT>::type
-// actor_return_type;
-//
-// where actor_return_type is the actual type returned by ActorT's
-// eval member function given some arguments in a TupleT.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename ActorT, typename TupleT>
-struct actor_result {
-
- typedef typename ActorT::template result<TupleT>::type type;
- typedef typename remove_reference<type>::type plain_type;
-};
-
-//////////////////////////////////
-template <typename BaseT>
-struct actor : public BaseT {
-
- actor();
- actor(BaseT const& base);
-
- typename actor_result<BaseT, tuple<> >::type
- operator()() const;
-
- template <typename A>
- typename actor_result<BaseT, tuple<A&> >::type
- operator()(A& a) const;
-
- template <typename A, typename B>
- typename actor_result<BaseT, tuple<A&, B&> >::type
- operator()(A& a, B& b) const;
-
- template <typename A, typename B, typename C>
- typename actor_result<BaseT, tuple<A&, B&, C&> >::type
- operator()(A& a, B& b, C& c) const;
-
-#if PHOENIX_LIMIT > 3
- template <typename A, typename B, typename C, typename D>
- typename actor_result<BaseT, tuple<A&, B&, C&, D&> >::type
- operator()(A& a, B& b, C& c, D& d) const;
-
- template <typename A, typename B, typename C, typename D, typename E>
- typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&> >::type
- operator()(A& a, B& b, C& c, D& d, E& e) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F>
- typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&, F&> >::type
- operator()(A& a, B& b, C& c, D& d, E& e, F& f) const;
-
-#if PHOENIX_LIMIT > 6
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G>
- typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&, F&, G&> >::type
- operator()(A& a, B& b, C& c, D& d, E& e, F& f, G& g) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H>
- typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&>
- >::type
- operator()(A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I>
- typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&>
- >::type
- operator()(A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i) const;
-
-#if PHOENIX_LIMIT > 9
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J>
- typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&>
- >::type
- operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K>
- typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&>
- >::type
- operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
- K& k) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L>
- typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&>
- >::type
- operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
- K& k, L& l) const;
-
-#if PHOENIX_LIMIT > 12
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M>
- typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&>
- >::type
- operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
- K& k, L& l, M& m) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N>
- typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&>
- >::type
- operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
- K& k, L& l, M& m, N& n) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O>
- typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&, O&>
- >::type
- operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
- K& k, L& l, M& m, N& n, O& o) const;
-
-#endif
-#endif
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_ACTOR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ACTOR
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_actor.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_actor.hpp"
 #endif
-#endif
-
- template <typename TupleT>
- typename actor_result<BaseT, unpack_tuple<TupleT> >::type
- operator()(unpack_tuple<TupleT> const &t) const;
-
- template <typename B>
- typename impl::make_binary1<assign_op, BaseT, B>::type
- operator=(B const& b) const;
-
- template <typename B>
- typename impl::make_binary1<index_op, BaseT, B>::type
- operator[](B const& b) const;
-};
-
-///////////////////////////////////////////////////////////////////////////
-//
-// as_actor
-//
-// as_actor is a meta-program that converts an arbitrary type into
-// an actor. All participants in the framework must be first-class
-// actors. This meta-program is used all throughout the framework
-// whenever an unknown type needs to be converted to an actor.
-// as_actor specializations are expected to have a typedef 'type'.
-// This is the destination actor type. A static member function
-// 'convert' converts an object to this target type.
-//
-// The meta-program does no conversion if the object to be
-// converted is already an actor.
-//
-///////////////////////////////////////////////////////////////////////////
-template <typename T>
-struct as_actor;
-
-//////////////////////////////////
-template <typename BaseT>
-struct as_actor<actor<BaseT> > {
-
- typedef actor<BaseT> type;
- static type convert(actor<BaseT> const& x) { return x; }
-};
-
-//////////////////////////////////
-template <>
-struct as_actor<nil_t> {
-
- typedef nil_t type;
- static nil_t convert(nil_t /*x*/)
- { return nil_t(); }
-};
-
-//////////////////////////////////
-template <>
-struct as_actor<void> {
-
- typedef void type;
- // ERROR!!!
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// actor class implementation
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename BaseT>
-actor<BaseT>::actor()
-: BaseT() {}
-
-//////////////////////////////////
-template <typename BaseT>
-actor<BaseT>::actor(BaseT const& base)
-: BaseT(base) {}
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename actor_result<BaseT, tuple<> >::type
-actor<BaseT>::operator()() const
-{
- return BaseT::eval(tuple<>());
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <typename A>
-inline typename actor_result<BaseT, tuple<A&> >::type
-actor<BaseT>::operator()(A& a) const
-{
- return BaseT::eval(tuple<A&>(a));
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <typename A, typename B>
-inline typename actor_result<BaseT, tuple<A&, B&> >::type
-actor<BaseT>::operator()(A& a, B& b) const
-{
- return BaseT::eval(tuple<A&, B&>(a, b));
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <typename A, typename B, typename C>
-inline typename actor_result<BaseT, tuple<A&, B&, C&> >::type
-actor<BaseT>::operator()(A& a, B& b, C& c) const
-{
- return BaseT::eval(tuple<A&, B&, C&>(a, b, c));
-}
-
-#if PHOENIX_LIMIT > 3
-//////////////////////////////////
-template <typename BaseT>
-template <typename A, typename B, typename C, typename D>
-inline typename actor_result<BaseT, tuple<A&, B&, C&, D&> >::type
-actor<BaseT>::operator()(A& a, B& b, C& c, D& d) const
-{
- return BaseT::eval(tuple<A&, B&, C&, D&>(a, b, c, d));
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <typename A, typename B, typename C, typename D, typename E>
-inline typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&> >::type
-actor<BaseT>::operator()(A& a, B& b, C& c, D& d, E& e) const
-{
- return BaseT::eval(tuple<A&, B&, C&, D&, E&>(a, b, c, d, e));
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F>
-inline typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&>
->::type
-actor<BaseT>::operator()(
- A& a, B& b, C& c, D& d, E& e, F& f
-) const
-{
- return BaseT::eval(
- tuple<A&, B&, C&, D&, E&, F&>
- (a, b, c, d, e, f)
- );
-}
-
-#if PHOENIX_LIMIT > 6
-//////////////////////////////////
-template <typename BaseT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G>
-inline typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&>
->::type
-actor<BaseT>::operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g
-) const
-{
- return BaseT::eval(
- tuple<A&, B&, C&, D&, E&, F&, G&>
- (a, b, c, d, e, f, g)
- );
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H>
-inline typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&>
->::type
-actor<BaseT>::operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h
-) const
-{
- return BaseT::eval(
- tuple<A&, B&, C&, D&, E&, F&, G&, H&>
- (a, b, c, d, e, f, g, h)
- );
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I>
-inline typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&>
->::type
-actor<BaseT>::operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i
-) const
-{
- return BaseT::eval(
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&>
- (a, b, c, d, e, f, g, h, i)
- );
-}
-
-#if PHOENIX_LIMIT > 9
-//////////////////////////////////
-template <typename BaseT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J>
-inline typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&>
->::type
-actor<BaseT>::operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j
-) const
-{
- return BaseT::eval(
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&>
- (a, b, c, d, e, f, g, h, i, j)
- );
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K>
-inline typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&>
->::type
-actor<BaseT>::operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
- K& k
-) const
-{
- return BaseT::eval(
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&>
- (a, b, c, d, e, f, g, h, i, j, k)
- );
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L>
-inline typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&>
->::type
-actor<BaseT>::operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
- K& k, L& l
-) const
-{
- return BaseT::eval(
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&>
- (a, b, c, d, e, f, g, h, i, j, k, l)
- );
-}
-
-#if PHOENIX_LIMIT > 12
-//////////////////////////////////
-template <typename BaseT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M>
-inline typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&>
->::type
-actor<BaseT>::operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
- K& k, L& l, M& m
-) const
-{
- return BaseT::eval(
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&>
- (a, b, c, d, e, f, g, h, i, j, k, l, m)
- );
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N>
-inline typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&>
->::type
-actor<BaseT>::operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
- K& k, L& l, M& m, N& n
-) const
-{
- return BaseT::eval(
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&>
- (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
- );
-}
-
-//////////////////////////////////
-template <typename BaseT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O>
-inline typename actor_result<BaseT,
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&, O&>
->::type
-actor<BaseT>::operator()(
- A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
- K& k, L& l, M& m, N& n, O& o
-) const
-{
- return BaseT::eval(
- tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&, O&>
- (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
- );
-}
-
-#endif
-#endif
-#endif
-#endif
-
-//////////////////////////////////
-template <typename BaseT>
-template <typename TupleT>
-typename actor_result<BaseT, unpack_tuple<TupleT> >::type
-actor<BaseT>::operator()(unpack_tuple<TupleT> const &t) const
-{
- return BaseT::eval(t);
-}
 
-///////////////////////////////////////////////////////////////////////////////
-} // namespace phoenix
+#include <boost/spirit/include/phoenix1_actor.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/phoenix/binders.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/binders.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/binders.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,4067 +1,20 @@
 /*=============================================================================
- Phoenix v1.2
- Copyright (c) 2001-2002 Joel de Guzman
-
- Use, modification and distribution is subject to the 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 PHOENIX_BINDERS_HPP
-#define PHOENIX_BINDERS_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/phoenix/functions.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/mpl/if.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Binders
-//
-// There are times when it is desireable to bind a simple functor,
-// function, member function or member variable for deferred
-// evaluation. This can be done through the binding facilities
-// provided below. There are template classes:
-//
-// 1) function_ptr ( function pointer binder )
-// 2) functor ( functor pointer binder )
-// 3) member_function_ptr ( member function pointer binder )
-// 4) member_var_ptr ( member variable pointer binder )
-//
-// These template classes are specialized lazy function classes for
-// functors, function pointers, member function pointers and member
-// variable pointers, respectively. These are subclasses of the
-// lazy-function class (see functions.hpp). Each of these has a
-// corresponding overloaded bind(x) function. Each bind(x) function
-// generates a suitable binder object.
-//
-// Example, given a function foo:
-//
-// void foo_(int n) { std::cout << n << std::endl; }
-//
-// Here's how the function foo is bound:
-//
-// bind(&foo_)
-//
-// This bind expression results to a lazy-function (see
-// functions.hpp) that is lazily evaluated. This bind expression is
-// also equivalent to:
-//
-// function_ptr<void, int> foo = &foo_;
-//
-// The template parameter of the function_ptr is the return and
-// argument types of actual signature of the function to be bound
-// read from left to right:
-//
-// void foo_(int); ---> function_ptr<void, int>
-//
-// Either bind(&foo_) and its equivalent foo can now be used in the
-// same way a lazy function (see functions.hpp) is used:
-//
-// bind(&foo_)(arg1)
-//
-// or
-//
-// foo(arg1)
-//
-// The latter, of course, being much easier to understand. This is
-// now a full-fledged lazy function that can finally be evaluated
-// by another function call invocation. A second function call will
-// invoke the actual foo function:
-//
-// int i = 4;
-// foo(arg1)(i);
-//
-// will print out "4".
-//
-// Binding functors and member functions can be done similarly.
-// Here's how to bind a functor (e.g. std::plus<int>):
-//
-// bind(std::plus<int>())
-//
-// or
-//
-// functor<std::plus<int> > plus;
-//
-// Again, these are full-fledged lazy functions. In this case,
-// unlike the first example, expect 2 arguments (std::plus<int>
-// needs two arguments lhs and rhs). Either or both of which can be
-// lazily bound:
-//
-// plus(arg1, arg2) // arg1 + arg2
-// plus(100, arg1) // 100 + arg1
-// plus(100, 200) // 300
-//
-// A bound member function takes in a pointer or reference to an
-// object as the first argument. For instance, given:
-//
-// struct xyz { void foo(int) const; };
-//
-// xyz's foo member function can be bound as:
-//
-// bind(&xyz::foo)
-//
-// or
-//
-// member_function_ptr<void, xyz, int> xyz_foo = &xyz::foo;
-//
-// The template parameter of the member_function_ptr is the return,
-// class and argument types of actual signature of the function to
-// be bound read from left to right:
-//
-// void xyz::foo_(int); ---> member_function_ptr<void, xyz, int>
-//
-// Take note that a member_function_ptr lazy-function expects the
-// first argument to be a pointer or reference to an object. Both
-// the object (reference or pointer) and the arguments can be
-// lazily bound. Examples:
-//
-// xyz obj;
-// xyz_foo(arg1, arg2) // arg1.foo(arg2)
-// xyz_foo(obj, arg1) // obj.foo(arg1)
-// xyz_foo(obj, 100) // obj.foo(100)
-//
-// Be reminded that var(obj) must be used to call non-const member
-// functions. For example, if xyz was declared as:
-//
-// struct xyz { void foo(int); };
-//
-// the pointer or reference to the object must also be non-const.
-// Lazily bound arguments are stored as const value by default (see
-// variable class in primitives.hpp).
-//
-// xyz_foo(var(obj), 100) // obj.foo(100)
-//
-// Finally, member variables can be bound much like member
-// functions. For instance, given:
-//
-// struct xyz { int v; };
-//
-// xyz::v can be bound as:
-//
-// bind(&xyz::v)
-// or
-//
-// member_var_ptr<int, xyz> xyz_v = &xyz::v;
-//
-// The template parameter of the member_var_ptr is the type of the
-// variable followed by the class:
-//
-// int xyz::v; ---> member_var_ptr<int, xyz>
-//
-// Just like the member_function_ptr, member_var_ptr also expects
-// the first argument to be a pointer or reference to an object.
-// Both the object (reference or pointer) and the arguments can be
-// lazily bound. Examples:
-//
-// xyz obj;
-// xyz_v(arg1) // arg1.v
-// xyz_v(obj) // obj.v
-//
-///////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Functor binder
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename FuncT>
-struct functor_action : public FuncT {
-
-#if !defined(__BORLANDC__) && (!defined(__MWERKS__) || (__MWERKS__ > 0x3002))
-
- template <
- typename A = nil_t
- , typename B = nil_t
- , typename C = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename D = nil_t
- , typename E = nil_t
- , typename F = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename G = nil_t
- , typename H = nil_t
- , typename I = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename J = nil_t
- , typename K = nil_t
- , typename L = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename M = nil_t
- , typename N = nil_t
- , typename O = nil_t
-
-#endif
-#endif
-#endif
-#endif
- >
- struct result { typedef typename FuncT::result_type type; };
-#endif
-
- functor_action(FuncT fptr_ = FuncT())
- : FuncT(fptr_) {}
-};
-
-#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The following specializations are needed because Borland and CodeWarrior
-// does not accept default template arguments in nested template classes in
-// classes (i.e functor_action::result)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename FuncT, typename TupleT>
-struct composite0_result<functor_action<FuncT>, TupleT> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A>
-struct composite1_result<functor_action<FuncT>, TupleT, A> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B>
-struct composite2_result<functor_action<FuncT>, TupleT, A, B> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C>
-struct composite3_result<functor_action<FuncT>, TupleT, A, B, C> {
-
- typedef typename FuncT::result_type type;
-};
-
-#if PHOENIX_LIMIT > 3
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D>
-struct composite4_result<functor_action<FuncT>, TupleT,
- A, B, C, D> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E>
-struct composite5_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F>
-struct composite6_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E, F> {
-
- typedef typename FuncT::result_type type;
-};
-
-#if PHOENIX_LIMIT > 6
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G>
-struct composite7_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E, F, G> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H>
-struct composite8_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E, F, G, H> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I>
-struct composite9_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E, F, G, H, I> {
-
- typedef typename FuncT::result_type type;
-};
-
-#if PHOENIX_LIMIT > 9
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J>
-struct composite10_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E, F, G, H, I, J> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K>
-struct composite11_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L>
-struct composite12_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L> {
-
- typedef typename FuncT::result_type type;
-};
-
-#if PHOENIX_LIMIT > 12
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M>
-struct composite13_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L, M> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N>
-struct composite14_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
-
- typedef typename FuncT::result_type type;
-};
-
-//////////////////////////////////
-template <typename FuncT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O>
-struct composite15_result<functor_action<FuncT>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
-
- typedef typename FuncT::result_type type;
-};
-
-#endif
-#endif
-#endif
-#endif
-#endif
-
-//////////////////////////////////
-template <typename FuncT>
-struct functor : public function<functor_action<FuncT> > {
-
- functor(FuncT func)
- : function<functor_action<FuncT> >(functor_action<FuncT>(func)) {};
-};
-
-//////////////////////////////////
-template <typename FuncT>
-inline functor<FuncT>
-bind(FuncT func)
-{
- return functor<FuncT>(func);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member variable pointer binder
-//
-///////////////////////////////////////////////////////////////////////////////
-namespace impl {
-
- //////////////////////////////////
- template <typename T>
- struct as_ptr {
-
- typedef T* pointer_type;
-
- static T* get(T& ref)
- { return &ref; }
- };
-
- //////////////////////////////////
- template <typename T>
- struct as_ptr<T*> {
-
- typedef T* pointer_type;
-
- static T* get(T* ptr)
- { return ptr; }
- };
-}
-
-//////////////////////////////////
-template <typename ActionT, typename ClassT>
-struct member_var_ptr_action_result {
-
- typedef typename ActionT::template result<ClassT>::type type;
-};
-
-//////////////////////////////////
-template <typename T, typename ClassT>
-struct member_var_ptr_action {
-
- typedef member_var_ptr_action<T, ClassT> self_t;
-
- template <typename CT>
- struct result {
- typedef typename boost::mpl::if_<boost::is_const<CT>, T const&, T&
- >::type type;
- };
-
- typedef T ClassT::*mem_var_ptr_t;
-
- member_var_ptr_action(mem_var_ptr_t ptr_)
- : ptr(ptr_) {}
-
- template <typename CT>
- typename member_var_ptr_action_result<self_t, CT>::type
- operator()(CT& obj) const
- { return impl::as_ptr<CT>::get(obj)->*ptr; }
-
- mem_var_ptr_t ptr;
-};
-
-//////////////////////////////////
-template <typename T, typename ClassT>
-struct member_var_ptr
-: public function<member_var_ptr_action<T, ClassT> > {
-
- member_var_ptr(T ClassT::*mp)
- : function<member_var_ptr_action<T, ClassT> >
- (member_var_ptr_action<T, ClassT>(mp)) {}
-};
-
-//////////////////////////////////
-template <typename T, typename ClassT>
-inline member_var_ptr<T, ClassT>
-bind(T ClassT::*mp)
-{
- return member_var_ptr<T, ClassT>(mp);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (main class)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename RT
- , typename A = nil_t
- , typename B = nil_t
- , typename C = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename D = nil_t
- , typename E = nil_t
- , typename F = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename G = nil_t
- , typename H = nil_t
- , typename I = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename J = nil_t
- , typename K = nil_t
- , typename L = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename M = nil_t
- , typename N = nil_t
- , typename O = nil_t
-
-#endif
-#endif
-#endif
-#endif
-
- , typename NU = nil_t // Not used
->
-struct function_ptr_action;
-
-//////////////////////////////////
-template <
- typename RT
- , typename A = nil_t
- , typename B = nil_t
- , typename C = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename D = nil_t
- , typename E = nil_t
- , typename F = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename G = nil_t
- , typename H = nil_t
- , typename I = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename J = nil_t
- , typename K = nil_t
- , typename L = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename M = nil_t
- , typename N = nil_t
- , typename O = nil_t
-
-#endif
-#endif
-#endif
-#endif
->
-struct function_ptr
-: public function<function_ptr_action<RT
- , A, B, C
-#if PHOENIX_LIMIT > 3
- , D, E, F
-#if PHOENIX_LIMIT > 6
- , G, H, I
-#if PHOENIX_LIMIT > 9
- , J, K, L
-#if PHOENIX_LIMIT > 12
- , M, N, O
-#endif
-#endif
-#endif
-#endif
- > > {
-
- typedef function_ptr_action<RT
- , A, B, C
-#if PHOENIX_LIMIT > 3
- , D, E, F
-#if PHOENIX_LIMIT > 6
- , G, H, I
-#if PHOENIX_LIMIT > 9
- , J, K, L
-#if PHOENIX_LIMIT > 12
- , M, N, O
-#endif
-#endif
-#endif
-#endif
- > action_t;
-
- template <typename FPT>
- function_ptr(FPT fp)
- : function<action_t>(action_t(fp)) {}
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 0 arg)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT>
-struct function_ptr_action<RT,
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)();
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()() const
- { return fptr(); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT>
-inline function_ptr<RT>
-bind(RT(*fptr)())
-{
- return function_ptr<RT>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 1 arg)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename A>
-struct function_ptr_action<RT,
- A, nil_t, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A);
-
- template <typename A_>
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(A a) const
- { return fptr(a); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename A>
-inline function_ptr<RT, A>
-bind(RT(*fptr)(A))
-{
- return function_ptr<RT, A>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 2 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename A, typename B>
-struct function_ptr_action<RT,
- A, B, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B);
-
- template <typename A_, typename B_>
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(A a, B b) const
- { return fptr(a, b); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename A, typename B>
-inline function_ptr<RT, A, B>
-bind(RT(*fptr)(A, B))
-{
- return function_ptr<RT, A, B>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 3 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename A, typename B, typename C>
-struct function_ptr_action<RT,
- A, B, C,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C);
-
- template <typename A_, typename B_, typename C_>
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(A a, B b, C c) const
- { return fptr(a, b, c); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename A, typename B, typename C>
-inline function_ptr<RT, A, B, C>
-bind(RT(*fptr)(A, B, C))
-{
- return function_ptr<RT, A, B, C>(fptr);
-}
-
-#if PHOENIX_LIMIT > 3
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 4 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename A, typename B, typename C, typename D>
-struct function_ptr_action<RT,
- A, B, C, D, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D);
-
- template <typename A_, typename B_, typename C_, typename D_>
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(A a, B b, C c, D d) const
- { return fptr(a, b, c, d); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename A, typename B, typename C, typename D>
-inline function_ptr<RT, A, B, C, D>
-bind(RT(*fptr)(A, B, C, D))
-{
- return function_ptr<RT, A, B, C, D>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 5 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E
->
-struct function_ptr_action<RT,
- A, B, C, D, E, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e
- ) const
- { return fptr(a, b, c, d, e); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E
->
-inline function_ptr<RT, A, B, C, D, E>
-bind(RT(*fptr)(A, B, C, D, E))
-{
- return function_ptr<RT, A, B, C, D, E>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 6 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F
->
-struct function_ptr_action<RT,
- A, B, C, D, E, F,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E, F);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_,
- typename F_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e,
- F f
- ) const
- { return fptr(a, b, c, d, e, f); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F
->
-inline function_ptr<RT, A, B, C, D, E, F>
-bind(RT(*fptr)(A, B, C, D, E, F))
-{
- return function_ptr<RT, A, B, C, D, E, F>(fptr);
-}
-
-#if PHOENIX_LIMIT > 6
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 7 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
->
-struct function_ptr_action<RT,
- A, B, C, D, E, F, G, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E, F, G);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_,
- typename F_, typename G_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e,
- F f, G g
- ) const
- { return fptr(a, b, c, d, e, f, g); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
->
-inline function_ptr<RT, A, B, C, D, E, F, G>
-bind(RT(*fptr)(A, B, C, D, E, F, G))
-{
- return function_ptr<RT, A, B, C, D, E, F, G>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 8 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
->
-struct function_ptr_action<RT,
- A, B, C, D, E, F, G, H, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_,
- typename F_, typename G_, typename H_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e,
- F f, G g, H h
- ) const
- { return fptr(a, b, c, d, e, f, g, h); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
->
-inline function_ptr<RT, A, B, C, D, E, F, G, H>
-bind(RT(*fptr)(A, B, C, D, E, F, G, H))
-{
- return function_ptr<RT, A, B, C, D, E, F, G, H>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 9 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
->
-struct function_ptr_action<RT,
- A, B, C, D, E, F, G, H, I,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_,
- typename F_, typename G_, typename H_, typename I_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e,
- F f, G g, H h, I i
- ) const
- { return fptr(a, b, c, d, e, f, g, h, i); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
->
-inline function_ptr<RT, A, B, C, D, E, F, G, H, I>
-bind(RT(*fptr)(A, B, C, D, E, F, G, H, I))
-{
- return function_ptr<RT, A, B, C, D, E, F, G, H, I>(fptr);
-}
-
-#if PHOENIX_LIMIT > 9
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 10 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
->
-struct function_ptr_action<RT,
- A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_,
- typename F_, typename G_, typename H_, typename I_, typename J_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e,
- F f, G g, H h, I i, J j
- ) const
- { return fptr(a, b, c, d, e, f, g, h, i, j); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
->
-inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J>
-bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J))
-{
- return function_ptr<RT, A, B, C, D, E, F, G, H, I, J>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 11 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K
->
-struct function_ptr_action<RT,
- A, B, C, D, E, F, G, H, I, J, K, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_,
- typename F_, typename G_, typename H_, typename I_, typename J_,
- typename K_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e,
- F f, G g, H h, I i, J j,
- K k
- ) const
- { return fptr(a, b, c, d, e, f, g, h, i, j, k); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K
->
-inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K>
-bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K))
-{
- return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 12 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L
->
-struct function_ptr_action<RT,
- A, B, C, D, E, F, G, H, I, J, K, L,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_,
- typename F_, typename G_, typename H_, typename I_, typename J_,
- typename K_, typename L_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e,
- F f, G g, H h, I i, J j,
- K k, L l
- ) const
- { return fptr(a, b, c, d, e, f, g, h, i, j, k, l); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L
->
-inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L>
-bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
-{
- return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L>(fptr);
-}
-
-#if PHOENIX_LIMIT > 12
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 13 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M
->
-struct function_ptr_action<RT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_,
- typename F_, typename G_, typename H_, typename I_, typename J_,
- typename K_, typename L_, typename M_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e,
- F f, G g, H h, I i, J j,
- K k, L l, M m
- ) const
- { return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M
->
-inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M>
-bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
-{
- return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 14 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N
->
-struct function_ptr_action<RT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_,
- typename F_, typename G_, typename H_, typename I_, typename J_,
- typename K_, typename L_, typename M_, typename N_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e,
- F f, G g, H h, I i, J j,
- K k, L l, M m, N n
- ) const
- { return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m, n); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N
->
-inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
-bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
-{
- return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Function pointer binder (specialization for 15 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O
->
-struct function_ptr_action<RT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> {
-
- typedef RT result_type;
- typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
-
- template <
- typename A_, typename B_, typename C_, typename D_, typename E_,
- typename F_, typename G_, typename H_, typename I_, typename J_,
- typename K_, typename L_, typename M_, typename N_, typename O_
- >
- struct result { typedef result_type type; };
-
- function_ptr_action(func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e,
- F f, G g, H h, I i, J j,
- K k, L l, M m, N n, O o
- ) const
- { return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o); }
-
- func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O
->
-inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
-bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
-{
- return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(fptr);
-}
-
-#endif
-#endif
-#endif
-#endif
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (main class)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename RT,
- typename ClassT
- , typename A = nil_t
- , typename B = nil_t
- , typename C = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename D = nil_t
- , typename E = nil_t
- , typename F = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename G = nil_t
- , typename H = nil_t
- , typename I = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename J = nil_t
- , typename K = nil_t
- , typename L = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename M = nil_t
- , typename N = nil_t
- , typename O = nil_t
-
-#endif
-#endif
-#endif
-#endif
-
- , typename NU = nil_t // Not used
->
-struct member_function_ptr_action;
-
-//////////////////////////////////
-template <
- typename RT,
- typename ClassT
- , typename A = nil_t
- , typename B = nil_t
- , typename C = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename D = nil_t
- , typename E = nil_t
- , typename F = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename G = nil_t
- , typename H = nil_t
- , typename I = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename J = nil_t
- , typename K = nil_t
- , typename L = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename M = nil_t
- , typename N = nil_t
- , typename O = nil_t
-
-#endif
-#endif
-#endif
-#endif
->
-struct member_function_ptr
-: public function<member_function_ptr_action<RT, ClassT
- , A, B, C
-#if PHOENIX_LIMIT > 3
- , D, E, F
-#if PHOENIX_LIMIT > 6
- , G, H, I
-#if PHOENIX_LIMIT > 9
- , J, K, L
-#if PHOENIX_LIMIT > 12
- , M, N, O
-#endif
-#endif
-#endif
-#endif
- > > {
-
- typedef member_function_ptr_action<RT, ClassT
- , A, B, C
-#if PHOENIX_LIMIT > 3
- , D, E, F
-#if PHOENIX_LIMIT > 6
- , G, H, I
-#if PHOENIX_LIMIT > 9
- , J, K, L
-#if PHOENIX_LIMIT > 12
- , M, N, O
-#endif
-#endif
-#endif
-#endif
- > action_t;
-
- template <typename FPT>
- member_function_ptr(FPT fp)
- : function<action_t>(action_t(fp)) {}
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 0 arg)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT>
-struct member_function_ptr_action<RT, ClassT,
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)();
- typedef RT(ClassT::*cmf)() const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT>
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj) const
- { return (impl::as_ptr<CT>::get(obj)->*fptr)(); }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT>
-inline member_function_ptr<RT, ClassT>
-bind(RT(ClassT::*fptr)())
-{
- return member_function_ptr<RT, ClassT>(fptr);
-}
-
-template <typename RT, typename ClassT>
-inline member_function_ptr<RT, ClassT const>
-bind(RT(ClassT::*fptr)() const)
-{
- return member_function_ptr<RT, ClassT const>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 1 arg)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT, typename A>
-struct member_function_ptr_action<RT, ClassT,
- A, nil_t, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A);
- typedef RT(ClassT::*cmf)(A) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT, typename A_>
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj, A a) const
- { return (impl::as_ptr<CT>::get(obj)->*fptr)(a); }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT, typename A>
-inline member_function_ptr<RT, ClassT, A>
-bind(RT(ClassT::*fptr)(A))
-{
- return member_function_ptr<RT, ClassT, A>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT, typename A>
-inline member_function_ptr<RT, ClassT const, A>
-bind(RT(ClassT::*fptr)(A) const)
-{
- return member_function_ptr<RT, ClassT const, A>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 2 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT, typename A, typename B>
-struct member_function_ptr_action<RT, ClassT,
- A, B, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B);
- typedef RT(ClassT::*cmf)(A, B) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT, typename A_, typename B_>
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj, A a, B b) const
- { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b); }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT, typename A, typename B>
-inline member_function_ptr<RT, ClassT, A, B>
-bind(RT(ClassT::*fptr)(A, B))
-{
- return member_function_ptr<RT, ClassT, A, B>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT, typename A, typename B>
-inline member_function_ptr<RT, ClassT const, A, B>
-bind(RT(ClassT::*fptr)(A, B) const)
-{
- return member_function_ptr<RT, ClassT const, A, B>(fptr);
-}
-
-#if PHOENIX_LIMIT > 3
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 3 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT, typename A, typename B, typename C>
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C);
- typedef RT(ClassT::*cmf)(A, B, C) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT, typename A_, typename B_, typename C_>
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj, A a, B b, C c) const
- { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c); }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT, typename A, typename B, typename C>
-inline member_function_ptr<RT, ClassT, A, B, C>
-bind(RT(ClassT::*fptr)(A, B, C))
-{
- return member_function_ptr<RT, ClassT, A, B, C>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT, typename A, typename B, typename C>
-inline member_function_ptr<RT, ClassT const, A, B, C>
-bind(RT(ClassT::*fptr)(A, B, C) const)
-{
- return member_function_ptr<RT, ClassT const, A, B, C>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 4 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D);
- typedef RT(ClassT::*cmf)(A, B, C, D) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d
- ) const
- { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d); }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D
->
-inline member_function_ptr<RT, ClassT, A, B, C, D>
-bind(RT(ClassT::*fptr)(A, B, C, D))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D>
-bind(RT(ClassT::*fptr)(A, B, C, D) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 5 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E);
- typedef RT(ClassT::*cmf)(A, B, C, D, E) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e
- ) const
- { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e); }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E>
-bind(RT(ClassT::*fptr)(A, B, C, D, E))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E>
-bind(RT(ClassT::*fptr)(A, B, C, D, E) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E>(fptr);
-}
-
-#if PHOENIX_LIMIT > 6
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 6 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, F, nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e, F f
- ) const
- { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f); }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E, F>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E, F>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E, F>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 7 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, F, G, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e, F f, G g
- ) const
- { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f, g); }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E, F, G>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E, F, G>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 8 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, F, G, H, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e, F f, G g, H h
- ) const
- { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f, g, h); }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E, F, G, H>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E, F, G, H>(fptr);
-}
-
-#if PHOENIX_LIMIT > 9
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 9 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e, F f, G g, H h, I i
- ) const
- { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f, g, h, i); }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E, F, G, H, I>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E, F, G, H, I>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 10 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j
- ) const
- {
- return (impl::as_ptr<CT>::get(obj)->*fptr)
- (a, b, c, d, e, f, g, h, i, j);
- }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 11 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, K, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_, typename K_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k
- ) const
- {
- return (impl::as_ptr<CT>::get(obj)->*fptr)
- (a, b, c, d, e, f, g, h, i, j, k);
- }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>(fptr);
-}
-
-#if PHOENIX_LIMIT > 12
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 12 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, K, L, nil_t, nil_t, nil_t, nil_t> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_, typename K_, typename L_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l
- ) const
- {
- return (impl::as_ptr<CT>::get(obj)->*fptr)
- (a, b, c, d, e, f, g, h, i, j, k, l);
- }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 13 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_, typename K_, typename L_, typename M_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m
- ) const
- {
- return (impl::as_ptr<CT>::get(obj)->*fptr)
- (a, b, c, d, e, f, g, h, i, j, k, l, m);
- }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 14 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_, typename K_, typename L_, typename M_, typename N_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n
- ) const
- {
- return (impl::as_ptr<CT>::get(obj)->*fptr)
- (a, b, c, d, e, f, g, h, i, j, k, l, m, n);
- }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Member function pointer binder (specialization for 15 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N,
- typename O
->
-struct member_function_ptr_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT,
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_, typename K_, typename L_, typename M_, typename N_,
- typename O_
- >
- struct result { typedef result_type type; };
-
- member_function_ptr_action(mem_func_ptr_t fptr_)
- : fptr(fptr_) {}
-
- template <typename CT>
- result_type operator()(CT& obj,
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o
- ) const
- {
- return (impl::as_ptr<CT>::get(obj)->*fptr)
- (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
- }
-
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N,
- typename O
->
-inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
-{
- return member_function_ptr<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N,
- typename O
->
-inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
-bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const)
-{
- return member_function_ptr<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(fptr);
-}
-
-#endif
-#endif
-#endif
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (main class)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename RT,
- typename ClassT
- , typename A = nil_t
- , typename B = nil_t
- , typename C = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename D = nil_t
- , typename E = nil_t
- , typename F = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename G = nil_t
- , typename H = nil_t
- , typename I = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename J = nil_t
- , typename K = nil_t
- , typename L = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename M = nil_t
- , typename N = nil_t
- , typename O = nil_t
-
-#endif
-#endif
-#endif
-#endif
-
- , typename NU = nil_t // Not used
->
-struct bound_member_action;
-
-//////////////////////////////////
-template <
- typename RT,
- typename ClassT
- , typename A = nil_t
- , typename B = nil_t
- , typename C = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename D = nil_t
- , typename E = nil_t
- , typename F = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename G = nil_t
- , typename H = nil_t
- , typename I = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename J = nil_t
- , typename K = nil_t
- , typename L = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename M = nil_t
- , typename N = nil_t
- , typename O = nil_t
-
-#endif
-#endif
-#endif
-#endif
->
-struct bound_member
-: public function<bound_member_action<RT, ClassT
- , A, B, C
-#if PHOENIX_LIMIT > 3
- , D, E, F
-#if PHOENIX_LIMIT > 6
- , G, H, I
-#if PHOENIX_LIMIT > 9
- , J, K, L
-#if PHOENIX_LIMIT > 12
- , M, N, O
-#endif
-#endif
-#endif
-#endif
- > > {
-
- typedef bound_member_action<RT, ClassT
- , A, B, C
-#if PHOENIX_LIMIT > 3
- , D, E, F
-#if PHOENIX_LIMIT > 6
- , G, H, I
-#if PHOENIX_LIMIT > 9
- , J, K, L
-#if PHOENIX_LIMIT > 12
- , M, N, O
-#endif
-#endif
-#endif
-#endif
- > action_t;
-
- template <typename CT, typename FPT>
- bound_member(CT & c, FPT fp)
- : function<action_t>(action_t(c,fp)) {}
-
-#if !defined(__BORLANDC__)
- template <typename CT, typename FPT>
- bound_member(CT * c, FPT fp)
- : function<action_t>(action_t(c,fp)) {}
-#endif
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 0 arg)
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template <typename RT, typename ClassT>
-struct bound_member_action<RT, ClassT,
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)();
- typedef RT(ClassT::*cmf)() const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename CT>
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()() const
- { return (obj->*fptr)(); }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-
-template <typename RT, typename ClassT>
-inline bound_member<RT,ClassT>
-bind(ClassT & obj, RT(ClassT::*fptr)())
-{
- return bound_member<RT,ClassT>(obj, fptr);
-}
-
-template <typename RT, typename ClassT>
-inline bound_member<RT,ClassT>
-bind(ClassT * obj, RT(ClassT::*fptr)())
-{
-#if defined(__MWERKS__) && (__MWERKS__ < 0x3003)
- return bound_member<RT,ClassT>(*obj, fptr);
-#else
- return bound_member<RT,ClassT>(obj, fptr);
-#endif
-}
-
-template <typename RT, typename ClassT>
-inline bound_member<RT,ClassT const>
-bind(ClassT const& obj, RT(ClassT::*fptr)())
-{
- return bound_member<RT,ClassT const>(obj, fptr);
-}
-
-template <typename RT, typename ClassT>
-inline bound_member<RT,ClassT const>
-bind(ClassT const* obj, RT(ClassT::*fptr)() const)
-{
-#if defined(__MWERKS__) && (__MWERKS__ < 0x3003)
- return bound_member<RT,ClassT const>(*obj, fptr);
-#else
- return bound_member<RT,ClassT const>(obj, fptr);
-#endif
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 1 arg)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT, typename A>
-struct bound_member_action<RT, ClassT,
- A, nil_t, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A);
- typedef RT(ClassT::*cmf)(A) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename A_>
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(A a) const
- { return (obj->*fptr)(a); }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT, typename A>
-inline bound_member<RT, ClassT, A>
-bind(ClassT & obj, RT(ClassT::*fptr)(A))
-{
- return bound_member<RT, ClassT, A>(obj,fptr);
-}
-
-template <typename RT, typename ClassT, typename A>
-inline bound_member<RT, ClassT, A>
-bind(ClassT * obj, RT(ClassT::*fptr)(A))
-{
- return bound_member<RT, ClassT, A>(obj,fptr);
-}
-
-//////////////////////////////////
-template <typename RT, typename ClassT, typename A>
-inline bound_member<RT, ClassT const, A>
-bind(ClassT const& obj, RT(ClassT::*fptr)(A) const)
-{
- return bound_member<RT, ClassT const, A>(obj,fptr);
-}
-
-template <typename RT, typename ClassT, typename A>
-inline bound_member<RT, ClassT const, A>
-bind(ClassT const* obj, RT(ClassT::*fptr)(A) const)
-{
- return bound_member<RT, ClassT const, A>(obj,fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 2 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT, typename A, typename B>
-struct bound_member_action<RT, ClassT,
- A, B, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B);
- typedef RT(ClassT::*cmf)(A, B) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename A_, typename B_>
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(A a, B b) const
- { return (obj->*fptr)(a, b); }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT, typename A, typename B>
-inline bound_member<RT, ClassT, A, B>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B))
-{
- return bound_member<RT, ClassT, A, B>(obj,fptr);
-}
-
-template <typename RT, typename ClassT, typename A, typename B>
-inline bound_member<RT, ClassT, A, B>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B))
-{
- return bound_member<RT, ClassT, A, B>(obj,fptr);
-}
-
-template <typename RT, typename ClassT, typename A, typename B>
-inline bound_member<RT, ClassT const, A, B>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B) const)
-{
- return bound_member<RT, ClassT const, A, B>(obj,fptr);
-}
-
-template <typename RT, typename ClassT, typename A, typename B>
-inline bound_member<RT, ClassT const, A, B>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B) const)
-{
- return bound_member<RT, ClassT const, A, B>(obj,fptr);
-}
-
-#if PHOENIX_LIMIT > 3
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 3 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT, typename A, typename B, typename C>
-struct bound_member_action<RT, ClassT,
- A, B, C, nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C);
- typedef RT(ClassT::*cmf)(A, B, C) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename A_, typename B_, typename C_>
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(A a, B b, C c) const
- { return (obj->*fptr)(a, b, c); }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT, typename A, typename B, typename C>
-inline bound_member<RT, ClassT, A, B, C>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C))
-{
- return bound_member<RT, ClassT, A, B, C>(obj,fptr);
-}
-
-template <typename RT, typename ClassT, typename A, typename B, typename C>
-inline bound_member<RT, ClassT, A, B, C>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C))
-{
- return bound_member<RT, ClassT, A, B, C>(obj,fptr);
-}
-
-template <typename RT, typename ClassT, typename A, typename B, typename C>
-inline bound_member<RT, ClassT const, A, B, C>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C) const)
-{
- return bound_member<RT, ClassT const, A, B, C>(obj,fptr);
-}
-
-template <typename RT, typename ClassT, typename A, typename B, typename C>
-inline bound_member<RT, ClassT const, A, B, C>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C) const)
-{
- return bound_member<RT, ClassT const, A, B, C>(obj,fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 4 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D);
- typedef RT(ClassT::*cmf)(A, B, C, D) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename A_, typename B_, typename C_, typename D_>
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(A a, B b, C c, D d) const
- { return (obj->*fptr)(a, b, c, d); }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D
->
-inline bound_member<RT, ClassT, A, B, C, D>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D))
-{
- return bound_member<
- RT, ClassT, A, B, C, D>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D
->
-inline bound_member<RT, ClassT, A, B, C, D>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D))
-{
- return bound_member<
- RT, ClassT, A, B, C, D>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D
->
-inline bound_member<RT, ClassT const, A, B, C, D>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D
->
-inline bound_member<RT, ClassT const, A, B, C, D>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D>(obj,fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 5 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E);
- typedef RT(ClassT::*cmf)(A, B, C, D, E) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <typename A_, typename B_, typename C_, typename D_,
- typename E_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e
- ) const
- { return (obj->*fptr)(a, b, c, d, e); }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E
->
-inline bound_member<RT, ClassT, A, B, C, D, E>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E
->
-inline bound_member<RT, ClassT, A, B, C, D, E>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E
->
-inline bound_member<RT, ClassT const, A, B, C, D, E>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E
->
-inline bound_member<RT, ClassT const, A, B, C, D, E>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E>(obj,fptr);
-}
-
-#if PHOENIX_LIMIT > 6
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 6 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, F, nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e, F f
- ) const
- { return (obj->*fptr)(a, b, c, d, e, f); }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F>(obj,fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 7 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, F, G, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e, F f, G g
- ) const
- { return (obj->*fptr)(a, b, c, d, e, f, g); }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G>(obj,fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 8 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, F, G, H, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e, F f, G g, H h
- ) const
- { return (obj->*fptr)(a, b, c, d, e, f, g, h); }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H>(obj,fptr);
-}
-
-#if PHOENIX_LIMIT > 9
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 9 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e, F f, G g, H h, I i
- ) const
- { return (obj->*fptr)(a, b, c, d, e, f, g, h, i); }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I>(obj,fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 10 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j
- ) const
- {
- return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j);
- }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 11 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, K, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_, typename K_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k
- ) const
- {
- return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k);
- }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
-}
-
-#if PHOENIX_LIMIT > 12
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 12 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, K, L, nil_t, nil_t, nil_t, nil_t> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_, typename K_, typename L_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l
- ) const
- {
- return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l);
- }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 13 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_, typename K_, typename L_, typename M_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m
- ) const
- {
- return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l, m);
- }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 14 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_, typename K_, typename L_, typename M_, typename N_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n
- ) const
- {
- return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
- }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Bound member function binder (specialization for 15 args)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N,
- typename O
->
-struct bound_member_action<RT, ClassT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> {
-
- typedef RT result_type;
- typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
- typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const;
- typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
- mem_func_ptr_t;
-
- template <
- typename A_, typename B_, typename C_, typename D_,
- typename E_, typename F_, typename G_, typename H_, typename I_,
- typename J_, typename K_, typename L_, typename M_, typename N_,
- typename O_
- >
- struct result { typedef result_type type; };
-
- template <typename CT>
- bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
- : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
-
- result_type operator()(
- A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o
- ) const
- {
- return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
- }
-
- typename impl::as_ptr<ClassT>::pointer_type obj;
- mem_func_ptr_t fptr;
-};
-
-//////////////////////////////////
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N,
- typename O
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
-bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N,
- typename O
->
-inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
-bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
-{
- return bound_member<
- RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N,
- typename O
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
-bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
-}
-
-template <typename RT, typename ClassT,
- typename A, typename B, typename C, typename D,
- typename E, typename F, typename G, typename H, typename I,
- typename J, typename K, typename L, typename M, typename N,
- typename O
->
-inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
-bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const)
-{
- return bound_member<
- RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
-}
-
-#endif
-#endif
-#endif
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_BINDERS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_BINDERS
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_binders.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_binders.hpp"
 #endif
 
-} // namespace phoenix
+#include <boost/spirit/include/phoenix1_binders.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/phoenix/casts.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/casts.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/casts.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,1471 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2001-2003 Hartmut Kaiser
-
- Use, modification and distribution is subject to the 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 PHOENIX_CASTS_HPP
-#define PHOENIX_CASTS_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/phoenix/actor.hpp>
-#include <boost/spirit/phoenix/composite.hpp>
-#include <boost/static_assert.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Phoenix predefined maximum construct_ limit. This limit defines the maximum
-// number of parameters supported for calles to the set of construct_ template
-// functions (lazy object construction, see below). This number defaults to 3.
-// The actual maximum is rounded up in multiples of 3. Thus, if this value
-// is 4, the actual limit is 6. The ultimate maximum limit in this
-// implementation is 15.
-// PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
-
-#if !defined(PHOENIX_CONSTRUCT_LIMIT)
-#define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_CASTS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CASTS
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_casts.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_casts.hpp"
 #endif
 
-// ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
-BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
-
-// ensure PHOENIX_CONSTRUCT_LIMIT <= 15
-BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Lazy C++ casts
-//
-// The set of lazy C++ cast template classes and functions provide a way
-// of lazily casting certain type to another during parsing.
-// The lazy C++ templates are (syntactically) used very much like
-// the well known C++ casts:
-//
-// A *a = static_cast_<A *>(...actor returning a convertible type...);
-//
-// where the given parameter should be an actor, which eval() function
-// returns a convertible type.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T, typename A>
-struct static_cast_l {
-
- template <typename TupleT>
- struct result { typedef T type; };
-
- static_cast_l(A const& a_)
- : a(a_) {}
-
- template <typename TupleT>
- T
- eval(TupleT const& args) const
- {
- return static_cast<T>(a.eval(args));
- }
-
- A a;
-};
-
-//////////////////////////////////
-template <typename T, typename BaseAT>
-inline actor<static_cast_l<T, BaseAT> >
-static_cast_(actor<BaseAT> const& a)
-{
- typedef static_cast_l<T, BaseAT> cast_t;
- return actor<cast_t>(cast_t(a));
-}
-
-//////////////////////////////////
-template <typename T, typename A>
-struct dynamic_cast_l {
-
- template <typename TupleT>
- struct result { typedef T type; };
-
- dynamic_cast_l(A const& a_)
- : a(a_) {}
-
- template <typename TupleT>
- T
- eval(TupleT const& args) const
- {
- return dynamic_cast<T>(a.eval(args));
- }
-
- A a;
-};
-
-//////////////////////////////////
-template <typename T, typename BaseAT>
-inline actor<dynamic_cast_l<T, BaseAT> >
-dynamic_cast_(actor<BaseAT> const& a)
-{
- typedef dynamic_cast_l<T, BaseAT> cast_t;
- return actor<cast_t>(cast_t(a));
-}
-
-//////////////////////////////////
-template <typename T, typename A>
-struct reinterpret_cast_l {
-
- template <typename TupleT>
- struct result { typedef T type; };
-
- reinterpret_cast_l(A const& a_)
- : a(a_) {}
-
- template <typename TupleT>
- T
- eval(TupleT const& args) const
- {
- return reinterpret_cast<T>(a.eval(args));
- }
-
- A a;
-};
-
-//////////////////////////////////
-template <typename T, typename BaseAT>
-inline actor<reinterpret_cast_l<T, BaseAT> >
-reinterpret_cast_(actor<BaseAT> const& a)
-{
- typedef reinterpret_cast_l<T, BaseAT> cast_t;
- return actor<cast_t>(cast_t(a));
-}
+#include <boost/spirit/include/phoenix1_casts.hpp>
 
-//////////////////////////////////
-template <typename T, typename A>
-struct const_cast_l {
-
- template <typename TupleT>
- struct result { typedef T type; };
-
- const_cast_l(A const& a_)
- : a(a_) {}
-
- template <typename TupleT>
- T
- eval(TupleT const& args) const
- {
- return const_cast<T>(a.eval(args));
- }
-
- A a;
-};
-
-//////////////////////////////////
-template <typename T, typename BaseAT>
-inline actor<const_cast_l<T, BaseAT> >
-const_cast_(actor<BaseAT> const& a)
-{
- typedef const_cast_l<T, BaseAT> cast_t;
- return actor<cast_t>(cast_t(a));
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// construct_
-//
-// Lazy object construction
-//
-// The set of construct_<> template classes and functions provide a way
-// of lazily constructing certain object from a arbitrary set of
-// actors during parsing.
-// The construct_ templates are (syntactically) used very much like
-// the well known C++ casts:
-//
-// A a = construct_<A>(...arbitrary list of actors...);
-//
-// where the given parameters are submitted as parameters to the
-// contructor of the object of type A. (This certainly implies, that
-// type A has a constructor with a fitting set of parameter types
-// defined.)
-//
-// The maximum number of needed parameters is controlled through the
-// preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
-// limit should not be greater than PHOENIX_LIMIT.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T>
-struct construct_l_0 {
- typedef T result_type;
-
- T operator()() const {
- return T();
- }
-};
-
-
-template <typename T>
-struct construct_l {
-
- template <
- typename A
- , typename B
- , typename C
-
-#if PHOENIX_CONSTRUCT_LIMIT > 3
- , typename D
- , typename E
- , typename F
-
-#if PHOENIX_CONSTRUCT_LIMIT > 6
- , typename G
- , typename H
- , typename I
-
-#if PHOENIX_CONSTRUCT_LIMIT > 9
- , typename J
- , typename K
- , typename L
-
-#if PHOENIX_CONSTRUCT_LIMIT > 12
- , typename M
- , typename N
- , typename O
-#endif
-#endif
 #endif
-#endif
- >
- struct result { typedef T type; };
-
- T operator()() const
- {
- return T();
- }
-
- template <typename A>
- T operator()(A const& a) const
- {
- T t(a);
- return t;
- }
-
- template <typename A, typename B>
- T operator()(A const& a, B const& b) const
- {
- T t(a, b);
- return t;
- }
-
- template <typename A, typename B, typename C>
- T operator()(A const& a, B const& b, C const& c) const
- {
- T t(a, b, c);
- return t;
- }
-
-#if PHOENIX_CONSTRUCT_LIMIT > 3
- template <
- typename A, typename B, typename C, typename D
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d) const
- {
- T t(a, b, c, d);
- return t;
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e) const
- {
- T t(a, b, c, d, e);
- return t;
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f) const
- {
- T t(a, b, c, d, e, f);
- return t;
- }
-
-#if PHOENIX_CONSTRUCT_LIMIT > 6
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g) const
- {
- T t(a, b, c, d, e, f, g);
- return t;
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h) const
- {
- T t(a, b, c, d, e, f, g, h);
- return t;
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i) const
- {
- T t(a, b, c, d, e, f, g, h, i);
- return t;
- }
-
-#if PHOENIX_CONSTRUCT_LIMIT > 9
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j) const
- {
- T t(a, b, c, d, e, f, g, h, i, j);
- return t;
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k) const
- {
- T t(a, b, c, d, e, f, g, h, i, j, k);
- return t;
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l) const
- {
- T t(a, b, c, d, e, f, g, h, i, j, k, l);
- return t;
- }
-
-#if PHOENIX_CONSTRUCT_LIMIT > 12
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m) const
- {
- T t(a, b, c, d, e, f, g, h, i, j, k, l, m);
- return t;
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n) const
- {
- T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
- return t;
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n, O const& o) const
- {
- T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
- return t;
- }
-
-#endif
-#endif
-#endif
-#endif
-};
-
-
-template <typename T>
-struct construct_1 {
-
- template <
- typename A
- >
- struct result { typedef T type; };
-
- template <typename A>
- T operator()(A const& a) const
- {
- T t(a);
- return t;
- }
-
-};
-
-template <typename T>
-struct construct_2 {
-
- template <
- typename A
- , typename B
- >
- struct result { typedef T type; };
-
- template <typename A, typename B>
- T operator()(A const& a, B const& b) const
- {
- T t(a, b);
- return t;
- }
-
-};
-
-template <typename T>
-struct construct_3 {
-
- template <
- typename A
- , typename B
- , typename C
- >
- struct result { typedef T type; };
-
- template <typename A, typename B, typename C>
- T operator()(A const& a, B const& b, C const& c) const
- {
- T t(a, b, c);
- return t;
- }
-};
-
-#if PHOENIX_CONSTRUCT_LIMIT > 3
-template <typename T>
-struct construct_4 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d) const
- {
- T t(a, b, c, d);
- return t;
- }
-};
-
-
-template <typename T>
-struct construct_5 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e) const
- {
- T t(a, b, c, d, e);
- return t;
- }
-};
-
-
-template <typename T>
-struct construct_6 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f) const
- {
- T t(a, b, c, d, e, f);
- return t;
- }
-};
-#endif
-
-
-#if PHOENIX_CONSTRUCT_LIMIT > 6
-template <typename T>
-struct construct_7 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g) const
- {
- T t(a, b, c, d, e, f, g);
- return t;
- }
-};
-
-template <typename T>
-struct construct_8 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h) const
- {
- T t(a, b, c, d, e, f, g, h);
- return t;
- }
-};
-
-template <typename T>
-struct construct_9 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i) const
- {
- T t(a, b, c, d, e, f, g, h, i);
- return t;
- }
-};
-#endif
-
-
-#if PHOENIX_CONSTRUCT_LIMIT > 9
-template <typename T>
-struct construct_10 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j) const
- {
- T t(a, b, c, d, e, f, g, h, i, j);
- return t;
- }
-};
-
-template <typename T>
-struct construct_11 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- , typename K
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k) const
- {
- T t(a, b, c, d, e, f, g, h, i, j, k);
- return t;
- }
-};
-
-template <typename T>
-struct construct_12 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- , typename K
- , typename L
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l) const
- {
- T t(a, b, c, d, f, e, g, h, i, j, k, l);
- return t;
- }
-};
-#endif
-
-#if PHOENIX_CONSTRUCT_LIMIT > 12
-template <typename T>
-struct construct_13 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- , typename K
- , typename L
- , typename M
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m) const
- {
- T t(a, b, c, d, e, f, g, h, i, j, k, l, m);
- return t;
- }
-};
-
-template <typename T>
-struct construct_14 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- , typename K
- , typename L
- , typename M
- , typename N
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n) const
- {
- T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
- return t;
- }
-};
-
-template <typename T>
-struct construct_15 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- , typename K
- , typename L
- , typename M
- , typename N
- , typename O
- >
- struct result { typedef T type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O
- >
- T operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n, O const& o) const
- {
- T t(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
- return t;
- }
-};
-#endif
-
-
-#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The following specializations are needed because Borland and CodeWarrior
-// does not accept default template arguments in nested template classes in
-// classes (i.e construct_l::result)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T, typename TupleT>
-struct composite0_result<construct_l_0<T>, TupleT> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A>
-struct composite1_result<construct_l<T>, TupleT, A> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B>
-struct composite2_result<construct_l<T>, TupleT, A, B> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C>
-struct composite3_result<construct_l<T>, TupleT, A, B, C> {
-
- typedef T type;
-};
-
-#if PHOENIX_LIMIT > 3
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D>
-struct composite4_result<construct_l<T>, TupleT,
- A, B, C, D> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E>
-struct composite5_result<construct_l<T>, TupleT,
- A, B, C, D, E> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F>
-struct composite6_result<construct_l<T>, TupleT,
- A, B, C, D, E, F> {
-
- typedef T type;
-};
-
-#if PHOENIX_LIMIT > 6
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G>
-struct composite7_result<construct_l<T>, TupleT,
- A, B, C, D, E, F, G> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H>
-struct composite8_result<construct_l<T>, TupleT,
- A, B, C, D, E, F, G, H> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I>
-struct composite9_result<construct_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I> {
-
- typedef T type;
-};
-
-#if PHOENIX_LIMIT > 9
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J>
-struct composite10_result<construct_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K>
-struct composite11_result<construct_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L>
-struct composite12_result<construct_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L> {
-
- typedef T type;
-};
-
-#if PHOENIX_LIMIT > 12
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M>
-struct composite13_result<construct_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L, M> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N>
-struct composite14_result<construct_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
-
- typedef T type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O>
-struct composite15_result<construct_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
-
- typedef T type;
-};
-
-#endif
-#endif
-#endif
-#endif
-#endif
-
-//////////////////////////////////
-template <typename T>
-inline typename impl::make_composite<construct_l_0<T> >::type
-construct_()
-{
- typedef impl::make_composite<construct_l_0<T> > make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_l_0<T>()));
-}
-
-//////////////////////////////////
-template <typename T, typename A>
-inline typename impl::make_composite<construct_1<T>, A>::type
-construct_(A const& a)
-{
- typedef impl::make_composite<construct_1<T>, A> make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_1<T>(),
- as_actor<A>::convert(a)
- ));
-}
-
-//////////////////////////////////
-template <typename T, typename A, typename B>
-inline typename impl::make_composite<construct_2<T>, A, B>::type
-construct_(A const& a, B const& b)
-{
- typedef impl::make_composite<construct_2<T>, A, B> make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_2<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b)
- ));
-}
-
-//////////////////////////////////
-template <typename T, typename A, typename B, typename C>
-inline typename impl::make_composite<construct_3<T>, A, B, C>::type
-construct_(A const& a, B const& b, C const& c)
-{
- typedef impl::make_composite<construct_3<T>, A, B, C> make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_3<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c)
- ));
-}
-
-#if PHOENIX_CONSTRUCT_LIMIT > 3
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D
->
-inline typename impl::make_composite<construct_4<T>, A, B, C, D>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d)
-{
- typedef
- impl::make_composite<construct_4<T>, A, B, C, D>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_4<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E
->
-inline typename impl::make_composite<construct_5<T>, A, B, C, D, E>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e)
-{
- typedef
- impl::make_composite<construct_5<T>, A, B, C, D, E>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_5<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F
->
-inline typename impl::make_composite<construct_6<T>, A, B, C, D, E, F>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f)
-{
- typedef
- impl::make_composite<construct_6<T>, A, B, C, D, E, F>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_6<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f)
- ));
-}
-
-#if PHOENIX_CONSTRUCT_LIMIT > 6
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
->
-inline typename impl::make_composite<construct_7<T>, A, B, C, D, E, F, G>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g)
-{
- typedef
- impl::make_composite<construct_7<T>, A, B, C, D, E, F, G>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_7<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
->
-inline typename impl::make_composite<construct_8<T>, A, B, C, D, E, F, G, H>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h)
-{
- typedef
- impl::make_composite<construct_8<T>, A, B, C, D, E, F, G, H>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_8<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
->
-inline typename impl::make_composite<construct_9<T>, A, B, C, D, E, F, G, H, I>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i)
-{
- typedef
- impl::make_composite<construct_9<T>, A, B, C, D, E, F, G, H, I>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_9<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i)
- ));
-}
-
-#if PHOENIX_CONSTRUCT_LIMIT > 9
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
->
-inline typename impl::make_composite<
- construct_10<T>, A, B, C, D, E, F, G, H, I, J>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j)
-{
- typedef
- impl::make_composite<
- construct_10<T>, A, B, C, D, E, F, G, H, I, J
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_10<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J, typename K
->
-inline typename impl::make_composite<
- construct_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k)
-{
- typedef
- impl::make_composite<
- construct_11<T>, A, B, C, D, E, F, G, H, I, J, K
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_11<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J, typename K,
- typename L
->
-inline typename impl::make_composite<
- construct_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l)
-{
- typedef
- impl::make_composite<
- construct_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_12<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l)
- ));
-}
-
-#if PHOENIX_CONSTRUCT_LIMIT > 12
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J, typename K,
- typename L, typename M
->
-inline typename impl::make_composite<
- construct_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m)
-{
- typedef
- impl::make_composite<
- construct_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_13<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l),
- as_actor<M>::convert(m)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J, typename K,
- typename L, typename M, typename N
->
-inline typename impl::make_composite<
- construct_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n)
-{
- typedef
- impl::make_composite<
- construct_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_14<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l),
- as_actor<M>::convert(m),
- as_actor<N>::convert(n)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J, typename K,
- typename L, typename M, typename N, typename O
->
-inline typename impl::make_composite<
- construct_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
-construct_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n, O const& o)
-{
- typedef
- impl::make_composite<
- construct_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(construct_15<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l),
- as_actor<M>::convert(m),
- as_actor<N>::convert(n),
- as_actor<O>::convert(o)
- ));
-}
-
-#endif
-#endif
-#endif
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-} // namespace phoenix
-
-#endif // PHOENIX_CASTS_HPP

Modified: branches/CMake/release/boost/spirit/phoenix/closures.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/closures.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/closures.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,440 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2002 Joel de Guzman
- MT code Copyright (c) 2002-2003 Martin Wille
-
- Use, modification and distribution is subject to the 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 PHOENIX_CLOSURES_HPP
-#define PHOENIX_CLOSURES_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/phoenix/actor.hpp>
-#include <cassert>
-
-#ifdef PHOENIX_THREADSAFE
-#include <boost/thread/tss.hpp>
-#include <boost/thread/once.hpp>
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Adaptable closures
-//
-// The framework will not be complete without some form of closures
-// support. Closures encapsulate a stack frame where local
-// variables are created upon entering a function and destructed
-// upon exiting. Closures provide an environment for local
-// variables to reside. Closures can hold heterogeneous types.
-//
-// Phoenix closures are true hardware stack based closures. At the
-// very least, closures enable true reentrancy in lambda functions.
-// A closure provides access to a function stack frame where local
-// variables reside. Modeled after Pascal nested stack frames,
-// closures can be nested just like nested functions where code in
-// inner closures may access local variables from in-scope outer
-// closures (accessing inner scopes from outer scopes is an error
-// and will cause a run-time assertion failure).
-//
-// There are three (3) interacting classes:
-//
-// 1) closure:
-//
-// At the point of declaration, a closure does not yet create a
-// stack frame nor instantiate any variables. A closure declaration
-// declares the types and names[note] of the local variables. The
-// closure class is meant to be subclassed. It is the
-// responsibility of a closure subclass to supply the names for
-// each of the local variable in the closure. Example:
-//
-// struct my_closure : closure<int, string, double> {
-//
-// member1 num; // names the 1st (int) local variable
-// member2 message; // names the 2nd (string) local variable
-// member3 real; // names the 3rd (double) local variable
-// };
-//
-// my_closure clos;
-//
-// Now that we have a closure 'clos', its local variables can be
-// accessed lazily using the dot notation. Each qualified local
-// variable can be used just like any primitive actor (see
-// primitives.hpp). Examples:
-//
-// clos.num = 30
-// clos.message = arg1
-// clos.real = clos.num * 1e6
-//
-// The examples above are lazily evaluated. As usual, these
-// expressions return composite actors that will be evaluated
-// through a second function call invocation (see operators.hpp).
-// Each of the members (clos.xxx) is an actor. As such, applying
-// the operator() will reveal its identity:
-//
-// clos.num() // will return the current value of clos.num
-//
-// *** [note] Acknowledgement: Juan Carlos Arevalo-Baeza (JCAB)
-// introduced and initilally implemented the closure member names
-// that uses the dot notation.
-//
-// 2) closure_member
-//
-// The named local variables of closure 'clos' above are actually
-// closure members. The closure_member class is an actor and
-// conforms to its conceptual interface. member1..memberN are
-// predefined typedefs that correspond to each of the listed types
-// in the closure template parameters.
-//
-// 3) closure_frame
-//
-// When a closure member is finally evaluated, it should refer to
-// an actual instance of the variable in the hardware stack.
-// Without doing so, the process is not complete and the evaluated
-// member will result to an assertion failure. Remember that the
-// closure is just a declaration. The local variables that a
-// closure refers to must still be instantiated.
-//
-// The closure_frame class does the actual instantiation of the
-// local variables and links these variables with the closure and
-// all its members. There can be multiple instances of
-// closure_frames typically situated in the stack inside a
-// function. Each closure_frame instance initiates a stack frame
-// with a new set of closure local variables. Example:
-//
-// void foo()
-// {
-// closure_frame<my_closure> frame(clos);
-// /* do something */
-// }
-//
-// where 'clos' is an instance of our closure 'my_closure' above.
-// Take note that the usage above precludes locally declared
-// classes. If my_closure is a locally declared type, we can still
-// use its self_type as a paramater to closure_frame:
-//
-// closure_frame<my_closure::self_type> frame(clos);
-//
-// Upon instantiation, the closure_frame links the local variables
-// to the closure. The previous link to another closure_frame
-// instance created before is saved. Upon destruction, the
-// closure_frame unlinks itself from the closure and relinks the
-// preceding closure_frame prior to this instance.
-//
-// The local variables in the closure 'clos' above is default
-// constructed in the stack inside function 'foo'. Once 'foo' is
-// exited, all of these local variables are destructed. In some
-// cases, default construction is not desirable and we need to
-// initialize the local closure variables with some values. This
-// can be done by passing in the initializers in a compatible
-// tuple. A compatible tuple is one with the same number of
-// elements as the destination and where each element from the
-// destination can be constructed from each corresponding element
-// in the source. Example:
-//
-// tuple<int, char const*, int> init(123, "Hello", 1000);
-// closure_frame<my_closure> frame(clos, init);
-//
-// Here now, our closure_frame's variables are initialized with
-// int: 123, char const*: "Hello" and int: 1000.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-namespace impl
-{
- ///////////////////////////////////////////////////////////////////////
- // closure_frame_holder is a simple class that encapsulates the
- // storage for a frame pointer. It uses thread specific data in
- // case when multithreading is enabled, an ordinary pointer otherwise
- //
- // it has get() and set() member functions. set() has to be used
- // _after_ get(). get() contains intialisation code in the multi
- // threading case
- //
- // closure_frame_holder is used by the closure<> class to store
- // the pointer to the current frame.
- //
-#ifndef PHOENIX_THREADSAFE
- template <typename FrameT>
- struct closure_frame_holder
- {
- typedef FrameT frame_t;
- typedef frame_t *frame_ptr;
-
- closure_frame_holder() : frame(0) {}
-
- frame_ptr &get() { return frame; }
- void set(frame_t *f) { frame = f; }
-
- private:
- frame_ptr frame;
-
- // no copies, no assignments
- closure_frame_holder(closure_frame_holder const &);
- closure_frame_holder &operator=(closure_frame_holder const &);
- };
-#else
- template <typename FrameT>
- struct closure_frame_holder
- {
- typedef FrameT frame_t;
- typedef frame_t *frame_ptr;
-
- closure_frame_holder() : tsp_frame() {}
-
- frame_ptr &get()
- {
- if (!tsp_frame.get())
- tsp_frame.reset(new frame_ptr(0));
- return *tsp_frame;
- }
- void set(frame_ptr f)
- {
- *tsp_frame = f;
- }
-
- private:
- boost::thread_specific_ptr<frame_ptr> tsp_frame;
-
- // no copies, no assignments
- closure_frame_holder(closure_frame_holder const &);
- closure_frame_holder &operator=(closure_frame_holder const &);
- };
-#endif
-} // namespace phoenix::impl
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// closure_frame class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename ClosureT>
-class closure_frame : public ClosureT::tuple_t {
-
-public:
-
- closure_frame(ClosureT const& clos)
- : ClosureT::tuple_t(), save(clos.frame.get()), frame(clos.frame)
- { clos.frame.set(this); }
-
- template <typename TupleT>
- closure_frame(ClosureT const& clos, TupleT const& init)
- : ClosureT::tuple_t(init), save(clos.frame.get()), frame(clos.frame)
- { clos.frame.set(this); }
-
- ~closure_frame()
- { frame.set(save); }
-
-private:
-
- closure_frame(closure_frame const&); // no copy
- closure_frame& operator=(closure_frame const&); // no assign
-
- closure_frame* save;
- impl::closure_frame_holder<closure_frame>& frame;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// closure_member class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <int N, typename ClosureT>
-class closure_member {
-
-public:
-
- typedef typename ClosureT::tuple_t tuple_t;
-
- closure_member()
- : frame(ClosureT::closure_frame_holder_ref()) {}
-
- template <typename TupleT>
- struct result {
-
- typedef typename tuple_element<
- N, typename ClosureT::tuple_t
- >::rtype type;
- };
-
- template <typename TupleT>
- typename tuple_element<N, typename ClosureT::tuple_t>::rtype
- eval(TupleT const& /*args*/) const
- {
- using namespace std;
- assert(frame.get() != 0);
- return (*frame.get())[tuple_index<N>()];
- }
-
-private:
- impl::closure_frame_holder<typename ClosureT::closure_frame_t> &frame;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// closure class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename T0 = nil_t
- , typename T1 = nil_t
- , typename T2 = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename T3 = nil_t
- , typename T4 = nil_t
- , typename T5 = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename T6 = nil_t
- , typename T7 = nil_t
- , typename T8 = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename T9 = nil_t
- , typename T10 = nil_t
- , typename T11 = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename T12 = nil_t
- , typename T13 = nil_t
- , typename T14 = nil_t
-
-#endif
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_CLOSURES
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CLOSURES
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_closures.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_closures.hpp"
 #endif
-#endif
-#endif
->
-class closure {
-
-public:
-
- typedef tuple<
- T0, T1, T2
-#if PHOENIX_LIMIT > 3
- , T3, T4, T5
-#if PHOENIX_LIMIT > 6
- , T6, T7, T8
-#if PHOENIX_LIMIT > 9
- , T9, T10, T11
-#if PHOENIX_LIMIT > 12
- , T12, T13, T14
-#endif
-#endif
-#endif
-#endif
- > tuple_t;
-
- typedef closure<
- T0, T1, T2
-#if PHOENIX_LIMIT > 3
- , T3, T4, T5
-#if PHOENIX_LIMIT > 6
- , T6, T7, T8
-#if PHOENIX_LIMIT > 9
- , T9, T10, T11
-#if PHOENIX_LIMIT > 12
- , T12, T13, T14
-#endif
-#endif
-#endif
-#endif
- > self_t;
-
- typedef closure_frame<self_t> closure_frame_t;
-
- closure()
- : frame() { closure_frame_holder_ref(&frame); }
- closure_frame_t& context() { assert(frame!=0); return frame.get(); }
- closure_frame_t const& context() const { assert(frame!=0); return frame.get(); }
-
- typedef actor<closure_member<0, self_t> > member1;
- typedef actor<closure_member<1, self_t> > member2;
- typedef actor<closure_member<2, self_t> > member3;
-
-#if PHOENIX_LIMIT > 3
- typedef actor<closure_member<3, self_t> > member4;
- typedef actor<closure_member<4, self_t> > member5;
- typedef actor<closure_member<5, self_t> > member6;
-
-#if PHOENIX_LIMIT > 6
- typedef actor<closure_member<6, self_t> > member7;
- typedef actor<closure_member<7, self_t> > member8;
- typedef actor<closure_member<8, self_t> > member9;
-
-#if PHOENIX_LIMIT > 9
- typedef actor<closure_member<9, self_t> > member10;
- typedef actor<closure_member<10, self_t> > member11;
- typedef actor<closure_member<11, self_t> > member12;
-
-#if PHOENIX_LIMIT > 12
- typedef actor<closure_member<12, self_t> > member13;
- typedef actor<closure_member<13, self_t> > member14;
- typedef actor<closure_member<14, self_t> > member15;
-
-#endif
-#endif
-#endif
-#endif
-
-#if !defined(__MWERKS__) || (__MWERKS__ > 0x3002)
-private:
-#endif
-
- closure(closure const&); // no copy
- closure& operator=(closure const&); // no assign
-
-#if !defined(__MWERKS__) || (__MWERKS__ > 0x3002)
- template <int N, typename ClosureT>
- friend class closure_member;
-
- template <typename ClosureT>
- friend class closure_frame;
-#endif
-
- typedef impl::closure_frame_holder<closure_frame_t> holder_t;
-
-#ifdef PHOENIX_THREADSAFE
- static boost::thread_specific_ptr<holder_t*> &
- tsp_frame_instance()
- {
- static boost::thread_specific_ptr<holder_t*> the_instance;
- return the_instance;
- }
-
- static void
- tsp_frame_instance_init()
- {
- tsp_frame_instance();
- }
-#endif
-
- static holder_t &
- closure_frame_holder_ref(holder_t* holder_ = 0)
- {
-#ifdef PHOENIX_THREADSAFE
- static boost::once_flag been_here = BOOST_ONCE_INIT;
- boost::call_once(been_here, tsp_frame_instance_init);
- boost::thread_specific_ptr<holder_t*> &tsp_frame = tsp_frame_instance();
- if (!tsp_frame.get())
- tsp_frame.reset(new holder_t *(0));
- holder_t *& holder = *tsp_frame;
-#else
- static holder_t* holder = 0;
-#endif
- if (holder_ != 0)
- holder = holder_;
- return *holder;
- }
-
- mutable holder_t frame;
-};
 
-}
- // namespace phoenix
+#include <boost/spirit/include/phoenix1_closures.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/phoenix/composite.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/composite.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/composite.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,1423 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2002 Joel de Guzman
-
- Use, modification and distribution is subject to the 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 PHOENIX_COMPOSITE_HPP
-#define PHOENIX_COMPOSITE_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/phoenix/actor.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite class
-//
-// A composite is an actor base class composed of zero or more
-// actors (see actor.hpp) and an operation. A composite is itself
-// an actor superclass and conforms to its conceptual interface.
-// Its eval member function un-funnels the tupled actual arguments
-// from the tuple by invoking each of the actors' eval member
-// function. The results of each are then passed on as arguments to
-// the operation. Specializations are provided to handle different
-// numbers of actors.
-//
-// Schematically:
-//
-// actor0.eval(tupled_args) --> arg0 --> |
-// actor1.eval(tupled_args) --> arg1 --> |
-// actor2.eval(tupled_args) --> arg3 --> | --> operation(arg0...argN)
-// ... |
-// actorN.eval(tupled_args) --> argN --> |
-//
-// The operation can be any suitable functor that can accept the
-// arguments passed in by the composite. The operation is expected
-// to have a member operator() that carries out the actual
-// operation. There should be a one to one correspondence between
-// actors of the composite and the arguments of the operation's
-// member operator().
-//
-// The operation is also expected to have a nested template class
-// result<T0...TN>. The nested template class result should have a
-// typedef 'type' that reflects the return type of its member
-// operator(). This is essentially a type computer that answers the
-// metaprogramming question "Given arguments of type T0...TN, what
-// will be its operator()'s return type?".
-//
-// There is a special case for operations that accept no arguments.
-// Such nullary operations are only required to define a typedef
-// result_type that reflects the return type of its operator().
-//
-// Here's an example of a simple operation that squares a number:
-//
-// struct square {
-//
-// template <typename ArgT>
-// struct result { typedef ArgT type; };
-//
-// template <typename ArgT>
-// ArgT operator()(ArgT n) const { return n * n; }
-// };
-//
-// As can be seen, operations can be polymorphic. Its arguments and
-// return type are not fixed to a particular type. The example
-// above for example, can handle any ArgT type as long as it has a
-// multiplication operator.
-//
-// Composites are not created directly. Instead, there are meta-
-// programs provided that indirectly create composites. See
-// operators.hpp, binders.hpp and functions.hpp for examples.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename OperationT
- , typename A = nil_t
- , typename B = nil_t
- , typename C = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename D = nil_t
- , typename E = nil_t
- , typename F = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename G = nil_t
- , typename H = nil_t
- , typename I = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename J = nil_t
- , typename K = nil_t
- , typename L = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename M = nil_t
- , typename N = nil_t
- , typename O = nil_t
-
-#endif
-#endif
-#endif
-#endif
-
- , typename NU = nil_t // Not used
->
-struct composite;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <0 actor> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT>
-struct composite0_result {
-
- typedef typename OperationT::result_type type;
-};
-
-//////////////////////////////////
-template <typename OperationT>
-struct composite<OperationT,
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite0_result<
- OperationT, TupleT
- >::type type;
- };
-
- composite(OperationT const& op_)
- : op(op_) {}
-
- template <typename TupleT>
- typename OperationT::result_type
- eval(TupleT const& /*args*/) const
- {
- return op();
- }
-
- mutable OperationT op; // operation
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <1 actor> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A>
-struct composite1_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A>
-struct composite<OperationT,
- A, nil_t, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT, A> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite1_result<
- OperationT, TupleT, A
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_)
- : op(op_), a(a_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- return op(ra);
- }
-
- mutable OperationT op; // operation
- A a; // actors
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <2 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B>
-struct composite2_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B>
-struct composite<OperationT,
- A, B, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT, A, B> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite2_result<
- OperationT, TupleT, A, B
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_)
- : op(op_), a(a_), b(b_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- return op(ra, rb);
- }
-
- mutable OperationT op; // operation
- A a; B b; // actors
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <3 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C>
-struct composite3_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C>
-struct composite<OperationT,
- A, B, C,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_COMPOSITE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_COMPOSITE
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_composite.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_composite.hpp"
 #endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT, A, B, C> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite3_result<
- OperationT, TupleT, A, B, C
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_)
- : op(op_), a(a_), b(b_), c(c_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- return op(ra, rb, rc);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; // actors
-};
-
-#if PHOENIX_LIMIT > 3
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <4 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D>
-struct composite4_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D>
-struct composite<OperationT,
- A, B, C, D, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT, A, B, C, D> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite4_result<
- OperationT, TupleT, A, B, C, D
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_)
- : op(op_), a(a_), b(b_), c(c_), d(d_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- return op(ra, rb, rc, rd);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; // actors
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <5 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E>
-struct composite5_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E>
-struct composite<OperationT,
- A, B, C, D, E, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT, A, B, C, D, E> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite5_result<
- OperationT, TupleT, A, B, C, D, E
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- return op(ra, rb, rc, rd, re);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; // actors
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <6 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F>
-struct composite6_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type,
- typename actor_result<F, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E,
- typename F>
-struct composite<OperationT,
- A, B, C, D, E, F,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT, A, B, C, D, E, F> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite6_result<
- OperationT, TupleT, A, B, C, D, E, F
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
- F const& f_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- typename actor_result<F, TupleT>::type rf = f.eval(args);
- return op(ra, rb, rc, rd, re, rf);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; F f; // actors
-};
-
-#if PHOENIX_LIMIT > 6
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <7 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G>
-struct composite7_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type,
- typename actor_result<F, TupleT>::plain_type,
- typename actor_result<G, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G>
-struct composite<OperationT,
- A, B, C, D, E, F, G, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT, A, B, C, D, E, F, G> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite7_result<
- OperationT, TupleT, A, B, C, D, E, F, G
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
- F const& f_, G const& g_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- typename actor_result<F, TupleT>::type rf = f.eval(args);
- typename actor_result<G, TupleT>::type rg = g.eval(args);
- return op(ra, rb, rc, rd, re, rf, rg);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; F f; G g; // actors
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <8 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H>
-struct composite8_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type,
- typename actor_result<F, TupleT>::plain_type,
- typename actor_result<G, TupleT>::plain_type,
- typename actor_result<H, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H>
-struct composite<OperationT,
- A, B, C, D, E, F, G, H, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT, A, B, C, D, E, F, G, H> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite8_result<
- OperationT, TupleT, A, B, C, D, E, F, G, H
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
- F const& f_, G const& g_, H const& h_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- typename actor_result<F, TupleT>::type rf = f.eval(args);
- typename actor_result<G, TupleT>::type rg = g.eval(args);
- typename actor_result<H, TupleT>::type rh = h.eval(args);
- return op(ra, rb, rc, rd, re, rf, rg, rh);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; F f; G g; H h; // actors
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <9 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I>
-struct composite9_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type,
- typename actor_result<F, TupleT>::plain_type,
- typename actor_result<G, TupleT>::plain_type,
- typename actor_result<H, TupleT>::plain_type,
- typename actor_result<I, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I>
-struct composite<OperationT,
- A, B, C, D, E, F, G, H, I,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT, A, B, C, D, E, F, G, H, I> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite9_result<
- OperationT, TupleT, A, B, C, D, E, F, G, H, I
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
- F const& f_, G const& g_, H const& h_, I const& i_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- typename actor_result<F, TupleT>::type rf = f.eval(args);
- typename actor_result<G, TupleT>::type rg = g.eval(args);
- typename actor_result<H, TupleT>::type rh = h.eval(args);
- typename actor_result<I, TupleT>::type ri = i.eval(args);
- return op(ra, rb, rc, rd, re, rf, rg, rh, ri);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; F f; G g; H h; I i; // actors
-};
-
-#if PHOENIX_LIMIT > 9
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <10 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J>
-struct composite10_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type,
- typename actor_result<F, TupleT>::plain_type,
- typename actor_result<G, TupleT>::plain_type,
- typename actor_result<H, TupleT>::plain_type,
- typename actor_result<I, TupleT>::plain_type,
- typename actor_result<J, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J>
-struct composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT, A, B, C, D, E, F, G, H, I, J> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite10_result<
- OperationT, TupleT, A, B, C, D, E, F, G, H, I, J
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
- F const& f_, G const& g_, H const& h_, I const& i_, J const& j_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- typename actor_result<F, TupleT>::type rf = f.eval(args);
- typename actor_result<G, TupleT>::type rg = g.eval(args);
- typename actor_result<H, TupleT>::type rh = h.eval(args);
- typename actor_result<I, TupleT>::type ri = i.eval(args);
- typename actor_result<J, TupleT>::type rj = j.eval(args);
- return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; // actors
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <11 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K>
-struct composite11_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type,
- typename actor_result<F, TupleT>::plain_type,
- typename actor_result<G, TupleT>::plain_type,
- typename actor_result<H, TupleT>::plain_type,
- typename actor_result<I, TupleT>::plain_type,
- typename actor_result<J, TupleT>::plain_type,
- typename actor_result<K, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K>
-struct composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, K, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, K> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite11_result<
- OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
- F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
- K const& k_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_),
- k(k_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- typename actor_result<F, TupleT>::type rf = f.eval(args);
- typename actor_result<G, TupleT>::type rg = g.eval(args);
- typename actor_result<H, TupleT>::type rh = h.eval(args);
- typename actor_result<I, TupleT>::type ri = i.eval(args);
- typename actor_result<J, TupleT>::type rj = j.eval(args);
- typename actor_result<K, TupleT>::type rk = k.eval(args);
- return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
- K k;// actors
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <12 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L>
-struct composite12_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type,
- typename actor_result<F, TupleT>::plain_type,
- typename actor_result<G, TupleT>::plain_type,
- typename actor_result<H, TupleT>::plain_type,
- typename actor_result<I, TupleT>::plain_type,
- typename actor_result<J, TupleT>::plain_type,
- typename actor_result<K, TupleT>::plain_type,
- typename actor_result<L, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L>
-struct composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, K, L,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
-> {
-
- typedef composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, K, L> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite12_result<
- OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
- F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
- K const& k_, L const& l_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_),
- k(k_), l(l_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- typename actor_result<F, TupleT>::type rf = f.eval(args);
- typename actor_result<G, TupleT>::type rg = g.eval(args);
- typename actor_result<H, TupleT>::type rh = h.eval(args);
- typename actor_result<I, TupleT>::type ri = i.eval(args);
- typename actor_result<J, TupleT>::type rj = j.eval(args);
- typename actor_result<K, TupleT>::type rk = k.eval(args);
- typename actor_result<L, TupleT>::type rl = l.eval(args);
- return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
- K k; L l;// actors
-};
-
-#if PHOENIX_LIMIT > 12
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <13 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M>
-struct composite13_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type,
- typename actor_result<F, TupleT>::plain_type,
- typename actor_result<G, TupleT>::plain_type,
- typename actor_result<H, TupleT>::plain_type,
- typename actor_result<I, TupleT>::plain_type,
- typename actor_result<J, TupleT>::plain_type,
- typename actor_result<K, TupleT>::plain_type,
- typename actor_result<L, TupleT>::plain_type,
- typename actor_result<M, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M>
-struct composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t
-> {
-
- typedef composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, K, L, M> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite13_result<
- OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
- F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
- K const& k_, L const& l_, M const& m_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_),
- k(k_), l(l_), m(m_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- typename actor_result<F, TupleT>::type rf = f.eval(args);
- typename actor_result<G, TupleT>::type rg = g.eval(args);
- typename actor_result<H, TupleT>::type rh = h.eval(args);
- typename actor_result<I, TupleT>::type ri = i.eval(args);
- typename actor_result<J, TupleT>::type rj = j.eval(args);
- typename actor_result<K, TupleT>::type rk = k.eval(args);
- typename actor_result<L, TupleT>::type rl = l.eval(args);
- typename actor_result<M, TupleT>::type rm = m.eval(args);
- return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
- K k; L l; M m; // actors
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <14 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N>
-struct composite14_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type,
- typename actor_result<F, TupleT>::plain_type,
- typename actor_result<G, TupleT>::plain_type,
- typename actor_result<H, TupleT>::plain_type,
- typename actor_result<I, TupleT>::plain_type,
- typename actor_result<J, TupleT>::plain_type,
- typename actor_result<K, TupleT>::plain_type,
- typename actor_result<L, TupleT>::plain_type,
- typename actor_result<M, TupleT>::plain_type,
- typename actor_result<N, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N>
-struct composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t
-> {
-
- typedef composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite14_result<
- OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
- F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
- K const& k_, L const& l_, M const& m_, N const& n_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_),
- k(k_), l(l_), m(m_), n(n_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- typename actor_result<F, TupleT>::type rf = f.eval(args);
- typename actor_result<G, TupleT>::type rg = g.eval(args);
- typename actor_result<H, TupleT>::type rh = h.eval(args);
- typename actor_result<I, TupleT>::type ri = i.eval(args);
- typename actor_result<J, TupleT>::type rj = j.eval(args);
- typename actor_result<K, TupleT>::type rk = k.eval(args);
- typename actor_result<L, TupleT>::type rl = l.eval(args);
- typename actor_result<M, TupleT>::type rm = m.eval(args);
- typename actor_result<N, TupleT>::type rn = n.eval(args);
- return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
- K k; L l; M m; N n; // actors
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// composite <15 actors> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O>
-struct composite15_result {
-
- typedef typename OperationT::template result<
- typename actor_result<A, TupleT>::plain_type,
- typename actor_result<B, TupleT>::plain_type,
- typename actor_result<C, TupleT>::plain_type,
- typename actor_result<D, TupleT>::plain_type,
- typename actor_result<E, TupleT>::plain_type,
- typename actor_result<F, TupleT>::plain_type,
- typename actor_result<G, TupleT>::plain_type,
- typename actor_result<H, TupleT>::plain_type,
- typename actor_result<I, TupleT>::plain_type,
- typename actor_result<J, TupleT>::plain_type,
- typename actor_result<K, TupleT>::plain_type,
- typename actor_result<L, TupleT>::plain_type,
- typename actor_result<M, TupleT>::plain_type,
- typename actor_result<N, TupleT>::plain_type,
- typename actor_result<O, TupleT>::plain_type
- >::type type;
-};
-
-//////////////////////////////////
-template <typename OperationT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O>
-struct composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t
-> {
-
- typedef composite<OperationT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename composite15_result<
- OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
- >::type type;
- };
-
- composite(OperationT const& op_,
- A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
- F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
- K const& k_, L const& l_, M const& m_, N const& n_, O const& o_)
- : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_),
- k(k_), l(l_), m(m_), n(n_), o(o_) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- typename actor_result<A, TupleT>::type ra = a.eval(args);
- typename actor_result<B, TupleT>::type rb = b.eval(args);
- typename actor_result<C, TupleT>::type rc = c.eval(args);
- typename actor_result<D, TupleT>::type rd = d.eval(args);
- typename actor_result<E, TupleT>::type re = e.eval(args);
- typename actor_result<F, TupleT>::type rf = f.eval(args);
- typename actor_result<G, TupleT>::type rg = g.eval(args);
- typename actor_result<H, TupleT>::type rh = h.eval(args);
- typename actor_result<I, TupleT>::type ri = i.eval(args);
- typename actor_result<J, TupleT>::type rj = j.eval(args);
- typename actor_result<K, TupleT>::type rk = k.eval(args);
- typename actor_result<L, TupleT>::type rl = l.eval(args);
- typename actor_result<M, TupleT>::type rm = m.eval(args);
- typename actor_result<N, TupleT>::type rn = n.eval(args);
- typename actor_result<O, TupleT>::type ro = o.eval(args);
- return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn, ro);
- }
-
- mutable OperationT op; // operation
- A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
- K k; L l; M m; N n; O o; // actors
-};
-
-#endif
-#endif
-#endif
-#endif
-
-namespace impl {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // make_composite is basically a type computer that answers the
- // question "Given types T0..TN, what composite type should I
- // create <composite_type> and if I were to generate an actual
- // composite, what type <type> should I return?"
- //
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename OperationT
- , typename A = nil_t
- , typename B = nil_t
- , typename C = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename D = nil_t
- , typename E = nil_t
- , typename F = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename G = nil_t
- , typename H = nil_t
- , typename I = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename J = nil_t
- , typename K = nil_t
- , typename L = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename M = nil_t
- , typename N = nil_t
- , typename O = nil_t
-
-#endif
-#endif
-#endif
-#endif
- >
- struct make_composite {
-
- typedef composite<OperationT
- , typename as_actor<A>::type
- , typename as_actor<B>::type
- , typename as_actor<C>::type
-
-#if PHOENIX_LIMIT > 3
- , typename as_actor<D>::type
- , typename as_actor<E>::type
- , typename as_actor<F>::type
-
-#if PHOENIX_LIMIT > 6
- , typename as_actor<G>::type
- , typename as_actor<H>::type
- , typename as_actor<I>::type
-
-#if PHOENIX_LIMIT > 9
- , typename as_actor<J>::type
- , typename as_actor<K>::type
- , typename as_actor<L>::type
-
-#if PHOENIX_LIMIT > 12
- , typename as_actor<M>::type
- , typename as_actor<N>::type
- , typename as_actor<O>::type
-
-#endif
-#endif
-#endif
-#endif
- > composite_type;
-
- typedef actor<composite_type> type;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // make_unary, make_binary, make_binary1, make_binary2 and
- // make_binary3 utilities are provided here for easy creation of
- // unary and binary composites.
- //
- ///////////////////////////////////////////////////////////////////////////
-
- ////////////////////////////////// input is an actor
- template <typename OperationT, typename BaseT>
- struct make_unary {
-
- typedef typename make_composite
- <OperationT, actor<BaseT> >::type type;
-
- static type
- construct(actor<BaseT> const& _0)
- {
- typedef typename make_composite
- <OperationT, actor<BaseT> >::composite_type
- ret_t;
-
- return ret_t(OperationT(), _0);
- }
- };
-
- ////////////////////////////////// LHS is an actor, RHS is unknown
- template <typename OperationT, typename BaseT, typename B>
- struct make_binary1 {
-
- typedef typename make_composite
- <OperationT, actor<BaseT>, B>::type type;
-
- static type
- construct(actor<BaseT> const& _0, B const& _1)
- {
- typedef typename make_composite
- <OperationT, actor<BaseT>, B>::composite_type
- ret_t;
-
- return ret_t(OperationT(), _0, as_actor<B>::convert(_1));
- }
- };
-
- ////////////////////////////////// LHS is unknown, RHS is an actor
- template <typename OperationT, typename A, typename BaseT>
- struct make_binary2 {
-
- typedef typename make_composite
- <OperationT, A, actor<BaseT> >::type type;
-
- static type
- construct(A const& _0, actor<BaseT> const& _1)
- {
- typedef typename make_composite
- <OperationT, A, actor<BaseT> >::composite_type
- ret_t;
-
- return ret_t(OperationT(), as_actor<A>::convert(_0), _1);
- }
- };
-
- ////////////////////////////////// Both LHS and RHS are actors
- template <typename OperationT, typename BaseA, typename BaseB>
- struct make_binary3 {
-
- typedef typename make_composite
- <OperationT, actor<BaseA>, actor<BaseB> >::type type;
-
- static type
- construct(actor<BaseA> const& _0, actor<BaseB> const& _1)
- {
- typedef typename make_composite
- <OperationT, actor<BaseA>, actor<BaseB> >::composite_type
- ret_t;
-
- return ret_t(OperationT(), _0, _1);
- }
- };
-
-} // namespace impl
 
-} // namespace phoenix
+#include <boost/spirit/include/phoenix1_composite.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/phoenix/functions.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/functions.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/functions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,761 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2002 Joel de Guzman
-
- Use, modification and distribution is subject to the 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 PHOENIX_FUNCTIONS_HPP
-#define PHOENIX_FUNCTIONS_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/phoenix/actor.hpp>
-#include <boost/spirit/phoenix/composite.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// function class
-//
-// Lazy functions
-//
-// This class provides a mechanism for lazily evaluating functions.
-// Syntactically, a lazy function looks like an ordinary C/C++
-// function. The function call looks the same. However, unlike
-// ordinary functions, the actual function execution is deferred.
-// (see actor.hpp, primitives.hpp and composite.hpp for an
-// overview). For example here are sample factorial function calls:
-//
-// factorial(4)
-// factorial(arg1)
-// factorial(arg1 * 6)
-//
-// These functions are automatically lazily bound unlike ordinary
-// function pointers or functor objects that need to be explicitly
-// bound through the bind function (see binders.hpp).
-//
-// A lazy function works in conjunction with a user defined functor
-// (as usual with a member operator()). Only special forms of
-// functor objects are allowed. This is required to enable true
-// polymorphism (STL style monomorphic functors and function
-// pointers can still be used through the bind facility in
-// binders.hpp).
-//
-// This special functor is expected to have a nested template class
-// result<A...TN> (where N is the number of arguments of its
-// member operator()). The nested template class result should have
-// a typedef 'type' that reflects the return type of its member
-// operator(). This is essentially a type computer that answers the
-// metaprogramming question "Given arguments of type A...TN, what
-// will be the operator()'s return type?".
-//
-// There is a special case for functors that accept no arguments.
-// Such nullary functors are only required to define a typedef
-// result_type that reflects the return type of its operator().
-//
-// Here's an example of a simple functor that computes the
-// factorial of a number:
-//
-// struct factorial_impl {
-//
-// template <typename Arg>
-// struct result { typedef Arg type; };
-//
-// template <typename Arg>
-// Arg operator()(Arg n) const
-// { return (n <= 0) ? 1 : n * this->operator()(n-1); }
-// };
-//
-// As can be seen, the functor can be polymorphic. Its arguments
-// and return type are not fixed to a particular type. The example
-// above for example, can handle any type as long as it can carry
-// out the required operations (i.e. <=, * and -).
-//
-// We can now declare and instantiate a lazy 'factorial' function:
-//
-// function<factorial_impl> factorial;
-//
-// Invoking a lazy function 'factorial' does not immediately
-// execute the functor factorial_impl. Instead, a composite (see
-// composite.hpp) object is created and returned to the caller.
-// Example:
-//
-// factorial(arg1)
-//
-// does nothing more than return a composite. A second function
-// call will invoke the actual factorial function. Example:
-//
-// int i = 4;
-// cout << factorial(arg1)(i);
-//
-// will print out "24".
-//
-// Take note that in certain cases (e.g. for functors with state),
-// an instance may be passed on to the constructor. Example:
-//
-// function<factorial_impl> factorial(ftor);
-//
-// where ftor is an instance of factorial_impl (this is not
-// necessary in this case since factorial is a simple stateless
-// functor). Take care though when using functors with state
-// because the functors are taken in by value. It is best to keep
-// the data manipulated by a functor outside the functor itself and
-// keep a reference to this data inside the functor. Also, it is
-// best to keep functors as small as possible.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT>
-struct function {
-
- function() : op() {}
- function(OperationT const& op_) : op(op_) {}
-
- actor<composite<OperationT> >
- operator()() const;
-
- template <typename A>
- typename impl::make_composite<OperationT, A>::type
- operator()(A const& a) const;
-
- template <typename A, typename B>
- typename impl::make_composite<OperationT, A, B>::type
- operator()(A const& a, B const& b) const;
-
- template <typename A, typename B, typename C>
- typename impl::make_composite<OperationT, A, B, C>::type
- operator()(A const& a, B const& b, C const& c) const;
-
-#if PHOENIX_LIMIT > 3
-
- template <typename A, typename B, typename C, typename D>
- typename impl::make_composite<OperationT, A, B, C, D>::type
- operator()(A const& a, B const& b, C const& c, D const& d) const;
-
- template <typename A, typename B, typename C, typename D, typename E>
- typename impl::make_composite<
- OperationT, A, B, C, D, E
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e
- ) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F
- >
- typename impl::make_composite<
- OperationT, A, B, C, D, E, F
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f
- ) const;
-
-#if PHOENIX_LIMIT > 6
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
- >
- typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g
- ) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
- >
- typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h
- ) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
- >
- typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i
- ) const;
-
-#if PHOENIX_LIMIT > 9
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
- >
- typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j
- ) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K
- >
- typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k
- ) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L
- >
- typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l
- ) const;
-
-#if PHOENIX_LIMIT > 12
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M
- >
- typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m
- ) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N
- >
- typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n
- ) const;
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O
- >
- typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
- >::type
- operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n, O const& o
- ) const;
-
-#endif
-#endif
-#endif
-#endif
-
- OperationT op;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// function class implementation
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename OperationT>
-inline actor<composite<OperationT> >
-function<OperationT>::operator()() const
-{
- return actor<composite<OperationT> >(op);
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <typename A>
-inline typename impl::make_composite<OperationT, A>::type
-function<OperationT>::operator()(A const& a) const
-{
- typedef typename impl::make_composite<OperationT, A>::composite_type ret_t;
- return ret_t
- (
- op,
- as_actor<A>::convert(a)
- );
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <typename A, typename B>
-inline typename impl::make_composite<OperationT, A, B>::type
-function<OperationT>::operator()(A const& a, B const& b) const
-{
- typedef
- typename impl::make_composite<OperationT, A, B>::composite_type
- ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b)
- );
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <typename A, typename B, typename C>
-inline typename impl::make_composite<OperationT, A, B, C>::type
-function<OperationT>::operator()(A const& a, B const& b, C const& c) const
-{
- typedef
- typename impl::make_composite<OperationT, A, B, C>::composite_type
- ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c)
- );
-}
-
-#if PHOENIX_LIMIT > 3
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d)
- );
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e)
- );
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E, F
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E, F
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f)
- );
-}
-
-#if PHOENIX_LIMIT > 6
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g)
- );
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h)
- );
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i)
- );
-}
-
-#if PHOENIX_LIMIT > 9
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j)
- );
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k)
- );
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l)
- );
-}
-
-#if PHOENIX_LIMIT > 12
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l),
- as_actor<M>::convert(m)
- );
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l),
- as_actor<M>::convert(m),
- as_actor<N>::convert(n)
- );
-}
-
-//////////////////////////////////
-template <typename OperationT>
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O
->
-inline typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
->::type
-function<OperationT>::operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n, O const& o
-) const
-{
- typedef typename impl::make_composite<
- OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
- >::composite_type ret_t;
-
- return ret_t(
- op,
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l),
- as_actor<M>::convert(m),
- as_actor<N>::convert(n),
- as_actor<O>::convert(o)
- );
-}
-
-#endif
-#endif
-#endif
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_FUNCTIONS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_FUNCTIONS
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_functions.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_functions.hpp"
 #endif
 
-///////////////////////////////////////////////////////////////////////////////
-} // namespace phoenix
+#include <boost/spirit/include/phoenix1_functions.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/phoenix/new.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/new.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/new.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,1316 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2001-2003 Hartmut Kaiser
- Copyright (c) 2003 Vaclav Vesely
-
- Use, modification and distribution is subject to the 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 PHOENIX_NEW_HPP
-#define PHOENIX_NEW_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/phoenix/actor.hpp>
-#include <boost/spirit/phoenix/composite.hpp>
-#include <boost/static_assert.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Phoenix predefined maximum new_ limit. This limit defines the maximum
-// number of parameters supported for calles to the set of new_ template
-// functions (lazy object construction, see below). This number defaults to 3.
-// The actual maximum is rounded up in multiples of 3. Thus, if this value
-// is 4, the actual limit is 6. The ultimate maximum limit in this
-// implementation is 15.
-// PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
-
-#if !defined(PHOENIX_CONSTRUCT_LIMIT)
-#define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
-#endif
-
-// ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
-BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
-
-// ensure PHOENIX_CONSTRUCT_LIMIT <= 15
-BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// new_
-//
-// Lazy object construction
-//
-// The set of new_<> template classes and functions provide a way
-// of lazily constructing certain object from a arbitrary set of
-// actors during parsing.
-// The new_ templates are (syntactically) used very much like
-// the well known C++ casts:
-//
-// A *a = new_<A>(...arbitrary list of actors...);
-//
-// where the given parameters are submitted as parameters to the
-// contructor of the object of type A. (This certainly implies, that
-// type A has a constructor with a fitting set of parameter types
-// defined.)
-//
-// The maximum number of needed parameters is controlled through the
-// preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
-// limit should not be greater than PHOENIX_LIMIT.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template <typename T>
-struct new_l_0
-{
- typedef T* result_type;
-
- T* operator()() const
- {
- return new T();
- }
-};
-
-template <typename T>
-struct new_l {
-
- template <
- typename A
- , typename B
- , typename C
-
-#if PHOENIX_CONSTRUCT_LIMIT > 3
- , typename D
- , typename E
- , typename F
-
-#if PHOENIX_CONSTRUCT_LIMIT > 6
- , typename G
- , typename H
- , typename I
-
-#if PHOENIX_CONSTRUCT_LIMIT > 9
- , typename J
- , typename K
- , typename L
-
-#if PHOENIX_CONSTRUCT_LIMIT > 12
- , typename M
- , typename N
- , typename O
-#endif
-#endif
-#endif
-#endif
- >
- struct result { typedef T* type; };
-
- T* operator()() const {
- return new T();
- }
-
- template <typename A>
- T* operator()(A const& a) const {
- return new T(a);
- }
-
- template <typename A, typename B>
- T* operator()(A const& a, B const& b) const {
- return new T(a, b);
- }
-
- template <typename A, typename B, typename C>
- T* operator()(A const& a, B const& b, C const& c) const {
- return new T(a, b, c);
- }
-
-#if PHOENIX_CONSTRUCT_LIMIT > 3
- template <
- typename A, typename B, typename C, typename D
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d) const
- {
- return new T(a, b, c, d);
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e) const
- {
- return new T(a, b, c, d, e);
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f) const
- {
- return new T(a, b, c, d, e, f);
- }
-
-#if PHOENIX_CONSTRUCT_LIMIT > 6
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g) const
- {
- return new T(a, b, c, d, e, f, g);
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h) const
- {
- return new T(a, b, c, d, e, f, g, h);
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i) const
- {
- return new T(a, b, c, d, e, f, g, h, i);
- }
-
-#if PHOENIX_CONSTRUCT_LIMIT > 9
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j) const
- {
- return new T(a, b, c, d, e, f, g, h, i, j);
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k) const
- {
- return new T(a, b, c, d, e, f, g, h, i, j, k);
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l) const
- {
- return new T(a, b, c, d, e, f, g, h, i, j, k, l);
- }
-
-#if PHOENIX_CONSTRUCT_LIMIT > 12
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m) const
- {
- return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n) const
- {
- return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
- }
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n, O const& o) const
- {
- return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
- }
-
-#endif
-#endif
-#endif
-#endif
-};
-
-template <typename T>
-struct new_1 {
-
- template <
- typename A
- >
- struct result { typedef T* type; };
-
- template <typename A>
- T* operator()(A const& a) const {
- return new T(a);
- }
-
-};
-
-template <typename T>
-struct new_2 {
-
- template <
- typename A
- , typename B
- >
- struct result { typedef T* type; };
-
- template <typename A, typename B>
- T* operator()(A const& a, B const& b) const {
- return new T(a, b);
- }
-
-};
-
-template <typename T>
-struct new_3 {
-
- template <
- typename A
- , typename B
- , typename C
- >
- struct result { typedef T* type; };
-
- template <typename A, typename B, typename C>
- T* operator()(A const& a, B const& b, C const& c) const {
- return new T(a, b, c);
- }
-};
-
-#if PHOENIX_CONSTRUCT_LIMIT > 3
-template <typename T>
-struct new_4 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- >
- struct result { typedef T* type; };
-
-
- template <
- typename A, typename B, typename C, typename D
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d) const
- {
- return new T(a, b, c, d);
- }
-};
-
-
-template <typename T>
-struct new_5 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- >
- struct result { typedef T* type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e) const
- {
- return new T(a, b, c, d, e);
- }
-};
-
-
-template <typename T>
-struct new_6 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- >
- struct result { typedef T* type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f) const
- {
- return new T(a, b, c, d, e, f);
- }
-};
-#endif
-
-
-#if PHOENIX_CONSTRUCT_LIMIT > 6
-template <typename T>
-struct new_7 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- >
- struct result { typedef T* type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g) const
- {
- return new T(a, b, c, d, e, f, g);
- }
-};
-
-template <typename T>
-struct new_8 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- >
- struct result { typedef T* type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h) const
- {
- return new T(a, b, c, d, e, f, g, h);
- }
-};
-
-template <typename T>
-struct new_9 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- >
- struct result { typedef T* type; };
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i) const
- {
- return new T(a, b, c, d, e, f, g, h, i);
- }
-};
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_NEW
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_NEW
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_new.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_new.hpp"
 #endif
 
+#include <boost/spirit/include/phoenix1_new.hpp>
 
-#if PHOENIX_CONSTRUCT_LIMIT > 9
-template <typename T>
-struct new_10 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- >
- struct result { typedef T* type; };
-
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j) const
- {
- return new T(a, b, c, d, e, f, g, h, i, j);
- }
-};
-
-template <typename T>
-struct new_11 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- , typename K
- >
- struct result { typedef T* type; };
-
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k) const
- {
- return new T(a, b, c, d, e, f, g, h, i, j, k);
- }
-
-};
-
-template <typename T>
-struct new_12 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- , typename K
- , typename L
- >
- struct result { typedef T* type; };
-
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l) const
- {
- return new T(a, b, c, d, f, e, g, h, i, j, k, l);
- }
-};
 #endif
-
-#if PHOENIX_CONSTRUCT_LIMIT > 12
-template <typename T>
-struct new_13 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- , typename K
- , typename L
- , typename M
- >
- struct result { typedef T* type; };
-
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m) const
- {
- return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
- }
-};
-
-template <typename T>
-struct new_14 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- , typename K
- , typename L
- , typename M
- , typename N
- >
- struct result { typedef T* type; };
-
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n) const
- {
- return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
- }
-
-};
-
-template <typename T>
-struct new_15 {
-
- template <
- typename A
- , typename B
- , typename C
- , typename D
- , typename E
- , typename F
- , typename G
- , typename H
- , typename I
- , typename J
- , typename K
- , typename L
- , typename M
- , typename N
- , typename O
- >
- struct result { typedef T* type; };
-
-
- template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O
- >
- T* operator()(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n, O const& o) const
- {
- return new T(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
- }
-
-};
-#endif
-
-
-#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The following specializations are needed because Borland and CodeWarrior
-// does not accept default template arguments in nested template classes in
-// classes (i.e new_l::result)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T, typename TupleT>
-struct composite0_result<new_l_0<T>, TupleT> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A>
-struct composite1_result<new_l<T>, TupleT, A> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B>
-struct composite2_result<new_l<T>, TupleT, A, B> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C>
-struct composite3_result<new_l<T>, TupleT, A, B, C> {
-
- typedef T* type;
-};
-
-#if PHOENIX_LIMIT > 3
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D>
-struct composite4_result<new_l<T>, TupleT,
- A, B, C, D> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E>
-struct composite5_result<new_l<T>, TupleT,
- A, B, C, D, E> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F>
-struct composite6_result<new_l<T>, TupleT,
- A, B, C, D, E, F> {
-
- typedef T* type;
-};
-
-#if PHOENIX_LIMIT > 6
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G>
-struct composite7_result<new_l<T>, TupleT,
- A, B, C, D, E, F, G> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H>
-struct composite8_result<new_l<T>, TupleT,
- A, B, C, D, E, F, G, H> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I>
-struct composite9_result<new_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I> {
-
- typedef T* type;
-};
-
-#if PHOENIX_LIMIT > 9
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J>
-struct composite10_result<new_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K>
-struct composite11_result<new_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L>
-struct composite12_result<new_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L> {
-
- typedef T* type;
-};
-
-#if PHOENIX_LIMIT > 12
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M>
-struct composite13_result<new_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L, M> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N>
-struct composite14_result<new_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
-
- typedef T* type;
-};
-
-//////////////////////////////////
-template <typename T, typename TupleT,
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O>
-struct composite15_result<new_l<T>, TupleT,
- A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
-
- typedef T* type;
-};
-
-#endif
-#endif
-#endif
-#endif
-#endif
-
-//////////////////////////////////
-template <typename T>
-inline typename impl::make_composite<new_l_0<T> >::type
-new_()
-{
- typedef impl::make_composite<new_l_0<T> > make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_l_0<T>()));
-}
-
-//////////////////////////////////
-template <typename T, typename A>
-inline typename impl::make_composite<new_1<T>, A>::type
-new_(A const& a)
-{
- typedef impl::make_composite<new_1<T>, A> make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_1<T>(),
- as_actor<A>::convert(a)
- ));
-}
-
-//////////////////////////////////
-template <typename T, typename A, typename B>
-inline typename impl::make_composite<new_2<T>, A, B>::type
-new_(A const& a, B const& b)
-{
- typedef impl::make_composite<new_2<T>, A, B> make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_2<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b)
- ));
-}
-
-//////////////////////////////////
-template <typename T, typename A, typename B, typename C>
-inline typename impl::make_composite<new_3<T>, A, B, C>::type
-new_(A const& a, B const& b, C const& c)
-{
- typedef impl::make_composite<new_3<T>, A, B, C> make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_3<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c)
- ));
-}
-
-#if PHOENIX_CONSTRUCT_LIMIT > 3
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D
->
-inline typename impl::make_composite<new_4<T>, A, B, C, D>::type
-new_(
- A const& a, B const& b, C const& c, D const& d)
-{
- typedef
- impl::make_composite<new_4<T>, A, B, C, D>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_4<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E
->
-inline typename impl::make_composite<new_5<T>, A, B, C, D, E>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e)
-{
- typedef
- impl::make_composite<new_5<T>, A, B, C, D, E>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_5<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F
->
-inline typename impl::make_composite<new_6<T>, A, B, C, D, E, F>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f)
-{
- typedef
- impl::make_composite<new_6<T>, A, B, C, D, E, F>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_6<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f)
- ));
-}
-
-#if PHOENIX_CONSTRUCT_LIMIT > 6
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G
->
-inline typename impl::make_composite<new_7<T>, A, B, C, D, E, F, G>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g)
-{
- typedef
- impl::make_composite<new_7<T>, A, B, C, D, E, F, G>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_7<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H
->
-inline typename impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h)
-{
- typedef
- impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_8<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I
->
-inline typename impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i)
-{
- typedef
- impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_9<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i)
- ));
-}
-
-#if PHOENIX_CONSTRUCT_LIMIT > 9
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J
->
-inline typename impl::make_composite<
- new_10<T>, A, B, C, D, E, F, G, H, I, J>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j)
-{
- typedef
- impl::make_composite<
- new_10<T>, A, B, C, D, E, F, G, H, I, J
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_10<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J, typename K
->
-inline typename impl::make_composite<
- new_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k)
-{
- typedef
- impl::make_composite<
- new_11<T>, A, B, C, D, E, F, G, H, I, J, K
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_11<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J, typename K,
- typename L
->
-inline typename impl::make_composite<
- new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l)
-{
- typedef
- impl::make_composite<
- new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_12<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l)
- ));
-}
-
-#if PHOENIX_CONSTRUCT_LIMIT > 12
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J, typename K,
- typename L, typename M
->
-inline typename impl::make_composite<
- new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m)
-{
- typedef
- impl::make_composite<
- new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_13<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l),
- as_actor<M>::convert(m)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J, typename K,
- typename L, typename M, typename N
->
-inline typename impl::make_composite<
- new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n)
-{
- typedef
- impl::make_composite<
- new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_14<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l),
- as_actor<M>::convert(m),
- as_actor<N>::convert(n)
- ));
-}
-
-//////////////////////////////////
-template <
- typename T, typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J, typename K,
- typename L, typename M, typename N, typename O
->
-inline typename impl::make_composite<
- new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
-new_(
- A const& a, B const& b, C const& c, D const& d, E const& e,
- F const& f, G const& g, H const& h, I const& i, J const& j,
- K const& k, L const& l, M const& m, N const& n, O const& o)
-{
- typedef
- impl::make_composite<
- new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
- >
- make_composite_t;
- typedef typename make_composite_t::type type_t;
- typedef typename make_composite_t::composite_type composite_type_t;
-
- return type_t(composite_type_t(new_15<T>(),
- as_actor<A>::convert(a),
- as_actor<B>::convert(b),
- as_actor<C>::convert(c),
- as_actor<D>::convert(d),
- as_actor<E>::convert(e),
- as_actor<F>::convert(f),
- as_actor<G>::convert(g),
- as_actor<H>::convert(h),
- as_actor<I>::convert(i),
- as_actor<J>::convert(j),
- as_actor<K>::convert(k),
- as_actor<L>::convert(l),
- as_actor<M>::convert(m),
- as_actor<N>::convert(n),
- as_actor<O>::convert(o)
- ));
-}
-
-#endif
-#endif
-#endif
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-} // namespace phoenix
-
-#endif // PHOENIX_NEW_HPP

Modified: branches/CMake/release/boost/spirit/phoenix/operators.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/operators.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/operators.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,2204 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2002 Joel de Guzman
-
- Use, modification and distribution is subject to the 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 PHOENIX_OPERATORS_HPP
-#define PHOENIX_OPERATORS_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_NO_CWCTYPE)
- #include <cwctype>
-#endif
-
-#if defined(__BORLANDC__) || (defined(__ICL) && __ICL >= 700)
-#define CREF const&
-#else
-#define CREF
-#endif
-
-#include <climits>
-#include <boost/spirit/phoenix/actor.hpp>
-#include <boost/spirit/phoenix/composite.hpp>
-#include <boost/config.hpp>
-#include <boost/mpl/if.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Operators
-//
-// Lazy operators
-//
-// This class provides a mechanism for lazily evaluating operators.
-// Syntactically, a lazy operator looks like an ordinary C/C++
-// infix, prefix or postfix operator. The operator application
-// looks the same. However, unlike ordinary operators, the actual
-// operator execution is deferred. (see actor.hpp, primitives.hpp
-// and composite.hpp for an overview). Samples:
-//
-// arg1 + arg2
-// 1 + arg1 * arg2
-// 1 / -arg1
-// arg1 < 150
-//
-// T1 set of classes implement all the C++ free operators. Like
-// lazy functions (see functions.hpp), lazy operators are not
-// immediately executed when invoked. Instead, a composite (see
-// composite.hpp) object is created and returned to the caller.
-// Example:
-//
-// (arg1 + arg2) * arg3
-//
-// does nothing more than return a composite. T1 second function
-// call will evaluate the actual operators. Example:
-//
-// int i = 4, j = 5, k = 6;
-// cout << ((arg1 + arg2) * arg3)(i, j, k);
-//
-// will print out "54".
-//
-// Arbitrarily complex expressions can be lazily evaluated
-// following three simple rules:
-//
-// 1) Lazy evaluated binary operators apply when at least one
-// of the operands is an actor object (see actor.hpp and
-// primitives.hpp). Consequently, if an operand is not an actor
-// object, it is implicitly converted to an object of type
-// actor<value<T> > (where T is the original type of the
-// operand).
-//
-// 2) Lazy evaluated unary operators apply only to operands
-// which are actor objects.
-//
-// 3) The result of a lazy operator is a composite actor object
-// that can in turn apply to rule 1.
-//
-// Example:
-//
-// arg1 + 3
-//
-// is a lazy expression involving the operator+. Following rule 1,
-// lazy evaluation is triggered since arg1 is an instance of an
-// actor<argument<N> > class (see primitives.hpp). The right
-// operand <3> is implicitly converted to an actor<value<int> >.
-// The result of this binary + expression is a composite object,
-// following rule 3.
-//
-// Take note that although at least one of the operands must be a
-// valid actor class in order for lazy evaluation to take effect,
-// if this is not the case and we still want to lazily evaluate an
-// expression, we can use var(x), val(x) or cref(x) to transform
-// the operand into a valid action object (see primitives.hpp).
-// Example:
-//
-// val(1) << 3;
-//
-// Supported operators:
-//
-// Unary operators:
-//
-// prefix: ~, !, -, +, ++, --, & (reference), * (dereference)
-// postfix: ++, --
-//
-// Binary operators:
-//
-// =, [], +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
-// +, -, *, /, %, &, |, ^, <<, >>
-// ==, !=, <, >, <=, >=
-// &&, ||
-//
-// Each operator has a special tag type associated with it. For
-// example the binary + operator has a plus_op tag type associated
-// with it. This is used to specialize either the unary_operator or
-// binary_operator template classes (see unary_operator and
-// binary_operator below). Specializations of these unary_operator
-// and binary_operator are the actual workhorses that implement the
-// operations. The behavior of each lazy operator depends on these
-// unary_operator and binary_operator specializations. 'preset'
-// specializations conform to the canonical operator rules modeled
-// by the behavior of integers and pointers:
-//
-// Prefix -, + and ~ accept constant arguments and return an
-// object by value.
-//
-// The ! accept constant arguments and returns a boolean
-// result.
-//
-// The & (address-of), * (dereference) both return a reference
-// to an object.
-//
-// Prefix ++ returns a reference to its mutable argument after
-// it is incremented.
-//
-// Postfix ++ returns the mutable argument by value before it
-// is incremented.
-//
-// The += and its family accept mutable right hand side (rhs)
-// operand and return a reference to the rhs operand.
-//
-// Infix + and its family accept constant arguments and return
-// an object by value.
-//
-// The == and its family accept constant arguments and return a
-// boolean result.
-//
-// Operators && and || accept constant arguments and return a
-// boolean result and are short circuit evaluated as expected.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Operator tags
-//
-// Each C++ operator has a corresponding tag type. This is
-// used as a means for specializing the unary_operator and
-// binary_operator (see below). The tag also serves as the
-// lazy operator type compatible as a composite operation
-// see (composite.hpp).
-//
-///////////////////////////////////////////////////////////////////////////////
-
-// Unary operator tags
-
-struct negative_op; struct positive_op;
-struct logical_not_op; struct invert_op;
-struct reference_op; struct dereference_op;
-struct pre_incr_op; struct pre_decr_op;
-struct post_incr_op; struct post_decr_op;
-
-// Binary operator tags
-
-struct assign_op; struct index_op;
-struct plus_assign_op; struct minus_assign_op;
-struct times_assign_op; struct divide_assign_op; struct mod_assign_op;
-struct and_assign_op; struct or_assign_op; struct xor_assign_op;
-struct shift_l_assign_op; struct shift_r_assign_op;
-
-struct plus_op; struct minus_op;
-struct times_op; struct divide_op; struct mod_op;
-struct and_op; struct or_op; struct xor_op;
-struct shift_l_op; struct shift_r_op;
-
-struct eq_op; struct not_eq_op;
-struct lt_op; struct lt_eq_op;
-struct gt_op; struct gt_eq_op;
-struct logical_and_op; struct logical_or_op;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// unary_operator<TagT, T>
-//
-// The unary_operator class implements most of the C++ unary
-// operators. Each specialization is basically a simple static eval
-// function plus a result_type typedef that determines the return
-// type of the eval function.
-//
-// TagT is one of the unary operator tags above and T is the data
-// type (argument) involved in the operation.
-//
-// Only the behavior of C/C++ built-in types are taken into account
-// in the specializations provided below. For user-defined types,
-// these specializations may still be used provided that the
-// operator overloads of such types adhere to the standard behavior
-// of built-in types.
-//
-// T1 separate special_ops.hpp file implements more stl savvy
-// specializations. Other more specialized unary_operator
-// implementations may be defined by the client for specific
-// unary operator tags/data types.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename TagT, typename T>
-struct unary_operator;
-
-//////////////////////////////////
-template <typename T>
-struct unary_operator<negative_op, T> {
-
- typedef T const result_type;
- static result_type eval(T const& v)
- { return -v; }
-};
-
-//////////////////////////////////
-template <typename T>
-struct unary_operator<positive_op, T> {
-
- typedef T const result_type;
- static result_type eval(T const& v)
- { return +v; }
-};
-
-//////////////////////////////////
-template <typename T>
-struct unary_operator<logical_not_op, T> {
-
- typedef T const result_type;
- static result_type eval(T const& v)
- { return !v; }
-};
-
-//////////////////////////////////
-template <typename T>
-struct unary_operator<invert_op, T> {
-
- typedef T const result_type;
- static result_type eval(T const& v)
- { return ~v; }
-};
-
-//////////////////////////////////
-template <typename T>
-struct unary_operator<reference_op, T> {
-
- typedef T* result_type;
- static result_type eval(T& v)
- { return &v; }
-};
-
-//////////////////////////////////
-template <typename T>
-struct unary_operator<dereference_op, T*> {
-
- typedef T& result_type;
- static result_type eval(T* v)
- { return *v; }
-};
-
-//////////////////////////////////
-template <typename T>
-struct unary_operator<dereference_op, T* const> {
-
- typedef T& result_type;
- static result_type eval(T* const v)
- { return *v; }
-};
-
-//////////////////////////////////
-template <>
-struct unary_operator<dereference_op, nil_t> {
-
- // G++ eager template instantiation
- // somehow requires this.
- typedef nil_t result_type;
-};
-
-//////////////////////////////////
-#ifndef __BORLANDC__
-template <>
-struct unary_operator<dereference_op, nil_t const> {
-
- // G++ eager template instantiation
- // somehow requires this.
- typedef nil_t result_type;
-};
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_OPERATORS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_OPERATORS
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_operators.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_operators.hpp"
 #endif
 
-//////////////////////////////////
-template <typename T>
-struct unary_operator<pre_incr_op, T> {
-
- typedef T& result_type;
- static result_type eval(T& v)
- { return ++v; }
-};
-
-//////////////////////////////////
-template <typename T>
-struct unary_operator<pre_decr_op, T> {
-
- typedef T& result_type;
- static result_type eval(T& v)
- { return --v; }
-};
-
-//////////////////////////////////
-template <typename T>
-struct unary_operator<post_incr_op, T> {
-
- typedef T const result_type;
- static result_type eval(T& v)
- { T t(v); ++v; return t; }
-};
-
-//////////////////////////////////
-template <typename T>
-struct unary_operator<post_decr_op, T> {
-
- typedef T const result_type;
- static result_type eval(T& v)
- { T t(v); --v; return t; }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// rank<T>
-//
-// rank<T> class has a static int constant 'value' that defines the
-// absolute rank of a type. rank<T> is used to choose the result
-// type of binary operators such as +. The type with the higher
-// rank wins and is used as the operator's return type. T1 generic
-// user defined type has a very high rank and always wins when
-// compared against a user defined type. If this is not desireable,
-// one can write a rank specialization for the type.
-//
-// Take note that ranks 0..9999 are reserved for the framework.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T>
-struct rank { static int const value = INT_MAX; };
-
-template <> struct rank<void> { static int const value = 0; };
-template <> struct rank<bool> { static int const value = 10; };
-
-template <> struct rank<char> { static int const value = 20; };
-template <> struct rank<signed char> { static int const value = 20; };
-template <> struct rank<unsigned char> { static int const value = 30; };
-#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
-template <> struct rank<wchar_t> { static int const value = 40; };
-#endif // !defined(BOOST_NO_INTRINSIC_WCHAR_T)
-
-template <> struct rank<short> { static int const value = 50; };
-template <> struct rank<unsigned short> { static int const value = 60; };
-
-template <> struct rank<int> { static int const value = 70; };
-template <> struct rank<unsigned int> { static int const value = 80; };
-
-template <> struct rank<long> { static int const value = 90; };
-template <> struct rank<unsigned long> { static int const value = 100; };
-
-#ifdef BOOST_HAS_LONG_LONG
-template <> struct rank< ::boost::long_long_type> { static int const value = 110; };
-template <> struct rank< ::boost::ulong_long_type> { static int const value = 120; };
-#endif
-
-template <> struct rank<float> { static int const value = 130; };
-template <> struct rank<double> { static int const value = 140; };
-template <> struct rank<long double> { static int const value = 150; };
-
-template <typename T> struct rank<T*>
-{ static int const value = 160; };
-
-template <typename T> struct rank<T* const>
-{ static int const value = 160; };
-
-template <typename T, int N> struct rank<T[N]>
-{ static int const value = 160; };
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// higher_rank<T0, T1>
-//
-// Chooses the type (T0 or T1) with the higher rank.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T0, typename T1>
-struct higher_rank {
- typedef typename boost::mpl::if_c<
- rank<T0>::value < rank<T1>::value,
- T1, T0>::type type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// binary_operator<TagT, T0, T1>
-//
-// The binary_operator class implements most of the C++ binary
-// operators. Each specialization is basically a simple static eval
-// function plus a result_type typedef that determines the return
-// type of the eval function.
-//
-// TagT is one of the binary operator tags above T0 and T1 are the
-// (arguments') data types involved in the operation.
-//
-// Only the behavior of C/C++ built-in types are taken into account
-// in the specializations provided below. For user-defined types,
-// these specializations may still be used provided that the
-// operator overloads of such types adhere to the standard behavior
-// of built-in types.
-//
-// T1 separate special_ops.hpp file implements more stl savvy
-// specializations. Other more specialized unary_operator
-// implementations may be defined by the client for specific
-// unary operator tags/data types.
-//
-// All binary_operator except the logical_and_op and logical_or_op
-// have an eval static function that carries out the actual operation.
-// The logical_and_op and logical_or_op d are special because these
-// two operators are short-circuit evaluated.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename TagT, typename T0, typename T1>
-struct binary_operator;
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs = rhs; }
-};
-
-//////////////////////////////////
-template <typename T1>
-struct binary_operator<index_op, nil_t, T1> {
-
- // G++ eager template instantiation
- // somehow requires this.
- typedef nil_t result_type;
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<index_op, T0*, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0* ptr, T1 const& index)
- { return ptr[index]; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<index_op, T0* const, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0* const ptr, T1 const& index)
- { return ptr[index]; }
-};
-
-//////////////////////////////////
-template <typename T0, int N, typename T1>
-struct binary_operator<index_op, T0[N], T1> {
-
- typedef T0& result_type;
- static result_type eval(T0* ptr, T1 const& index)
- { return ptr[index]; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<plus_assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs += rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<minus_assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs -= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<times_assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs *= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<divide_assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs /= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<mod_assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs %= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<and_assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs &= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<or_assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs |= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<xor_assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs ^= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<shift_l_assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs <<= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<shift_r_assign_op, T0, T1> {
-
- typedef T0& result_type;
- static result_type eval(T0& lhs, T1 const& rhs)
- { return lhs >>= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<plus_op, T0, T1> {
-
- typedef typename higher_rank<T0, T1>::type const result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs + rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<minus_op, T0, T1> {
-
- typedef typename higher_rank<T0, T1>::type const result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs - rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<times_op, T0, T1> {
-
- typedef typename higher_rank<T0, T1>::type const result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs * rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<divide_op, T0, T1> {
-
- typedef typename higher_rank<T0, T1>::type const result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs / rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<mod_op, T0, T1> {
-
- typedef typename higher_rank<T0, T1>::type const result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs % rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<and_op, T0, T1> {
-
- typedef typename higher_rank<T0, T1>::type const result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs & rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<or_op, T0, T1> {
-
- typedef typename higher_rank<T0, T1>::type const result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs | rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<xor_op, T0, T1> {
-
- typedef typename higher_rank<T0, T1>::type const result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs ^ rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<shift_l_op, T0, T1> {
-
- typedef T0 const result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs << rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<shift_r_op, T0, T1> {
-
- typedef T0 const result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs >> rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<eq_op, T0, T1> {
-
- typedef bool result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs == rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<not_eq_op, T0, T1> {
-
- typedef bool result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs != rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<lt_op, T0, T1> {
-
- typedef bool result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs < rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<lt_eq_op, T0, T1> {
-
- typedef bool result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs <= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<gt_op, T0, T1> {
-
- typedef bool result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs > rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<gt_eq_op, T0, T1> {
-
- typedef bool result_type;
- static result_type eval(T0 const& lhs, T1 const& rhs)
- { return lhs >= rhs; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<logical_and_op, T0, T1> {
-
- typedef bool result_type;
- // no eval function, see comment above.
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<logical_or_op, T0, T1> {
-
- typedef bool result_type;
- // no eval function, see comment above.
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// negative lazy operator (prefix -)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct negative_op {
-
- template <typename T0>
- struct result {
-
- typedef typename unary_operator<negative_op, T0>::result_type type;
- };
-
- template <typename T0>
- typename unary_operator<negative_op, T0>::result_type
- operator()(T0& _0) const
- { return unary_operator<negative_op, T0>::eval(_0); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_unary<negative_op, BaseT>::type
-operator-(actor<BaseT> const& _0)
-{
- return impl::make_unary<negative_op, BaseT>::construct(_0);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// positive lazy operator (prefix +)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct positive_op {
-
- template <typename T0>
- struct result {
-
- typedef typename unary_operator<positive_op, T0>::result_type type;
- };
-
- template <typename T0>
- typename unary_operator<positive_op, T0>::result_type
- operator()(T0& _0) const
- { return unary_operator<positive_op, T0>::eval(_0); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_unary<positive_op, BaseT>::type
-operator+(actor<BaseT> const& _0)
-{
- return impl::make_unary<positive_op, BaseT>::construct(_0);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// logical not lazy operator (prefix !)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct logical_not_op {
-
- template <typename T0>
- struct result {
-
- typedef typename unary_operator<logical_not_op, T0>::result_type type;
- };
-
- template <typename T0>
- typename unary_operator<logical_not_op, T0>::result_type
- operator()(T0& _0) const
- { return unary_operator<logical_not_op, T0>::eval(_0); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_unary<logical_not_op, BaseT>::type
-operator!(actor<BaseT> const& _0)
-{
- return impl::make_unary<logical_not_op, BaseT>::construct(_0);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// invert lazy operator (prefix ~)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct invert_op {
-
- template <typename T0>
- struct result {
-
- typedef typename unary_operator<invert_op, T0>::result_type type;
- };
-
- template <typename T0>
- typename unary_operator<invert_op, T0>::result_type
- operator()(T0& _0) const
- { return unary_operator<invert_op, T0>::eval(_0); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_unary<invert_op, BaseT>::type
-operator~(actor<BaseT> const& _0)
-{
- return impl::make_unary<invert_op, BaseT>::construct(_0);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// reference lazy operator (prefix &)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct reference_op {
-
- template <typename T0>
- struct result {
-
- typedef typename unary_operator<reference_op, T0>::result_type type;
- };
-
- template <typename T0>
- typename unary_operator<reference_op, T0>::result_type
- operator()(T0& _0) const
- { return unary_operator<reference_op, T0>::eval(_0); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_unary<reference_op, BaseT>::type
-operator&(actor<BaseT> const& _0)
-{
- return impl::make_unary<reference_op, BaseT>::construct(_0);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// dereference lazy operator (prefix *)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct dereference_op {
-
- template <typename T0>
- struct result {
-
- typedef typename unary_operator<dereference_op, T0>::result_type type;
- };
-
- template <typename T0>
- typename unary_operator<dereference_op, T0>::result_type
- operator()(T0& _0) const
- { return unary_operator<dereference_op, T0>::eval(_0); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_unary<dereference_op, BaseT>::type
-operator*(actor<BaseT> const& _0)
-{
- return impl::make_unary<dereference_op, BaseT>::construct(_0);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// pre increment lazy operator (prefix ++)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct pre_incr_op {
-
- template <typename T0>
- struct result {
-
- typedef typename unary_operator<pre_incr_op, T0>::result_type type;
- };
-
- template <typename T0>
- typename unary_operator<pre_incr_op, T0>::result_type
- operator()(T0& _0) const
- { return unary_operator<pre_incr_op, T0>::eval(_0); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_unary<pre_incr_op, BaseT>::type
-operator++(actor<BaseT> const& _0)
-{
- return impl::make_unary<pre_incr_op, BaseT>::construct(_0);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// pre decrement lazy operator (prefix --)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct pre_decr_op {
-
- template <typename T0>
- struct result {
-
- typedef typename unary_operator<pre_decr_op, T0>::result_type type;
- };
-
- template <typename T0>
- typename unary_operator<pre_decr_op, T0>::result_type
- operator()(T0& _0) const
- { return unary_operator<pre_decr_op, T0>::eval(_0); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_unary<pre_decr_op, BaseT>::type
-operator--(actor<BaseT> const& _0)
-{
- return impl::make_unary<pre_decr_op, BaseT>::construct(_0);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// post increment lazy operator (postfix ++)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct post_incr_op {
-
- template <typename T0>
- struct result {
-
- typedef typename unary_operator<post_incr_op, T0>::result_type type;
- };
-
- template <typename T0>
- typename unary_operator<post_incr_op, T0>::result_type
- operator()(T0& _0) const
- { return unary_operator<post_incr_op, T0>::eval(_0); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_unary<post_incr_op, BaseT>::type
-operator++(actor<BaseT> const& _0, int)
-{
- return impl::make_unary<post_incr_op, BaseT>::construct(_0);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// post decrement lazy operator (postfix --)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct post_decr_op {
-
- template <typename T0>
- struct result {
-
- typedef typename unary_operator<post_decr_op, T0>::result_type type;
- };
-
- template <typename T0>
- typename unary_operator<post_decr_op, T0>::result_type
- operator()(T0& _0) const
- { return unary_operator<post_decr_op, T0>::eval(_0); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_unary<post_decr_op, BaseT>::type
-operator--(actor<BaseT> const& _0, int)
-{
- return impl::make_unary<post_decr_op, BaseT>::construct(_0);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// assignment lazy operator (infix =)
-// The acual lazy operator is a member of the actor class.
-//
-///////////////////////////////////////////////////////////////////////////////
-struct assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-template <typename B>
-inline typename impl::make_binary1<assign_op, BaseT, B>::type
-actor<BaseT>::operator=(B const& _1) const
-{
- return impl::make_binary1<assign_op, BaseT, B>::construct(*this, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// index lazy operator (array index [])
-// The acual lazy operator is a member of the actor class.
-//
-///////////////////////////////////////////////////////////////////////////////
-struct index_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<index_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<index_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<index_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-template <typename B>
-inline typename impl::make_binary1<index_op, BaseT, B>::type
-actor<BaseT>::operator[](B const& _1) const
-{
- return impl::make_binary1<index_op, BaseT, B>::construct(*this, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// plus assign lazy operator (infix +=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct plus_assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<plus_assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<plus_assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<plus_assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<plus_assign_op, BaseT, T1>::type
-operator+=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<plus_assign_op, BaseT, T1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// minus assign lazy operator (infix -=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct minus_assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<minus_assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<minus_assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<minus_assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<minus_assign_op, BaseT, T1>::type
-operator-=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<minus_assign_op, BaseT, T1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// times assign lazy operator (infix *=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct times_assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<times_assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<times_assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<times_assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<times_assign_op, BaseT, T1>::type
-operator*=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<times_assign_op, BaseT, T1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// divide assign lazy operator (infix /=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct divide_assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<divide_assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<divide_assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<divide_assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<divide_assign_op, BaseT, T1>::type
-operator/=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<divide_assign_op, BaseT, T1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// mod assign lazy operator (infix %=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct mod_assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<mod_assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<mod_assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<mod_assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<mod_assign_op, BaseT, T1>::type
-operator%=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<mod_assign_op, BaseT, T1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// and assign lazy operator (infix &=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct and_assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<and_assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<and_assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<and_assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<and_assign_op, BaseT, T1>::type
-operator&=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<and_assign_op, BaseT, T1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// or assign lazy operator (infix |=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct or_assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<or_assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<or_assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<or_assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<or_assign_op, BaseT, T1>::type
-operator|=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<or_assign_op, BaseT, T1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// xor assign lazy operator (infix ^=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct xor_assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<xor_assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<xor_assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<xor_assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<xor_assign_op, BaseT, T1>::type
-operator^=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<xor_assign_op, BaseT, T1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// shift left assign lazy operator (infix <<=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct shift_l_assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<shift_l_assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<shift_l_assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<shift_l_assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<shift_l_assign_op, BaseT, T1>::type
-operator<<=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<shift_l_assign_op, BaseT, T1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// shift right assign lazy operator (infix >>=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct shift_r_assign_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<shift_r_assign_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<shift_r_assign_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<shift_r_assign_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<shift_r_assign_op, BaseT, T1>::type
-operator>>=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<shift_r_assign_op, BaseT, T1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// plus lazy operator (infix +)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct plus_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<plus_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<plus_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<plus_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<plus_op, BaseT, T1>::type
-operator+(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<plus_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<plus_op, T0, BaseT>::type
-operator+(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<plus_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<plus_op, BaseT0, BaseT1>::type
-operator+(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<plus_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// minus lazy operator (infix -)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct minus_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<minus_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<minus_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<minus_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<minus_op, BaseT, T1>::type
-operator-(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<minus_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<minus_op, T0, BaseT>::type
-operator-(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<minus_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<minus_op, BaseT0, BaseT1>::type
-operator-(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<minus_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// times lazy operator (infix *)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct times_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<times_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<times_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<times_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<times_op, BaseT, T1>::type
-operator*(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<times_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<times_op, T0, BaseT>::type
-operator*(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<times_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<times_op, BaseT0, BaseT1>::type
-operator*(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<times_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// divide lazy operator (infix /)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct divide_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<divide_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<divide_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<divide_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<divide_op, BaseT, T1>::type
-operator/(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<divide_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<divide_op, T0, BaseT>::type
-operator/(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<divide_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<divide_op, BaseT0, BaseT1>::type
-operator/(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<divide_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// mod lazy operator (infix %)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct mod_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<mod_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<mod_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<mod_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<mod_op, BaseT, T1>::type
-operator%(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<mod_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<mod_op, T0, BaseT>::type
-operator%(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<mod_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<mod_op, BaseT0, BaseT1>::type
-operator%(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<mod_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// and lazy operator (infix &)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct and_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<and_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<and_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<and_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<and_op, BaseT, T1>::type
-operator&(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<and_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<and_op, T0, BaseT>::type
-operator&(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<and_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<and_op, BaseT0, BaseT1>::type
-operator&(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<and_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// or lazy operator (infix |)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct or_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<or_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<or_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<or_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<or_op, BaseT, T1>::type
-operator|(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<or_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<or_op, T0, BaseT>::type
-operator|(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<or_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<or_op, BaseT0, BaseT1>::type
-operator|(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<or_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// xor lazy operator (infix ^)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct xor_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<xor_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<xor_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<xor_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<xor_op, BaseT, T1>::type
-operator^(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<xor_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<xor_op, T0, BaseT>::type
-operator^(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<xor_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<xor_op, BaseT0, BaseT1>::type
-operator^(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<xor_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// shift left lazy operator (infix <<)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct shift_l_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<shift_l_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<shift_l_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<shift_l_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<shift_l_op, BaseT, T1>::type
-operator<<(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<shift_l_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<shift_l_op, T0, BaseT>::type
-operator<<(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<shift_l_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<shift_l_op, BaseT0, BaseT1>::type
-operator<<(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<shift_l_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// shift right lazy operator (infix >>)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct shift_r_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<shift_r_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<shift_r_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<shift_r_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<shift_r_op, BaseT, T1>::type
-operator>>(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<shift_r_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<shift_r_op, T0, BaseT>::type
-operator>>(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<shift_r_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<shift_r_op, BaseT0, BaseT1>::type
-operator>>(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<shift_r_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// equal lazy operator (infix ==)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct eq_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<eq_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<eq_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<eq_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<eq_op, BaseT, T1>::type
-operator==(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<eq_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<eq_op, T0, BaseT>::type
-operator==(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<eq_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<eq_op, BaseT0, BaseT1>::type
-operator==(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<eq_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// not equal lazy operator (infix !=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct not_eq_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<not_eq_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<not_eq_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<not_eq_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<not_eq_op, BaseT, T1>::type
-operator!=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<not_eq_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<not_eq_op, T0, BaseT>::type
-operator!=(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<not_eq_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<not_eq_op, BaseT0, BaseT1>::type
-operator!=(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<not_eq_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// less than lazy operator (infix <)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct lt_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<lt_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<lt_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<lt_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<lt_op, BaseT, T1>::type
-operator<(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<lt_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<lt_op, T0, BaseT>::type
-operator<(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<lt_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<lt_op, BaseT0, BaseT1>::type
-operator<(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<lt_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// less than equal lazy operator (infix <=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct lt_eq_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<lt_eq_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<lt_eq_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<lt_eq_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<lt_eq_op, BaseT, T1>::type
-operator<=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<lt_eq_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<lt_eq_op, T0, BaseT>::type
-operator<=(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<lt_eq_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<lt_eq_op, BaseT0, BaseT1>::type
-operator<=(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<lt_eq_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// greater than lazy operator (infix >)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct gt_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<gt_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<gt_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<gt_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<gt_op, BaseT, T1>::type
-operator>(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<gt_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<gt_op, T0, BaseT>::type
-operator>(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<gt_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<gt_op, BaseT0, BaseT1>::type
-operator>(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<gt_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// greater than equal lazy operator (infix >=)
-//
-///////////////////////////////////////////////////////////////////////////////
-struct gt_eq_op {
-
- template <typename T0, typename T1>
- struct result {
-
- typedef typename binary_operator<gt_eq_op, T0, T1>
- ::result_type type;
- };
-
- template <typename T0, typename T1>
- typename binary_operator<gt_eq_op, T0, T1>::result_type
- operator()(T0& _0, T1& _1) const
- { return binary_operator<gt_eq_op, T0, T1>::eval(_0, _1); }
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline typename impl::make_binary1<gt_eq_op, BaseT, T1>::type
-operator>=(actor<BaseT> const& _0, T1 CREF _1)
-{
- return impl::make_binary1<gt_eq_op, BaseT, T1>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline typename impl::make_binary2<gt_eq_op, T0, BaseT>::type
-operator>=(T0 CREF _0, actor<BaseT> const& _1)
-{
- return impl::make_binary2<gt_eq_op, T0, BaseT>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline typename impl::make_binary3<gt_eq_op, BaseT0, BaseT1>::type
-operator>=(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return impl::make_binary3<gt_eq_op, BaseT0, BaseT1>::construct(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// logical and lazy operator (infix &&)
-//
-// The logical_and_composite class and its corresponding generators are
-// provided to allow short-circuit evaluation of the operator's
-// operands.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename A0, typename A1>
-struct logical_and_composite {
-
- typedef logical_and_composite<A0, A1> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename binary_operator<logical_and_op,
- typename actor_result<A0, TupleT>::plain_type,
- typename actor_result<A1, TupleT>::plain_type
- >::result_type type;
- };
-
- logical_and_composite(A0 const& _0, A1 const& _1)
- : a0(_0), a1(_1) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- return a0.eval(args) && a1.eval(args);
- }
-
- A0 a0; A1 a1; // actors
-};
-
-#if !(defined(__ICL) && __ICL <= 500)
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline actor<logical_and_composite
-<actor<BaseT>, typename as_actor<T1>::type> >
-operator&&(actor<BaseT> const& _0, T1 CREF _1)
-{
- return logical_and_composite
- <actor<BaseT>, typename as_actor<T1>::type>
- (_0, as_actor<T1>::convert(_1));
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline actor<logical_and_composite
-<typename as_actor<T0>::type, actor<BaseT> > >
-operator&&(T0 CREF _0, actor<BaseT> const& _1)
-{
- return logical_and_composite
- <typename as_actor<T0>::type, actor<BaseT> >
- (as_actor<T0>::convert(_0), _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline actor<logical_and_composite
-<actor<BaseT0>, actor<BaseT1> > >
-operator&&(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return logical_and_composite
- <actor<BaseT0>, actor<BaseT1> >
- (_0, _1);
-}
-#else
-//////////////////////////////////
-template <typename T0, typename T1>
-inline actor<logical_and_composite
-<typename as_actor<T0>::type, typename as_actor<T1>::type> >
-operator&&(T0 CREF _0, T1 CREF _1)
-{
- return logical_and_composite
- <typename as_actor<T0>::type, typename as_actor<T1>::type>
- (as_actor<T0>::convert(_0), as_actor<T1>::convert(_1));
-}
-#endif // !(__ICL && __ICL <= 500)
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// logical or lazy operator (infix ||)
-//
-// The logical_or_composite class and its corresponding generators are
-// provided to allow short-circuit evaluation of the operator's
-// operands.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename A0, typename A1>
-struct logical_or_composite {
-
- typedef logical_or_composite<A0, A1> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef typename binary_operator<logical_or_op,
- typename actor_result<A0, TupleT>::plain_type,
- typename actor_result<A1, TupleT>::plain_type
- >::result_type type;
- };
-
- logical_or_composite(A0 const& _0, A1 const& _1)
- : a0(_0), a1(_1) {}
-
- template <typename TupleT>
- typename actor_result<self_t, TupleT>::type
- eval(TupleT const& args) const
- {
- return a0.eval(args) || a1.eval(args);
- }
-
- A0 a0; A1 a1; // actors
-};
-
-//////////////////////////////////
-template <typename BaseT, typename T1>
-inline actor<logical_or_composite
-<actor<BaseT>, typename as_actor<T1>::type> >
-operator||(actor<BaseT> const& _0, T1 CREF _1)
-{
- return logical_or_composite
- <actor<BaseT>, typename as_actor<T1>::type>
- (_0, as_actor<T1>::convert(_1));
-}
-
-//////////////////////////////////
-template <typename T0, typename BaseT>
-inline actor<logical_or_composite
-<typename as_actor<T0>::type, actor<BaseT> > >
-operator||(T0 CREF _0, actor<BaseT> const& _1)
-{
- return logical_or_composite
- <typename as_actor<T0>::type, actor<BaseT> >
- (as_actor<T0>::convert(_0), _1);
-}
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline actor<logical_or_composite
-<actor<BaseT0>, actor<BaseT1> > >
-operator||(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return logical_or_composite
- <actor<BaseT0>, actor<BaseT1> >
- (_0, _1);
-}
-
-} // namespace phoenix
+#include <boost/spirit/include/phoenix1_operators.hpp>
 
-#undef CREF
 #endif

Modified: branches/CMake/release/boost/spirit/phoenix/primitives.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/primitives.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/primitives.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,248 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2002 Joel de Guzman
-
- Use, modification and distribution is subject to the 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 PHOENIX_PRIMITIVES_HPP
-#define PHOENIX_PRIMITIVES_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/phoenix/actor.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// argument class
-//
-// Lazy arguments
-//
-// An actor base class that extracts and returns the Nth argument
-// from the argument list passed in the 'args' tuple in the eval
-// member function (see actor.hpp). There are some predefined
-// argument constants that can be used as actors (arg1..argN).
-//
-// The argument actor is a place-holder for the actual arguments
-// passed by the client. For example, wherever arg1 is seen placed
-// in a lazy function (see functions.hpp) or lazy operator (see
-// operators.hpp), this will be replaced by the actual first
-// argument in the actual function evaluation. Argument actors are
-// essentially lazy arguments. A lazy argument is a full actor in
-// its own right and can be evaluated through the actor's operator().
-//
-// Example:
-//
-// char c = 'A';
-// int i = 123;
-// const char* s = "Hello World";
-//
-// cout << arg1(c) << ' ';
-// cout << arg1(i, s) << ' ';
-// cout << arg2(i, s) << ' ';
-//
-// will print out "A 123 Hello World"
-//
-///////////////////////////////////////////////////////////////////////////////
-template <int N>
-struct argument {
-
- template <typename TupleT>
- struct result { typedef typename tuple_element<N, TupleT>::type type; };
-
- template <typename TupleT>
- typename tuple_element<N, TupleT>::type
- eval(TupleT const& args) const
- {
- return args[tuple_index<N>()];
- }
-};
-
-//////////////////////////////////
-actor<argument<0> > const arg1 = argument<0>();
-actor<argument<1> > const arg2 = argument<1>();
-actor<argument<2> > const arg3 = argument<2>();
-
-#if PHOENIX_LIMIT > 3
-actor<argument<3> > const arg4 = argument<3>();
-actor<argument<4> > const arg5 = argument<4>();
-actor<argument<5> > const arg6 = argument<5>();
-
-#if PHOENIX_LIMIT > 6
-actor<argument<6> > const arg7 = argument<6>();
-actor<argument<7> > const arg8 = argument<7>();
-actor<argument<8> > const arg9 = argument<8>();
-
-#if PHOENIX_LIMIT > 9
-actor<argument<9> > const arg10 = argument<9>();
-actor<argument<10> > const arg11 = argument<10>();
-actor<argument<11> > const arg12 = argument<11>();
-
-#if PHOENIX_LIMIT > 12
-actor<argument<12> > const arg13 = argument<12>();
-actor<argument<13> > const arg14 = argument<13>();
-actor<argument<14> > const arg15 = argument<14>();
-
-#endif
-#endif
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_PRIMITIVES
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PRIMITIVES
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_primitives.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_primitives.hpp"
 #endif
-#endif
-///////////////////////////////////////////////////////////////////////////////
-//
-// value class
-//
-// Lazy values
-//
-// A bound actual parameter is kept in a value class for deferred
-// access later when needed. A value object is immutable. Value
-// objects are typically created through the val(x) free function
-// which returns a value<T> with T deduced from the type of x. x is
-// held in the value<T> object by value.
-//
-// Lazy values are actors. As such, lazy values can be evaluated
-// through the actor's operator(). Such invocation gives the value's
-// identity. Example:
-//
-// cout << val(3)() << val("Hello World")();
-//
-// prints out "3 Hello World"
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T>
-struct value {
-
- typedef typename boost::remove_reference<T>::type plain_t;
-
- template <typename TupleT>
- struct result { typedef plain_t const type; };
-
- value(plain_t val_)
- : val(val_) {}
-
- template <typename TupleT>
- plain_t const
- eval(TupleT const& /*args*/) const
- {
- return val;
- }
-
- plain_t val;
-};
-
-//////////////////////////////////
-template <typename T>
-inline actor<value<T> > const
-val(T v)
-{
- return value<T>(v);
-}
-
-//////////////////////////////////
-template <typename BaseT>
-void
-val(actor<BaseT> const& v); // This is undefined and not allowed.
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Arbitrary types T are typically converted to a actor<value<T> >
-// (see as_actor<T> in actor.hpp). A specialization is also provided
-// for arrays. T[N] arrays are converted to actor<value<T const*> >.
-//
-///////////////////////////////////////////////////////////////////////////
-template <typename T>
-struct as_actor {
-
- typedef actor<value<T> > type;
- static type convert(T const& x)
- { return value<T>(x); }
-};
-
-//////////////////////////////////
-template <typename T, int N>
-struct as_actor<T[N]> {
-
- typedef actor<value<T const*> > type;
- static type convert(T const x[N])
- { return value<T const*>(x); }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// variable class
-//
-// Lazy variables
-//
-// A bound actual parameter may also be held by non-const reference
-// in a variable class for deferred access later when needed. A
-// variable object is mutable, i.e. its referenced variable can be
-// modified. Variable objects are typically created through the
-// var(x) free function which returns a variable<T> with T deduced
-// from the type of x. x is held in the value<T> object by
-// reference.
-//
-// Lazy variables are actors. As such, lazy variables can be
-// evaluated through the actor's operator(). Such invocation gives
-// the variables's identity. Example:
-//
-// int i = 3;
-// char const* s = "Hello World";
-// cout << var(i)() << var(s)();
-//
-// prints out "3 Hello World"
-//
-// Another free function const_(x) may also be used. const_(x) creates
-// a variable<T const&> object using a constant reference.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T>
-struct variable {
-
- template <typename TupleT>
- struct result { typedef T& type; };
-
- variable(T& var_)
- : var(var_) {}
-
- template <typename TupleT>
- T&
- eval(TupleT const& /*args*/) const
- {
- return var;
- }
-
- T& var;
-};
-
-//////////////////////////////////
-template <typename T>
-inline actor<variable<T> > const
-var(T& v)
-{
- return variable<T>(v);
-}
-
-//////////////////////////////////
-template <typename T>
-inline actor<variable<T const> > const
-const_(T const& v)
-{
- return variable<T const>(v);
-}
-
-//////////////////////////////////
-template <typename BaseT>
-void
-var(actor<BaseT> const& v); // This is undefined and not allowed.
-
-//////////////////////////////////
-template <typename BaseT>
-void
-const_(actor<BaseT> const& v); // This is undefined and not allowed.
 
-///////////////////////////////////////////////////////////////////////////////
-} // namespace phoenix
+#include <boost/spirit/include/phoenix1_primitives.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/phoenix/special_ops.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/special_ops.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/special_ops.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,342 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2002 Joel de Guzman
-
- Use, modification and distribution is subject to the 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 PHOENIX_SPECIAL_OPS_HPP
-#define PHOENIX_SPECIAL_OPS_HPP
-
-#include <boost/config.hpp>
-#ifdef BOOST_NO_STRINGSTREAM
-#include <strstream>
-#define PHOENIX_SSTREAM strstream
-#else
-#include <sstream>
-#define PHOENIX_SSTREAM stringstream
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/phoenix/operators.hpp>
-#include <iosfwd>
-
-///////////////////////////////////////////////////////////////////////////////
-#if defined(_STLPORT_VERSION) && defined(__STL_USE_OWN_NAMESPACE)
-#define PHOENIX_STD _STLP_STD
-#define PHOENIX_NO_STD_NAMESPACE
-#else
-#define PHOENIX_STD std
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//#if !defined(PHOENIX_NO_STD_NAMESPACE)
-namespace PHOENIX_STD
-{
-//#endif
-
- template<typename T> class complex;
-
-//#if !defined(PHOENIX_NO_STD_NAMESPACE)
-}
-//#endif
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix
-{
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The following specializations take into account the C++ standard
-// library components. There are a couple of issues that have to be
-// dealt with to enable lazy operator overloads for the standard
-// library classes.
-//
-// *iostream (e.g. cout, cin, strstream/ stringstream) uses non-
-// canonical shift operator overloads where the lhs is taken in
-// by reference.
-//
-// *I/O manipulators overloads for the RHS of the << and >>
-// operators.
-//
-// *STL iterators can be objects that conform to pointer semantics.
-// Some operators need to be specialized for these.
-//
-// *std::complex is given a rank (see rank class in operators.hpp)
-//
-///////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// specialization for rank<std::complex>
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T> struct rank<PHOENIX_STD::complex<T> >
-{ static int const value = 170 + rank<T>::value; };
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// specializations for std::istream
-//
-///////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUC__) && (__GNUC__ < 3)
- #if defined(_STLPORT_VERSION)
- #define PHOENIX_ISTREAM _IO_istream_withassign
- #else
- #define PHOENIX_ISTREAM PHOENIX_STD::_IO_istream_withassign
- #endif
-#else
-// #if (defined(__ICL) && defined(_STLPORT_VERSION))
-// #define PHOENIX_ISTREAM istream_withassign
-// #else
- #define PHOENIX_ISTREAM PHOENIX_STD::istream
-// #endif
-#endif
-
-//////////////////////////////////
-#if defined(__GNUC__) && (__GNUC__ < 3)
-// || (defined(__ICL) && defined(_STLPORT_VERSION))
-template <typename T1>
-struct binary_operator<shift_r_op, PHOENIX_ISTREAM, T1>
-{
- typedef PHOENIX_STD::istream& result_type;
- static result_type eval(PHOENIX_STD::istream& out, T1& rhs)
- { return out >> rhs; }
-};
-#endif
-
-//////////////////////////////////
-template <typename T1>
-struct binary_operator<shift_r_op, PHOENIX_STD::istream, T1>
-{
- typedef PHOENIX_STD::istream& result_type;
- static result_type eval(PHOENIX_STD::istream& out, T1& rhs)
- { return out >> rhs; }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_binary3
- <shift_r_op, variable<PHOENIX_ISTREAM>, BaseT>::type
-operator>>(PHOENIX_ISTREAM& _0, actor<BaseT> const& _1)
-{
- return impl::make_binary3
- <shift_r_op, variable<PHOENIX_ISTREAM>, BaseT>
- ::construct(var(_0), _1);
-}
-
-#undef PHOENIX_ISTREAM
-///////////////////////////////////////////////////////////////////////////////
-//
-// specializations for std::ostream
-//
-///////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUC__) && (__GNUC__ < 3)
- #if defined(_STLPORT_VERSION)
- #define PHOENIX_OSTREAM _IO_ostream_withassign
- #else
- #define PHOENIX_OSTREAM PHOENIX_STD::_IO_ostream_withassign
- #endif
-#else
-// #if (defined(__ICL) && defined(_STLPORT_VERSION))
-// #define PHOENIX_OSTREAM ostream_withassign
-// #else
- #define PHOENIX_OSTREAM PHOENIX_STD::ostream
-// #endif
-#endif
-
-//////////////////////////////////
-#if defined(__GNUC__) && (__GNUC__ < 3)
-// || (defined(__ICL) && defined(_STLPORT_VERSION))
-template <typename T1>
-struct binary_operator<shift_l_op, PHOENIX_OSTREAM, T1>
-{
- typedef PHOENIX_STD::ostream& result_type;
- static result_type eval(PHOENIX_STD::ostream& out, T1 const& rhs)
- { return out << rhs; }
-};
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_SPECIAL_OPS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SPECIAL_OPS
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_special_ops.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_special_ops.hpp"
 #endif
 
-//////////////////////////////////
-template <typename T1>
-struct binary_operator<shift_l_op, PHOENIX_STD::ostream, T1>
-{
- typedef PHOENIX_STD::ostream& result_type;
- static result_type eval(PHOENIX_STD::ostream& out, T1 const& rhs)
- { return out << rhs; }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_binary3
- <shift_l_op, variable<PHOENIX_OSTREAM>, BaseT>::type
-operator<<(PHOENIX_OSTREAM& _0, actor<BaseT> const& _1)
-{
- return impl::make_binary3
- <shift_l_op, variable<PHOENIX_OSTREAM>, BaseT>
- ::construct(var(_0), _1);
-}
-
-#undef PHOENIX_OSTREAM
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// specializations for std::strstream / stringstream
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T1>
-struct binary_operator<shift_r_op, PHOENIX_STD::PHOENIX_SSTREAM, T1>
-{
- typedef PHOENIX_STD::istream& result_type;
- static result_type eval(PHOENIX_STD::istream& out, T1& rhs)
- { return out >> rhs; }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_binary3
- <shift_r_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>::type
-operator>>(PHOENIX_STD::PHOENIX_SSTREAM& _0, actor<BaseT> const& _1)
-{
- return impl::make_binary3
- <shift_r_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>
- ::construct(var(_0), _1);
-}
-
-//////////////////////////////////
-template <typename T1>
-struct binary_operator<shift_l_op, PHOENIX_STD::PHOENIX_SSTREAM, T1>
-{
- typedef PHOENIX_STD::ostream& result_type;
- static result_type eval(PHOENIX_STD::ostream& out, T1 const& rhs)
- { return out << rhs; }
-};
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_binary3
- <shift_l_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>::type
-operator<<(PHOENIX_STD::PHOENIX_SSTREAM& _0, actor<BaseT> const& _1)
-{
- return impl::make_binary3
- <shift_l_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>
- ::construct(var(_0), _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// I/O manipulator specializations
-//
-///////////////////////////////////////////////////////////////////////////////
-#if (!defined(__GNUC__) || (__GNUC__ > 2))
-// && !(defined(__ICL) && defined(_STLPORT_VERSION))
-
-typedef PHOENIX_STD::ios_base& (*iomanip_t)(PHOENIX_STD::ios_base&);
-typedef PHOENIX_STD::istream& (*imanip_t)(PHOENIX_STD::istream&);
-typedef PHOENIX_STD::ostream& (*omanip_t)(PHOENIX_STD::ostream&);
-
-#if defined(__BORLANDC__)
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Borland does not like i/o manipulators functions such as endl to
-// be the rhs of a lazy << operator (Borland incorrectly reports
-// ambiguity). To get around the problem, we provide function
-// pointer versions of the same name with a single trailing
-// underscore.
-//
-// You can use the same trick for other i/o manipulators.
-// Alternatively, you can prefix the manipulator with a '&'
-// operator. Example:
-//
-// cout << arg1 << &endl
-//
-///////////////////////////////////////////////////////////////////////////////
-
-imanip_t ws_ = &PHOENIX_STD::ws;
-iomanip_t dec_ = &PHOENIX_STD::dec;
-iomanip_t hex_ = &PHOENIX_STD::hex;
-iomanip_t oct_ = &PHOENIX_STD::oct;
-omanip_t endl_ = &PHOENIX_STD::endl;
-omanip_t ends_ = &PHOENIX_STD::ends;
-omanip_t flush_ = &PHOENIX_STD::flush;
-
-#else // __BORLANDC__
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The following are overloads for I/O manipulators.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_binary1<shift_l_op, BaseT, imanip_t>::type
-operator>>(actor<BaseT> const& _0, imanip_t _1)
-{
- return impl::make_binary1<shift_l_op, BaseT, imanip_t>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_binary1<shift_l_op, BaseT, iomanip_t>::type
-operator>>(actor<BaseT> const& _0, iomanip_t _1)
-{
- return impl::make_binary1<shift_l_op, BaseT, iomanip_t>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_binary1<shift_l_op, BaseT, omanip_t>::type
-operator<<(actor<BaseT> const& _0, omanip_t _1)
-{
- return impl::make_binary1<shift_l_op, BaseT, omanip_t>::construct(_0, _1);
-}
-
-//////////////////////////////////
-template <typename BaseT>
-inline typename impl::make_binary1<shift_l_op, BaseT, iomanip_t>::type
-operator<<(actor<BaseT> const& _0, iomanip_t _1)
-{
- return impl::make_binary1<shift_l_op, BaseT, iomanip_t>::construct(_0, _1);
-}
-
-#endif // __BORLANDC__
-#endif // !defined(__GNUC__) || (__GNUC__ > 2)
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// specializations for stl iterators and containers
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T>
-struct unary_operator<dereference_op, T>
-{
- typedef typename T::reference result_type;
- static result_type eval(T const& iter)
- { return *iter; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<index_op, T0, T1>
-{
- typedef typename T0::reference result_type;
- static result_type eval(T0& container, T1 const& index)
- { return container[index]; }
-};
-
-//////////////////////////////////
-template <typename T0, typename T1>
-struct binary_operator<index_op, T0 const, T1>
-{
- typedef typename T0::const_reference result_type;
- static result_type eval(T0 const& container, T1 const& index)
- { return container[index]; }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-} // namespace phoenix
+#include <boost/spirit/include/phoenix1_special_ops.hpp>
 
-#undef PHOENIX_SSTREAM
-#undef PHOENIX_STD
 #endif

Modified: branches/CMake/release/boost/spirit/phoenix/statements.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/statements.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/statements.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,444 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2002 Joel de Guzman
-
- Use, modification and distribution is subject to the 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 PHOENIX_STATEMENTS_HPP
-#define PHOENIX_STATEMENTS_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/phoenix/composite.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// sequential_composite
-//
-// Two or more actors separated by the comma generates a
-// sequential_composite which is a composite actor. Example:
-//
-// actor,
-// actor,
-// actor
-//
-// The actors are evaluated sequentially. The result type of this
-// is void. Note that the last actor should not have a trailing
-// comma.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename A0, typename A1>
-struct sequential_composite {
-
- typedef sequential_composite<A0, A1> self_t;
-
- template <typename TupleT>
- struct result { typedef void type; };
-
- sequential_composite(A0 const& _0, A1 const& _1)
- : a0(_0), a1(_1) {}
-
- template <typename TupleT>
- void
- eval(TupleT const& args) const
- {
- a0.eval(args);
- a1.eval(args);
- }
-
- A0 a0; A1 a1; // actors
-};
-
-//////////////////////////////////
-template <typename BaseT0, typename BaseT1>
-inline actor<sequential_composite<actor<BaseT0>, actor<BaseT1> > >
-operator,(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
-{
- return sequential_composite<actor<BaseT0>, actor<BaseT1> >(_0, _1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// if_then_else_composite
-//
-// This composite has two (2) forms:
-//
-// if_(condition)
-// [
-// statement
-// ]
-//
-// and
-//
-// if_(condition)
-// [
-// true_statement
-// ]
-// .else_
-// [
-// false_statement
-// ]
-//
-// where condition is an actor that evaluates to bool. If condition
-// is true, the true_statement (again an actor) is executed
-// otherwise, the false_statement (another actor) is executed. The
-// result type of this is void. Note the trailing underscore after
-// if_ and the the leading dot and the trailing underscore before
-// and after .else_.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CondT, typename ThenT, typename ElseT>
-struct if_then_else_composite {
-
- typedef if_then_else_composite<CondT, ThenT, ElseT> self_t;
-
- template <typename TupleT>
- struct result {
-
- typedef void type;
- };
-
- if_then_else_composite(
- CondT const& cond_,
- ThenT const& then_,
- ElseT const& else__)
- : cond(cond_), then(then_), else_(else__) {}
-
- template <typename TupleT>
- void eval(TupleT const& args) const
- {
- if (cond.eval(args))
- then.eval(args);
- else
- else_.eval(args);
- }
-
- CondT cond; ThenT then; ElseT else_; // actors
-};
-
-//////////////////////////////////
-template <typename CondT, typename ThenT>
-struct else_gen {
-
- else_gen(CondT const& cond_, ThenT const& then_)
- : cond(cond_), then(then_) {}
-
- template <typename ElseT>
- actor<if_then_else_composite<CondT, ThenT,
- typename as_actor<ElseT>::type> >
- operator[](ElseT const& else_)
- {
- typedef if_then_else_composite<CondT, ThenT,
- typename as_actor<ElseT>::type>
- result;
-
- return result(cond, then, as_actor<ElseT>::convert(else_));
- }
-
- CondT cond; ThenT then;
-};
-
-//////////////////////////////////
-template <typename CondT, typename ThenT>
-struct if_then_composite {
-
- typedef if_then_composite<CondT, ThenT> self_t;
-
- template <typename TupleT>
- struct result { typedef void type; };
-
- if_then_composite(CondT const& cond_, ThenT const& then_)
- : cond(cond_), then(then_), else_(cond, then) {}
-
- template <typename TupleT>
- void eval(TupleT const& args) const
- {
- if (cond.eval(args))
- then.eval(args);
- }
-
- CondT cond; ThenT then; // actors
- else_gen<CondT, ThenT> else_;
-};
-
-//////////////////////////////////
-template <typename CondT>
-struct if_gen {
-
- if_gen(CondT const& cond_)
- : cond(cond_) {}
-
- template <typename ThenT>
- actor<if_then_composite<
- typename as_actor<CondT>::type,
- typename as_actor<ThenT>::type> >
- operator[](ThenT const& then) const
- {
- typedef if_then_composite<
- typename as_actor<CondT>::type,
- typename as_actor<ThenT>::type>
- result;
-
- return result(
- as_actor<CondT>::convert(cond),
- as_actor<ThenT>::convert(then));
- }
-
- CondT cond;
-};
-
-//////////////////////////////////
-template <typename CondT>
-inline if_gen<CondT>
-if_(CondT const& cond)
-{
- return if_gen<CondT>(cond);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// while_composite
-//
-// This composite has the form:
-//
-// while_(condition)
-// [
-// statement
-// ]
-//
-// While the condition (an actor) evaluates to true, statement
-// (another actor) is executed. The result type of this is void.
-// Note the trailing underscore after while_.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CondT, typename DoT>
-struct while_composite {
-
- typedef while_composite<CondT, DoT> self_t;
-
- template <typename TupleT>
- struct result { typedef void type; };
-
- while_composite(CondT const& cond_, DoT const& do__)
- : cond(cond_), do_(do__) {}
-
- template <typename TupleT>
- void eval(TupleT const& args) const
- {
- while (cond.eval(args))
- do_.eval(args);
- }
-
- CondT cond;
- DoT do_;
-};
-
-//////////////////////////////////
-template <typename CondT>
-struct while_gen {
-
- while_gen(CondT const& cond_)
- : cond(cond_) {}
-
- template <typename DoT>
- actor<while_composite<
- typename as_actor<CondT>::type,
- typename as_actor<DoT>::type> >
- operator[](DoT const& do_) const
- {
- typedef while_composite<
- typename as_actor<CondT>::type,
- typename as_actor<DoT>::type>
- result;
-
- return result(
- as_actor<CondT>::convert(cond),
- as_actor<DoT>::convert(do_));
- }
-
- CondT cond;
-};
-
-//////////////////////////////////
-template <typename CondT>
-inline while_gen<CondT>
-while_(CondT const& cond)
-{
- return while_gen<CondT>(cond);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// do_composite
-//
-// This composite has the form:
-//
-// do_
-// [
-// statement
-// ]
-// .while_(condition)
-//
-// While the condition (an actor) evaluates to true, statement
-// (another actor) is executed. The statement is executed at least
-// once. The result type of this is void. Note the trailing
-// underscore after do_ and the the leading dot and the trailing
-// underscore before and after .while_.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename DoT, typename CondT>
-struct do_composite {
-
- typedef do_composite<DoT, CondT> self_t;
-
- template <typename TupleT>
- struct result { typedef void type; };
-
- do_composite(DoT const& do__, CondT const& cond_)
- : do_(do__), cond(cond_) {}
-
- template <typename TupleT>
- void eval(TupleT const& args) const
- {
- do
- do_.eval(args);
- while (cond.eval(args));
- }
-
- DoT do_;
- CondT cond;
-};
-
-////////////////////////////////////
-template <typename DoT>
-struct do_gen2 {
-
- do_gen2(DoT const& do__)
- : do_(do__) {}
-
- template <typename CondT>
- actor<do_composite<
- typename as_actor<DoT>::type,
- typename as_actor<CondT>::type> >
- while_(CondT const& cond) const
- {
- typedef do_composite<
- typename as_actor<DoT>::type,
- typename as_actor<CondT>::type>
- result;
-
- return result(
- as_actor<DoT>::convert(do_),
- as_actor<CondT>::convert(cond));
- }
-
- DoT do_;
-};
-
-////////////////////////////////////
-struct do_gen {
-
- template <typename DoT>
- do_gen2<DoT>
- operator[](DoT const& do_) const
- {
- return do_gen2<DoT>(do_);
- }
-};
-
-do_gen const do_ = do_gen();
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// for_composite
-//
-// This statement has the form:
-//
-// for_(init, condition, step)
-// [
-// statement
-// ]
-//
-// Where init, condition, step and statement are all actors. init
-// is executed once before entering the for-loop. The for-loop
-// exits once condition evaluates to false. At each loop iteration,
-// step and statement is called. The result of this statement is
-// void. Note the trailing underscore after for_.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename InitT, typename CondT, typename StepT, typename DoT>
-struct for_composite {
-
- typedef composite<InitT, CondT, StepT, DoT> self_t;
-
- template <typename TupleT>
- struct result { typedef void type; };
-
- for_composite(
- InitT const& init_,
- CondT const& cond_,
- StepT const& step_,
- DoT const& do__)
- : init(init_), cond(cond_), step(step_), do_(do__) {}
-
- template <typename TupleT>
- void
- eval(TupleT const& args) const
- {
- for (init.eval(args); cond.eval(args); step.eval(args))
- do_.eval(args);
- }
-
- InitT init; CondT cond; StepT step; DoT do_; // actors
-};
-
-//////////////////////////////////
-template <typename InitT, typename CondT, typename StepT>
-struct for_gen {
-
- for_gen(
- InitT const& init_,
- CondT const& cond_,
- StepT const& step_)
- : init(init_), cond(cond_), step(step_) {}
-
- template <typename DoT>
- actor<for_composite<
- typename as_actor<InitT>::type,
- typename as_actor<CondT>::type,
- typename as_actor<StepT>::type,
- typename as_actor<DoT>::type> >
- operator[](DoT const& do_) const
- {
- typedef for_composite<
- typename as_actor<InitT>::type,
- typename as_actor<CondT>::type,
- typename as_actor<StepT>::type,
- typename as_actor<DoT>::type>
- result;
-
- return result(
- as_actor<InitT>::convert(init),
- as_actor<CondT>::convert(cond),
- as_actor<StepT>::convert(step),
- as_actor<DoT>::convert(do_));
- }
-
- InitT init; CondT cond; StepT step;
-};
-
-//////////////////////////////////
-template <typename InitT, typename CondT, typename StepT>
-inline for_gen<InitT, CondT, StepT>
-for_(InitT const& init, CondT const& cond, StepT const& step)
-{
- return for_gen<InitT, CondT, StepT>(init, cond, step);
-}
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_STATEMENTS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_STATEMENTS
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_statements.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_statements.hpp"
+#endif
 
-} // namespace phoenix
+#include <boost/spirit/include/phoenix1_statements.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/phoenix/tuple_helpers.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/tuple_helpers.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/tuple_helpers.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,1076 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2002 Joel de Guzman
- Copyright (c) 2002-2003 Hartmut Kaiser
-
- Use, modification and distribution is subject to the 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 PHOENIX_TUPLEHELPERS_HPP
-#define PHOENIX_TUPLEHELPERS_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#include <cassert>
-#include <boost/spirit/phoenix/tuples.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix
-{
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// make_tuple template class
-//
-// This template class is used to calculate a tuple type required to hold
-// the given template parameter type
-//
-///////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-// normal (non-tuple types are wrapped into a tuple)
-template <typename ResultT>
-struct make_tuple {
-
- typedef tuple<ResultT> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// nil_t is converted to an empty tuple type
-template <>
-struct make_tuple<nil_t> {
-
- typedef tuple<> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// tuple types are left alone without any refactoring
-template <
- typename A, typename B, typename C
-#if PHOENIX_LIMIT > 3
- , typename D, typename E, typename F
-#if PHOENIX_LIMIT > 6
- , typename G, typename H, typename I
-#if PHOENIX_LIMIT > 9
- , typename J, typename K, typename L
-#if PHOENIX_LIMIT > 12
- , typename M, typename N, typename O
-#endif
-#endif
-#endif
-#endif
->
-struct make_tuple<tuple<A, B, C
-#if PHOENIX_LIMIT > 3
- , D, E, F
-#if PHOENIX_LIMIT > 6
- , G, H, I
-#if PHOENIX_LIMIT > 9
- , J, K, L
-#if PHOENIX_LIMIT > 12
- , M, N, O
-#endif
-#endif
-#endif
-#endif
- > > {
-
-// the tuple parameter itself is the required tuple type
- typedef tuple<A, B, C
-#if PHOENIX_LIMIT > 3
- , D, E, F
-#if PHOENIX_LIMIT > 6
- , G, H, I
-#if PHOENIX_LIMIT > 9
- , J, K, L
-#if PHOENIX_LIMIT > 12
- , M, N, O
-#endif
-#endif
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_TUPLE_HELPERS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TUPLE_HELPERS
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_tuple_helpers.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_tuple_helpers.hpp"
 #endif
-#endif
- > type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat_tuple type computer
-//
-// This class returns the type of a tuple, which is constructed by
-// concatenating a tuple with a given type
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename TupleT, typename AppendT>
-struct concat_tuple;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <0 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename AppendT>
-struct concat_tuple<tuple<>, AppendT> {
-
- typedef tuple<AppendT> type;
-};
-
-template <>
-struct concat_tuple<tuple<>, nil_t> {
-
- typedef tuple<> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <1 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename A, typename AppendT>
-struct concat_tuple<tuple<A>, AppendT> {
-
- typedef tuple<A, AppendT> type;
-};
-
-template <typename A>
-struct concat_tuple<tuple<A>, nil_t> {
-
- typedef tuple<A> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <2 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename A, typename B, typename AppendT>
-struct concat_tuple<tuple<A, B>, AppendT> {
-
- typedef tuple<A, B, AppendT> type;
-};
-
-template <typename A, typename B>
-struct concat_tuple<tuple<A, B>, nil_t> {
-
- typedef tuple<A, B> type;
-};
-
-#if PHOENIX_LIMIT > 3
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <3 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C>, AppendT> {
-
- typedef tuple<A, B, C, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C
->
-struct concat_tuple<tuple<A, B, C>, nil_t> {
-
- typedef tuple<A, B, C> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <4 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D>, AppendT> {
-
- typedef tuple<A, B, C, D, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C, typename D
->
-struct concat_tuple<tuple<A, B, C, D>, nil_t> {
-
- typedef tuple<A, B, C, D> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <5 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D, E>, AppendT> {
-
- typedef tuple<A, B, C, D, E, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C, typename D, typename E
->
-struct concat_tuple<tuple<A, B, C, D, E>, nil_t> {
-
- typedef tuple<A, B, C, D, E> type;
-};
-
-#if PHOENIX_LIMIT > 6
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <6 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D, E, F>, AppendT> {
-
- typedef tuple<A, B, C, D, E, F, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C, typename D, typename E, typename F
->
-struct concat_tuple<tuple<A, B, C, D, E, F>, nil_t> {
-
- typedef tuple<A, B, C, D, E, F> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <7 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G>, AppendT> {
-
- typedef tuple<A, B, C, D, E, F, G, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G>, nil_t> {
-
- typedef tuple<A, B, C, D, E, F, G> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <8 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, AppendT> {
-
- typedef tuple<A, B, C, D, E, F, G, H, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, nil_t> {
-
- typedef tuple<A, B, C, D, E, F, G, H> type;
-};
-
-#if PHOENIX_LIMIT > 9
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <9 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, AppendT> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, nil_t> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <10 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I, typename J,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, AppendT> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, J, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I, typename J
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, nil_t> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, J> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <11 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I, typename J, typename K,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, AppendT> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, J, K, AppendT> type;
-};
 
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I, typename J, typename K
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, nil_t> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, J, K> type;
-};
-
-#if PHOENIX_LIMIT > 12
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <12 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I, typename J, typename K, typename L,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, AppendT> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I, typename J, typename K, typename L
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, nil_t> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <13 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I, typename J, typename K, typename L,
- typename M,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, AppendT> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I, typename J, typename K, typename L,
- typename M
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, nil_t> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M> type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat tuple <14 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I, typename J, typename K, typename L,
- typename M, typename N,
- typename AppendT
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, AppendT> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, AppendT> type;
-};
-
-template <
- typename A, typename B, typename C, typename D, typename E, typename F,
- typename G, typename H, typename I, typename J, typename K, typename L,
- typename M, typename N
->
-struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, nil_t> {
-
- typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N> type;
-};
+#include <boost/spirit/include/phoenix1_tuple_helpers.hpp>
 
 #endif
-#endif
-#endif
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// concat_tuples type computer
-//
-// This template class returns the type of a tuple built from the
-// concatenation of two given tuples.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename TupleT1, typename TupleT2, int N, typename AppendT>
-struct concat_tuple_element {
-
- typedef
- typename concat_tuple_element<
- typename concat_tuple<TupleT1, AppendT>::type, TupleT2, N+1,
- typename tuple_element<N+1, TupleT2>::type
- >::type
- type;
-};
-
-template <typename TupleT1, typename TupleT2, int N>
-struct concat_tuple_element<TupleT1, TupleT2, N, nil_t> {
-
- typedef TupleT1 type;
-};
-
-template <typename TupleT1, typename TupleT2>
-struct concat_tuples {
-
- typedef
- typename concat_tuple_element<
- TupleT1, TupleT2, 0,
- typename tuple_element<0, TupleT2>::type
- >::type
- type;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// convert_actors template function
-//
-// The convert_actors template functions constructs a new tuple object
-// composed of the elements returned by the actors contained in the
-// input tuple. (i.e. the given tuple type 'actor_tuple' contains a set
-// of actors to evaluate and the resulting tuple contains the results of
-// evaluating the actors.)
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename ActorT, typename TupleT>
-struct actor_result; // forward declaration
-
-namespace impl
-{
- template <unsigned N>
- struct convert_actors_ {};
-}
-
-template <typename TupleResultT, typename ActorTupleT>
-TupleResultT
-convert_actors(ActorTupleT const& actor_tuple)
-{
- BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
- BOOST_STATIC_CONSTANT(int, length = TupleResultT::length);
- return impl::convert_actors_<length>
- ::template apply<TupleResultT, ActorTupleT>::do_(actor_tuple);
-}
-
-namespace impl
-{
- template <int N, typename TupleResultT, typename ActorTupleT>
- struct convert_actor
- {
- typedef typename tuple_element<N, TupleResultT>::type type;
-
- template <bool C>
- struct is_default_t {};
- typedef is_default_t<true> is_default;
- typedef is_default_t<false> is_not_default;
-
- static type
- actor_element(ActorTupleT const& /*actor_tuple*/, is_default)
- {
- return type(); // default construct
- }
-
- static type
- actor_element(ActorTupleT const& actor_tuple, is_not_default)
- {
- BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
- return actor_tuple[tuple_index<N>()](); // apply the actor
- }
-
- static type
- do_(ActorTupleT const& actor_tuple)
- {
- return actor_element(
- actor_tuple, is_default_t<(N >= ActorTupleT::length)>());
- }
- };
-
- ///////////////////////////////////////
- template <>
- struct convert_actors_<1>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
-
- return TupleResultT(
- converter0::do_(actor_tuple)
- );
- }
- };
- };
-
- ///////////////////////////////////////
- template <>
- struct convert_actors_<2>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- );
- }
- };
- };
-
- ///////////////////////////////////////
- template <>
- struct convert_actors_<3>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- );
- }
- };
- };
-
- #if PHOENIX_LIMIT > 3
-
- /////////////////////////////////////
- template <>
- struct convert_actors_<4>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- );
- }
- };
- };
-
- /////////////////////////////////////
- template <>
- struct convert_actors_<5>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- );
- }
- };
- };
-
- /////////////////////////////////////
- template <>
- struct convert_actors_<6>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
- typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- , converter5::do_(actor_tuple)
- );
- }
- };
- };
-
- #if PHOENIX_LIMIT > 6
-
- /////////////////////////////////////
- template <>
- struct convert_actors_<7>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
- typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
- typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- , converter5::do_(actor_tuple)
- , converter6::do_(actor_tuple)
- );
- }
- };
- };
-
- /////////////////////////////////////
- template <>
- struct convert_actors_<8>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
- typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
- typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
- typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- , converter5::do_(actor_tuple)
- , converter6::do_(actor_tuple)
- , converter7::do_(actor_tuple)
- );
- }
- };
- };
-
- /////////////////////////////////////
- template <>
- struct convert_actors_<9>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
- typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
- typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
- typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
- typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- , converter5::do_(actor_tuple)
- , converter6::do_(actor_tuple)
- , converter7::do_(actor_tuple)
- , converter8::do_(actor_tuple)
- );
- }
- };
- };
-
- #if PHOENIX_LIMIT > 9
-
- /////////////////////////////////////
- template <>
- struct convert_actors_<10>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
- typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
- typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
- typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
- typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
- typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- , converter5::do_(actor_tuple)
- , converter6::do_(actor_tuple)
- , converter7::do_(actor_tuple)
- , converter8::do_(actor_tuple)
- , converter9::do_(actor_tuple)
- );
- }
- };
- };
-
- /////////////////////////////////////
- template <>
- struct convert_actors_<11>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
- typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
- typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
- typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
- typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
- typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
- typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- , converter5::do_(actor_tuple)
- , converter6::do_(actor_tuple)
- , converter7::do_(actor_tuple)
- , converter8::do_(actor_tuple)
- , converter9::do_(actor_tuple)
- , converter10::do_(actor_tuple)
- );
- }
- };
- };
-
- /////////////////////////////////////
- template <>
- struct convert_actors_<12>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
- typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
- typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
- typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
- typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
- typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
- typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
- typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- , converter5::do_(actor_tuple)
- , converter6::do_(actor_tuple)
- , converter7::do_(actor_tuple)
- , converter8::do_(actor_tuple)
- , converter9::do_(actor_tuple)
- , converter10::do_(actor_tuple)
- , converter11::do_(actor_tuple)
- );
- }
- };
- };
-
- #if PHOENIX_LIMIT > 12
-
- /////////////////////////////////////
- template <>
- struct convert_actors_<13>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
- typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
- typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
- typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
- typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
- typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
- typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
- typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
- typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- , converter5::do_(actor_tuple)
- , converter6::do_(actor_tuple)
- , converter7::do_(actor_tuple)
- , converter8::do_(actor_tuple)
- , converter9::do_(actor_tuple)
- , converter10::do_(actor_tuple)
- , converter11::do_(actor_tuple)
- , converter12::do_(actor_tuple)
- );
- }
- };
- };
-
- ///////////////////////////////////////
- template <>
- struct convert_actors_<14>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
- typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
- typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
- typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
- typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
- typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
- typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
- typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
- typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
- typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- , converter5::do_(actor_tuple)
- , converter6::do_(actor_tuple)
- , converter7::do_(actor_tuple)
- , converter8::do_(actor_tuple)
- , converter9::do_(actor_tuple)
- , converter10::do_(actor_tuple)
- , converter11::do_(actor_tuple)
- , converter12::do_(actor_tuple)
- , converter13::do_(actor_tuple)
- );
- }
- };
- };
-
- ///////////////////////////////////////
- template <>
- struct convert_actors_<15>
- {
- template <typename TupleResultT, typename ActorTupleT>
- struct apply
- {
- static TupleResultT
- do_(ActorTupleT const& actor_tuple)
- {
- typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
- typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
- typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
- typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
- typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
- typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
- typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
- typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
- typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
- typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
- typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
- typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
- typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
- typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
- typedef impl::convert_actor<14, TupleResultT, ActorTupleT> converter14;
-
- using namespace tuple_index_names;
- return TupleResultT(
- converter0::do_(actor_tuple)
- , converter1::do_(actor_tuple)
- , converter2::do_(actor_tuple)
- , converter3::do_(actor_tuple)
- , converter4::do_(actor_tuple)
- , converter5::do_(actor_tuple)
- , converter6::do_(actor_tuple)
- , converter7::do_(actor_tuple)
- , converter8::do_(actor_tuple)
- , converter9::do_(actor_tuple)
- , converter10::do_(actor_tuple)
- , converter11::do_(actor_tuple)
- , converter12::do_(actor_tuple)
- , converter13::do_(actor_tuple)
- , converter14::do_(actor_tuple)
- );
- }
- };
- };
-
- #endif
- #endif
- #endif
- #endif
-} // namespace impl
-
-
-///////////////////////////////////////////////////////////////////////////////
-} // namespace phoenix
-
-#endif // PHOENIX_TUPLEHELPERS_HPP

Modified: branches/CMake/release/boost/spirit/phoenix/tuples.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/phoenix/tuples.hpp (original)
+++ branches/CMake/release/boost/spirit/phoenix/tuples.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,1330 +1,20 @@
 /*=============================================================================
- Phoenix V1.2.1
- Copyright (c) 2001-2002 Joel de Guzman
-
- Use, modification and distribution is subject to the 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 PHOENIX_TUPLES_HPP
-#define PHOENIX_TUPLES_HPP
-
-#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
-#error "Sorry, Phoenix does not support VC6 and VC7. Please upgrade to at least VC7.1"
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Phoenix predefined maximum limit. This limit defines the maximum
-// number of elements a tuple can hold. This number defaults to 3. The
-// actual maximum is rounded up in multiples of 3. Thus, if this value
-// is 4, the actual limit is 6. The ultimate maximum limit in this
-// implementation is 15.
-//
-///////////////////////////////////////////////////////////////////////////////
-#ifndef PHOENIX_LIMIT
-#define PHOENIX_LIMIT 3
-#endif
-
-#if defined(__BORLANDC__) && (__BORLANDC__ <= 0x561)
-namespace phoenix { namespace borland_only
-{
- namespace ftors
- {
- // We define these dummy template functions. Borland complains when
- // a template class has the same name as a template function,
- // regardless if they are in different namespaces.
-
- template <typename T> void if_(T) {}
- template <typename T> void for_(T) {}
- template <typename T> void while_(T) {}
- template <typename T> void do_(T) {}
- }
-
- namespace tmpls
- {
- // We define these dummy template functions. Borland complains when
- // a template class has the same name as a template function,
- // regardless if they are in different namespaces.
-
- template <typename T> struct if_ {};
- template <typename T> struct for_ {};
- template <typename T> struct while_ {};
- template <typename T> struct do_ {};
- }
-
-}} // namespace phoenix::borland_only
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/static_assert.hpp>
-#include <boost/call_traits.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace phoenix {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple
-//
-// Tuples hold heterogeneous types up to a predefined maximum. Only
-// the most basic functionality needed is provided. Unlike other
-// recursive list-like tuple implementations, this tuple
-// implementation uses simple structs similar to std::pair with
-// specialization for 0 to N tuple elements.
-//
-// 1) Construction
-// Here are examples on how to construct tuples:
-//
-// typedef tuple<int, char> t1_t;
-// typedef tuple<int, std::string, double> t2_t;
-//
-// // this tuple has an int and char members
-// t1_t t1(3, 'c');
-//
-// // this tuple has an int, std::string and double members
-// t2_t t2(3, "hello", 3.14);
-//
-// Tuples can also be constructed from other tuples. The
-// source and destination tuples need not have exactly the
-// same element types. The only requirement is that the
-// source tuple have the same number of elements as the
-// destination and that each element slot in the
-// destination can be copy constructed from the source
-// element. For example:
-//
-// tuple<double, double> t3(t1); // OK. Compatible tuples
-// tuple<double, double> t4(t2); // Error! Incompatible tuples
-//
-// 2) Member access
-// A member in a tuple can be accessed using the
-// tuple's [] operator by specifying the Nth
-// tuple_index. Here are some examples:
-//
-// tuple_index<0> ix0; // 0th index == 1st item
-// tuple_index<1> ix1; // 1st index == 2nd item
-// tuple_index<2> ix2; // 2nd index == 3rd item
-//
-// t1[ix0] = 33; // sets the int member of the tuple t1
-// t2[ix2] = 6e6; // sets the double member of the tuple t2
-// t1[ix1] = 'a'; // sets the char member of the tuple t1
-//
-// There are some predefined names are provided in sub-
-// namespace tuple_index_names:
-//
-// tuple_index<0> _1;
-// tuple_index<1> _2;
-// ...
-// tuple_index<N> _N;
-//
-// These indexes may be used by 'using' namespace
-// phoenix::tuple_index_names.
-//
-// Access to out of bound indexes returns a nil_t value.
-//
-// 3) Member type inquiry
-// The type of an individual member can be queried.
-// Example:
-//
-// tuple_element<1, t2_t>::type
-//
-// Refers to the type of the second member (note zero based,
-// thus 0 = 1st item, 1 = 2nd item) of the tuple.
-//
-// Aside from tuple_element<N, T>::type, there are two
-// more types that tuple_element provides: rtype and
-// crtype. While 'type' is the plain underlying type,
-// 'rtype' is the reference type, or type& and 'crtype'
-// is the constant reference type or type const&. The
-// latter two are provided to make it easy for the
-// client in dealing with the possibility of reference
-// to reference when type is already a reference, which
-// is illegal in C++.
-//
-// Access to out of bound indexes returns a nil_t type.
-//
-// 4) Tuple length
-// The number of elements in a tuple can be queried.
-// Example:
-//
-// int n = t1.length;
-//
-// gets the number of elements in tuple t1.
-//
-// length is a static constant. Thus, TupleT::length
-// also works. Example:
-//
-// int n = t1_t::length;
-//
-///////////////////////////////////////////////////////////////////////////////
-struct nil_t {};
-using boost::remove_reference;
-using boost::call_traits;
-
-//////////////////////////////////
-namespace impl {
-
- template <typename T>
- struct access {
-
- typedef const T& ctype;
- typedef T& type;
- };
-
- template <typename T>
- struct access<T&> {
-
- typedef T& ctype;
- typedef T& type;
- };
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple_element
-//
-// A query class that gets the Nth element inside a tuple.
-// Examples:
-//
-// tuple_element<1, tuple<int, char, void*> >::type // plain
-// tuple_element<1, tuple<int, char, void*> >::rtype // ref
-// tuple_element<1, tuple<int, char, void*> >::crtype // const ref
-//
-// Has type char which is the 2nd type in the tuple
-// (note zero based, thus 0 = 1st item, 1 = 2nd item).
-//
-// Given a tuple object, the static function tuple_element<N,
-// TupleT>::get(tuple) gets the Nth element in the tuple. The
-// tuple class' tuple::operator[] uses this to get its Nth
-// element.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <int N, typename TupleT>
-struct tuple_element
-{
- typedef nil_t type;
- typedef nil_t& rtype;
- typedef nil_t const& crtype;
-
- static nil_t get(TupleT const& t) { return nil_t(); }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<0, TupleT>
-{
- typedef typename TupleT::a_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.a; }
- static crtype get(TupleT const& t) { return t.a; }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<1, TupleT>
-{
- typedef typename TupleT::b_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.b; }
- static crtype get(TupleT const& t) { return t.b; }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<2, TupleT>
-{
- typedef typename TupleT::c_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.c; }
- static crtype get(TupleT const& t) { return t.c; }
-};
-
-#if PHOENIX_LIMIT > 3
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<3, TupleT>
-{
- typedef typename TupleT::d_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.d; }
- static crtype get(TupleT const& t) { return t.d; }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<4, TupleT>
-{
- typedef typename TupleT::e_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.e; }
- static crtype get(TupleT const& t) { return t.e; }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<5, TupleT>
-{
- typedef typename TupleT::f_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.f; }
- static crtype get(TupleT const& t) { return t.f; }
-};
-
-#if PHOENIX_LIMIT > 6
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<6, TupleT>
-{
- typedef typename TupleT::g_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.g; }
- static crtype get(TupleT const& t) { return t.g; }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<7, TupleT>
-{
- typedef typename TupleT::h_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.h; }
- static crtype get(TupleT const& t) { return t.h; }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<8, TupleT>
-{
- typedef typename TupleT::i_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.i; }
- static crtype get(TupleT const& t) { return t.i; }
-};
-
-#if PHOENIX_LIMIT > 9
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<9, TupleT>
-{
- typedef typename TupleT::j_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.j; }
- static crtype get(TupleT const& t) { return t.j; }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<10, TupleT>
-{
- typedef typename TupleT::k_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.k; }
- static crtype get(TupleT const& t) { return t.k; }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<11, TupleT>
-{
- typedef typename TupleT::l_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.l; }
- static crtype get(TupleT const& t) { return t.l; }
-};
-
-#if PHOENIX_LIMIT > 12
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<12, TupleT>
-{
- typedef typename TupleT::m_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.m; }
- static crtype get(TupleT const& t) { return t.m; }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<13, TupleT>
-{
- typedef typename TupleT::n_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.n; }
- static crtype get(TupleT const& t) { return t.n; }
-};
-
-//////////////////////////////////
-template <typename TupleT>
-struct tuple_element<14, TupleT>
-{
- typedef typename TupleT::o_type type;
- typedef typename impl::access<type>::type rtype;
- typedef typename impl::access<type>::ctype crtype;
-
- static rtype get(TupleT& t) { return t.o; }
- static crtype get(TupleT const& t) { return t.o; }
-};
-
-#endif
-#endif
-#endif
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple forward declaration.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A = nil_t
- , typename B = nil_t
- , typename C = nil_t
-
-#if PHOENIX_LIMIT > 3
- , typename D = nil_t
- , typename E = nil_t
- , typename F = nil_t
-
-#if PHOENIX_LIMIT > 6
- , typename G = nil_t
- , typename H = nil_t
- , typename I = nil_t
-
-#if PHOENIX_LIMIT > 9
- , typename J = nil_t
- , typename K = nil_t
- , typename L = nil_t
-
-#if PHOENIX_LIMIT > 12
- , typename M = nil_t
- , typename N = nil_t
- , typename O = nil_t
-
-#endif
-#endif
-#endif
-#endif
-
- , typename NU = nil_t // Not used
->
-struct tuple;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple_index
-//
-// This class wraps an integer in a type to be used for indexing
-// the Nth element in a tuple. See tuple operator[]. Some
-// predefined names are provided in sub-namespace
-// tuple_index_names.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <int N>
-struct tuple_index {};
-
-//////////////////////////////////
-namespace tuple_index_names {
-
- tuple_index<0> const _1 = tuple_index<0>();
- tuple_index<1> const _2 = tuple_index<1>();
- tuple_index<2> const _3 = tuple_index<2>();
-
-#if PHOENIX_LIMIT > 3
- tuple_index<3> const _4 = tuple_index<3>();
- tuple_index<4> const _5 = tuple_index<4>();
- tuple_index<5> const _6 = tuple_index<5>();
-
-#if PHOENIX_LIMIT > 6
- tuple_index<6> const _7 = tuple_index<6>();
- tuple_index<7> const _8 = tuple_index<7>();
- tuple_index<8> const _9 = tuple_index<8>();
-
-#if PHOENIX_LIMIT > 9
- tuple_index<9> const _10 = tuple_index<9>();
- tuple_index<10> const _11 = tuple_index<10>();
- tuple_index<11> const _12 = tuple_index<11>();
-
-#if PHOENIX_LIMIT > 12
- tuple_index<12> const _13 = tuple_index<12>();
- tuple_index<13> const _14 = tuple_index<13>();
- tuple_index<14> const _15 = tuple_index<14>();
-
-#endif
-#endif
-#endif
-#endif
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple_common class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename DerivedT>
-struct tuple_base {
-
- typedef nil_t a_type;
- typedef nil_t b_type;
- typedef nil_t c_type;
-
-#if PHOENIX_LIMIT > 3
- typedef nil_t d_type;
- typedef nil_t e_type;
- typedef nil_t f_type;
-
-#if PHOENIX_LIMIT > 6
- typedef nil_t g_type;
- typedef nil_t h_type;
- typedef nil_t i_type;
-
-#if PHOENIX_LIMIT > 9
- typedef nil_t j_type;
- typedef nil_t k_type;
- typedef nil_t l_type;
-
-#if PHOENIX_LIMIT > 12
- typedef nil_t m_type;
- typedef nil_t n_type;
- typedef nil_t o_type;
-
-#endif
-#endif
-#endif
-#endif
-
- template <int N>
- typename tuple_element<N, DerivedT>::crtype
- operator[](tuple_index<N>) const
- {
- return tuple_element<N, DerivedT>
- ::get(*static_cast<DerivedT const*>(this));
- }
-
- template <int N>
- typename tuple_element<N, DerivedT>::rtype
- operator[](tuple_index<N>)
- {
- return tuple_element<N, DerivedT>
- ::get(*static_cast<DerivedT*>(this));
- }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <0 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <>
-struct tuple<>
-: public tuple_base<tuple<> > {
-
- BOOST_STATIC_CONSTANT(int, length = 0);
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <1 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename A>
-struct tuple<A, nil_t, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A> > {
-
- BOOST_STATIC_CONSTANT(int, length = 1);
- typedef A a_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_
- ): a(a_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <2 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename A, typename B>
-struct tuple<A, B, nil_t,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B> > {
-
- BOOST_STATIC_CONSTANT(int, length = 2);
- typedef A a_type; typedef B b_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_
- ): a(a_), b(b_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <3 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename A, typename B, typename C>
-struct tuple<A, B, C,
-#if PHOENIX_LIMIT > 3
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B, C> > {
-
- BOOST_STATIC_CONSTANT(int, length = 3);
- typedef A a_type; typedef B b_type;
- typedef C c_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_
- ): a(a_), b(b_), c(c_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c;
-};
-
-#if PHOENIX_LIMIT > 3
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <4 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename A, typename B, typename C, typename D>
-struct tuple<A, B, C, D, nil_t, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B, C, D> > {
-
- BOOST_STATIC_CONSTANT(int, length = 4);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_
- ): a(a_), b(b_), c(c_), d(d_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <5 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename A, typename B, typename C, typename D, typename E>
-struct tuple<A, B, C, D, E, nil_t,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B, C, D, E> > {
-
- BOOST_STATIC_CONSTANT(int, length = 5);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_
- ): a(a_), b(b_), c(c_), d(d_), e(e_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <6 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F>
-struct tuple<A, B, C, D, E, F,
-#if PHOENIX_LIMIT > 6
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B, C, D, E, F> > {
-
- BOOST_STATIC_CONSTANT(int, length = 6);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type; typedef F f_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_,
- typename call_traits<F>::param_type f_
- ): a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()]), f(init[tuple_index<5>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
- F f;
-};
-
-#if PHOENIX_LIMIT > 6
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <7 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G>
-struct tuple<A, B, C, D, E, F, G, nil_t, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B, C, D, E, F, G> > {
-
- BOOST_STATIC_CONSTANT(int, length = 7);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type; typedef F f_type;
- typedef G g_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_,
- typename call_traits<F>::param_type f_,
- typename call_traits<G>::param_type g_
- ): a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
- g(init[tuple_index<6>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
- F f; G g;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <8 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H>
-struct tuple<A, B, C, D, E, F, G, H, nil_t,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B, C, D, E, F, G, H> > {
-
- BOOST_STATIC_CONSTANT(int, length = 8);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type; typedef F f_type;
- typedef G g_type; typedef H h_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_,
- typename call_traits<F>::param_type f_,
- typename call_traits<G>::param_type g_,
- typename call_traits<H>::param_type h_
- ): a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
- g(init[tuple_index<6>()]), h(init[tuple_index<7>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
- F f; G g; H h;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <9 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I>
-struct tuple<A, B, C, D, E, F, G, H, I,
-#if PHOENIX_LIMIT > 9
- nil_t, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B, C, D, E, F, G, H, I> > {
-
- BOOST_STATIC_CONSTANT(int, length = 9);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type; typedef F f_type;
- typedef G g_type; typedef H h_type;
- typedef I i_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_,
- typename call_traits<F>::param_type f_,
- typename call_traits<G>::param_type g_,
- typename call_traits<H>::param_type h_,
- typename call_traits<I>::param_type i_
- ): a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
- g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
- i(init[tuple_index<8>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
- F f; G g; H h; I i;
-};
-
-#if PHOENIX_LIMIT > 9
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <10 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J>
-struct tuple<A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B, C, D, E, F, G, H, I, J> > {
-
- BOOST_STATIC_CONSTANT(int, length = 10);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type; typedef F f_type;
- typedef G g_type; typedef H h_type;
- typedef I i_type; typedef J j_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_,
- typename call_traits<F>::param_type f_,
- typename call_traits<G>::param_type g_,
- typename call_traits<H>::param_type h_,
- typename call_traits<I>::param_type i_,
- typename call_traits<J>::param_type j_
- ): a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
- g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
- i(init[tuple_index<8>()]), j(init[tuple_index<9>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
- F f; G g; H h; I i; J j;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <11 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K>
-struct tuple<A, B, C, D, E, F, G, H, I, J, K, nil_t,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B, C, D, E, F, G, H, I, J, K> > {
-
- BOOST_STATIC_CONSTANT(int, length = 11);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type; typedef F f_type;
- typedef G g_type; typedef H h_type;
- typedef I i_type; typedef J j_type;
- typedef K k_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_,
- typename call_traits<F>::param_type f_,
- typename call_traits<G>::param_type g_,
- typename call_traits<H>::param_type h_,
- typename call_traits<I>::param_type i_,
- typename call_traits<J>::param_type j_,
- typename call_traits<K>::param_type k_
- ): a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_),
- k(k_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
- g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
- i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
- k(init[tuple_index<10>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
- F f; G g; H h; I i; J j;
- K k;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <12 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L>
-struct tuple<A, B, C, D, E, F, G, H, I, J, K, L,
-#if PHOENIX_LIMIT > 12
- nil_t, nil_t, nil_t,
-#endif
- nil_t // Unused
->
-: public tuple_base<tuple<A, B, C, D, E, F, G, H, I, J, K, L> > {
-
- BOOST_STATIC_CONSTANT(int, length = 12);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type; typedef F f_type;
- typedef G g_type; typedef H h_type;
- typedef I i_type; typedef J j_type;
- typedef K k_type; typedef L l_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_,
- typename call_traits<F>::param_type f_,
- typename call_traits<G>::param_type g_,
- typename call_traits<H>::param_type h_,
- typename call_traits<I>::param_type i_,
- typename call_traits<J>::param_type j_,
- typename call_traits<K>::param_type k_,
- typename call_traits<L>::param_type l_
- ): a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_),
- k(k_), l(l_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
- g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
- i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
- k(init[tuple_index<10>()]), l(init[tuple_index<11>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
- F f; G g; H h; I i; J j;
- K k; L l;
-};
-
-#if PHOENIX_LIMIT > 12
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <13 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M>
-struct tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t>
-: public tuple_base<
- tuple<A, B, C, D, E, F, G, H, I, J, K, L, M> > {
-
- BOOST_STATIC_CONSTANT(int, length = 13);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type; typedef F f_type;
- typedef G g_type; typedef H h_type;
- typedef I i_type; typedef J j_type;
- typedef K k_type; typedef L l_type;
- typedef M m_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_,
- typename call_traits<F>::param_type f_,
- typename call_traits<G>::param_type g_,
- typename call_traits<H>::param_type h_,
- typename call_traits<I>::param_type i_,
- typename call_traits<J>::param_type j_,
- typename call_traits<K>::param_type k_,
- typename call_traits<L>::param_type l_,
- typename call_traits<M>::param_type m_
- ): a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_),
- k(k_), l(l_), m(m_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
- g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
- i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
- k(init[tuple_index<10>()]), l(init[tuple_index<11>()]),
- m(init[tuple_index<12>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
- F f; G g; H h; I i; J j;
- K k; L l; M m;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <14 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N>
-struct tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t>
-: public tuple_base<
- tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N> > {
-
- BOOST_STATIC_CONSTANT(int, length = 14);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type; typedef F f_type;
- typedef G g_type; typedef H h_type;
- typedef I i_type; typedef J j_type;
- typedef K k_type; typedef L l_type;
- typedef M m_type; typedef N n_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_,
- typename call_traits<F>::param_type f_,
- typename call_traits<G>::param_type g_,
- typename call_traits<H>::param_type h_,
- typename call_traits<I>::param_type i_,
- typename call_traits<J>::param_type j_,
- typename call_traits<K>::param_type k_,
- typename call_traits<L>::param_type l_,
- typename call_traits<M>::param_type m_,
- typename call_traits<N>::param_type n_
- ): a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_),
- k(k_), l(l_), m(m_), n(n_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
- g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
- i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
- k(init[tuple_index<10>()]), l(init[tuple_index<11>()]),
- m(init[tuple_index<12>()]), n(init[tuple_index<13>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
- F f; G g; H h; I i; J j;
- K k; L l; M m; N n;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tuple <15 member> class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename A, typename B, typename C, typename D, typename E,
- typename F, typename G, typename H, typename I, typename J,
- typename K, typename L, typename M, typename N, typename O>
-struct tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t>
-: public tuple_base<
- tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> > {
-
- BOOST_STATIC_CONSTANT(int, length = 15);
- typedef A a_type; typedef B b_type;
- typedef C c_type; typedef D d_type;
- typedef E e_type; typedef F f_type;
- typedef G g_type; typedef H h_type;
- typedef I i_type; typedef J j_type;
- typedef K k_type; typedef L l_type;
- typedef M m_type; typedef N n_type;
- typedef O o_type;
-
- tuple() {}
-
- tuple(
- typename call_traits<A>::param_type a_,
- typename call_traits<B>::param_type b_,
- typename call_traits<C>::param_type c_,
- typename call_traits<D>::param_type d_,
- typename call_traits<E>::param_type e_,
- typename call_traits<F>::param_type f_,
- typename call_traits<G>::param_type g_,
- typename call_traits<H>::param_type h_,
- typename call_traits<I>::param_type i_,
- typename call_traits<J>::param_type j_,
- typename call_traits<K>::param_type k_,
- typename call_traits<L>::param_type l_,
- typename call_traits<M>::param_type m_,
- typename call_traits<N>::param_type n_,
- typename call_traits<O>::param_type o_
- ): a(a_), b(b_), c(c_), d(d_), e(e_),
- f(f_), g(g_), h(h_), i(i_), j(j_),
- k(k_), l(l_), m(m_), n(n_), o(o_) {}
-
- template <typename TupleT>
- tuple(TupleT const& init)
- : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
- c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
- e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
- g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
- i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
- k(init[tuple_index<10>()]), l(init[tuple_index<11>()]),
- m(init[tuple_index<12>()]), n(init[tuple_index<13>()]),
- o(init[tuple_index<14>()])
- { BOOST_STATIC_ASSERT(TupleT::length == length); }
-
- A a; B b; C c; D d; E e;
- F f; G g; H h; I i; J j;
- K k; L l; M m; N n; O o;
-};
-
-#endif
-#endif
-#endif
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_TUPLES
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TUPLES
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/phoenix1_tuples.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/phoenix1_tuples.hpp"
 #endif
 
-///////////////////////////////////////////////////////////////////////////////
-} // namespace phoenix
+#include <boost/spirit/include/phoenix1_tuples.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/symbols.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/symbols.hpp (original)
+++ branches/CMake/release/boost/spirit/symbols.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,22 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SYMBOLS_MAIN_HPP)
-#define BOOST_SPIRIT_SYMBOLS_MAIN_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SYMBOLS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SYMBOLS
 
-#include <boost/spirit/version.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_symbols.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_symbols.hpp"
+#endif
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// Master header for Spirit.Symbols
-//
-///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_symbols.hpp>
 
-#include <boost/spirit/symbols/symbols.hpp>
-
-#endif // !defined(BOOST_SPIRIT_SYMBOLS_MAIN_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/symbols/symbols.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/symbols/symbols.hpp (original)
+++ branches/CMake/release/boost/spirit/symbols/symbols.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,225 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_SYMBOLS_HPP
-#define BOOST_SPIRIT_SYMBOLS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SYMBOLS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SYMBOLS
 
-///////////////////////////////////////////////////////////////////////////////
-#include <string>
-
-#include <boost/ref.hpp>
-
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/directives.hpp>
-
-#include <boost/spirit/symbols/symbols_fwd.hpp>
-
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// symbols class
-//
-// This class implements a symbol table. The symbol table holds a
-// dictionary of symbols where each symbol is a sequence of CharTs.
-// The template class can work efficiently with 8, 16 and 32 bit
-// characters. Mutable data of type T is associated with each
-// symbol.
-//
-// The class is a parser. The parse member function returns
-// additional information in the symbol_match class (see below).
-// The additional data is a pointer to some data associated with
-// the matching symbol.
-//
-// The actual set implementation is supplied by the SetT template
-// parameter. By default, this uses the tst class (see tst.ipp).
-//
-// Symbols are added into the symbol table statically using the
-// construct:
-//
-// sym = a, b, c, d ...;
-//
-// where sym is a symbol table and a..d are strings. Example:
-//
-// sym = "pineapple", "orange", "banana", "apple";
-//
-// Alternatively, symbols may be added dynamically through the
-// member functor 'add' (see symbol_inserter below). The member
-// functor 'add' may be attached to a parser as a semantic action
-// taking in a begin/end pair:
-//
-// p[sym.add]
-//
-// where p is a parser (and sym is a symbol table). On success,
-// the matching portion of the input is added to the symbol table.
-//
-// 'add' may also be used to directly initialize data. Examples:
-//
-// sym.add("hello", 1)("crazy", 2)("world", 3);
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T, typename CharT, typename SetT>
-class symbols
-: private SetT
-, public parser<symbols<T, CharT, SetT> >
-{
-public:
-
- typedef parser<symbols<T, CharT, SetT> > parser_base_t;
- typedef symbols<T, CharT, SetT> self_t;
- typedef self_t const& embed_t;
- typedef T symbol_data_t;
- typedef boost::reference_wrapper<T> symbol_ref_t;
-
- symbols();
- symbols(symbols const& other);
- ~symbols();
-
- symbols&
- operator=(symbols const& other);
-
- symbol_inserter<T, SetT> const&
- operator=(CharT const* str);
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, symbol_ref_t>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse_main(ScannerT const& scan) const
- {
- typedef typename ScannerT::iterator_t iterator_t;
- iterator_t first = scan.first;
- typename SetT::search_info result = SetT::find(scan);
-
- if (result.data)
- return scan.
- create_match(
- result.length,
- symbol_ref_t(*result.data),
- first,
- scan.first);
- else
- return scan.no_match();
- }
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- return impl::implicit_lexeme_parse<result_t>
- (*this, scan, scan);
- }
-
- template < typename ScannerT >
- T* find(ScannerT const& scan) const
- { return SetT::find(scan).data; }
-
- symbol_inserter<T, SetT> const add;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Symbol table utilities
-//
-// add
-//
-// adds a symbol 'sym' (string) to a symbol table 'table' plus an
-// optional data 'data' associated with the symbol. Returns a pointer to
-// the data associated with the symbol or NULL if add failed (e.g. when
-// the symbol is already added before).
-//
-// find
-//
-// finds a symbol 'sym' (string) from a symbol table 'table'. Returns a
-// pointer to the data associated with the symbol or NULL if not found
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T, typename CharT, typename SetT>
-T* add(symbols<T, CharT, SetT>& table, CharT const* sym, T const& data = T());
-
-template <typename T, typename CharT, typename SetT>
-T* find(symbols<T, CharT, SetT> const& table, CharT const* sym);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// symbol_inserter class
-//
-// The symbols class holds an instance of this class named 'add'.
-// This can be called directly just like a member function,
-// passing in a first/last iterator and optional data:
-//
-// sym.add(first, last, data);
-//
-// Or, passing in a C string and optional data:
-//
-// sym.add(c_string, data);
-//
-// where sym is a symbol table. The 'data' argument is optional.
-// This may also be used as a semantic action since it conforms
-// to the action interface (see action.hpp):
-//
-// p[sym.add]
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T, typename SetT>
-class symbol_inserter
-{
-public:
-
- symbol_inserter(SetT& set_)
- : set(set_) {}
-
- typedef symbol_inserter const & result_type;
-
- template <typename IteratorT>
- symbol_inserter const&
- operator()(IteratorT first, IteratorT const& last, T const& data = T()) const
- {
- set.add(first, last, data);
- return *this;
- }
-
- template <typename CharT>
- symbol_inserter const&
- operator()(CharT const* str, T const& data = T()) const
- {
- CharT const* last = str;
- while (*last)
- last++;
- set.add(str, last, data);
- return *this;
- }
-
- template <typename CharT>
- symbol_inserter const&
- operator,(CharT const* str) const
- {
- CharT const* last = str;
- while (*last)
- last++;
- set.add(str, last, T());
- return *this;
- }
-
-private:
-
- SetT& set;
-};
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_symbols.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_symbols.hpp"
+#endif
 
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_symbols.hpp>
 
-#include <boost/spirit/symbols/impl/symbols.ipp>
 #endif

Modified: branches/CMake/release/boost/spirit/symbols/symbols_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/symbols/symbols_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/symbols/symbols_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,34 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SYMBOLS_FWD_HPP)
-#define BOOST_SPIRIT_SYMBOLS_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_SYMBOLS_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SYMBOLS_FWD
 
-namespace boost { namespace spirit {
-
- namespace impl
- {
- template <typename CharT, typename T>
- class tst;
- }
-
- template
- <
- typename T = int,
- typename CharT = char,
- typename SetT = impl::tst<T, CharT>
- >
- class symbols;
-
- template <typename T, typename SetT>
- class symbol_inserter;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_symbols_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_symbols_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_symbols_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/symbols/typeof.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/symbols/typeof.hpp (original)
+++ branches/CMake/release/boost/spirit/symbols/typeof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,26 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_SYMBOLS_TYPEOF_HPP)
-#define BOOST_SPIRIT_SYMBOLS_TYPEOF_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
 
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/spirit/symbols/symbols_fwd.hpp>
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::symbols,3)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::symbol_inserter,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::impl::tst,2)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::symbols,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::symbols,1)
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_typeof.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/tree/ast.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/tree/ast.hpp (original)
+++ branches/CMake/release/boost/spirit/tree/ast.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,384 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Daniel Nuffer
- Copyright (c) 2001-2007 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_TREE_AST_HPP
-#define BOOST_SPIRIT_TREE_AST_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_AST
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_AST
 
-#include <boost/spirit/tree/common.hpp>
-#include <boost/spirit/core/scanner/scanner.hpp>
-
-#include <boost/spirit/tree/ast_fwd.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-
-//////////////////////////////////
-// ast_match_policy is simply an id so the correct specialization of
-// tree_policy can be found.
-template <
- typename IteratorT,
- typename NodeFactoryT,
- typename T
->
-struct ast_match_policy :
- public common_tree_match_policy<
- ast_match_policy<IteratorT, NodeFactoryT, T>,
- IteratorT,
- NodeFactoryT,
- ast_tree_policy<
- ast_match_policy<IteratorT, NodeFactoryT, T>,
- NodeFactoryT,
- T
- >,
- T
- >
-{
- typedef
- common_tree_match_policy<
- ast_match_policy<IteratorT, NodeFactoryT, T>,
- IteratorT,
- NodeFactoryT,
- ast_tree_policy<
- ast_match_policy<IteratorT, NodeFactoryT, T>,
- NodeFactoryT,
- T
- >,
- T
- >
- common_tree_match_policy_;
-
- ast_match_policy()
- {
- }
-
- template <typename PolicyT>
- ast_match_policy(PolicyT const & policies)
- : common_tree_match_policy_(policies)
- {
- }
-};
-
-//////////////////////////////////
-template <typename MatchPolicyT, typename NodeFactoryT, typename T>
-struct ast_tree_policy :
- public common_tree_tree_policy<MatchPolicyT, NodeFactoryT>
-{
- typedef typename MatchPolicyT::match_t match_t;
- typedef typename MatchPolicyT::iterator_t iterator_t;
-
- template<typename MatchAT, typename MatchBT>
- static void concat(MatchAT& a, MatchBT const& b)
- {
- BOOST_SPIRIT_ASSERT(a && b);
-
-#if defined(BOOST_SPIRIT_DEBUG) && \
- (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
- BOOST_SPIRIT_DEBUG_OUT << "\n>>>AST concat. a = " << a <<
- "\n\tb = " << b << "<<<\n";
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_ast.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_ast.hpp"
 #endif
- typedef typename tree_match<iterator_t, NodeFactoryT, T>::container_t
- container_t;
-
- // test for size() is nessecary, because no_tree_gen_node leaves a.trees
- // and/or b.trees empty
- if (0 != b.trees.size() && b.trees.begin()->value.is_root())
- {
- BOOST_SPIRIT_ASSERT(b.trees.size() == 1);
 
- container_t tmp;
- std::swap(a.trees, tmp); // save a into tmp
- std::swap(b.trees, a.trees); // make b.trees[0] be new root (a.trees[0])
- container_t* pnon_root_trees = &a.trees;
- while (pnon_root_trees->size() > 0 &&
- pnon_root_trees->begin()->value.is_root())
- {
- pnon_root_trees = & pnon_root_trees->begin()->children;
- }
- pnon_root_trees->insert(pnon_root_trees->begin(),
- tmp.begin(), tmp.end());
- }
- else if (0 != a.trees.size() && a.trees.begin()->value.is_root())
- {
- BOOST_SPIRIT_ASSERT(a.trees.size() == 1);
-
-#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- a.trees.begin()->children.reserve(a.trees.begin()->children.size() + b.trees.size());
-#endif
- std::copy(b.trees.begin(),
- b.trees.end(),
- std::back_insert_iterator<container_t>(
- a.trees.begin()->children));
- }
- else
- {
-#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- a.trees.reserve(a.trees.size() + b.trees.size());
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
- std::copy(b.trees.begin(),
- b.trees.end(),
- std::back_insert_iterator<container_t>(a.trees));
- }
+#include <boost/spirit/include/classic_ast.hpp>
 
-#if defined(BOOST_SPIRIT_DEBUG) && \
- (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
- BOOST_SPIRIT_DEBUG_OUT << ">>>after AST concat. a = " << a << "<<<\n\n";
 #endif
-
- return;
- }
-
- template <typename MatchT, typename Iterator1T, typename Iterator2T>
- static void group_match(MatchT& m, parser_id const& id,
- Iterator1T const& first, Iterator2T const& last)
- {
- if (!m)
- return;
-
- typedef typename tree_match<iterator_t, NodeFactoryT, T>::container_t
- container_t;
- typedef typename container_t::iterator cont_iterator_t;
- typedef typename NodeFactoryT::template factory<iterator_t> factory_t;
-
- if (m.trees.size() == 1
-#ifdef BOOST_SPIRIT_NO_TREE_NODE_COLLAPSING
- && !(id.to_long() && m.trees.begin()->value.id().to_long())
-#endif
- )
- {
- // set rule_id's. There may have been multiple nodes created.
- // Because of root_node[] they may be left-most children of the top
- // node.
- container_t* punset_id = &m.trees;
- while (punset_id->size() > 0 &&
- punset_id->begin()->value.id() == 0)
- {
- punset_id->begin()->value.id(id);
- punset_id = &punset_id->begin()->children;
- }
-
- m.trees.begin()->value.is_root(false);
- }
- else
- {
- match_t newmatch(m.length(),
- m.trees.empty() ?
- factory_t::empty_node() :
- factory_t::create_node(first, last, false));
-
- std::swap(newmatch.trees.begin()->children, m.trees);
- // set this node and all it's unset children's rule_id
- newmatch.trees.begin()->value.id(id);
- for (cont_iterator_t i = newmatch.trees.begin();
- i != newmatch.trees.end();
- ++i)
- {
- if (i->value.id() == 0)
- i->value.id(id);
- }
- m = newmatch;
- }
- }
-
- template <typename FunctorT, typename MatchT>
- static void apply_op_to_match(FunctorT const& op, MatchT& m)
- {
- op(m);
- }
-};
-
-namespace impl {
-
- template <typename IteratorT, typename NodeFactoryT, typename T>
- struct tree_policy_selector<ast_match_policy<IteratorT, NodeFactoryT, T> >
- {
- typedef ast_tree_policy<
- ast_match_policy<IteratorT, NodeFactoryT, T>,
- NodeFactoryT,
- T
- > type;
- };
-
-} // namespace impl
-
-
-//////////////////////////////////
-struct gen_ast_node_parser_gen;
-
-template <typename T>
-struct gen_ast_node_parser
-: public unary<T, parser<gen_ast_node_parser<T> > >
-{
- typedef gen_ast_node_parser<T> self_t;
- typedef gen_ast_node_parser_gen parser_generator_t;
- typedef unary_parser_category parser_category_t;
-
- gen_ast_node_parser(T const& a)
- : unary<T, parser<gen_ast_node_parser<T> > >(a) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename ScannerT::iteration_policy_t iteration_policy_t;
- typedef typename ScannerT::match_policy_t::iterator_t iterator_t;
- typedef typename ScannerT::match_policy_t::factory_t factory_t;
- typedef ast_match_policy<iterator_t, factory_t> match_policy_t;
- typedef typename ScannerT::action_policy_t action_policy_t;
- typedef scanner_policies<
- iteration_policy_t,
- match_policy_t,
- action_policy_t
- > policies_t;
-
- return this->subject().parse(scan.change_policies(policies_t(scan)));
- }
-};
-
-//////////////////////////////////
-struct gen_ast_node_parser_gen
-{
- template <typename T>
- struct result {
-
- typedef gen_ast_node_parser<T> type;
- };
-
- template <typename T>
- static gen_ast_node_parser<T>
- generate(parser<T> const& s)
- {
- return gen_ast_node_parser<T>(s.derived());
- }
-
- template <typename T>
- gen_ast_node_parser<T>
- operator[](parser<T> const& s) const
- {
- return gen_ast_node_parser<T>(s.derived());
- }
-};
-
-//////////////////////////////////
-const gen_ast_node_parser_gen gen_ast_node_d = gen_ast_node_parser_gen();
-
-
-//////////////////////////////////
-struct root_node_op
-{
- template <typename MatchT>
- void operator()(MatchT& m) const
- {
- BOOST_SPIRIT_ASSERT(m.trees.size() > 0);
- m.trees.begin()->value.is_root(true);
- }
-};
-
-const node_parser_gen<root_node_op> root_node_d =
- node_parser_gen<root_node_op>();
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Parse functions for ASTs
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename AstFactoryT, typename IteratorT, typename ParserT,
- typename SkipT
->
-inline tree_parse_info<IteratorT, AstFactoryT>
-ast_parse(
- IteratorT const& first_,
- IteratorT const& last_,
- parser<ParserT> const& parser,
- SkipT const& skip_,
- AstFactoryT const & /*dummy_*/ = AstFactoryT())
-{
- typedef skip_parser_iteration_policy<SkipT> iter_policy_t;
- typedef ast_match_policy<IteratorT, AstFactoryT> ast_match_policy_t;
- typedef
- scanner_policies<iter_policy_t, ast_match_policy_t>
- scanner_policies_t;
- typedef scanner<IteratorT, scanner_policies_t> scanner_t;
-
- iter_policy_t iter_policy(skip_);
- scanner_policies_t policies(iter_policy);
- IteratorT first = first_;
- scanner_t scan(first, last_, policies);
- tree_match<IteratorT, AstFactoryT> hit = parser.derived().parse(scan);
- return tree_parse_info<IteratorT, AstFactoryT>(
- first, hit, hit && (first == last_), hit.length(), hit.trees);
-}
-
-//////////////////////////////////
-template <typename IteratorT, typename ParserT, typename SkipT>
-inline tree_parse_info<IteratorT>
-ast_parse(
- IteratorT const& first_,
- IteratorT const& last_,
- parser<ParserT> const& parser,
- SkipT const& skip_)
-{
- typedef node_val_data_factory<nil_t> default_factory_t;
- return ast_parse(first_, last_, parser, skip_, default_factory_t());
-}
-
-//////////////////////////////////
-template <typename IteratorT, typename ParserT>
-inline tree_parse_info<IteratorT>
-ast_parse(
- IteratorT const& first_,
- IteratorT const& last,
- parser<ParserT> const& parser)
-{
- typedef ast_match_policy<IteratorT> ast_match_policy_t;
- IteratorT first = first_;
- scanner<
- IteratorT,
- scanner_policies<iteration_policy, ast_match_policy_t>
- > scan(first, last);
- tree_match<IteratorT> hit = parser.derived().parse(scan);
- return tree_parse_info<IteratorT>(
- first, hit, hit && (first == last), hit.length(), hit.trees);
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT, typename SkipT>
-inline tree_parse_info<CharT const*>
-ast_parse(
- CharT const* str,
- parser<ParserT> const& parser,
- SkipT const& skip)
-{
- CharT const* last = str;
- while (*last)
- last++;
- return ast_parse(str, last, parser, skip);
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT>
-inline tree_parse_info<CharT const*>
-ast_parse(
- CharT const* str,
- parser<ParserT> const& parser)
-{
- CharT const* last = str;
- while (*last)
- {
- last++;
- }
- return ast_parse(str, last, parser);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
-
-#endif
-

Modified: branches/CMake/release/boost/spirit/tree/ast_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/tree/ast_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/tree/ast_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,38 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_TREE_AST_FWD_HPP)
-#define BOOST_SPIRIT_TREE_AST_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_AST_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_AST_FWD
 
-#include <boost/spirit/core/nil.hpp>
-
-namespace boost { namespace spirit {
-
- template <
- typename MatchPolicyT,
- typename NodeFactoryT,
- typename T = nil_t
- >
- struct ast_tree_policy;
-
- template <
- typename IteratorT,
- typename NodeFactoryT = node_val_data_factory<nil_t>,
- typename T = nil_t
- >
- struct ast_match_policy;
-
- template <typename T>
- struct gen_ast_node_parser;
-
- struct root_node_op;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_ast_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_ast_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_ast_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/tree/common.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/tree/common.hpp (original)
+++ branches/CMake/release/boost/spirit/tree/common.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,1583 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Daniel Nuffer
- Copyright (c) 2001-2007 Hartmut Kaiser
- Revised 2007, Copyright (c) Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_TREE_COMMON_HPP
-#define BOOST_SPIRIT_TREE_COMMON_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_COMMON
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_COMMON
 
-#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
-#include <vector>
-#else
-#include <list>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_common.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_common.hpp"
 #endif
 
-#if defined(BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES)
-#include <boost/pool/pool_alloc.hpp>
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_common.hpp>
 
-#include <algorithm>
-
-#include <boost/ref.hpp>
-#include <boost/call_traits.hpp>
-#include <boost/spirit/core.hpp>
-#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
-
-#if defined(BOOST_SPIRIT_DEBUG) && \
- (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
-#include <iostream>
-#include <boost/spirit/debug/debug_node.hpp>
-#endif
-
-#include <boost/spirit/tree/common_fwd.hpp>
-
-namespace boost { namespace spirit {
-
-template <typename T>
-void swap(tree_node<T>& a, tree_node<T>& b);
-
-template <typename T, typename V>
-void swap(node_iter_data<T, V>& a, node_iter_data<T, V>& b);
-
-namespace impl {
- template <typename T>
- inline void cp_swap(T& t1, T& t2);
-}
-
-template <typename T>
-struct tree_node
-{
- typedef T parse_node_t;
-
-#if !defined(BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES)
- typedef std::allocator<tree_node<T> > allocator_type;
-#elif !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- typedef boost::pool_allocator<tree_node<T> > allocator_type;
-#else
- typedef boost::fast_pool_allocator<tree_node<T> > allocator_type;
 #endif
-
-#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- typedef std::vector<tree_node<T>, allocator_type> children_t;
-#else
- typedef std::list<tree_node<T>, allocator_type> children_t;
-#endif // BOOST_SPIRIT_USE_LIST_FOR_TREES
-
- typedef typename children_t::iterator tree_iterator;
- typedef typename children_t::const_iterator const_tree_iterator;
-
- T value;
- children_t children;
-
- tree_node()
- : value()
- , children()
- {}
-
- explicit tree_node(T const& v)
- : value(v)
- , children()
- {}
-
- tree_node(T const& v, children_t const& c)
- : value(v)
- , children(c)
- {}
-
- void swap(tree_node<T>& x)
- {
- impl::cp_swap(value, x.value);
- impl::cp_swap(children, x.children);
- }
-
-// Intel V5.0.1 has a problem without this explicit operator=
- tree_node &operator= (tree_node const &rhs)
- {
- tree_node(rhs).swap(*this);
- return *this;
- }
-};
-
-#if defined(BOOST_SPIRIT_DEBUG) && \
- (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
-template <typename T>
-inline std::ostream&
-operator<<(std::ostream& o, tree_node<T> const& n)
-{
- static int depth = 0;
- o << "\n";
- for (int i = 0; i <= depth; ++i)
- {
- o << "\t";
- }
- o << "(depth = " << depth++ << " value = " << n.value;
- int c = 0;
- for (typename tree_node<T>::children_t::const_iterator it = n.children.begin();
- it != n.children.end(); ++it)
- {
- o << " children[" << c++ << "] = " << *it;
- }
- o << ")";
- --depth;
- return o;
-}
-#endif
-
-//////////////////////////////////
-template <typename IteratorT, typename ValueT>
-struct node_iter_data
-{
- typedef IteratorT iterator_t;
- typedef IteratorT /*const*/ const_iterator_t;
-
- node_iter_data()
- : first(), last(), is_root_(false), parser_id_(), value_()
- {}
-
- node_iter_data(IteratorT const& _first, IteratorT const& _last)
- : first(_first), last(_last), is_root_(false), parser_id_(), value_()
- {}
-
- void swap(node_iter_data& x)
- {
- impl::cp_swap(first, x.first);
- impl::cp_swap(last, x.last);
- impl::cp_swap(parser_id_, x.parser_id_);
- impl::cp_swap(is_root_, x.is_root_);
- impl::cp_swap(value_, x.value_);
- }
-
- IteratorT begin()
- {
- return first;
- }
-
- IteratorT const& begin() const
- {
- return first;
- }
-
- IteratorT end()
- {
- return last;
- }
-
- IteratorT const& end() const
- {
- return last;
- }
-
- bool is_root() const
- {
- return is_root_;
- }
-
- void is_root(bool b)
- {
- is_root_ = b;
- }
-
- parser_id id() const
- {
- return parser_id_;
- }
-
- void id(parser_id r)
- {
- parser_id_ = r;
- }
-
- ValueT const& value() const
- {
- return value_;
- }
-
- void value(ValueT const& v)
- {
- value_ = v;
- }
-private:
- IteratorT first, last;
- bool is_root_;
- parser_id parser_id_;
- ValueT value_;
-
-public:
-};
-
-#if defined(BOOST_SPIRIT_DEBUG) && \
- (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
-// value is default nil_t, so provide an operator<< for nil_t
-inline std::ostream&
-operator<<(std::ostream& o, nil_t const&)
-{
- return o;
-}
-
-template <typename IteratorT, typename ValueT>
-inline std::ostream&
-operator<<(std::ostream& o, node_iter_data<IteratorT, ValueT> const& n)
-{
- o << "(id = " << n.id() << " text = \"";
- typedef typename node_iter_data<IteratorT, ValueT>::const_iterator_t
- iterator_t;
- for (iterator_t it = n.begin(); it != n.end(); ++it)
- impl::token_printer(o, *it);
- o << "\" is_root = " << n.is_root()
- << /*" value = " << n.value() << */")";
- return o;
-}
-#endif
-
-//////////////////////////////////
-template <typename IteratorT = char const*, typename ValueT = nil_t>
-struct node_val_data
-{
- typedef
- typename boost::detail::iterator_traits<IteratorT>::value_type
- value_type;
-
-#if !defined(BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES)
- typedef std::allocator<value_type> allocator_type;
-#elif !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- typedef boost::pool_allocator<value_type> allocator_type;
-#else
- typedef boost::fast_pool_allocator<value_type> allocator_type;
-#endif
-
-#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- typedef std::vector<value_type, allocator_type> container_t;
-#else
- typedef std::list<value_type, allocator_type> container_t;
-#endif
-
- typedef typename container_t::iterator iterator_t;
- typedef typename container_t::const_iterator const_iterator_t;
-
- node_val_data()
- : text(), is_root_(false), parser_id_(), value_()
- {}
-
-#if defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
- node_val_data(IteratorT const& _first, IteratorT const& _last)
- : text(), is_root_(false), parser_id_(), value_()
- {
- std::copy(_first, _last, std::inserter(text, text.end()));
- }
-
- // This constructor is for building text out of iterators
- template <typename IteratorT2>
- node_val_data(IteratorT2 const& _first, IteratorT2 const& _last)
- : text(), is_root_(false), parser_id_(), value_()
- {
- std::copy(_first, _last, std::inserter(text, text.end()));
- }
-#else
- node_val_data(IteratorT const& _first, IteratorT const& _last)
- : text(_first, _last), is_root_(false), parser_id_(), value_()
- {}
-
- // This constructor is for building text out of iterators
- template <typename IteratorT2>
- node_val_data(IteratorT2 const& _first, IteratorT2 const& _last)
- : text(_first, _last), is_root_(false), parser_id_(), value_()
- {}
-#endif
-
- void swap(node_val_data& x)
- {
- impl::cp_swap(text, x.text);
- impl::cp_swap(is_root_, x.is_root_);
- impl::cp_swap(parser_id_, x.parser_id_);
- impl::cp_swap(value_, x.value_);
- }
-
- typename container_t::iterator begin()
- {
- return text.begin();
- }
-
- typename container_t::const_iterator begin() const
- {
- return text.begin();
- }
-
- typename container_t::iterator end()
- {
- return text.end();
- }
-
- typename container_t::const_iterator end() const
- {
- return text.end();
- }
-
- bool is_root() const
- {
- return is_root_;
- }
-
- void is_root(bool b)
- {
- is_root_ = b;
- }
-
- parser_id id() const
- {
- return parser_id_;
- }
-
- void id(parser_id r)
- {
- parser_id_ = r;
- }
-
- ValueT const& value() const
- {
- return value_;
- }
-
- void value(ValueT const& v)
- {
- value_ = v;
- }
-
-private:
- container_t text;
- bool is_root_;
- parser_id parser_id_;
- ValueT value_;
-};
-
-#if defined(BOOST_SPIRIT_DEBUG) && \
- (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
-template <typename IteratorT, typename ValueT>
-inline std::ostream&
-operator<<(std::ostream& o, node_val_data<IteratorT, ValueT> const& n)
-{
- o << "(id = " << n.id() << " text = \"";
- typedef typename node_val_data<IteratorT, ValueT>::const_iterator_t
- iterator_t;
- for (iterator_t it = n.begin(); it != n.end(); ++it)
- impl::token_printer(o, *it);
- o << "\" is_root = " << n.is_root()
- << " value = " << n.value() << ")";
- return o;
-}
-#endif
-
-template <typename T>
-inline void
-swap(tree_node<T>& a, tree_node<T>& b)
-{
- a.swap(b);
-}
-
-template <typename T, typename V>
-inline void
-swap(node_iter_data<T, V>& a, node_iter_data<T, V>& b)
-{
- a.swap(b);
-}
-
-//////////////////////////////////
-template <typename ValueT>
-class node_iter_data_factory
-{
-public:
- // This inner class is so that node_iter_data_factory can simulate
- // a template template parameter
- template <typename IteratorT>
- class factory
- {
- public:
- typedef IteratorT iterator_t;
- typedef node_iter_data<iterator_t, ValueT> node_t;
-
- static node_t create_node(iterator_t const& first, iterator_t const& last,
- bool /*is_leaf_node*/)
- {
- return node_t(first, last);
- }
-
- static node_t empty_node()
- {
- return node_t();
- }
-
- // precondition: ContainerT contains a tree_node<node_t>. And all
- // iterators in the container point to the same sequence.
- template <typename ContainerT>
- static node_t group_nodes(ContainerT const& nodes)
- {
- return node_t(nodes.begin()->value.begin(),
- nodes.back().value.end());
- }
- };
-};
-
-//////////////////////////////////
-template <typename ValueT>
-class node_val_data_factory
-{
-public:
- // This inner class is so that node_val_data_factory can simulate
- // a template template parameter
- template <typename IteratorT>
- class factory
- {
- public:
- typedef IteratorT iterator_t;
- typedef node_val_data<iterator_t, ValueT> node_t;
-
- static node_t create_node(iterator_t const& first, iterator_t const& last,
- bool is_leaf_node)
- {
- if (is_leaf_node)
- return node_t(first, last);
- else
- return node_t();
- }
-
- static node_t empty_node()
- {
- return node_t();
- }
-
- template <typename ContainerT>
- static node_t group_nodes(ContainerT const& nodes)
- {
- typename node_t::container_t c;
- typename ContainerT::const_iterator i_end = nodes.end();
- // copy all the nodes text into a new one
- for (typename ContainerT::const_iterator i = nodes.begin();
- i != i_end; ++i)
- {
- // See docs: reduced_node_d cannot be used with a
- // rule inside the [].
- assert(i->children.size() == 0);
- c.insert(c.end(), i->value.begin(), i->value.end());
- }
- return node_t(c.begin(), c.end());
- }
- };
-};
-
-//////////////////////////////////
-template <typename ValueT>
-class node_all_val_data_factory
-{
-public:
- // This inner class is so that node_all_val_data_factory can simulate
- // a template template parameter
- template <typename IteratorT>
- class factory
- {
- public:
- typedef IteratorT iterator_t;
- typedef node_val_data<iterator_t, ValueT> node_t;
-
- static node_t create_node(iterator_t const& first, iterator_t const& last,
- bool /*is_leaf_node*/)
- {
- return node_t(first, last);
- }
-
- static node_t empty_node()
- {
- return node_t();
- }
-
- template <typename ContainerT>
- static node_t group_nodes(ContainerT const& nodes)
- {
- typename node_t::container_t c;
- typename ContainerT::const_iterator i_end = nodes.end();
- // copy all the nodes text into a new one
- for (typename ContainerT::const_iterator i = nodes.begin();
- i != i_end; ++i)
- {
- assert(i->children.size() == 0);
- c.insert(c.end(), i->value.begin(), i->value.end());
- }
- return node_t(c.begin(), c.end());
- }
- };
-};
-
-namespace impl {
-
- ///////////////////////////////////////////////////////////////////////////
- // can't call unqualified swap from within classname::swap
- // as Koenig lookup rules will find only the classname::swap
- // member function not the global declaration, so use cp_swap
- // as a forwarding function (JM):
-#if __GNUC__ == 2
- using ::std::swap;
-#endif
- template <typename T>
- inline void cp_swap(T& t1, T& t2)
- {
- using std::swap;
- using boost::spirit::swap;
- using boost::swap;
- swap(t1, t2);
- }
-}
-
-//////////////////////////////////
-template <typename IteratorT, typename NodeFactoryT, typename T>
-class tree_match : public match<T>
-{
-public:
-
- typedef typename NodeFactoryT::template factory<IteratorT> node_factory_t;
- typedef typename node_factory_t::node_t parse_node_t;
- typedef tree_node<parse_node_t> node_t;
- typedef typename node_t::children_t container_t;
- typedef typename container_t::iterator tree_iterator;
- typedef typename container_t::const_iterator const_tree_iterator;
-
- typedef T attr_t;
- typedef typename boost::call_traits<T>::param_type param_type;
- typedef typename boost::call_traits<T>::reference reference;
- typedef typename boost::call_traits<T>::const_reference const_reference;
-
- tree_match()
- : match<T>(), trees()
- {}
-
- explicit
- tree_match(std::size_t length)
- : match<T>(length), trees()
- {}
-
- tree_match(std::size_t length, parse_node_t const& n)
- : match<T>(length), trees()
- {
- trees.push_back(node_t(n));
- }
-
- tree_match(std::size_t length, param_type val, parse_node_t const& n)
- : match<T>(length, val), trees()
- {
-#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- trees.reserve(10); // this is more or less an arbitrary number...
-#endif
- trees.push_back(node_t(n));
- }
-
- // attention, these constructors will change the second parameter!
- tree_match(std::size_t length, container_t& c)
- : match<T>(length), trees()
- {
- impl::cp_swap(trees, c);
- }
-
- tree_match(std::size_t length, param_type val, container_t& c)
- : match<T>(length, val), trees()
- {
- impl::cp_swap(trees, c);
- }
-
- template <typename T2>
- tree_match(match<T2> const& other)
- : match<T>(other), trees()
- {}
-
- template <typename T2, typename T3, typename T4>
- tree_match(tree_match<T2, T3, T4> const& other)
- : match<T>(other), trees()
- { impl::cp_swap(trees, other.trees); }
-
- template <typename T2>
- tree_match&
- operator=(match<T2> const& other)
- {
- match<T>::operator=(other);
- return *this;
- }
-
- template <typename T2, typename T3, typename T4>
- tree_match&
- operator=(tree_match<T2, T3, T4> const& other)
- {
- match<T>::operator=(other);
- impl::cp_swap(trees, other.trees);
- return *this;
- }
-
- tree_match(tree_match const& x)
- : match<T>(x), trees()
- {
- // use auto_ptr like ownership for the trees data member
- impl::cp_swap(trees, x.trees);
- }
-
- tree_match& operator=(tree_match const& x)
- {
- tree_match tmp(x);
- this->swap(tmp);
- return *this;
- }
-
- void swap(tree_match& x)
- {
- match<T>::swap(x);
- impl::cp_swap(trees, x.trees);
- }
-
- mutable container_t trees;
-};
-
-#if defined(BOOST_SPIRIT_DEBUG) && \
- (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
-template <typename IteratorT, typename NodeFactoryT, typename T>
-inline std::ostream&
-operator<<(std::ostream& o, tree_match<IteratorT, NodeFactoryT, T> const& m)
-{
- typedef
- typename tree_match<IteratorT, NodeFactoryT, T>::container_t::iterator
- iterator;
-
- o << "(length = " << (int)m.length();
- int c = 0;
- for (iterator i = m.trees.begin(); i != m.trees.end(); ++i)
- {
- o << " trees[" << c++ << "] = " << *i;
- }
- o << "\n)";
- return o;
-}
-#endif
-
-//////////////////////////////////
-struct tree_policy
-{
- template <typename FunctorT, typename MatchT>
- static void apply_op_to_match(FunctorT const& /*op*/, MatchT& /*m*/)
- {}
-
- template <typename MatchT, typename Iterator1T, typename Iterator2T>
- static void group_match(MatchT& /*m*/, parser_id const& /*id*/,
- Iterator1T const& /*first*/, Iterator2T const& /*last*/)
- {}
-
- template <typename MatchT>
- static void concat(MatchT& /*a*/, MatchT const& /*b*/)
- {}
-};
-
-//////////////////////////////////
-template <
- typename MatchPolicyT,
- typename IteratorT,
- typename NodeFactoryT,
- typename TreePolicyT,
- typename T
->
-struct common_tree_match_policy : public match_policy
-{
- common_tree_match_policy()
- {
- }
-
- template <typename PolicyT>
- common_tree_match_policy(PolicyT const & policies)
- : match_policy((match_policy const &)policies)
- {
- }
-
- template <typename U>
- struct result { typedef tree_match<IteratorT, NodeFactoryT, U> type; };
-
- typedef tree_match<IteratorT, NodeFactoryT, T> match_t;
- typedef IteratorT iterator_t;
- typedef TreePolicyT tree_policy_t;
- typedef NodeFactoryT factory_t;
-
- static const match_t no_match() { return match_t(); }
- static const match_t empty_match()
- { return match_t(0, tree_policy_t::empty_node()); }
-
- template <typename AttrT, typename Iterator1T, typename Iterator2T>
- static tree_match<IteratorT, NodeFactoryT, AttrT> create_match(
- std::size_t length,
- AttrT const& val,
- Iterator1T const& first,
- Iterator2T const& last)
- {
-#if defined(BOOST_SPIRIT_DEBUG) && \
- (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
-
- BOOST_SPIRIT_DEBUG_OUT << "\n>>> create_node(begin) <<<\n"
- "creating node text: \"";
- for (Iterator1T it = first; it != last; ++it)
- impl::token_printer(BOOST_SPIRIT_DEBUG_OUT, *it);
- BOOST_SPIRIT_DEBUG_OUT << "\"\n";
- BOOST_SPIRIT_DEBUG_OUT << ">>> create_node(end) <<<\n\n";
-#endif
- return tree_match<IteratorT, NodeFactoryT, AttrT>(length, val,
- tree_policy_t::create_node(length, first, last, true));
- }
-
- template <typename Match1T, typename Match2T>
- static void concat_match(Match1T& a, Match2T const& b)
- {
-#if defined(BOOST_SPIRIT_DEBUG) && \
- (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
-
- BOOST_SPIRIT_DEBUG_OUT << "\n>>> concat_match(begin) <<<\n";
- BOOST_SPIRIT_DEBUG_OUT << "tree a:\n" << a << "\n";
- BOOST_SPIRIT_DEBUG_OUT << "tree b:\n" << b << "\n";
- BOOST_SPIRIT_DEBUG_OUT << ">>> concat_match(end) <<<\n\n";
-#endif
- BOOST_SPIRIT_ASSERT(a && b);
- if (a.length() == 0)
- {
- a = b;
- return;
- }
- else if (b.length() == 0
-#ifdef BOOST_SPIRIT_NO_TREE_NODE_COLLAPSING
- && !b.trees.begin()->value.id().to_long()
-#endif
- )
- {
- return;
- }
- a.concat(b);
- tree_policy_t::concat(a, b);
- }
-
- template <typename MatchT, typename IteratorT2>
- void
- group_match(
- MatchT& m,
- parser_id const& id,
- IteratorT2 const& first,
- IteratorT2 const& last) const
- {
- if (!m) return;
-
-#if defined(BOOST_SPIRIT_DEBUG) && \
- (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_TREES)
-
- BOOST_SPIRIT_DEBUG_OUT << "\n>>> group_match(begin) <<<\n"
- "new node(" << id << ") \"";
- for (IteratorT2 it = first; it != last; ++it)
- impl::token_printer(BOOST_SPIRIT_DEBUG_OUT, *it);
- BOOST_SPIRIT_DEBUG_OUT << "\"\n";
- BOOST_SPIRIT_DEBUG_OUT << "new child tree (before grouping):\n" << m << "\n";
-
- tree_policy_t::group_match(m, id, first, last);
-
- BOOST_SPIRIT_DEBUG_OUT << "new child tree (after grouping):\n" << m << "\n";
- BOOST_SPIRIT_DEBUG_OUT << ">>> group_match(end) <<<\n\n";
-#else
- tree_policy_t::group_match(m, id, first, last);
-#endif
- }
-};
-
-//////////////////////////////////
-template <typename MatchPolicyT, typename NodeFactoryT>
-struct common_tree_tree_policy
-{
- typedef typename MatchPolicyT::iterator_t iterator_t;
- typedef typename MatchPolicyT::match_t match_t;
- typedef typename NodeFactoryT::template factory<iterator_t> factory_t;
- typedef typename factory_t::node_t node_t;
-
- template <typename Iterator1T, typename Iterator2T>
- static node_t
- create_node(std::size_t /*length*/, Iterator1T const& first,
- Iterator2T const& last, bool leaf_node)
- {
- return factory_t::create_node(first, last, leaf_node);
- }
-
- static node_t
- empty_node()
- {
- return factory_t::empty_node();
- }
-
- template <typename FunctorT>
- static void apply_op_to_match(FunctorT const& op, match_t& m)
- {
- op(m);
- }
-};
-
-//////////////////////////////////
-// directives to modify how the parse tree is generated
-
-struct no_tree_gen_node_parser_gen;
-
-template <typename T>
-struct no_tree_gen_node_parser
-: public unary<T, parser<no_tree_gen_node_parser<T> > >
-{
- typedef no_tree_gen_node_parser<T> self_t;
- typedef no_tree_gen_node_parser_gen parser_generator_t;
- typedef unary_parser_category parser_category_t;
-
- no_tree_gen_node_parser(T const& a)
- : unary<T, parser<no_tree_gen_node_parser<T> > >(a) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scanner) const
- {
- typedef typename ScannerT::iteration_policy_t iteration_policy_t;
- typedef match_policy match_policy_t;
- typedef typename ScannerT::action_policy_t action_policy_t;
- typedef scanner_policies<
- iteration_policy_t,
- match_policy_t,
- action_policy_t
- > policies_t;
-
- return this->subject().parse(scanner.change_policies(policies_t(scanner)));
- }
-};
-
-struct no_tree_gen_node_parser_gen
-{
- template <typename T>
- struct result {
-
- typedef no_tree_gen_node_parser<T> type;
- };
-
- template <typename T>
- static no_tree_gen_node_parser<T>
- generate(parser<T> const& s)
- {
- return no_tree_gen_node_parser<T>(s.derived());
- }
-
- template <typename T>
- no_tree_gen_node_parser<T>
- operator[](parser<T> const& s) const
- {
- return no_tree_gen_node_parser<T>(s.derived());
- }
-};
-
-const no_tree_gen_node_parser_gen no_node_d = no_tree_gen_node_parser_gen();
-
-//////////////////////////////////
-
-struct leaf_node_parser_gen;
-
-template<typename T>
-struct leaf_node_parser
-: public unary<T, parser<leaf_node_parser<T> > >
-{
- typedef leaf_node_parser<T> self_t;
- typedef leaf_node_parser_gen parser_generator_t;
- typedef unary_parser_category parser_category_t;
-
- leaf_node_parser(T const& a)
- : unary<T, parser<leaf_node_parser<T> > >(a) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scanner) const
- {
- typedef scanner_policies< typename ScannerT::iteration_policy_t,
- match_policy, typename ScannerT::action_policy_t > policies_t;
-
- typedef typename ScannerT::iterator_t iterator_t;
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename result_t::node_factory_t factory_t;
-
- iterator_t from = scanner.first;
- result_t hit = impl::contiguous_parser_parse<result_t>(this->subject(),
- scanner.change_policies(policies_t(scanner,match_policy(),scanner)),
- scanner);
-
- if (hit)
- return result_t(hit.length(),
- factory_t::create_node(from, scanner.first, true));
- else
- return result_t(hit.length());
- }
-};
-
-struct leaf_node_parser_gen
-{
- template <typename T>
- struct result {
-
- typedef leaf_node_parser<T> type;
- };
-
- template <typename T>
- static leaf_node_parser<T>
- generate(parser<T> const& s)
- {
- return leaf_node_parser<T>(s.derived());
- }
-
- template <typename T>
- leaf_node_parser<T>
- operator[](parser<T> const& s) const
- {
- return leaf_node_parser<T>(s.derived());
- }
-};
-
-const leaf_node_parser_gen leaf_node_d = leaf_node_parser_gen();
-const leaf_node_parser_gen token_node_d = leaf_node_parser_gen();
-
-//////////////////////////////////
-namespace impl {
-
- template <typename MatchPolicyT>
- struct tree_policy_selector
- {
- typedef tree_policy type;
- };
-
-} // namespace impl
-
-//////////////////////////////////
-template <typename NodeParserT>
-struct node_parser_gen;
-
-template <typename T, typename NodeParserT>
-struct node_parser
-: public unary<T, parser<node_parser<T, NodeParserT> > >
-{
- typedef node_parser<T, NodeParserT> self_t;
- typedef node_parser_gen<NodeParserT> parser_generator_t;
- typedef unary_parser_category parser_category_t;
-
- node_parser(T const& a)
- : unary<T, parser<node_parser<T, NodeParserT> > >(a) {}
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<T, ScannerT>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scanner) const
- {
- typename parser_result<self_t, ScannerT>::type hit = this->subject().parse(scanner);
- if (hit)
- {
- impl::tree_policy_selector<typename ScannerT::match_policy_t>::type::apply_op_to_match(NodeParserT(), hit);
- }
- return hit;
- }
-};
-
-template <typename NodeParserT>
-struct node_parser_gen
-{
- template <typename T>
- struct result {
-
- typedef node_parser<T, NodeParserT> type;
- };
-
- template <typename T>
- static node_parser<T, NodeParserT>
- generate(parser<T> const& s)
- {
- return node_parser<T, NodeParserT>(s.derived());
- }
-
- template <typename T>
- node_parser<T, NodeParserT>
- operator[](parser<T> const& s) const
- {
- return node_parser<T, NodeParserT>(s.derived());
- }
-};
-//////////////////////////////////
-struct reduced_node_op
-{
- template <typename MatchT>
- void operator()(MatchT& m) const
- {
- if (m.trees.size() == 1)
- {
- m.trees.begin()->children.clear();
- }
- else if (m.trees.size() > 1)
- {
- typedef typename MatchT::node_factory_t node_factory_t;
- m = MatchT(m.length(), node_factory_t::group_nodes(m.trees));
- }
- }
-};
-
-const node_parser_gen<reduced_node_op> reduced_node_d =
- node_parser_gen<reduced_node_op>();
-
-
-struct discard_node_op
-{
- template <typename MatchT>
- void operator()(MatchT& m) const
- {
- m.trees.clear();
- }
-};
-
-const node_parser_gen<discard_node_op> discard_node_d =
- node_parser_gen<discard_node_op>();
-
-struct infix_node_op
-{
- template <typename MatchT>
- void operator()(MatchT& m) const
- {
- typedef typename MatchT::container_t container_t;
- typedef typename MatchT::container_t::iterator iter_t;
- typedef typename MatchT::container_t::value_type value_t;
-
- using std::swap;
- using boost::swap;
- using boost::spirit::swap;
-
- // copying the tree nodes is expensive, since it may copy a whole
- // tree. swapping them is cheap, so swap the nodes we want into
- // a new container of children.
- container_t new_children;
- std::size_t length = 0;
- std::size_t tree_size = m.trees.size();
-
- // the infix_node_d[] make no sense for nodes with no subnodes
- BOOST_SPIRIT_ASSERT(tree_size >= 1);
-
- bool keep = true;
-#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- new_children.reserve((tree_size+1)/2);
-#endif
- iter_t i_end = m.trees.end();
- for (iter_t i = m.trees.begin(); i != i_end; ++i)
- {
- if (keep) {
- // adjust the length
- length += std::distance((*i).value.begin(), (*i).value.end());
-
- // move the child node
- new_children.push_back(value_t());
- swap(new_children.back(), *i);
- keep = false;
- }
- else {
- // ignore this child node
- keep = true;
- }
- }
-
- m = MatchT(length, new_children);
- }
-};
-
-const node_parser_gen<infix_node_op> infix_node_d =
- node_parser_gen<infix_node_op>();
-
-struct discard_first_node_op
-{
- template <typename MatchT>
- void operator()(MatchT& m) const
- {
- typedef typename MatchT::container_t container_t;
- typedef typename MatchT::container_t::iterator iter_t;
- typedef typename MatchT::container_t::value_type value_t;
-
- using std::swap;
- using boost::swap;
- using boost::spirit::swap;
-
- // copying the tree nodes is expensive, since it may copy a whole
- // tree. swapping them is cheap, so swap the nodes we want into
- // a new container of children, instead of saying
- // m.trees.erase(m.trees.begin()) because, on a container_t that will
- // cause all the nodes afterwards to be copied into the previous
- // position.
- container_t new_children;
- std::size_t length = 0;
- std::size_t tree_size = m.trees.size();
-
- // the discard_first_node_d[] make no sense for nodes with no subnodes
- BOOST_SPIRIT_ASSERT(tree_size >= 1);
-
- if (tree_size > 1) {
-#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- new_children.reserve(tree_size - 1);
-#endif
- iter_t i = m.trees.begin(), i_end = m.trees.end();
- for (++i; i != i_end; ++i)
- {
- // adjust the length
- length += std::distance((*i).value.begin(), (*i).value.end());
-
- // move the child node
- new_children.push_back(value_t());
- swap(new_children.back(), *i);
- }
- }
- else {
- // if there was a tree and now there isn't any, insert an empty node
- iter_t i = m.trees.begin();
-
- // This isn't entirely correct, since the empty node will reference
- // the end of the discarded node, but I currently don't see any way to
- // get at the begin of the node following this subnode.
- // This should be safe anyway because the it shouldn't get dereferenced
- // under any circumstances.
- typedef typename value_t::parse_node_t::iterator_t iterator_type;
- iterator_type it = (*i).value.end();
-
- new_children.push_back(
- value_t(typename value_t::parse_node_t(it, it)));
- }
-
- m = MatchT(length, new_children);
- }
-};
-
-const node_parser_gen<discard_first_node_op> discard_first_node_d =
- node_parser_gen<discard_first_node_op>();
-
-struct discard_last_node_op
-{
- template <typename MatchT>
- void operator()(MatchT& m) const
- {
- typedef typename MatchT::container_t container_t;
- typedef typename MatchT::container_t::iterator iter_t;
- typedef typename MatchT::container_t::value_type value_t;
-
- using std::swap;
- using boost::swap;
- using boost::spirit::swap;
-
- // copying the tree nodes is expensive, since it may copy a whole
- // tree. swapping them is cheap, so swap the nodes we want into
- // a new container of children, instead of saying
- // m.trees.erase(m.trees.begin()) because, on a container_t that will
- // cause all the nodes afterwards to be copied into the previous
- // position.
- container_t new_children;
- std::size_t length = 0;
- std::size_t tree_size = m.trees.size();
-
- // the discard_last_node_d[] make no sense for nodes with no subnodes
- BOOST_SPIRIT_ASSERT(tree_size >= 1);
-
- if (tree_size > 1) {
- m.trees.pop_back();
-#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- new_children.reserve(tree_size - 1);
-#endif
- iter_t i_end = m.trees.end();
- for (iter_t i = m.trees.begin(); i != i_end; ++i)
- {
- // adjust the length
- length += std::distance((*i).value.begin(), (*i).value.end());
-
- // move the child node
- new_children.push_back(value_t());
- swap(new_children.back(), *i);
- }
- }
- else {
- // if there was a tree and now there isn't any, insert an empty node
- iter_t i = m.trees.begin();
-
- typedef typename value_t::parse_node_t::iterator_t iterator_type;
- iterator_type it = (*i).value.begin();
-
- new_children.push_back(
- value_t(typename value_t::parse_node_t(it, it)));
- }
-
- m = MatchT(length, new_children);
- }
-};
-
-const node_parser_gen<discard_last_node_op> discard_last_node_d =
- node_parser_gen<discard_last_node_op>();
-
-struct inner_node_op
-{
- template <typename MatchT>
- void operator()(MatchT& m) const
- {
- typedef typename MatchT::container_t container_t;
- typedef typename MatchT::container_t::iterator iter_t;
- typedef typename MatchT::container_t::value_type value_t;
-
- using std::swap;
- using boost::swap;
- using boost::spirit::swap;
-
- // copying the tree nodes is expensive, since it may copy a whole
- // tree. swapping them is cheap, so swap the nodes we want into
- // a new container of children, instead of saying
- // m.trees.erase(m.trees.begin()) because, on a container_t that will
- // cause all the nodes afterwards to be copied into the previous
- // position.
- container_t new_children;
- std::size_t length = 0;
- std::size_t tree_size = m.trees.size();
-
- // the inner_node_d[] make no sense for nodes with less then 2 subnodes
- BOOST_SPIRIT_ASSERT(tree_size >= 2);
-
- if (tree_size > 2) {
- m.trees.pop_back(); // erase the last element
-#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
- new_children.reserve(tree_size - 1);
-#endif
- iter_t i = m.trees.begin(); // skip over the first element
- iter_t i_end = m.trees.end();
- for (++i; i != i_end; ++i)
- {
- // adjust the length
- length += std::distance((*i).value.begin(), (*i).value.end());
-
- // move the child node
- new_children.push_back(value_t());
- swap(new_children.back(), *i);
- }
- }
- else {
- // if there was a tree and now there isn't any, insert an empty node
- iter_t i = m.trees.begin(); // skip over the first element
-
- typedef typename value_t::parse_node_t::iterator_t iterator_type;
- iterator_type it = (*++i).value.begin();
-
- new_children.push_back(
- value_t(typename value_t::parse_node_t(it, it)));
- }
-
- m = MatchT(length, new_children);
- }
-};
-
-const node_parser_gen<inner_node_op> inner_node_d =
- node_parser_gen<inner_node_op>();
-
-
-//////////////////////////////////
-// action_directive_parser and action_directive_parser_gen
-// are meant to be used as a template to create directives that
-// generate action classes. For example access_match and
-// access_node. The ActionParserT template parameter must be
-// a class that has an innter class called action that is templated
-// on the parser type and the action type.
-template <typename ActionParserT>
-struct action_directive_parser_gen;
-
-template <typename T, typename ActionParserT>
-struct action_directive_parser
-: public unary<T, parser<action_directive_parser<T, ActionParserT> > >
-{
- typedef action_directive_parser<T, ActionParserT> self_t;
- typedef action_directive_parser_gen<ActionParserT> parser_generator_t;
- typedef unary_parser_category parser_category_t;
-
- action_directive_parser(T const& a)
- : unary<T, parser<action_directive_parser<T, ActionParserT> > >(a) {}
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<T, ScannerT>::type type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scanner) const
- {
- return this->subject().parse(scanner);
- }
-
- template <typename ActionT>
- typename ActionParserT::template action<action_directive_parser<T, ActionParserT>, ActionT>
- operator[](ActionT const& actor) const
- {
- typedef typename
- ActionParserT::template action<action_directive_parser, ActionT>
- action_t;
- return action_t(*this, actor);
- }
-};
-
-//////////////////////////////////
-template <typename ActionParserT>
-struct action_directive_parser_gen
-{
- template <typename T>
- struct result {
-
- typedef action_directive_parser<T, ActionParserT> type;
- };
-
- template <typename T>
- static action_directive_parser<T, ActionParserT>
- generate(parser<T> const& s)
- {
- return action_directive_parser<T, ActionParserT>(s.derived());
- }
-
- template <typename T>
- action_directive_parser<T, ActionParserT>
- operator[](parser<T> const& s) const
- {
- return action_directive_parser<T, ActionParserT>(s.derived());
- }
-};
-
-//////////////////////////////////
-// Calls the attached action passing it the match from the parser
-// and the first and last iterators.
-// The inner template class is used to simulate template-template parameters
-// (declared in common_fwd.hpp).
-template <typename ParserT, typename ActionT>
-struct access_match_action::action
-: public unary<ParserT, parser<access_match_action::action<ParserT, ActionT> > >
-{
- typedef action_parser_category parser_category;
- typedef action<ParserT, ActionT> self_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- action( ParserT const& subject,
- ActionT const& actor_);
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scanner) const;
-
- ActionT const &predicate() const;
-
- private:
- ActionT actor;
-};
-
-//////////////////////////////////
-template <typename ParserT, typename ActionT>
-access_match_action::action<ParserT, ActionT>::action(
- ParserT const& subject,
- ActionT const& actor_)
-: unary<ParserT, parser<access_match_action::action<ParserT, ActionT> > >(subject)
-, actor(actor_)
-{}
-
-//////////////////////////////////
-template <typename ParserT, typename ActionT>
-template <typename ScannerT>
-typename parser_result<access_match_action::action<ParserT, ActionT>, ScannerT>::type
-access_match_action::action<ParserT, ActionT>::
-parse(ScannerT const& scan) const
-{
- typedef typename ScannerT::iterator_t iterator_t;
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- if (!scan.at_end())
- {
- iterator_t save = scan.first;
- result_t hit = this->subject().parse(scan);
- actor(hit, save, scan.first);
- return hit;
- }
- return scan.no_match();
-}
-
-//////////////////////////////////
-template <typename ParserT, typename ActionT>
-ActionT const &access_match_action::action<ParserT, ActionT>::predicate() const
-{
- return actor;
-}
-
-//////////////////////////////////
-const action_directive_parser_gen<access_match_action> access_match_d
- = action_directive_parser_gen<access_match_action>();
-
-
-
-//////////////////////////////////
-// Calls the attached action passing it the node from the parser
-// and the first and last iterators
-// The inner template class is used to simulate template-template parameters
-// (declared in common_fwd.hpp).
-template <typename ParserT, typename ActionT>
-struct access_node_action::action
-: public unary<ParserT, parser<access_node_action::action<ParserT, ActionT> > >
-{
- typedef action_parser_category parser_category;
- typedef action<ParserT, ActionT> self_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<ParserT, ScannerT>::type type;
- };
-
- action( ParserT const& subject,
- ActionT const& actor_);
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scanner) const;
-
- ActionT const &predicate() const;
-
- private:
- ActionT actor;
-};
-
-//////////////////////////////////
-template <typename ParserT, typename ActionT>
-access_node_action::action<ParserT, ActionT>::action(
- ParserT const& subject,
- ActionT const& actor_)
-: unary<ParserT, parser<access_node_action::action<ParserT, ActionT> > >(subject)
-, actor(actor_)
-{}
-
-//////////////////////////////////
-template <typename ParserT, typename ActionT>
-template <typename ScannerT>
-typename parser_result<access_node_action::action<ParserT, ActionT>, ScannerT>::type
-access_node_action::action<ParserT, ActionT>::
-parse(ScannerT const& scan) const
-{
- typedef typename ScannerT::iterator_t iterator_t;
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- if (!scan.at_end())
- {
- iterator_t save = scan.first;
- result_t hit = this->subject().parse(scan);
- if (hit && hit.trees.size() > 0)
- actor(*hit.trees.begin(), save, scan.first);
- return hit;
- }
- return scan.no_match();
-}
-
-//////////////////////////////////
-template <typename ParserT, typename ActionT>
-ActionT const &access_node_action::action<ParserT, ActionT>::predicate() const
-{
- return actor;
-}
-
-//////////////////////////////////
-const action_directive_parser_gen<access_node_action> access_node_d
- = action_directive_parser_gen<access_node_action>();
-
-
-
-//////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// tree_parse_info
-//
-// Results returned by the tree parse functions:
-//
-// stop: points to the final parse position (i.e parsing
-// processed the input up to this point).
-//
-// match: true if parsing is successful. This may be full:
-// the parser consumed all the input, or partial:
-// the parser consumed only a portion of the input.
-//
-// full: true when we have a full match (i.e the parser
-// consumed all the input.
-//
-// length: The number of characters consumed by the parser.
-// This is valid only if we have a successful match
-// (either partial or full). A negative value means
-// that the match is unsucessful.
-//
-// trees: Contains the root node(s) of the tree.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename IteratorT,
- typename NodeFactoryT,
- typename T
->
-struct tree_parse_info
-{
- IteratorT stop;
- bool match;
- bool full;
- std::size_t length;
- typename tree_match<IteratorT, NodeFactoryT, T>::container_t trees;
-
- tree_parse_info()
- : stop()
- , match(false)
- , full(false)
- , length(0)
- , trees()
- {}
-
- template <typename IteratorT2>
- tree_parse_info(tree_parse_info<IteratorT2> const& pi)
- : stop(pi.stop)
- , match(pi.match)
- , full(pi.full)
- , length(pi.length)
- , trees()
- {
- using std::swap;
- using boost::swap;
- using boost::spirit::swap;
-
- // use auto_ptr like ownership for the trees data member
- swap(trees, pi.trees);
- }
-
- tree_parse_info(
- IteratorT stop_,
- bool match_,
- bool full_,
- std::size_t length_,
- typename tree_match<IteratorT, NodeFactoryT, T>::container_t trees_)
- : stop(stop_)
- , match(match_)
- , full(full_)
- , length(length_)
- , trees()
- {
- using std::swap;
- using boost::swap;
- using boost::spirit::swap;
-
- // use auto_ptr like ownership for the trees data member
- swap(trees, trees_);
- }
-};
-
-}} // namespace boost::spirit
-
-#endif
-

Modified: branches/CMake/release/boost/spirit/tree/common_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/tree/common_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/tree/common_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,92 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_TREE_COMMON_FWD_HPP)
-#define BOOST_SPIRIT_TREE_COMMON_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_COMMON_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_COMMON_FWD
 
-#include <boost/spirit/core/nil.hpp>
-
-namespace boost { namespace spirit {
-
- template <typename T>
- struct tree_node;
-
- template <typename IteratorT = char const*, typename ValueT = nil_t>
- struct node_iter_data;
-
- template <typename ValueT = nil_t>
- class node_iter_data_factory;
-
- template <typename ValueT = nil_t>
- class node_val_data_factory;
-
- template <typename ValueT = nil_t>
- class node_all_val_data_factory;
-
- template <
- typename IteratorT,
- typename NodeFactoryT = node_val_data_factory<nil_t>,
- typename T = nil_t
- >
- class tree_match;
-
- struct tree_policy;
-
- template <
- typename MatchPolicyT,
- typename IteratorT,
- typename NodeFactoryT,
- typename TreePolicyT,
- typename T = nil_t
- >
- struct common_tree_match_policy;
-
- template <typename MatchPolicyT, typename NodeFactoryT>
- struct common_tree_tree_policy;
-
- template <typename T>
- struct no_tree_gen_node_parser;
-
- template <typename T>
- struct leaf_node_parser;
-
- template <typename T, typename NodeParserT>
- struct node_parser;
-
- struct discard_node_op;
- struct reduced_node_op;
- struct infix_node_op;
- struct discard_first_node_op;
- struct discard_last_node_op;
- struct inner_node_op;
-
- template <typename T, typename ActionParserT>
- struct action_directive_parser;
-
- struct access_match_action
- {
- template <typename ParserT, typename ActionT>
- struct action;
- };
-
- struct access_node_action
- {
- template <typename ParserT, typename ActionT>
- struct action;
- };
-
- template <
- typename IteratorT = char const *,
- typename NodeFactoryT = node_val_data_factory<nil_t>,
- typename T = nil_t
- >
- struct tree_parse_info;
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_common_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_common_fwd.hpp"
+#endif
 
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_common_fwd.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/tree/parse_tree.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/tree/parse_tree.hpp (original)
+++ branches/CMake/release/boost/spirit/tree/parse_tree.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,293 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Daniel Nuffer
- Copyright (c) 2001-2007 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_TREE_PARSE_TREE_HPP
-#define BOOST_SPIRIT_TREE_PARSE_TREE_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSE_TREE
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSE_TREE
 
-#include <boost/spirit/tree/common.hpp>
-#include <boost/spirit/core/scanner/scanner.hpp>
-
-#include <boost/spirit/tree/parse_tree_fwd.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-
-//////////////////////////////////
-// pt_match_policy is simply an id so the correct specialization of tree_policy can be found.
-template <
- typename IteratorT,
- typename NodeFactoryT,
- typename T
->
-struct pt_match_policy :
- public common_tree_match_policy<
- pt_match_policy<IteratorT, NodeFactoryT, T>,
- IteratorT,
- NodeFactoryT,
- pt_tree_policy<
- pt_match_policy<IteratorT, NodeFactoryT, T>,
- NodeFactoryT,
- T
- >,
- T
- >
-{
- typedef
- common_tree_match_policy<
- pt_match_policy<IteratorT, NodeFactoryT, T>,
- IteratorT,
- NodeFactoryT,
- pt_tree_policy<
- pt_match_policy<IteratorT, NodeFactoryT, T>,
- NodeFactoryT,
- T
- >,
- T
- >
- common_tree_match_policy_;
-
- pt_match_policy()
- {
- }
-
- template <typename PolicyT>
- pt_match_policy(PolicyT const & policies)
- : common_tree_match_policy_(policies)
- {
- }
-};
-
-//////////////////////////////////
-template <typename MatchPolicyT, typename NodeFactoryT, typename T>
-struct pt_tree_policy :
- public common_tree_tree_policy<MatchPolicyT, NodeFactoryT>
-{
- typedef typename MatchPolicyT::match_t match_t;
- typedef typename MatchPolicyT::iterator_t iterator_t;
-
- template<typename MatchAT, typename MatchBT>
- static void concat(MatchAT& a, MatchBT const& b)
- {
- typedef typename match_t::attr_t attr_t;
- BOOST_SPIRIT_ASSERT(a && b);
-
- std::copy(b.trees.begin(), b.trees.end(),
- std::back_insert_iterator<typename match_t::container_t>(a.trees));
- }
-
- template <typename MatchT, typename Iterator1T, typename Iterator2T>
- static void group_match(MatchT& m, parser_id const& id,
- Iterator1T const& first, Iterator2T const& last)
- {
- if (!m)
- return;
-
- typedef typename NodeFactoryT::template factory<iterator_t> factory_t;
- typedef typename tree_match<iterator_t, NodeFactoryT, T>::container_t
- container_t;
- typedef typename container_t::iterator cont_iterator_t;
-
- match_t newmatch(m.length(),
- factory_t::create_node(first, last, false));
-
- std::swap(newmatch.trees.begin()->children, m.trees);
- // set this node and all it's unset children's rule_id
- newmatch.trees.begin()->value.id(id);
- for (cont_iterator_t i = newmatch.trees.begin()->children.begin();
- i != newmatch.trees.begin()->children.end();
- ++i)
- {
- if (i->value.id() == 0)
- i->value.id(id);
- }
- m = newmatch;
- }
-
- template <typename FunctorT, typename MatchT>
- static void apply_op_to_match(FunctorT const& op, MatchT& m)
- {
- op(m);
- }
-};
-
-namespace impl {
-
- template <typename IteratorT, typename NodeFactoryT, typename T>
- struct tree_policy_selector<pt_match_policy<IteratorT, NodeFactoryT, T> >
- {
- typedef pt_tree_policy<
- pt_match_policy<IteratorT, NodeFactoryT, T>,
- NodeFactoryT,
- T
- > type;
- };
-
-} // namespace impl
-
-
-//////////////////////////////////
-struct gen_pt_node_parser_gen;
-
-template <typename T>
-struct gen_pt_node_parser
-: public unary<T, parser<gen_pt_node_parser<T> > >
-{
- typedef gen_pt_node_parser<T> self_t;
- typedef gen_pt_node_parser_gen parser_generator_t;
- typedef unary_parser_category parser_category_t;
-
- gen_pt_node_parser(T const& a)
- : unary<T, parser<gen_pt_node_parser<T> > >(a) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename ScannerT::iteration_policy_t iteration_policy_t;
- typedef typename ScannerT::match_policy_t::iterator_t iterator_t;
- typedef typename ScannerT::match_policy_t::factory_t factory_t;
- typedef pt_match_policy<iterator_t, factory_t> match_policy_t;
- typedef typename ScannerT::action_policy_t action_policy_t;
- typedef scanner_policies<
- iteration_policy_t,
- match_policy_t,
- action_policy_t
- > policies_t;
-
- return this->subject().parse(scan.change_policies(policies_t(scan)));
- }
-};
-
-//////////////////////////////////
-struct gen_pt_node_parser_gen
-{
- template <typename T>
- struct result {
-
- typedef gen_pt_node_parser<T> type;
- };
-
- template <typename T>
- static gen_pt_node_parser<T>
- generate(parser<T> const& s)
- {
- return gen_pt_node_parser<T>(s.derived());
- }
-
- template <typename T>
- gen_pt_node_parser<T>
- operator[](parser<T> const& s) const
- {
- return gen_pt_node_parser<T>(s.derived());
- }
-};
-
-//////////////////////////////////
-const gen_pt_node_parser_gen gen_pt_node_d = gen_pt_node_parser_gen();
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Parse functions for parse trees
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename NodeFactoryT, typename IteratorT, typename ParserT,
- typename SkipT
->
-inline tree_parse_info<IteratorT, NodeFactoryT>
-pt_parse(
- IteratorT const& first_,
- IteratorT const& last,
- parser<ParserT> const& p,
- SkipT const& skip,
- NodeFactoryT const& /*dummy_*/ = NodeFactoryT())
-{
- typedef skip_parser_iteration_policy<SkipT> iter_policy_t;
- typedef pt_match_policy<IteratorT, NodeFactoryT> pt_match_policy_t;
- typedef
- scanner_policies<iter_policy_t, pt_match_policy_t>
- scanner_policies_t;
- typedef scanner<IteratorT, scanner_policies_t> scanner_t;
-
- iter_policy_t iter_policy(skip);
- scanner_policies_t policies(iter_policy);
- IteratorT first = first_;
- scanner_t scan(first, last, policies);
- tree_match<IteratorT, NodeFactoryT> hit = p.derived().parse(scan);
- return tree_parse_info<IteratorT, NodeFactoryT>(
- first, hit, hit && (first == last), hit.length(), hit.trees);
-}
-
-template <typename IteratorT, typename ParserT, typename SkipT>
-inline tree_parse_info<IteratorT>
-pt_parse(
- IteratorT const& first,
- IteratorT const& last,
- parser<ParserT> const& p,
- SkipT const& skip)
-{
- typedef node_val_data_factory<nil_t> default_node_factory_t;
- return pt_parse(first, last, p, skip, default_node_factory_t());
-}
-
-//////////////////////////////////
-template <typename IteratorT, typename ParserT>
-inline tree_parse_info<IteratorT>
-pt_parse(
- IteratorT const& first_,
- IteratorT const& last,
- parser<ParserT> const& parser)
-{
- typedef pt_match_policy<IteratorT> pt_match_policy_t;
- IteratorT first = first_;
- scanner<
- IteratorT,
- scanner_policies<iteration_policy, pt_match_policy_t>
- > scan(first, last);
- tree_match<IteratorT> hit = parser.derived().parse(scan);
- return tree_parse_info<IteratorT>(
- first, hit, hit && (first == last), hit.length(), hit.trees);
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT, typename SkipT>
-inline tree_parse_info<CharT const*>
-pt_parse(
- CharT const* str,
- parser<ParserT> const& p,
- SkipT const& skip)
-{
- CharT const* last = str;
- while (*last)
- last++;
- return pt_parse(str, last, p, skip);
-}
-
-//////////////////////////////////
-template <typename CharT, typename ParserT>
-inline tree_parse_info<CharT const*>
-pt_parse(
- CharT const* str,
- parser<ParserT> const& parser)
-{
- CharT const* last = str;
- while (*last)
- {
- last++;
- }
- return pt_parse(str, last, parser);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_parse_tree.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_parse_tree.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_parse_tree.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/tree/parse_tree_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/tree/parse_tree_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/tree/parse_tree_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,34 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_TREE_PARSE_TREE_FWD_HPP)
-#define BOOST_SPIRIT_TREE_PARSE_TREE_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSE_TREE_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSE_TREE_FWD
 
-namespace boost { namespace spirit {
-
- template <
- typename MatchPolicyT,
- typename NodeFactoryT,
- typename T = nil_t
- >
- struct pt_tree_policy;
-
- template <
- typename IteratorT,
- typename NodeFactoryT = node_val_data_factory<nil_t>,
- typename T = nil_t
- >
- struct pt_match_policy;
-
- template <typename T>
- struct gen_pt_node_parser;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_parse_tree_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_parse_tree_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_parse_tree_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/tree/parse_tree_utils.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/tree/parse_tree_utils.hpp (original)
+++ branches/CMake/release/boost/spirit/tree/parse_tree_utils.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,63 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Daniel Nuffer
- Copyright (c) 2001-2007 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_PARSE_TREE_UTILS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_PARSE_TREE_UTILS
 
-#if !defined(PARSE_TREE_UTILS_HPP)
-#define PARSE_TREE_UTILS_HPP
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_parse_tree_utils.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_parse_tree_utils.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_parse_tree_utils.hpp>
 
-#include <utility> // for std::pair
-
-#include <boost/spirit/tree/parse_tree.hpp> // needed for parse tree generation
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost {
-namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The function 'get_first_leaf' returnes a reference to the first leaf node
-// of the given parsetree.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T>
-tree_node<T> const &
-get_first_leaf (tree_node<T> const &node);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The function 'find_node' finds a specified node through recursive search.
-// If the return value is true, the variable to which points the parameter
-// 'found_node' will contain the address of the node with the given rule_id.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T>
-bool
-find_node (tree_node<T> const &node, parser_id node_to_search,
- tree_node<T> const **found_node);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// The function 'get_node_range' return a pair of iterators pointing at the
-// range, which containes the elements of a specified node. It's very useful
-// for locating all information related with a specified node.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename T>
-bool
-get_node_range (tree_node<T> const &node, parser_id node_to_search,
- std::pair<typename tree_node<T>::const_tree_iterator,
- typename tree_node<T>::const_tree_iterator> &nodes);
-
-///////////////////////////////////////////////////////////////////////////////
-} // namespace spirit
-} // namespace boost
-
-#include "boost/spirit/tree/impl/parse_tree_utils.ipp"
-
-#endif // !defined(PARSE_TREE_UTILS_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/tree/tree_to_xml.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/tree/tree_to_xml.hpp (original)
+++ branches/CMake/release/boost/spirit/tree/tree_to_xml.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,111 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2007 Hartmut Kaiser
- Copyright (c) 2001-2003 Daniel Nuffer
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_TREE_TO_XML
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TREE_TO_XML
 
-#if !defined(TREE_TO_XML_HPP)
-#define TREE_TO_XML_HPP
-
-namespace boost { namespace spirit {
-
- namespace impl {
- template <typename CharT> struct default_string;
- }
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Dump a parse tree as a xml stream
-//
-// The functions 'tree_to_xml' can be used to output a parse tree as a xml
-// stream into the given ostream. The parameters have the following
-// meaning:
-//
-// mandatory parameters:
-// ostrm The output stream used for streaming the parse tree.
-// tree The parse tree to output.
-//
-// optional parameters:
-// input_line The input line from which the parse tree was
-// generated (if given, it is used to output a comment
-// containing this line).
-// id_to_name A map, which is used for converting the rule id's contained
-// in the parse tree to readable strings. Here a auxiliary
-// associative container can be used, which maps a rule_id to
-// a std::string (i.e. a std::map<rule_id, std::string>).
-// get_token_id
-// A function or functor, which takes an instance of a token
-// and which should return a token id (i.e. something like
-// 'int f(char const c)').
-// get_token_value
-// A function or functor, which takes an instance of a token
-// and which should return a readable representation of this
-// token (i.e. something like 'std::string f(char const c)').
-//
-// The structure of the generated xml stream conforms to the DTD given in the
-// file 'parsetree.dtd'. This file is located in the spirit/tree directory.
-//
-///////////////////////////////////////////////////////////////////////////////
-
- template <
- typename CharT, typename TreeNodeT, typename AssocContainerT,
- typename GetIdT, typename GetValueT
- >
- inline void
- basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
- std::basic_string<CharT> const &input_line,
- AssocContainerT const& id_to_name, GetIdT const &get_token_id,
- GetValueT const &get_token_value);
-
- template <typename CharT, typename TreeNodeT, typename AssocContainerT>
- inline void
- basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
- std::basic_string<CharT> const &input_line,
- AssocContainerT const& id_to_name);
-
- template <typename CharT, typename TreeNodeT>
- inline void
- basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
- std::basic_string<CharT> const &input_line =
- impl::default_string<CharT>::get());
-
- ///////////////////////////////////////////////////////////////////////////
- template <
- typename TreeNodeT, typename AssocContainerT,
- typename GetIdT, typename GetValueT
- >
- inline void
- tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
- std::string const &input_line, AssocContainerT const& id_to_name,
- GetIdT const &get_token_id, GetValueT const &get_token_value)
- {
- basic_tree_to_xml<char>(ostrm, tree, input_line, id_to_name,
- get_token_id, get_token_value);
- }
-
- template <typename TreeNodeT, typename AssocContainerT>
- inline void
- tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
- std::string const &input_line, AssocContainerT const& id_to_name)
- {
- basic_tree_to_xml<char>(ostrm, tree, input_line, id_to_name);
- }
-
- template <typename TreeNodeT>
- inline void
- tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
- std::string const &input_line = "")
- {
- basic_tree_to_xml<char>(ostrm, tree, input_line);
- }
-
-}} // namespace boost::spirit
-
-#include <boost/spirit/tree/impl/tree_to_xml.ipp>
-
-#endif // !defined(TREE_TO_XML_HPP)
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_tree_to_xml.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_tree_to_xml.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_tree_to_xml.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/tree/typeof.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/tree/typeof.hpp (original)
+++ branches/CMake/release/boost/spirit/tree/typeof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,81 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_TREE_TYPEOF_HPP)
-#define BOOST_SPIRIT_TREE_TYPEOF_HPP
-
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/spirit/core/typeof.hpp>
-
-#include <boost/spirit/tree/common_fwd.hpp>
-#include <boost/spirit/tree/parse_tree_fwd.hpp>
-#include <boost/spirit/tree/ast_fwd.hpp>
-
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-
-// common.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_node,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_iter_data,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_iter_data_factory,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_val_data_factory,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_all_val_data_factory,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_match,3)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::tree_policy)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::common_tree_match_policy,4)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::common_tree_tree_policy,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::no_tree_gen_node_parser,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::leaf_node_parser,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_parser,2)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::discard_node_op)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::reduced_node_op)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::infix_node_op)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::discard_first_node_op)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::discard_last_node_op)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::inner_node_op)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::action_directive_parser,2)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::access_match_action)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::access_match_action::action,2)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::access_node_action)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::access_node_action::action,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_parse_info,3)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_iter_data,1)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::node_iter_data_factory<boost::spirit::nil_t>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::node_val_data_factory<boost::spirit::nil_t>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::node_all_val_data_factory<boost::spirit::nil_t>)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_match,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_match,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_parse_info,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_parse_info,1)
-
-
-// parse_tree.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::pt_tree_policy,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::pt_match_policy,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::gen_pt_node_parser,1)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::pt_match_policy,1)
-
-
-// ast.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ast_tree_policy,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ast_match_policy,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::gen_ast_node_parser,1)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::root_node_op)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ast_match_policy,1)
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
 
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_typeof.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/utility.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility.hpp (original)
+++ branches/CMake/release/boost/spirit/utility.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,41 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2001-2003 Daniel Nuffer
- Copyright (c) 2001-2003 Hartmut Kaiser
- Copyright (c) 2002-2003 Martin Wille
- Copyright (c) 2002 Juan Carlos Arevalo-Baeza
- Copyright (c) 2002 Raghavendra Satish
- Copyright (c) 2002 Jeff Westfahl
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_UTILITY_MAIN_HPP)
-#define BOOST_SPIRIT_UTILITY_MAIN_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_UTILITY
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_UTILITY
 
-#include <boost/spirit/version.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_utility.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_utility.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_utility.hpp>
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// Master header for Spirit.Utilities
-//
-///////////////////////////////////////////////////////////////////////////////
-
-// Utility.Parsers
-#include <boost/spirit/utility/chset.hpp>
-#include <boost/spirit/utility/chset_operators.hpp>
-#include <boost/spirit/utility/escape_char.hpp>
-#include <boost/spirit/utility/functor_parser.hpp>
-#include <boost/spirit/utility/loops.hpp>
-#include <boost/spirit/utility/confix.hpp>
-#include <boost/spirit/utility/lists.hpp>
-#include <boost/spirit/utility/distinct.hpp>
-
-// Utility.Support
-#include <boost/spirit/utility/flush_multi_pass.hpp>
-#include <boost/spirit/utility/scoped_lock.hpp>
-
-
-#endif // !defined(BOOST_SPIRIT_UTILITY_MAIN_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/utility/chset.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/chset.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/chset.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,183 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2001-2003 Daniel Nuffer
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_CHSET_HPP
-#define BOOST_SPIRIT_CHSET_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CHSET
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CHSET
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/shared_ptr.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/utility/impl/chset/basic_chset.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-namespace utility { namespace impl {
-
- // This is here because some compilers choke on out-of-line member
- // template functions. And we don't want to put the whole algorithm
- // in the chset constructor in the class definition.
- template <typename CharT, typename CharT2>
- void construct_chset(boost::shared_ptr<basic_chset<CharT> >& ptr,
- CharT2 const* definition);
-
-}} // namespace utility::impl
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// chset class
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT = char>
-class chset: public char_parser<chset<CharT> > {
-
-public:
- chset();
- chset(chset const& arg_);
- explicit chset(CharT arg_);
- explicit chset(anychar_parser arg_);
- explicit chset(nothing_parser arg_);
- explicit chset(chlit<CharT> const& arg_);
- explicit chset(range<CharT> const& arg_);
- explicit chset(negated_char_parser<chlit<CharT> > const& arg_);
- explicit chset(negated_char_parser<range<CharT> > const& arg_);
-
- template <typename CharT2>
- explicit chset(CharT2 const* definition)
- : ptr(new basic_chset<CharT>())
- {
- utility::impl::construct_chset(ptr, definition);
- }
- ~chset();
-
- chset& operator=(chset const& rhs);
- chset& operator=(CharT rhs);
- chset& operator=(anychar_parser rhs);
- chset& operator=(nothing_parser rhs);
- chset& operator=(chlit<CharT> const& rhs);
- chset& operator=(range<CharT> const& rhs);
- chset& operator=(negated_char_parser<chlit<CharT> > const& rhs);
- chset& operator=(negated_char_parser<range<CharT> > const& rhs);
-
- void set(range<CharT> const& arg_);
- void set(negated_char_parser<chlit<CharT> > const& arg_);
- void set(negated_char_parser<range<CharT> > const& arg_);
-
- void clear(range<CharT> const& arg_);
- void clear(negated_char_parser<range<CharT> > const& arg_);
- bool test(CharT ch) const;
- chset& inverse();
- void swap(chset& x);
-
- chset& operator|=(chset const& x);
- chset& operator&=(chset const& x);
- chset& operator-=(chset const& x);
- chset& operator^=(chset const& x);
-
-private:
-
- boost::shared_ptr<basic_chset<CharT> > ptr;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Generator functions
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT>
-inline chset<CharT>
-chset_p(chlit<CharT> const& arg_)
-{ return chset<CharT>(arg_); }
-
-//////////////////////////////////
-template <typename CharT>
-inline chset<CharT>
-chset_p(range<CharT> const& arg_)
-{ return chset<CharT>(arg_); }
-
-template <typename CharT>
-inline chset<CharT>
-chset_p(negated_char_parser<chlit<CharT> > const& arg_)
-{ return chset<CharT>(arg_); }
-
-template <typename CharT>
-inline chset<CharT>
-chset_p(negated_char_parser<range<CharT> > const& arg_)
-{ return chset<CharT>(arg_); }
-
-//////////////////////////////////
-inline chset<char>
-chset_p(char const* init)
-{ return chset<char>(init); }
-
-//////////////////////////////////
-inline chset<wchar_t>
-chset_p(wchar_t const* init)
-{ return chset<wchar_t>(init); }
-
-//////////////////////////////////
-inline chset<char>
-chset_p(char ch)
-{ return chset<char>(ch); }
-
-//////////////////////////////////
-inline chset<wchar_t>
-chset_p(wchar_t ch)
-{ return chset<wchar_t>(ch); }
-
-//////////////////////////////////
-inline chset<int>
-chset_p(int ch)
-{ return chset<int>(ch); }
-
-//////////////////////////////////
-inline chset<unsigned int>
-chset_p(unsigned int ch)
-{ return chset<unsigned int>(ch); }
-
-//////////////////////////////////
-inline chset<short>
-chset_p(short ch)
-{ return chset<short>(ch); }
-
-#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
-//////////////////////////////////
-inline chset<unsigned short>
-chset_p(unsigned short ch)
-{ return chset<unsigned short>(ch); }
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_chset.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_chset.hpp"
 #endif
-//////////////////////////////////
-inline chset<long>
-chset_p(long ch)
-{ return chset<long>(ch); }
-
-//////////////////////////////////
-inline chset<unsigned long>
-chset_p(unsigned long ch)
-{ return chset<unsigned long>(ch); }
 
-#ifdef BOOST_HAS_LONG_LONG
-//////////////////////////////////
-inline chset< ::boost::long_long_type>
-chset_p( ::boost::long_long_type ch)
-{ return chset< ::boost::long_long_type>(ch); }
-
-//////////////////////////////////
-inline chset< ::boost::ulong_long_type>
-chset_p( ::boost::ulong_long_type ch)
-{ return chset< ::boost::ulong_long_type>(ch); }
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#include <boost/spirit/include/classic_chset.hpp>
 
 #endif
-
-#include <boost/spirit/utility/impl/chset.ipp>
-#include <boost/spirit/utility/chset_operators.hpp>

Modified: branches/CMake/release/boost/spirit/utility/chset_operators.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/chset_operators.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/chset_operators.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,398 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- Copyright (c) 2001-2003 Daniel Nuffer
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_CHSET_OPERATORS_HPP
-#define BOOST_SPIRIT_CHSET_OPERATORS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CHSET_OPERATORS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CHSET_OPERATORS
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/utility/chset.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// chset free operators
-//
-// Where a and b are both chsets, implements:
-//
-// a | b, a & b, a - b, a ^ b
-//
-// Where a is a chset, implements:
-//
-// ~a
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator~(chset<CharT> const& a);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(chset<CharT> const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(chset<CharT> const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(chset<CharT> const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(chset<CharT> const& a, chset<CharT> const& b);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// range <--> chset free operators
-//
-// Where a is a chset and b is a range, and vice-versa, implements:
-//
-// a | b, a & b, a - b, a ^ b
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(chset<CharT> const& a, range<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(chset<CharT> const& a, range<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(chset<CharT> const& a, range<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(chset<CharT> const& a, range<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(range<CharT> const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(range<CharT> const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(range<CharT> const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(range<CharT> const& a, chset<CharT> const& b);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// chlit <--> chset free operators
-//
-// Where a is a chset and b is a chlit, and vice-versa, implements:
-//
-// a | b, a & b, a - b, a ^ b
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(chset<CharT> const& a, chlit<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(chset<CharT> const& a, chlit<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(chset<CharT> const& a, chlit<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(chset<CharT> const& a, chlit<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(chlit<CharT> const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(chlit<CharT> const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(chlit<CharT> const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(chlit<CharT> const& a, chset<CharT> const& b);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// negated_char_parser<range> <--> chset free operators
-//
-// Where a is a chset and b is a range, and vice-versa, implements:
-//
-// a | b, a & b, a - b, a ^ b
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// negated_char_parser<chlit> <--> chset free operators
-//
-// Where a is a chset and b is a chlit, and vice-versa, implements:
-//
-// a | b, a & b, a - b, a ^ b
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// literal primitives <--> chset free operators
-//
-// Where a is a chset and b is a literal primitive,
-// and vice-versa, implements:
-//
-// a | b, a & b, a - b, a ^ b
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(chset<CharT> const& a, CharT b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(chset<CharT> const& a, CharT b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(chset<CharT> const& a, CharT b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(chset<CharT> const& a, CharT b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(CharT a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(CharT a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(CharT a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(CharT a, chset<CharT> const& b);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// anychar_parser <--> chset free operators
-//
-// Where a is chset and b is a anychar_parser, and vice-versa, implements:
-//
-// a | b, a & b, a - b, a ^ b
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(chset<CharT> const& a, anychar_parser b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(chset<CharT> const& a, anychar_parser b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(chset<CharT> const& a, anychar_parser b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(chset<CharT> const& a, anychar_parser b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(anychar_parser a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(anychar_parser a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(anychar_parser a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(anychar_parser a, chset<CharT> const& b);
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// nothing_parser <--> chset free operators
-//
-// Where a is chset and b is nothing_parser, and vice-versa, implements:
-//
-// a | b, a & b, a - b, a ^ b
-//
-///////////////////////////////////////////////////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(chset<CharT> const& a, nothing_parser b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(chset<CharT> const& a, nothing_parser b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(chset<CharT> const& a, nothing_parser b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(chset<CharT> const& a, nothing_parser b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator|(nothing_parser a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator&(nothing_parser a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator-(nothing_parser a, chset<CharT> const& b);
-
-//////////////////////////////////
-template <typename CharT>
-chset<CharT>
-operator^(nothing_parser a, chset<CharT> const& b);
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_chset_operators.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_chset_operators.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_chset_operators.hpp>
 
-#include <boost/spirit/utility/impl/chset_operators.ipp>
+#endif

Modified: branches/CMake/release/boost/spirit/utility/confix.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/confix.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/confix.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,392 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_CONFIX_HPP
-#define BOOST_SPIRIT_CONFIX_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CONFIX
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CONFIX
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/config.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-#include <boost/spirit/core/composite/operators.hpp>
-
-#include <boost/spirit/utility/confix_fwd.hpp>
-#include <boost/spirit/utility/impl/confix.ipp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// confix_parser class
-//
-// Parses a sequence of 3 sub-matches. This class may
-// be used to parse structures, where the opening part is possibly
-// contained in the expression part and the whole sequence is only
-// parsed after seeing the closing part matching the first opening
-// subsequence. Example: C-comments:
-//
-// /* This is a C-comment */
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template<typename NestedT = non_nested, typename LexemeT = non_lexeme>
-struct confix_parser_gen;
-
-template <
- typename OpenT, typename ExprT, typename CloseT, typename CategoryT,
- typename NestedT, typename LexemeT
->
-struct confix_parser :
- public parser<
- confix_parser<OpenT, ExprT, CloseT, CategoryT, NestedT, LexemeT>
- >
-{
- typedef
- confix_parser<OpenT, ExprT, CloseT, CategoryT, NestedT, LexemeT>
- self_t;
-
- confix_parser(OpenT const &open_, ExprT const &expr_, CloseT const &close_)
- : open(open_), expr(expr_), close(close_)
- {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- return impl::confix_parser_type<CategoryT>::
- parse(NestedT(), LexemeT(), *this, scan, open, expr, close);
- }
-
-private:
-
- typename as_parser<OpenT>::type::embed_t open;
- typename as_parser<ExprT>::type::embed_t expr;
- typename as_parser<CloseT>::type::embed_t close;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Confix parser generator template
-//
-// This is a helper for generating a correct confix_parser<> from
-// auxiliary parameters. There are the following types supported as
-// parameters yet: parsers, single characters and strings (see
-// as_parser).
-//
-// If the body parser is an action_parser_category type parser (a parser
-// with an attached semantic action) we have to do something special. This
-// happens, if the user wrote something like:
-//
-// confix_p(open, body[f], close)
-//
-// where 'body' is the parser matching the body of the confix sequence
-// and 'f' is a functor to be called after matching the body. If we would
-// do nothing, the resulting code would parse the sequence as follows:
-//
-// start >> (body[f] - close) >> close
-//
-// what in most cases is not what the user expects.
-// (If this _is_ what you've expected, then please use the confix_p
-// generator function 'direct()', which will inhibit
-// re-attaching the actor to the body parser).
-//
-// To make the confix parser behave as expected:
-//
-// start >> (body - close)[f] >> close
-//
-// the actor attached to the 'body' parser has to be re-attached to the
-// (body - close) parser construct, which will make the resulting confix
-// parser 'do the right thing'. This refactoring is done by the help of
-// the refactoring parsers (see the files refactoring.[hi]pp).
-//
-// Additionally special care must be taken, if the body parser is a
-// unary_parser_category type parser as
-//
-// confix_p(open, *anychar_p, close)
-//
-// which without any refactoring would result in
-//
-// start >> (*anychar_p - close) >> close
-//
-// and will not give the expected result (*anychar_p will eat up all the
-// input up to the end of the input stream). So we have to refactor this
-// into:
-//
-// start >> *(anychar_p - close) >> close
-//
-// what will give the correct result.
-//
-// The case, where the body parser is a combination of the two mentioned
-// problems (i.e. the body parser is a unary parser with an attached
-// action), is handled accordingly too:
-//
-// confix_p(start, (*anychar_p)[f], end)
-//
-// will be parsed as expected:
-//
-// start >> (*(anychar_p - end))[f] >> end.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template<typename NestedT, typename LexemeT>
-struct confix_parser_gen
-{
- // Generic generator function for creation of concrete confix parsers
-
- template<typename StartT, typename ExprT, typename EndT>
- struct paren_op_result_type
- {
- typedef confix_parser<
- typename as_parser<StartT>::type,
- typename as_parser<ExprT>::type,
- typename as_parser<EndT>::type,
- typename as_parser<ExprT>::type::parser_category_t,
- NestedT,
- LexemeT
- > type;
- };
-
- template<typename StartT, typename ExprT, typename EndT>
- typename paren_op_result_type<StartT, ExprT, EndT>::type
- operator()(StartT const &start_, ExprT const &expr_, EndT const &end_) const
- {
- typedef typename paren_op_result_type<StartT,ExprT,EndT>::type
- return_t;
-
- return return_t(
- as_parser<StartT>::convert(start_),
- as_parser<ExprT>::convert(expr_),
- as_parser<EndT>::convert(end_)
- );
- }
-
- // Generic generator function for creation of concrete confix parsers
- // which have an action directly attached to the ExprT part of the
- // parser (see comment above, no automatic refactoring)
-
- template<typename StartT, typename ExprT, typename EndT>
- struct direct_result_type
- {
- typedef confix_parser<
- typename as_parser<StartT>::type,
- typename as_parser<ExprT>::type,
- typename as_parser<EndT>::type,
- plain_parser_category, // do not re-attach action
- NestedT,
- LexemeT
- > type;
- };
-
- template<typename StartT, typename ExprT, typename EndT>
- typename direct_result_type<StartT,ExprT,EndT>::type
- direct(StartT const &start_, ExprT const &expr_, EndT const &end_) const
- {
- typedef typename direct_result_type<StartT,ExprT,EndT>::type
- return_t;
-
- return return_t(
- as_parser<StartT>::convert(start_),
- as_parser<ExprT>::convert(expr_),
- as_parser<EndT>::convert(end_)
- );
- }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Predefined non_nested confix parser generators
-//
-///////////////////////////////////////////////////////////////////////////////
-
-const confix_parser_gen<non_nested, non_lexeme> confix_p =
- confix_parser_gen<non_nested, non_lexeme>();
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Comments are special types of confix parsers
-//
-// Comment parser generator template. This is a helper for generating a
-// correct confix_parser<> from auxiliary parameters, which is able to
-// parse comment constructs: (StartToken >> Comment text >> EndToken).
-//
-// There are the following types supported as parameters yet: parsers,
-// single characters and strings (see as_parser).
-//
-// There are two diffenerent predefined comment parser generators
-// (comment_p and comment_nest_p, see below), which may be used for
-// creating special comment parsers in two different ways.
-//
-// If these are used with one parameter, a comment starting with the given
-// first parser parameter up to the end of the line is matched. So for
-// instance the following parser matches C++ style comments:
-//
-// comment_p("//").
-//
-// If these are used with two parameters, a comment starting with the
-// first parser parameter up to the second parser parameter is matched.
-// For instance a C style comment parser should be constrcuted as:
-//
-// comment_p("/*", "*/").
-//
-// Please note, that a comment is parsed implicitly as if the whole
-// comment_p(...) statement were embedded into a lexeme_d[] directive.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template<typename NestedT>
-struct comment_parser_gen
-{
- // Generic generator function for creation of concrete comment parsers
- // from an open token. The newline parser eol_p is used as the
- // closing token.
-
- template<typename StartT>
- struct paren_op1_result_type
- {
- typedef confix_parser<
- typename as_parser<StartT>::type,
- kleene_star<anychar_parser>,
- alternative<eol_parser, end_parser>,
- unary_parser_category, // there is no action to re-attach
- NestedT,
- is_lexeme // insert implicit lexeme_d[]
- >
- type;
- };
-
- template<typename StartT>
- typename paren_op1_result_type<StartT>::type
- operator() (StartT const &start_) const
- {
- typedef typename paren_op1_result_type<StartT>::type
- return_t;
-
- return return_t(
- as_parser<StartT>::convert(start_),
- *anychar_p,
- eol_p | end_p
- );
- }
-
- // Generic generator function for creation of concrete comment parsers
- // from an open and a close tokens.
-
- template<typename StartT, typename EndT>
- struct paren_op2_result_type
- {
- typedef confix_parser<
- typename as_parser<StartT>::type,
- kleene_star<anychar_parser>,
- typename as_parser<EndT>::type,
- unary_parser_category, // there is no action to re-attach
- NestedT,
- is_lexeme // insert implicit lexeme_d[]
- > type;
- };
-
- template<typename StartT, typename EndT>
- typename paren_op2_result_type<StartT,EndT>::type
- operator() (StartT const &start_, EndT const &end_) const
- {
- typedef typename paren_op2_result_type<StartT,EndT>::type
- return_t;
-
- return return_t(
- as_parser<StartT>::convert(start_),
- *anychar_p,
- as_parser<EndT>::convert(end_)
- );
- }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Predefined non_nested comment parser generator
-//
-///////////////////////////////////////////////////////////////////////////////
-
-const comment_parser_gen<non_nested> comment_p =
- comment_parser_gen<non_nested>();
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// comment_nest_parser class
-//
-// Parses a nested comments.
-// Example: nested PASCAL-comments:
-//
-// { This is a { nested } PASCAL-comment }
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template<typename OpenT, typename CloseT>
-struct comment_nest_parser:
- public parser<comment_nest_parser<OpenT, CloseT> >
-{
- typedef comment_nest_parser<OpenT, CloseT> self_t;
-
- comment_nest_parser(OpenT const &open_, CloseT const &close_):
- open(open_), close(close_)
- {}
-
- template<typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const &scan) const
- {
- return do_parse(
- open >> *(*this | (anychar_p - close)) >> close,
- scan);
- }
-
-private:
- template<typename ParserT, typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- do_parse(ParserT const &p, ScannerT const &scan) const
- {
- return
- impl::contiguous_parser_parse<
- typename parser_result<ParserT, ScannerT>::type
- >(p, scan, scan);
- }
-
- typename as_parser<OpenT>::type::embed_t open;
- typename as_parser<CloseT>::type::embed_t close;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Predefined nested comment parser generator
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template<typename OpenT, typename CloseT>
-struct comment_nest_p_result
-{
- typedef comment_nest_parser<
- typename as_parser<OpenT>::type,
- typename as_parser<CloseT>::type
- > type;
-};
-
-template<typename OpenT, typename CloseT>
-inline typename comment_nest_p_result<OpenT,CloseT>::type
-comment_nest_p(OpenT const &open, CloseT const &close)
-{
- typedef typename comment_nest_p_result<OpenT,CloseT>::type
- result_t;
-
- return result_t(
- as_parser<OpenT>::convert(open),
- as_parser<CloseT>::convert(close)
- );
-}
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_confix.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_confix.hpp"
+#endif
 
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_confix.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/utility/confix_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/confix_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/confix_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,35 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_CONFIX_FWD_HPP)
-#define BOOST_SPIRIT_CONFIX_FWD_HPP
-
-#include <boost/spirit/core/parser.hpp>
-
-namespace boost { namespace spirit {
-
- struct is_nested;
- struct non_nested;
- struct is_lexeme;
- struct non_lexeme;
-
- template <
- typename OpenT, typename ExprT, typename CloseT,
- typename CategoryT = plain_parser_category,
- typename NestedT = non_nested, typename LexemeT = non_lexeme
- >
- struct confix_parser;
-
- template<typename OpenT, typename CloseT>
- struct comment_nest_parser;
-
-}} // namespace boost::spirit
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_CONFIX_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_CONFIX_FWD
 
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_confix_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_confix_fwd.hpp"
 #endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_confix_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/utility/distinct.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/distinct.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/distinct.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,227 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2003 Vaclav Vesely
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_DISTINCT_HPP)
-#define BOOST_SPIRIT_DISTINCT_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_DISTINCT
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_DISTINCT
 
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/primitives/primitives.hpp>
-#include <boost/spirit/core/composite/operators.hpp>
-#include <boost/spirit/core/composite/directives.hpp>
-#include <boost/spirit/core/composite/epsilon.hpp>
-#include <boost/spirit/core/non_terminal/rule.hpp>
-#include <boost/spirit/utility/chset.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_distinct.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_distinct.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_distinct.hpp>
 
-#include <boost/spirit/utility/distinct_fwd.hpp>
-
-namespace boost {
- namespace spirit {
-//-----------------------------------------------------------------------------
-// distinct_parser class
-
-template <typename CharT, typename TailT>
-class distinct_parser
-{
-public:
- typedef
- contiguous<
- sequence<
- chseq<CharT const*>,
- negated_empty_match_parser<
- TailT
- >
- >
- >
- result_t;
-
- distinct_parser()
- : tail(chset<CharT>())
- {
- }
-
- explicit distinct_parser(parser<TailT> const & tail_)
- : tail(tail_.derived())
- {
- }
-
- explicit distinct_parser(CharT const* letters)
- : tail(chset_p(letters))
- {
- }
-
- result_t operator()(CharT const* str) const
- {
- return lexeme_d[chseq_p(str) >> ~epsilon_p(tail)];
- }
-
- TailT tail;
-};
-
-//-----------------------------------------------------------------------------
-// distinct_directive class
-
-template <typename CharT, typename TailT>
-class distinct_directive
-{
-public:
- template<typename ParserT>
- struct result {
- typedef
- contiguous<
- sequence<
- ParserT,
- negated_empty_match_parser<
- TailT
- >
- >
- >
- type;
- };
-
- distinct_directive()
- : tail(chset<CharT>())
- {
- }
-
- explicit distinct_directive(CharT const* letters)
- : tail(chset_p(letters))
- {
- }
-
- explicit distinct_directive(parser<TailT> const & tail_)
- : tail(tail_.derived())
- {
- }
-
- template<typename ParserT>
- typename result<typename as_parser<ParserT>::type>::type
- operator[](ParserT const &subject) const
- {
- return
- lexeme_d[as_parser<ParserT>::convert(subject) >> ~epsilon_p(tail)];
- }
-
- TailT tail;
-};
-
-//-----------------------------------------------------------------------------
-// dynamic_distinct_parser class
-
-template <typename ScannerT>
-class dynamic_distinct_parser
-{
-public:
- typedef typename ScannerT::value_t char_t;
-
- typedef
- rule<
- typename no_actions_scanner<
- typename lexeme_scanner<ScannerT>::type
- >::type
- >
- tail_t;
-
- typedef
- contiguous<
- sequence<
- chseq<char_t const*>,
- negated_empty_match_parser<
- tail_t
- >
- >
- >
- result_t;
-
- dynamic_distinct_parser()
- : tail(nothing_p)
- {
- }
-
- template<typename ParserT>
- explicit dynamic_distinct_parser(parser<ParserT> const & tail_)
- : tail(tail_.derived())
- {
- }
-
- explicit dynamic_distinct_parser(char_t const* letters)
- : tail(chset_p(letters))
- {
- }
-
- result_t operator()(char_t const* str) const
- {
- return lexeme_d[chseq_p(str) >> ~epsilon_p(tail)];
- }
-
- tail_t tail;
-};
-
-//-----------------------------------------------------------------------------
-// dynamic_distinct_directive class
-
-template <typename ScannerT>
-class dynamic_distinct_directive
-{
-public:
- typedef typename ScannerT::value_t char_t;
-
- typedef
- rule<
- typename no_actions_scanner<
- typename lexeme_scanner<ScannerT>::type
- >::type
- >
- tail_t;
-
- template<typename ParserT>
- struct result {
- typedef
- contiguous<
- sequence<
- ParserT,
- negated_empty_match_parser<
- tail_t
- >
- >
- >
- type;
- };
-
- dynamic_distinct_directive()
- : tail(nothing_p)
- {
- }
-
- template<typename ParserT>
- explicit dynamic_distinct_directive(parser<ParserT> const & tail_)
- : tail(tail_.derived())
- {
- }
-
- explicit dynamic_distinct_directive(char_t const* letters)
- : tail(chset_p(letters))
- {
- }
-
- template<typename ParserT>
- typename result<typename as_parser<ParserT>::type>::type
- operator[](ParserT const &subject) const
- {
- return
- lexeme_d[as_parser<ParserT>::convert(subject) >> ~epsilon_p(tail)];
- }
-
- tail_t tail;
-};
-
-//-----------------------------------------------------------------------------
- } // namespace spirit
-} // namespace boost
-
-#endif // !defined(BOOST_SPIRIT_DISTINCT_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/utility/distinct_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/distinct_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/distinct_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,32 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_DISTINCT_FWD_HPP)
-#define BOOST_SPIRIT_DISTINCT_FWD_HPP
-
-namespace boost { namespace spirit {
-
- template<typename CharT> class chset;
-
- template <typename CharT = char, typename TailT = chset<CharT> >
- class distinct_parser;
-
- template <typename CharT = char, typename TailT = chset<CharT> >
- class distinct_directive;
-
- template <typename ScannerT = scanner<> >
- class dynamic_distinct_parser;
-
- template <typename ScannerT = scanner<> >
- class dynamic_distinct_directive;
-
-}} // namespace boost::spirit
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_DISTINCT_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_DISTINCT_FWD
 
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_distinct_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_distinct_fwd.hpp"
 #endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_distinct_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/utility/escape_char.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/escape_char.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/escape_char.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,180 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Daniel Nuffer
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_ESCAPE_CHAR_HPP
-#define BOOST_SPIRIT_ESCAPE_CHAR_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ESCAPE_CHAR
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ESCAPE_CHAR
 
-///////////////////////////////////////////////////////////////////////////////
-#include <string>
-#include <iterator>
-#include <cctype>
-#include <boost/limits.hpp>
-
-#include <boost/spirit/debug.hpp>
-
-#include <boost/spirit/utility/escape_char_fwd.hpp>
-#include <boost/spirit/utility/impl/escape_char.ipp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// escape_char_action class
-//
-// Links an escape char parser with a user defined semantic action.
-// The semantic action may be a function or a functor. A function
-// should be compatible with the interface:
-//
-// void f(CharT ch);
-//
-// A functor should have a member operator() with a compatible signature
-// as above. The matching character is passed into the function/functor.
-// This is the default class that character parsers use when dealing with
-// the construct:
-//
-// p[f]
-//
-// where p is a parser and f is a function or functor.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename ParserT, typename ActionT,
- unsigned long Flags, typename CharT
->
-struct escape_char_action
-: public unary<ParserT,
- parser<escape_char_action<ParserT, ActionT, Flags, CharT> > >
-{
- typedef escape_char_action
- <ParserT, ActionT, Flags, CharT> self_t;
- typedef action_parser_category parser_category_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, CharT>::type type;
- };
-
- escape_char_action(ParserT const& p, ActionT const& a)
- : base_t(p), actor(a) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- return impl::escape_char_action_parse<Flags, CharT>::
- parse(scan, *this);
- }
-
- ActionT const& predicate() const { return actor; }
-
-private:
-
- ActionT actor;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// escape_char_parser class
-//
-// The escape_char_parser helps in conjunction with the escape_char_action
-// template class (see above) in parsing escaped characters. There are two
-// different variants of this parser: one for parsing C style escaped
-// characters and one for parsing LEX style escaped characters.
-//
-// The C style escaped character parser is generated, when the template
-// parameter 'Flags' is equal to 'c_escapes' (a constant defined in the
-// file impl/escape_char.ipp). This parser recognizes all valid C escape
-// character sequences: '\t', '\b', '\f', '\n', '\r', '\"', '\'', '\\'
-// and the numeric style escapes '\120' (octal) and '\x2f' (hexadecimal)
-// and converts these to their character equivalent, for instance the
-// sequence of a backslash and a 'b' is parsed as the character '\b'.
-// All other escaped characters are rejected by this parser.
-//
-// The LEX style escaped character parser is generated, when the template
-// parameter 'Flags' is equal to 'lex_escapes' (a constant defined in the
-// file impl/escape_char.ipp). This parser recognizes all the C style
-// escaped character sequences (as described above) and additionally
-// does not reject all other escape sequences. All not mentioned escape
-// sequences are converted by the parser to the plain character, for
-// instance '\a' will be parsed as 'a'.
-//
-// All not escaped characters are parsed without modification.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template <unsigned long Flags, typename CharT>
-struct escape_char_action_parser_gen;
-
-template <unsigned long Flags, typename CharT>
-struct escape_char_parser :
- public parser<escape_char_parser<Flags, CharT> > {
-
- // only the values c_escapes and lex_escapes are valid for Flags
- BOOST_STATIC_ASSERT(Flags == c_escapes || Flags == lex_escapes);
-
- typedef escape_char_parser<Flags, CharT> self_t;
- typedef
- escape_char_action_parser_gen<Flags, CharT>
- action_parser_generator_t;
-
- template <typename ScannerT>
- struct result {
-
- typedef typename match_result<ScannerT, CharT>::type type;
- };
-
- template <typename ActionT>
- escape_char_action<self_t, ActionT, Flags, CharT>
- operator[](ActionT const& actor) const
- {
- return escape_char_action<self_t, ActionT, Flags, CharT>(*this, actor);
- }
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const &scan) const
- {
- return impl::escape_char_parse<CharT>::parse(scan, *this);
- }
-};
-
-template <unsigned long Flags, typename CharT>
-struct escape_char_action_parser_gen {
-
- template <typename ParserT, typename ActionT>
- static escape_char_action<ParserT, ActionT, Flags, CharT>
- generate (ParserT const &p, ActionT const &actor)
- {
- typedef
- escape_char_action<ParserT, ActionT, Flags, CharT>
- action_parser_t;
- return action_parser_t(p, actor);
- }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// predefined escape_char_parser objects
-//
-// These objects should be used for generating correct escaped character
-// parsers.
-//
-///////////////////////////////////////////////////////////////////////////////
-const escape_char_parser<lex_escapes> lex_escape_ch_p =
- escape_char_parser<lex_escapes>();
-
-const escape_char_parser<c_escapes> c_escape_ch_p =
- escape_char_parser<c_escapes>();
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_escape_char.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_escape_char.hpp"
+#endif
 
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_escape_char.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/utility/escape_char_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/escape_char_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/escape_char_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,25 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_ESCAPE_CHAR_FWD_HPP)
-#define BOOST_SPIRIT_ESCAPE_CHAR_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_ESCAPE_CHAR_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_ESCAPE_CHAR_FWD
 
-namespace boost { namespace spirit {
-
- template <unsigned long Flags, typename CharT = char>
- struct escape_char_parser;
-
- template <
- class ParserT, typename ActionT,
- unsigned long Flags, typename CharT = char>
- struct escape_char_action;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_escape_char_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_escape_char_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_escape_char_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/utility/flush_multi_pass.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/flush_multi_pass.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/flush_multi_pass.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,73 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Daniel Nuffer
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_FLUSH_MULTI_PASS_HPP
-#define BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_FLUSH_MULTI_PASS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_FLUSH_MULTI_PASS
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/core.hpp>
-#include <boost/spirit/iterator/multi_pass.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_flush_multi_pass.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_flush_multi_pass.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_flush_multi_pass.hpp>
 
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
- namespace impl {
-
- template <typename T>
- void flush_iterator(T &) {}
-
- template <typename T1, typename T2, typename T3, typename T4>
- void flush_iterator(boost::spirit::multi_pass<
- T1, T2, T3, T4, boost::spirit::multi_pass_policies::std_deque> &i)
- {
- i.clear_queue();
- }
-
- } // namespace impl
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // flush_multi_pass_parser
- //
- // The flush_multi_pass_parser flushes an underlying
- // multi_pass_iterator during the normal parsing process. This may
- // be used at certain points during the parsing process, when it is
- // clear, that no backtracking is needed anymore and the input
- // gathered so far may be discarded.
- //
- ///////////////////////////////////////////////////////////////////////////
- class flush_multi_pass_parser
- : public parser<flush_multi_pass_parser>
- {
- public:
- typedef flush_multi_pass_parser this_t;
-
- template <typename ScannerT>
- typename parser_result<this_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- impl::flush_iterator(scan.first);
- return scan.empty_match();
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // predefined flush_multi_pass_p object
- //
- // This object should may used to flush a multi_pass_iterator along
- // the way during the normal parsing process.
- //
- ///////////////////////////////////////////////////////////////////////////
-
- flush_multi_pass_parser const
- flush_multi_pass_p = flush_multi_pass_parser();
-
-}} // namespace boost::spirit
-
-#endif // BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/utility/functor_parser.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/functor_parser.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/functor_parser.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,67 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Joel de Guzman
- Copyright (c) 2002-2003 Juan Carlos Arevalo-Baeza
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_FUNCTOR_PARSER_HPP
-#define BOOST_SPIRIT_FUNCTOR_PARSER_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_FUNCTOR_PARSER
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_FUNCTOR_PARSER
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/core/parser.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // functor_parser class
- //
- // Once a functor parser has been defined, you can build a real
- // parser from it by passing it to this class as the template
- // parameter.
- //
- ///////////////////////////////////////////////////////////////////////////
- template < class FunctorT >
- struct functor_parser : public parser<functor_parser<FunctorT> >
- {
- FunctorT functor;
-
- functor_parser(): functor() {}
- functor_parser(FunctorT const& functor_): functor(functor_) {}
-
- typedef typename FunctorT::result_t functor_result_t;
- typedef functor_parser<FunctorT> self_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, functor_result_t>::type
- type;
- };
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- typedef typename ScannerT::value_t value_t;
- typedef typename ScannerT::iterator_t iterator_t;
-
- iterator_t const s(scan.first);
- functor_result_t result;
- std::ptrdiff_t len = functor(scan, result);
-
- if (len < 0)
- return scan.no_match();
- else
- return scan.create_match(std::size_t(len), result, s, scan.first);
- }
- };
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_functor_parser.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_functor_parser.hpp"
+#endif
 
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_functor_parser.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/utility/grammar_def.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/grammar_def.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/grammar_def.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,303 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Hartmut Kaiser
- Copyright (c) 2003 Joel de Guzman
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_GRAMMAR_DEF_HPP)
-#define BOOST_SPIRIT_GRAMMAR_DEF_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_GRAMMAR_DEF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_GRAMMAR_DEF
 
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/eval_if.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/preprocessor/arithmetic/inc.hpp>
-#include <boost/preprocessor/arithmetic/dec.hpp>
-#include <boost/preprocessor/enum.hpp>
-#include <boost/preprocessor/enum_params.hpp>
-#include <boost/preprocessor/repeat.hpp>
-#include <boost/preprocessor/repeat_from_to.hpp>
-#include <boost/spirit/phoenix/tuples.hpp>
-#include <boost/spirit/core/assert.hpp>
-#include <boost/spirit/utility/grammar_def_fwd.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Spirit predefined maximum grammar start parser limit. This limit defines
-// the maximum number of of possible different parsers exposed from a
-// particular grammar. This number defaults to 3.
-// The actual maximum is rounded up in multiples of 3. Thus, if this value
-// is 4, the actual limit is 6. The ultimate maximum limit in this
-// implementation is 15.
-//
-// It should NOT be greater than PHOENIX_LIMIT!
-//
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT)
-#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT PHOENIX_LIMIT
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_grammar_def.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_grammar_def.hpp"
 #endif
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// ensure BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= PHOENIX_LIMIT and
-// BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= 15 and
-// BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 0
-//
-///////////////////////////////////////////////////////////////////////////////
-BOOST_STATIC_ASSERT(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= PHOENIX_LIMIT);
-BOOST_STATIC_ASSERT(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= 15);
-BOOST_STATIC_ASSERT(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 0);
-
-//////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-struct same {};
-
-///////////////////////////////////////////////////////////////////////////////
-namespace impl {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // The make_const_pointer meta function allows to generate a T const*
- // needed to store the pointer to a given start parser from a grammar.
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename T0, typename T = T0>
- struct make_const_pointer {
-
- private:
- // T0 shouldn't be of type 'same'
- BOOST_STATIC_ASSERT((!boost::is_same<T0, same>::value));
-
- typedef typename boost::mpl::if_c<
- boost::is_same<T, same>::value,
- T0 const *,
- T const *
- >::type
- ptr_type;
-
- public:
- // If the type in question is phoenix::nil_t, then the returned type
- // is still phoenix::nil_t, otherwise a constant pointer type to the
- // inspected type is returned.
- typedef typename boost::mpl::if_c<
- boost::is_same<T, phoenix::nil_t>::value,
- phoenix::nil_t,
- ptr_type
- >::type
- type;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- template <int N, typename ElementT>
- struct assign_zero_to_tuple_member {
-
- template <typename TupleT>
- static void do_(TupleT &t) { t[phoenix::tuple_index<N>()] = 0; }
- };
-
- template <int N>
- struct assign_zero_to_tuple_member<N, phoenix::nil_t> {
-
- template <typename TupleT>
- static void do_(TupleT& /*t*/) {}
- };
-
- struct phoenix_nil_type {
-
- typedef phoenix::nil_t type;
- };
-
- template <int N>
- struct init_tuple_member {
-
- template <typename TupleT>
- static void
- do_(TupleT &t)
- {
- typedef typename boost::mpl::eval_if_c<
- (N < TupleT::length),
- phoenix::tuple_element<N, TupleT>,
- phoenix_nil_type
- >::type
- element_type;
-
- assign_zero_to_tuple_member<N, element_type>::do_(t);
- }
- };
-
-///////////////////////////////////////////////////////////////////////////////
-} // namespace impl
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// grammar_def class
-//
-// This class may be used as a base class for the embedded definition
-// class inside the grammar<> derived user grammar.
-// It exposes the two functions needed for start rule access:
-//
-// rule<> const &start() const;
-//
-// and
-//
-// template <int N>
-// rule<> const *get_start_parser() const;
-//
-// Additionally it exposes a set o 'start_parsers' functions, which are to
-// be called by the user to define the parsers to use as start parsers
-// of the given grammar.
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename T,
- BOOST_PP_ENUM_PARAMS(
- BOOST_PP_DEC(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A), typename T)
->
-class grammar_def {
-
-private:
- ///////////////////////////////////////////////////////////////////////////
- //
- // This generates the full tuple type from the given template parameters
- // T, T0, ...
- //
- // typedef phoenix::tuple<
- // typename impl::make_const_pointer<T>::type,
- // typename impl::make_const_pointer<T, T0>::type,
- // ...
- // > tuple_t;
- //
- ///////////////////////////////////////////////////////////////////////////
- #define BOOST_SPIRIT_GRAMMARDEF_TUPLE_PARAM(z, N, _) \
- typename impl::make_const_pointer<T, BOOST_PP_CAT(T, N)>::type \
- /**/
-
- typedef phoenix::tuple<
- typename impl::make_const_pointer<T>::type,
- BOOST_PP_ENUM(
- BOOST_PP_DEC(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A),
- BOOST_SPIRIT_GRAMMARDEF_TUPLE_PARAM,
- _
- )
- > tuple_t;
-
- #undef BOOST_SPIRIT_GRAMMARDEF_TUPLE_PARAM
- ///////////////////////////////////////////////////////////////////////////
-
-protected:
- ///////////////////////////////////////////////////////////////////////////
- //
- // This generates a sequence of 'start_parsers' functions with increasing
- // number of arguments, which allow to initialize the tuple members with
- // the pointers to the start parsers of the grammar:
- //
- // template <typename TC0, ...>
- // void start_parsers (TC0 const &t0, ...)
- // {
- // using phoenix::tuple_index_names::_1;
- // t[_1] = &t0;
- // ...
- // }
- //
- // where a TC0 const* must be convertible to a T0 const*
- //
- ///////////////////////////////////////////////////////////////////////////
- #define BOOST_SPIRIT_GRAMMARDEF_ENUM_PARAMS(z, N, _) \
- BOOST_PP_CAT(TC, N) const &BOOST_PP_CAT(t, N) \
- /**/
- #define BOOST_SPIRIT_GRAMMARDEF_ENUM_ASSIGN(z, N, _) \
- using phoenix::tuple_index_names::BOOST_PP_CAT(_, BOOST_PP_INC(N)); \
- t[BOOST_PP_CAT(_, BOOST_PP_INC(N))] = &BOOST_PP_CAT(t, N); \
- /**/
- #define BOOST_SPIRIT_GRAMMARDEF_ENUM_START(z, N, _) \
- template <BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename TC)> \
- void \
- start_parsers(BOOST_PP_ENUM_ ## z(BOOST_PP_INC(N), \
- BOOST_SPIRIT_GRAMMARDEF_ENUM_PARAMS, _) ) \
- { \
- BOOST_PP_REPEAT_ ## z(BOOST_PP_INC(N), \
- BOOST_SPIRIT_GRAMMARDEF_ENUM_ASSIGN, _) \
- } \
- /**/
-
- BOOST_PP_REPEAT(
- BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A,
- BOOST_SPIRIT_GRAMMARDEF_ENUM_START, _)
-
- #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_START
- #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_ASSIGN
- #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_PARAMS
- ///////////////////////////////////////////////////////////////////////////
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // This generates some initialization code, which allows to initialize all
- // used tuple members to 0 (zero):
- //
- // t[_1] = 0;
- // impl::init_tuple_member<1>::do_(t);
- // ...
- //
- ///////////////////////////////////////////////////////////////////////////
- #define BOOST_SPIRIT_GRAMMARDEF_ENUM_INIT(z, N, _) \
- impl::init_tuple_member<N>::do_(t); \
- /**/
-
- grammar_def()
- {
- using phoenix::tuple_index_names::_1;
- t[_1] = 0;
- BOOST_PP_REPEAT_FROM_TO(
- 1, BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A,
- BOOST_SPIRIT_GRAMMARDEF_ENUM_INIT, _)
- }
-
- #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_INIT
- ///////////////////////////////////////////////////////////////////////////
-
-public:
- T const &
- start() const
- {
- // If the following assertion is fired, you have probably forgot to call
- // the start_parser() function from inside the constructor of your
- // embedded definition class to initialize the start parsers to be exposed
- // from your grammar.
- using phoenix::tuple_index_names::_1;
- BOOST_SPIRIT_ASSERT(0 != t[_1]);
- return *t[_1];
- }
-
- template <int N>
- typename phoenix::tuple_element<N, tuple_t>::crtype
- get_start_parser() const
- {
- // If the following expression yields a compiler error, you have probably
- // tried to access a start rule, which isn't exposed as such from your
- // grammar.
- BOOST_STATIC_ASSERT(N > 0 && N < tuple_t::length);
-
- // If the following assertion is fired, you have probably forgot to call
- // the start_parser() function from inside the constructor of your
- // embedded definition class to initialize the start parsers to be exposed
- // from your grammar.
- // Another reason may be, that there is a count mismatch between
- // the number of template parameters to the grammar_def<> class and the
- // number of parameters used while calling start_parsers().
- BOOST_SPIRIT_ASSERT(0 != t[phoenix::tuple_index<N>()]);
-
- return t[phoenix::tuple_index<N>()];
- }
-
-private:
- tuple_t t;
-};
-
-#undef BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A
-
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_grammar_def.hpp>
 
-#endif // BOOST_SPIRIT_GRAMMAR_DEF_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/utility/grammar_def_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/grammar_def_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/grammar_def_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,48 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_GRAMMAR_DEF_FWD_HPP)
-#define BOOST_SPIRIT_GRAMMAR_DEF_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_GRAMMAR_DEF_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_GRAMMAR_DEF_FWD
 
-#include <boost/spirit/phoenix/tuples.hpp>
-
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-#include <boost/preprocessor/facilities/intercept.hpp>
-
-#if !defined(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT)
-#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT PHOENIX_LIMIT
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_grammar_def_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_grammar_def_fwd.hpp"
 #endif
 
-// Calculate an integer rounded up to the nearest integer dividable by 3
-#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 12
-#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A 15
-#elif BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 9
-#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A 12
-#elif BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 6
-#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A 9
-#elif BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 3
-#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A 6
-#else
-#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A 3
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
-
-namespace boost { namespace spirit {
-
- template <
- typename T,
- BOOST_PP_ENUM_BINARY_PARAMS(
- BOOST_PP_DEC(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A),
- typename T, = phoenix::nil_t BOOST_PP_INTERCEPT
- )
- >
- class grammar_def;
-
-}} // namespace boost::spirit
+#include <boost/spirit/include/classic_grammar_def_fwd.hpp>
 
 #endif
-

Modified: branches/CMake/release/boost/spirit/utility/lists.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/lists.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/lists.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,336 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_LISTS_HPP
-#define BOOST_SPIRIT_LISTS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_LISTS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_LISTS
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/config.hpp>
-#include <boost/spirit/meta/as_parser.hpp>
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
-
-#include <boost/spirit/utility/lists_fwd.hpp>
-#include <boost/spirit/utility/impl/lists.ipp>
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// list_parser class
-//
-// List parsers allow to parse constructs like
-//
-// item >> *(delim >> item)
-//
-// where 'item' is an auxiliary expression to parse and 'delim' is an
-// auxiliary delimiter to parse.
-//
-// The list_parser class also can match an optional closing delimiter
-// represented by the 'end' parser at the end of the list:
-//
-// item >> *(delim >> item) >> !end.
-//
-// If ItemT is an action_parser_category type (parser with an attached
-// semantic action) we have to do something special. This happens, if the
-// user wrote something like:
-//
-// list_p(item[f], delim)
-//
-// where 'item' is the parser matching one item of the list sequence and
-// 'f' is a functor to be called after matching one item. If we would do
-// nothing, the resulting code would parse the sequence as follows:
-//
-// (item[f] - delim) >> *(delim >> (item[f] - delim))
-//
-// what in most cases is not what the user expects.
-// (If this _is_ what you've expected, then please use one of the list_p
-// generator functions 'direct()', which will inhibit re-attaching
-// the actor to the item parser).
-//
-// To make the list parser behave as expected:
-//
-// (item - delim)[f] >> *(delim >> (item - delim)[f])
-//
-// the actor attached to the 'item' parser has to be re-attached to the
-// *(item - delim) parser construct, which will make the resulting list
-// parser 'do the right thing'.
-//
-// Additionally special care must be taken, if the item parser is a
-// unary_parser_category type parser as
-//
-// list_p(*anychar_p, ',')
-//
-// which without any refactoring would result in
-//
-// (*anychar_p - ch_p(','))
-// >> *( ch_p(',') >> (*anychar_p - ch_p(',')) )
-//
-// and will not give the expected result (the first *anychar_p will eat up
-// all the input up to the end of the input stream). So we have to
-// refactor this into:
-//
-// *(anychar_p - ch_p(','))
-// >> *( ch_p(',') >> *(anychar_p - ch_p(',')) )
-//
-// what will give the correct result.
-//
-// The case, where the item parser is a combination of the two mentioned
-// problems (i.e. the item parser is a unary parser with an attached
-// action), is handled accordingly too:
-//
-// list_p((*anychar_p)[f], ',')
-//
-// will be parsed as expected:
-//
-// (*(anychar_p - ch_p(',')))[f]
-// >> *( ch_p(',') >> (*(anychar_p - ch_p(',')))[f] ).
-//
-///////////////////////////////////////////////////////////////////////////////
-template <
- typename ItemT, typename DelimT, typename EndT, typename CategoryT
->
-struct list_parser :
- public parser<list_parser<ItemT, DelimT, EndT, CategoryT> > {
-
- typedef list_parser<ItemT, DelimT, EndT, CategoryT> self_t;
- typedef CategoryT parser_category_t;
-
- list_parser(ItemT const &item_, DelimT const &delim_,
- EndT const& end_ = no_list_endtoken())
- : item(item_), delim(delim_), end(end_)
- {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- return impl::list_parser_type<CategoryT>
- ::parse(scan, *this, item, delim, end);
- }
-
-private:
- typename as_parser<ItemT>::type::embed_t item;
- typename as_parser<DelimT>::type::embed_t delim;
- typename as_parser<EndT>::type::embed_t end;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// List parser generator template
-//
-// This is a helper for generating a correct list_parser<> from
-// auxiliary parameters. There are the following types supported as
-// parameters yet: parsers, single characters and strings (see
-// as_parser<> in meta/as_parser.hpp).
-//
-// The list_parser_gen by itself can be used for parsing comma separated
-// lists without item formatting:
-//
-// list_p.parse(...)
-// matches any comma separated list.
-//
-// If list_p is used with one parameter, this parameter is used to match
-// the delimiter:
-//
-// list_p(';').parse(...)
-// matches any semicolon separated list.
-//
-// If list_p is used with two parameters, the first parameter is used to
-// match the items and the second parameter matches the delimiters:
-//
-// list_p(uint_p, ',').parse(...)
-// matches comma separated unsigned integers.
-//
-// If list_p is used with three parameters, the first parameter is used
-// to match the items, the second one is used to match the delimiters and
-// the third one is used to match an optional ending token sequence:
-//
-// list_p(real_p, ';', eol_p).parse(...)
-// matches a semicolon separated list of real numbers optionally
-// followed by an end of line.
-//
-// The list_p in the previous examples denotes the predefined parser
-// generator, which should be used to define list parsers (see below).
-//
-///////////////////////////////////////////////////////////////////////////////
-
-template <typename CharT = char>
-struct list_parser_gen :
- public list_parser<kleene_star<anychar_parser>, chlit<CharT> >
-{
- typedef list_parser_gen<CharT> self_t;
-
-// construct the list_parser_gen object as an list parser for comma separated
-// lists without item formatting.
- list_parser_gen()
- : list_parser<kleene_star<anychar_parser>, chlit<CharT> >
- (*anychar_p, chlit<CharT>(','))
- {}
-
-// The following generator functions should be used under normal circumstances.
-// (the operator()(...) functions)
-
- // Generic generator functions for creation of concrete list parsers, which
- // support 'normal' syntax:
- //
- // item >> *(delim >> item)
- //
- // If item isn't given, everything between two delimiters is matched.
-
- template<typename DelimT>
- list_parser<
- kleene_star<anychar_parser>,
- typename as_parser<DelimT>::type,
- no_list_endtoken,
- unary_parser_category // there is no action to re-attach
- >
- operator()(DelimT const &delim_) const
- {
- typedef kleene_star<anychar_parser> item_t;
- typedef typename as_parser<DelimT>::type delim_t;
-
- typedef
- list_parser<item_t, delim_t, no_list_endtoken, unary_parser_category>
- return_t;
-
- return return_t(*anychar_p, as_parser<DelimT>::convert(delim_));
- }
-
- template<typename ItemT, typename DelimT>
- list_parser<
- typename as_parser<ItemT>::type,
- typename as_parser<DelimT>::type,
- no_list_endtoken,
- typename as_parser<ItemT>::type::parser_category_t
- >
- operator()(ItemT const &item_, DelimT const &delim_) const
- {
- typedef typename as_parser<ItemT>::type item_t;
- typedef typename as_parser<DelimT>::type delim_t;
- typedef list_parser<item_t, delim_t, no_list_endtoken,
- BOOST_DEDUCED_TYPENAME item_t::parser_category_t>
- return_t;
-
- return return_t(
- as_parser<ItemT>::convert(item_),
- as_parser<DelimT>::convert(delim_)
- );
- }
-
- // Generic generator function for creation of concrete list parsers, which
- // support 'extended' syntax:
- //
- // item >> *(delim >> item) >> !end
-
- template<typename ItemT, typename DelimT, typename EndT>
- list_parser<
- typename as_parser<ItemT>::type,
- typename as_parser<DelimT>::type,
- typename as_parser<EndT>::type,
- typename as_parser<ItemT>::type::parser_category_t
- >
- operator()(
- ItemT const &item_, DelimT const &delim_, EndT const &end_) const
- {
- typedef typename as_parser<ItemT>::type item_t;
- typedef typename as_parser<DelimT>::type delim_t;
- typedef typename as_parser<EndT>::type end_t;
-
- typedef list_parser<item_t, delim_t, end_t,
- BOOST_DEDUCED_TYPENAME item_t::parser_category_t>
- return_t;
-
- return return_t(
- as_parser<ItemT>::convert(item_),
- as_parser<DelimT>::convert(delim_),
- as_parser<EndT>::convert(end_)
- );
- }
-
-// The following functions should be used, if the 'item' parser has an attached
-// semantic action or is a unary_parser_category type parser and the structure
-// of the resulting list parser should _not_ be refactored during parser
-// construction (see comment above).
-
- // Generic generator function for creation of concrete list parsers, which
- // support 'normal' syntax:
- //
- // item >> *(delim >> item)
-
- template<typename ItemT, typename DelimT>
- list_parser<
- typename as_parser<ItemT>::type,
- typename as_parser<DelimT>::type,
- no_list_endtoken,
- plain_parser_category // inhibit action re-attachment
- >
- direct(ItemT const &item_, DelimT const &delim_) const
- {
- typedef typename as_parser<ItemT>::type item_t;
- typedef typename as_parser<DelimT>::type delim_t;
- typedef list_parser<item_t, delim_t, no_list_endtoken,
- plain_parser_category>
- return_t;
-
- return return_t(
- as_parser<ItemT>::convert(item_),
- as_parser<DelimT>::convert(delim_)
- );
- }
-
- // Generic generator function for creation of concrete list parsers, which
- // support 'extended' syntax:
- //
- // item >> *(delim >> item) >> !end
-
- template<typename ItemT, typename DelimT, typename EndT>
- list_parser<
- typename as_parser<ItemT>::type,
- typename as_parser<DelimT>::type,
- typename as_parser<EndT>::type,
- plain_parser_category // inhibit action re-attachment
- >
- direct(
- ItemT const &item_, DelimT const &delim_, EndT const &end_) const
- {
- typedef typename as_parser<ItemT>::type item_t;
- typedef typename as_parser<DelimT>::type delim_t;
- typedef typename as_parser<EndT>::type end_t;
-
- typedef
- list_parser<item_t, delim_t, end_t, plain_parser_category>
- return_t;
-
- return return_t(
- as_parser<ItemT>::convert(item_),
- as_parser<DelimT>::convert(delim_),
- as_parser<EndT>::convert(end_)
- );
- }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// Predefined list parser generator
-//
-// The list_p parser generator can be used
-// - by itself for parsing comma separated lists without item formatting
-// or
-// - for generating list parsers with auxiliary parser parameters
-// for the 'item', 'delim' and 'end' subsequences.
-// (see comment above)
-//
-///////////////////////////////////////////////////////////////////////////////
-const list_parser_gen<> list_p = list_parser_gen<>();
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_lists.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_lists.hpp"
+#endif
 
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_lists.hpp>
 
 #endif

Modified: branches/CMake/release/boost/spirit/utility/lists_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/lists_fwd.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/lists_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,27 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_LISTS_FWD_HPP)
-#define BOOST_SPIRIT_LISTS_FWD_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_LISTS_FWD
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_LISTS_FWD
 
-#include <boost/spirit/core/parser.hpp>
-
-namespace boost { namespace spirit {
-
- struct no_list_endtoken;
-
- template <
- typename ItemT, typename DelimT, typename EndT = no_list_endtoken,
- typename CategoryT = plain_parser_category
- >
- struct list_parser;
-
-}} // namespace boost::spirit
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_lists_fwd.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_lists_fwd.hpp"
+#endif
 
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_lists_fwd.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/utility/loops.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/loops.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/loops.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,313 +1,23 @@
 /*=============================================================================
- Copyright (c) 1998-2003 Joel de Guzman
- Copyright (c) 2002 Raghavendra Satish
- Copyright (c) 2002 Jeff Westfahl
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_LOOPS_HPP)
-#define BOOST_SPIRIT_LOOPS_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_LOOPS
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_LOOPS
 
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/core/composite/composite.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_loops.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_loops.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_loops.hpp>
 
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // fixed_loop class
- //
- // This class takes care of the construct:
- //
- // repeat_p (exact) [p]
- //
- // where 'p' is a parser and 'exact' is the number of times to
- // repeat. The parser iterates over the input exactly 'exact' times.
- // The parse function fails if the parser does not match the input
- // exactly 'exact' times.
- //
- // This class is parametizable and can accept constant arguments
- // (e.g. repeat_p (5) [p]) as well as references to variables (e.g.
- // repeat_p (ref (n)) [p]).
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename ParserT, typename ExactT>
- class fixed_loop
- : public unary<ParserT, parser <fixed_loop <ParserT, ExactT> > >
- {
- public:
-
- typedef fixed_loop<ParserT, ExactT> self_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- fixed_loop (ParserT const & subject, ExactT const & exact)
- : base_t(subject), m_exact(exact) {}
-
- template <typename ScannerT>
- typename parser_result <self_t, ScannerT>::type
- parse (ScannerT const & scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- result_t hit = scan.empty_match();
- std::size_t n = m_exact;
-
- for (std::size_t i = 0; i < n; ++i)
- {
- if (result_t next = this->subject().parse(scan))
- {
- scan.concat_match(hit, next);
- }
- else
- {
- return scan.no_match();
- }
- }
-
- return hit;
- }
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, nil_t>::type type;
- };
-
- private:
-
- ExactT m_exact;
- };
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // finite_loop class
- //
- // This class takes care of the construct:
- //
- // repeat_p (min, max) [p]
- //
- // where 'p' is a parser, 'min' and 'max' specifies the minimum and
- // maximum iterations over 'p'. The parser iterates over the input
- // at least 'min' times and at most 'max' times. The parse function
- // fails if the parser does not match the input at least 'min' times
- // and at most 'max' times.
- //
- // This class is parametizable and can accept constant arguments
- // (e.g. repeat_p (5, 10) [p]) as well as references to variables
- // (e.g. repeat_p (ref (n1), ref (n2)) [p]).
- //
- ///////////////////////////////////////////////////////////////////////////////
- template <typename ParserT, typename MinT, typename MaxT>
- class finite_loop
- : public unary<ParserT, parser<finite_loop<ParserT, MinT, MaxT> > >
- {
- public:
-
- typedef finite_loop <ParserT, MinT, MaxT> self_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- finite_loop (ParserT const & subject, MinT const & min, MaxT const & max)
- : base_t(subject), m_min(min), m_max(max) {}
-
- template <typename ScannerT>
- typename parser_result <self_t, ScannerT>::type
- parse(ScannerT const & scan) const
- {
- BOOST_SPIRIT_ASSERT(m_min <= m_max);
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- result_t hit = scan.empty_match();
-
- std::size_t n1 = m_min;
- std::size_t n2 = m_max;
-
- for (std::size_t i = 0; i < n2; ++i)
- {
- typename ScannerT::iterator_t save = scan.first;
- result_t next = this->subject().parse(scan);
-
- if (!next)
- {
- if (i >= n1)
- {
- scan.first = save;
- break;
- }
- else
- {
- return scan.no_match();
- }
- }
-
- scan.concat_match(hit, next);
- }
-
- return hit;
- }
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, nil_t>::type type;
- };
-
- private:
-
- MinT m_min;
- MaxT m_max;
- };
-
- ///////////////////////////////////////////////////////////////////////////////
- //
- // infinite_loop class
- //
- // This class takes care of the construct:
- //
- // repeat_p (min, more) [p]
- //
- // where 'p' is a parser, 'min' is the minimum iteration over 'p'
- // and more specifies that the iteration should proceed
- // indefinitely. The parser iterates over the input at least 'min'
- // times and continues indefinitely until 'p' fails or all of the
- // input is parsed. The parse function fails if the parser does not
- // match the input at least 'min' times.
- //
- // This class is parametizable and can accept constant arguments
- // (e.g. repeat_p (5, more) [p]) as well as references to variables
- // (e.g. repeat_p (ref (n), more) [p]).
- //
- ///////////////////////////////////////////////////////////////////////////////
-
- struct more_t {};
- more_t const more = more_t ();
-
- template <typename ParserT, typename MinT>
- class infinite_loop
- : public unary<ParserT, parser<infinite_loop<ParserT, MinT> > >
- {
- public:
-
- typedef infinite_loop <ParserT, MinT> self_t;
- typedef unary<ParserT, parser<self_t> > base_t;
-
- infinite_loop (
- ParserT const& subject,
- MinT const& min,
- more_t const&
- )
- : base_t(subject), m_min(min) {}
-
- template <typename ScannerT>
- typename parser_result <self_t, ScannerT>::type
- parse(ScannerT const & scan) const
- {
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- result_t hit = scan.empty_match();
- std::size_t n = m_min;
-
- for (std::size_t i = 0; ; ++i)
- {
- typename ScannerT::iterator_t save = scan.first;
- result_t next = this->subject().parse(scan);
-
- if (!next)
- {
- if (i >= n)
- {
- scan.first = save;
- break;
- }
- else
- {
- return scan.no_match();
- }
- }
-
- scan.concat_match(hit, next);
- }
-
- return hit;
- }
-
- template <typename ScannerT>
- struct result
- {
- typedef typename match_result<ScannerT, nil_t>::type type;
- };
-
- private:
-
- MinT m_min;
- };
-
- template <typename ExactT>
- struct fixed_loop_gen
- {
- fixed_loop_gen (ExactT const & exact)
- : m_exact (exact) {}
-
- template <typename ParserT>
- fixed_loop <ParserT, ExactT>
- operator[](parser <ParserT> const & subject) const
- {
- return fixed_loop <ParserT, ExactT> (subject.derived (), m_exact);
- }
-
- ExactT m_exact;
- };
-
- namespace impl {
-
- template <typename ParserT, typename MinT, typename MaxT>
- struct loop_traits
- {
- typedef typename mpl::if_<
- boost::is_same<MaxT, more_t>,
- infinite_loop<ParserT, MinT>,
- finite_loop<ParserT, MinT, MaxT>
- >::type type;
- };
-
- } // namespace impl
-
- template <typename MinT, typename MaxT>
- struct nonfixed_loop_gen
- {
- nonfixed_loop_gen (MinT min, MaxT max)
- : m_min (min), m_max (max) {}
-
- template <typename ParserT>
- typename impl::loop_traits<ParserT, MinT, MaxT>::type
- operator[](parser <ParserT> const & subject) const
- {
- typedef typename impl::loop_traits<ParserT, MinT, MaxT>::type ret_t;
- return ret_t(
- subject.derived(),
- m_min,
- m_max);
- }
-
- MinT m_min;
- MaxT m_max;
- };
-
- template <typename ExactT>
- fixed_loop_gen <ExactT>
- repeat_p(ExactT const & exact)
- {
- return fixed_loop_gen <ExactT> (exact);
- }
-
- template <typename MinT, typename MaxT>
- nonfixed_loop_gen <MinT, MaxT>
- repeat_p(MinT const & min, MaxT const & max)
- {
- return nonfixed_loop_gen <MinT, MaxT> (min, max);
- }
-
-}} // namespace boost::spirit
-
-#endif // #if !defined(BOOST_SPIRIT_LOOPS_HPP)
+#endif

Modified: branches/CMake/release/boost/spirit/utility/regex.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/regex.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/regex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,108 +1,23 @@
 /*=============================================================================
- Copyright (c) 2002-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the 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_SPIRIT_REGEX_HPP
-#define BOOST_SPIRIT_REGEX_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_REGEX
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_REGEX
 
-#include <boost/version.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_regex.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_regex.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_regex.hpp>
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// Include the regular expression library of boost (Boost.Regex)
-//
-// Note though, that this library is not distributed with Spirit. You have to
-// obtain a separate copy from http://www.boost.org.
-//
-///////////////////////////////////////////////////////////////////////////////
-#if defined(BOOST_SPIRIT_NO_REGEX_LIB) && BOOST_VERSION < 103300
-//
-// Include all the Boost.regex library. Please note that this will not work,
-// if you are using the boost/spirit/regex.hpp header from more than one
-// translation units.
-//
-#define BOOST_REGEX_NO_LIB
-#define BOOST_REGEX_STATIC_LINK
-#define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
-#include <boost/regex.hpp>
-#include <boost/regex/src.cpp>
-
-#else
-//
-// Include the Boost.Regex headers only. Note, that you will have to link your
-// application against the Boost.Regex library as described in the related
-// documentation.
-// This is the only way for Boost newer than V1.32.0
-//
-#include <boost/regex.hpp>
-#endif // defined(BOOST_SPIRIT_NO_REGEX_LIB)
-
-#include <boost/static_assert.hpp>
-
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/spirit/meta/as_parser.hpp>
-#include <boost/spirit/core/parser.hpp>
-#include <boost/spirit/utility/impl/regex.ipp>
-#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
-
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
-///////////////////////////////////////////////////////////////////////////////
-// rxstrlit class
-template <typename CharT = char>
-struct rxstrlit : public parser<rxstrlit<CharT> > {
-
- typedef rxstrlit self_t;
-
- rxstrlit(CharT const *first, CharT const *last)
- : rx(first, last) {}
- rxstrlit(CharT const *first)
- : rx(first) {}
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const& scan) const
- {
- // Due to limitations in the boost::regex library the iterators wrapped in
- // the ScannerT object should be at least bidirectional iterators. Plain
- // forward iterators do not work here.
- typedef typename ScannerT::iterator_t iterator_t;
- typedef
- typename boost::detail::iterator_traits<iterator_t>::iterator_category
- iterator_category;
-
- BOOST_STATIC_ASSERT((
- boost::is_convertible<iterator_category,
- std::bidirectional_iterator_tag>::value
- ));
-
- typedef typename parser_result<self_t, ScannerT>::type result_t;
- return impl::contiguous_parser_parse<result_t>(rx, scan, scan);
- }
-
-private:
- impl::rx_parser<CharT> rx; // contains the boost regular expression parser
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// Generator functions
-template <typename CharT>
-inline rxstrlit<CharT>
-regex_p(CharT const *first)
-{ return rxstrlit<CharT>(first); }
-
-//////////////////////////////////
-template <typename CharT>
-inline rxstrlit<CharT>
-regex_p(CharT const *first, CharT const *last)
-{ return rxstrlit<CharT>(first, last); }
-
-///////////////////////////////////////////////////////////////////////////////
-}} // namespace boost::spirit
-
-#endif // BOOST_SPIRIT_REGEX_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/utility/rule_parser.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/rule_parser.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/rule_parser.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,1118 +1,23 @@
-/*==============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
-
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
-==============================================================================*/
-// The comment below contains a unnamed 'namespace {', which is flagged by the
-// Boost inspect tool as a violation of common C++ programming rules. Since it's
-// in a comment, well, we switch it off :-P
-// boostinspect:nounnamed
-
-//
-// About:
-// =====
-//
-// Using a typeof operator or Boost.Typeof to automatically set the type of
-// variables (as done in the Spirit example demonstrating typeof) is by far not
-// all we can do to tighten up our grammars as there are some significant
-// drawbacks of this approach:
-// - the types complexity scales with the complexity of the grammar (sooner or
-// later hitting the limits of the compiler),
-// - recursive grammars are not possible, and
-// - all parser objects are embedded by value.
-//
-// The Spirit documentation therefore recommends creating custom parser classes
-// (derived from the a sub_grammar template):
-//
-// http://www.boost.org/libs/spirit/doc/techniques.html#no_rules
-// http://www.boost.org/libs/spirit/doc/techniques.html#typeof
-//
-// In practice manually applying this technique leads to rather lengthy code and
-// overthis requires the user to have a solid understanding of Spirit details.
-//
-// Here is a generalized, macro-based approach to easily create typeof-based
-// grammars that can be recursive and arbitrarily complex.
-//
-//
-// Quick manual:
-// ============
-//
-// 1. Setup
-//
-// Before the rule parser macro (the protagonist of the facility) can be used
-// the the user must define the macro BOOST_SPIRIT__NAMESPACE (note the double
-// underscore characeter) and setup a registration group for Boost.Typeof.
-//
-// Examples:
-//
-// // should come after regular #includeS
-// #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-//
-// // [...]
-//
-// #define BOOST_SPIRIT__NAMESPACE (2,(my_project, my_module))
-// // | | +- outer +- inner
-// // ! space ! -+ | namespace namespace
-// // |
-// // +--- number of nested namespaces
-//
-// namespace my_project { namespace my_module {
-//
-// // [...]
-//
-// ---
-//
-// // should come after regular #includeS
-// #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-//
-// // [...]
-//
-// #define BOOST_SPIRIT__NAMESPACE (2,(my_project, (anonymous) ))
-//
-// namespace my_project { namespace {
-//
-// // [...]
-//
-// ---
-//
-// // should come after regular #includeS
-// #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-//
-// // [...]
-//
-//
-// #define BOOST_SPIRIT__NAMESPACE -
-// // we're working at root namespace
-//
-//
-// Why do I have to do this?
-//
-// Boost.Typeof needs to assign a unique ID for each registration. This ID is
-// created composed of the line number and the registration group. The
-// facility performs Typeof registration and thus requires the source file to
-// have its own registration group. Further Boost.Typeof requires registration
-// to happen at root namespace so we have to close and reopen the namespace
-// we're in.
-//
-//
-// 2. The rule parser macro
-//
-// A simple rule parser definition looks like that:
-//
-// // we're at namespace scope here
-//
-// // Skip parser for C/C++ comments and whitespace
-// BOOST_SPIRIT_RULE_PARSER(skipper,
-// -,-,-,
-//
-// +( confix_p("//",*anychar_p,eol_p)
-// | confix_p("/*",*anychar_p,"*/")
-// | space_p
-// )
-// )
-//
-// Now we can use 'skipper' in other Spirit expressions.
-//
-// The code above creates a parser (template) class 'skpper_t' and (in this
-// case, because there are no parameters) a static const instance 'skipper' of
-// that class. The class is automatically registered with Boost.Typeof. The type
-// name our parser is skipper_t here.
-//
-//
-// 2.1. Parametrized rule parsers
-//
-// Rule parser definitions can have parameters.
-//
-// Parameters are passed to the BOOST_SPIRIT_RULE_PARSER macro as its second
-// argument (just pass '-' if there are no parameters) with the following
-// format:
-//
-// (N,( param1,param2, / ... / paramN ))
-// +-- number of parameters
-//
-// Example of a whole rule parser:
-//
-// BOOST_SPIRIT_RULE_PARSER(new_name,
-// (1,( symbol_table )),-,-,
-//
-// lexeme_d[ (alpha_p >> *alnum_p)[ symbol_table.add ] ]
-// )
-//
-// The expression 'new_name(my_symbols)' parses a string literal and adds it to
-// the symbol table 'my_symbols'.
-//
-// The rule parser macro creates a function template as called 'new_name' that
-// takes one parameter of deduced reference type and returns a specialization of
-// 'new_name_t' in this case.
-//
-// Since parsers that require to be fast and lightweight often also require to
-// be reentrant, it's quite common to pass in some semantic controller (the
-// symbol table in the example above).
-// However, parameters are templated so they can be anything (including parsers
-// of course) so refactoring tasks can be abstracted with rule parsers as well.
-//
-// BOOST_SPIRIT_RULE_PARSER(enumeration_parser,
-// (2,( element_parser, delimiter_parser )),-,-,
-//
-// element_parser >> *(delimiter_parser >> element_parser)
-// )
-//
-// The expression 'enumeration_parser(int_p[ some_action ], ',')' creates a
-// parser for a comma-separated list of integers.
-//
-//
-// 2.2. Rule parsrs and semantic actions
-//
-// While semantic actions can be globally attached to a rule parser or passed
-// to a parametrized rule parser as (part of) an argument, even more control is
-// possible by using action placeholders. E.g:
-//
-// BOOST_SPIRIT_ACTION_PLACEHOLDER(int_action)
-//
-// BOOST_SPIRIT_RULE_PARSER(int_list,
-// -,(1,( int_action )),-,
-//
-// int_p[ int_action ] >> *(',' >> int_p[ int_action ])
-// )
-//
-// The expression 'int_list[ my_action ]' parses a comma separated list of
-// integers and calls 'my_action' for every integer parsed therein.
-//
-// Of course multiple actions can be attached to one placeholder as usual (in
-// this case 'int_list[ my_action1 ][ my_action2 ] would call two actions).
-//
-// Further there can be multiple action placeholders for a single rule parser:
-//
-// BOOST_SPIRIT_ACTION_PLACEHOLDER(feed_int)
-// BOOST_SPIRIT_ACTION_PLACEHOLDER(next_int)
-//
-// BOOST_SPIRIT_RULE_PARSER(int_list,
-// -,(2,( feed_int, next_int )),-,
-//
-// int_p[ feed_int ] >> *(',' >> int_p[ next_int ][ feed_int ])
-// )
-//
-// The expression 'int_list[ (feed_int = my_action1), (next_int = my_action2) ]'
-// creates a parser for a comma separated list of integers with the actions
-// attached appropriately.
-//
-// int_list[ feed_int = my_action1,my_action2, next_int = my_action3 ]
-//
-// works too (in this case the action placeholder 'feed_int' has two actions
-// attached to it).
-//
-// You can both override and append actions associated with an action
-// placeholder:
-//
-// var = int_list[ feed_int = my_action1, next_int = my_action2 ]
-//
-// // [...]
-//
-// ... var[ feed_int = another_action ]
-// // 'another_action' overrides the actions previously attached to 'feed_int'
-//
-// ... var[ next_int += another_action ]
-// // 'another_action' is appended to the list of actions attached to
-// // 'next_int'
-//
-// Action placeholders are not entirely for free -- they add to the size and the
-// initialization time of the rule parser. However, the impact on an already
-// initialized rule parser instance should be quite small.
-//
-//
-// 2.3. Member variables
-//
-// You can add member variables to the rule parser class using the third
-// parameter of the rule parser macro:
-//
-// BOOST_SPIRIT_RULE_PARSER( calc,
-// -,
-// -,
-// (3,( ((subrule<0>),expression,()),
-// ((subrule<1>),term,()),
-// ((subrule<2>),factor,() )) ),
-//
-// // [...]
-//
-// adds three subrules to the rule parser.
-// Each parameter must have the following type to allow commas to be handled
-// safely from within the preprocessing code:
-//
-// ((type)),name,(constructor argument(s)))
-//
-//
-// 2.4. The opaque rule parser
-//
-// Rule parsers usually are templates. Building large grammars pushes the
-// compiler really hard (and eventually to its limits) because of the
-// metafunction complexity involved.
-// If a rule parser without parameters and action placeholders is defined, a
-// non-template class is created. Non-templated rule parsers can also be created
-// explicitly by using BOOST_SPIRIT_OPAQUE_RULE_PARSER.
-// Opaque rule parsers can have parameters and member variables (note: no action
-// placeholders are possible). The parameters of an opaque rule parsers are
-// strictly typed, e.g:
-//
-// BOOST_SPIRIT_OPAQUE_RULE_PARSER(new_identifier,
-// (1,( ((my_symbol_table_t &),symbol_table) ))
-// ,-,
-// (alpha_p >> *alnum_p) [ symbol_table.add ]
-// )
-//
-// Note it's also possible to have opaque rule parsers accept parameters of
-// non-const reference types which is not possible with regular rule parsers.
-//
-//
-// 3. Utilities for by-reference embedding
-//
-// When using parsers mutiple times or recursively it can be helpful to embed
-// them by-reference into the final parser expression.
-// For this purpose the library provides a wrapper template 'parser_reference'.
-// There is also a function template to create a wrapped parser which can deduce
-// the parser's type from its argument.
-//
-// --- --- - - --- - - --- - - - - --- - - - - - - - - - - - - - - - - - - - - -
-#if !defined(BOOST_SPIRIT_UTILITY_RULE_PARSER_HPP_INCLUDED)
-# define BOOST_SPIRIT_UTILITY_RULE_PARSER_HPP_INCLUDED
-//==============================================================================
-// Dependencies
-//==============================================================================
-# include <boost/config.hpp>
-# include <boost/detail/workaround.hpp>
-# include <boost/call_traits.hpp>
-# include <boost/typeof/typeof.hpp>
-# include <boost/spirit/core/parser.hpp>
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# include <boost/preprocessor/cat.hpp>
-# include <boost/preprocessor/seq/seq.hpp>
-# include <boost/preprocessor/seq/for_each_i.hpp>
-# include <boost/preprocessor/tuple/eat.hpp>
-# include <boost/preprocessor/tuple/to_seq.hpp>
-# include <boost/preprocessor/array/size.hpp>
-# include <boost/preprocessor/control/if.hpp>
-# include <boost/preprocessor/control/iif.hpp>
-# include <boost/preprocessor/control/expr_iif.hpp>
-# include <boost/preprocessor/logical/or.hpp>
-# include <boost/preprocessor/logical/nor.hpp>
-# include <boost/preprocessor/logical/not.hpp>
-# include <boost/preprocessor/logical/compl.hpp>
-# include <boost/preprocessor/arithmetic/inc.hpp>
-# include <boost/preprocessor/arithmetic/dec.hpp>
-# include <boost/preprocessor/arithmetic/add.hpp>
-# include <boost/preprocessor/detail/is_unary.hpp>
-# include <boost/preprocessor/detail/is_binary.hpp>
-# include <boost/preprocessor/repetition/repeat.hpp>
-# include <boost/preprocessor/repetition/enum_params.hpp>
-# include <boost/preprocessor/repetition/enum_binary_params.hpp>
-# include <boost/preprocessor/repetition/enum_shifted_params.hpp>
-# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
-# include <boost/preprocessor/punctuation/comma.hpp>
-# include <boost/preprocessor/punctuation/comma_if.hpp>
-# include <boost/preprocessor/facilities/empty.hpp>
-# include <boost/preprocessor/facilities/identity.hpp>
-# include <boost/preprocessor/facilities/intercept.hpp>
-//==============================================================================
-// Interface
-//==============================================================================
-// Creates a rule parser. Use at namespace scope.
-# define BOOST_SPIRIT_RULE_PARSER(name,params,actions,members,rule) \
- BOOST_SPIRIT_RP_IMPL_I(name,params,actions,members,rule)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// Creates a non-templated rule parser. Use at namespace scope.
-# define BOOST_SPIRIT_OPAQUE_RULE_PARSER(name,params,members,rule) \
- BOOST_SPIRIT_RP_OPAQUE_IMPL_I(name,params,members,rule)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// Defines an action placeholder. Use at namespace scope.
-# define BOOST_SPIRIT_ACTION_PLACEHOLDER(name) \
- BOOST_SPIRIT_RP_AP_IMPL(name,::boost::spirit::type_of)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// Utilities to embed parsers by reference.
-namespace boost
-{
- namespace spirit
- {
- template<class P> class parser_reference;
- template<class P> parser_reference<P> embed_by_reference(parser<P> const &);
- }
-}
-//==============================================================================
-// Implementation
-//==============================================================================
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_REGISTER_TEMPLATE
-//
-// Boost.Typeof registration from within BOOST_SPIRIT__NAMESPACE
-# define BOOST_SPIRIT_RP_REGISTER_TEMPLATE(name,params) \
- BOOST_SPIRIT_RP_EMIT(NS_CLOSE,BOOST_SPIRIT__NAMESPACE,-) \
- BOOST_TYPEOF_REGISTER_TEMPLATE( \
- BOOST_SPIRIT_RP_EMIT(NS_QUALIFY,BOOST_SPIRIT__NAMESPACE,-) name, \
- params) \
- BOOST_SPIRIT_RP_EMIT(NS_OPEN,BOOST_SPIRIT__NAMESPACE,-)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_REGISTER_TYPE
-//
-// Boost.Typeof registration from within BOOST_SPIRIT__NAMESPACE
-# define BOOST_SPIRIT_RP_REGISTER_TYPE(name) \
- BOOST_SPIRIT_RP_EMIT(NS_CLOSE,BOOST_SPIRIT__NAMESPACE,-) \
- BOOST_TYPEOF_REGISTER_TYPE( \
- BOOST_SPIRIT_RP_EMIT(NS_QUALIFY,BOOST_SPIRIT__NAMESPACE,-) name ) \
- BOOST_SPIRIT_RP_EMIT(NS_OPEN,BOOST_SPIRIT__NAMESPACE,-)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_AP_IMPL
-//
-// The action placeholder definition
-# define BOOST_SPIRIT_RP_AP_IMPL(name,ns) \
- namespace __action_placeholder \
- { \
- struct name \
- { \
- template<typename Action> \
- ns :: action_chain< name, ns :: replace, Action> \
- operator=(Action const & __a) const \
- { return ns :: action_chain< name, ns :: replace, Action>(__a); } \
- \
- template<typename Action> \
- ns :: action_chain< name, ns :: append, Action> \
- operator+=(Action const & __a) const \
- { return ns :: action_chain< name, ns :: append, Action> (__a); } \
- }; \
- } \
- __action_placeholder:: name const name = __action_placeholder:: name ();
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_IMPL_I
-//
-// Does some precalculation so RP_IMPL_II can look cleaner
-# define BOOST_SPIRIT_RP_IMPL_I(name,pars,acts,mbrs,expr) \
- BOOST_SPIRIT_RP_IMPL_II(name, name ## _t , \
- pars, BOOST_SPIRIT_RP_ARRAY_SIZE(pars), \
- acts, BOOST_SPIRIT_RP_ARRAY_SIZE(acts), \
- mbrs, BOOST_SPIRIT_RP_ARRAY_SIZE(mbrs), expr)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_IMPL_II
-# define BOOST_SPIRIT_RP_IMPL_II(name,name_t,pars,np,acts,na,mbrs,nm,x) \
- BOOST_PP_IIF(BOOST_PP_OR(np,na),BOOST_SPIRIT_RP_IMPL_III, \
- BOOST_SPIRIT_RP_OPAQUE_IMPL_II) \
- (name,name_t,pars,np,acts,na,mbrs,nm,x)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_IMPL_III
-//
-// The rule parser definition
-# define BOOST_SPIRIT_RP_IMPL_III(name,name_t,pars,np,acts,na,mbrs,nm,x) \
- \
- template< BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,typename __,1) > \
- class name_t \
- : public ::boost::spirit::parser< name_t \
- < BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,__,0) > > \
- { \
- class __rule \
- { \
- BOOST_SPIRIT_RP_EMIT(PM_STATIC,pars,__T) \
- BOOST_SPIRIT_RP_EMIT(AP_STATIC,acts,-) \
- BOOST_SPIRIT_RP_EMIT(MV_STATIC,mbrs,BOOST_PP_IDENTITY(typename)) \
- public: \
- BOOST_TYPEOF_NESTED_TYPEDEF_TPL(__expr, \
- ::boost::spirit::type_of::depend_on_type<__Dummy>(x) ); \
- }; \
- \
- public: \
- \
- typedef name_t self_t; \
- typedef typename __rule::__expr::type::parser_category_t \
- parser_category_t; \
- \
- BOOST_PP_EXPR_IIF(BOOST_PP_NOR(np,na),typedef self_t const & embed_t;) \
- \
- protected: \
- \
- BOOST_SPIRIT_RP_EMIT(MV_NONSTATIC,mbrs,BOOST_PP_IDENTITY(typename)) \
- BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_AP_EXTRA_MBRS,2)(np,na) \
- \
- typename __rule::__expr::type::embed_t __parser; \
- \
- public: \
- \
- explicit name_t ( BOOST_SPIRIT_RP_CTOR(PARAMS,pars,np,acts) ) \
- : BOOST_SPIRIT_RP_EMIT(MV_CTOR_INIT_LIST,mbrs,-) \
- BOOST_PP_COMMA_IF(nm) \
- BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_CTOR_COMMA,4)(INIT_LIST,pars,np,acts)\
- __parser(x) \
- { } \
- \
- name_t( name_t const & that) \
- : BOOST_SPIRIT_RP_EMIT(MV_CTOR_COPY_INIT_LIST,mbrs,that) \
- BOOST_PP_COMMA_IF(nm) \
- BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_CTOR_COMMA,4) \
- (COPY_INIT_LIST,pars,np,acts) \
- __parser(that.__parser) \
- { } \
- \
- template<typename Scanner> struct result \
- { \
- typedef typename ::boost::spirit::parser_result< \
- typename __rule::__expr::type, Scanner>::type type; \
- }; \
- \
- template<typename Scanner> \
- typename ::boost::spirit::parser_result<self_t, Scanner>::type \
- parse(Scanner const & s) const { return __parser.parse(s); } \
- \
- BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_AP_HANDLER,5) \
- (name_t,np,acts,na,::boost::spirit::type_of) \
- }; \
- \
- BOOST_PP_IF(np,BOOST_SPIRIT_RP_GEN_FUNC,BOOST_SPIRIT_RP_GLOB_VAR) \
- (name,name_t,np,na) \
- BOOST_SPIRIT_RP_REGISTER_TEMPLATE \
- (name_t,BOOST_PP_INC(BOOST_PP_ADD(np,na)))
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_OPAQUE_IMPL_I
-//
-# define BOOST_SPIRIT_RP_OPAQUE_IMPL_I(name,pars,mbrs,expr) \
- BOOST_SPIRIT_RP_OPAQUE_IMPL_II(name, name ## _t, \
- pars,BOOST_SPIRIT_RP_ARRAY_SIZE(pars),-,-,\
- mbrs,BOOST_SPIRIT_RP_ARRAY_SIZE(mbrs),expr)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_OPAQUE_IMPL_II
-//
-# define BOOST_SPIRIT_RP_OPAQUE_IMPL_II(name,name_t,pars,np,_1,_2,mbrs,nm,x) \
- class name_t; \
- \
- BOOST_SPIRIT_RP_REGISTER_TYPE(name_t) \
- \
- class name_t \
- : public ::boost::spirit::parser< name_t > \
- { \
- class __rule \
- { \
- BOOST_SPIRIT_RP_EMIT(PM_OPAQUE_STATIC,pars,-) \
- BOOST_SPIRIT_RP_EMIT(MV_STATIC,mbrs,BOOST_PP_EMPTY) \
- public: \
- BOOST_TYPEOF_NESTED_TYPEDEF(__expr,x) ; \
- }; \
- \
- public: \
- \
- typedef name_t self_t; \
- typedef __rule::__expr::type::parser_category_t parser_category_t; \
- BOOST_PP_EXPR_IIF(BOOST_PP_NOT(np),typedef self_t const & embed_t;) \
- \
- protected: \
- \
- BOOST_SPIRIT_RP_EMIT(MV_NONSTATIC,mbrs,BOOST_PP_EMPTY) \
- \
- __rule::__expr::type::embed_t __parser; \
- \
- public: \
- \
- explicit name_t (BOOST_SPIRIT_RP_EMIT(PM_OPAQUE_CTOR_PARAMS,pars,-)) \
- : BOOST_SPIRIT_RP_EMIT(MV_CTOR_INIT_LIST,mbrs,-) \
- BOOST_PP_COMMA_IF(nm) __parser(x) \
- { } \
- \
- name_t(name_t const & that) \
- : BOOST_SPIRIT_RP_EMIT(MV_CTOR_COPY_INIT_LIST,mbrs,that) \
- BOOST_PP_COMMA_IF(nm) __parser(that.__parser) \
- { } \
- \
- template<typename Scanner> struct result \
- { \
- typedef typename ::boost::spirit::parser_result< \
- __rule::__expr::type, Scanner>::type type; \
- }; \
- \
- template<typename Scanner> \
- typename ::boost::spirit::parser_result<self_t, Scanner>::type \
- parse(Scanner const & s) const { return __parser.parse(s); } \
- }; \
- \
- BOOST_PP_IF(np,BOOST_SPIRIT_RP_GEN_OPAQUE,BOOST_SPIRIT_RP_GLOB_OPAQUE) \
- (name,name_t,np,pars)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_AP_HANDLER
-//
-// Part of the rule parser definition for handling action placeholders
-# define BOOST_SPIRIT_RP_AP_HANDLER(name_t,np,acts,na,ns) \
- private: \
- template<typename A> struct __rebound_1st \
- { \
- typedef name_t < void BOOST_PP_ENUM_TRAILING_PARAMS(np,__T) , \
- typename ns ::action_concatenator<__A0,A>::type \
- BOOST_PP_COMMA_IF(BOOST_PP_DEC(na)) \
- BOOST_PP_ENUM_SHIFTED_PARAMS(na,__A) \
- > type; \
- }; \
- \
- template<typename X> struct __rebound \
- { \
- typedef name_t < \
- void BOOST_PP_ENUM_TRAILING_PARAMS(np,__T) \
- BOOST_SPIRIT_RP_EMIT(AP_REBOUND_TPL_ARGS,acts,X) \
- > type; \
- }; \
- public: \
- template<typename A> \
- typename __rebound_1st<A>::type const operator[](A const & a) const \
- { \
- return typename __rebound_1st<A>::type ( \
- BOOST_PP_ENUM_PARAMS(np,__p) BOOST_PP_COMMA_IF(np) \
- ns ::concatenate_actions(__a0,a) \
- BOOST_PP_COMMA_IF(BOOST_PP_DEC(na)) \
- BOOST_PP_ENUM_SHIFTED_PARAMS(na,__a) ); \
- } \
- template<class PH, ns ::action_chain_mode M, typename A> \
- typename __rebound< ns ::action_chain<PH,M,A> >::type const \
- operator[]( ns ::action_chain<PH,M,A> const & x) const \
- { \
- return typename __rebound< ns ::action_chain<PH,M,A> >::type ( \
- BOOST_PP_ENUM_PARAMS(np,__p) BOOST_PP_COMMA_IF(np) \
- BOOST_SPIRIT_RP_EMIT(AP_REBOUND_ARGS,acts,x) ); \
- } \
- template<class Head, class Tail> \
- typename __rebound< ns ::action_chains<Head,Tail> >::type const \
- operator[]( ns ::action_chains<Head,Tail> const & x) const \
- { \
- return typename __rebound< ns ::action_chains<Head,Tail> >::type ( \
- BOOST_PP_ENUM_PARAMS(np,__p) BOOST_PP_COMMA_IF(np) \
- BOOST_SPIRIT_RP_EMIT(AP_REBOUND_ARGS,acts,x) ); \
- }
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_AP_EXTRA_MBRS
-//
-// Extra members we need for rebinding if there are action placeholders
-# define BOOST_SPIRIT_RP_AP_EXTRA_MBRS(np,na) \
- private: \
- BOOST_PP_REPEAT(np,BOOST_SPIRIT_RP_PM_MBRS,-) \
- BOOST_PP_REPEAT(na,BOOST_SPIRIT_RP_AP_MBRS,-)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_PM_MBRS
-//
-// Member variables to remember parameters if there are action placeholder
-# define BOOST_SPIRIT_RP_PM_MBRS(z,i,d) __T ## i __p ## i ;
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_AP_MBRS
-//
-// Member variables to remember action placeholder substitutes
-# define BOOST_SPIRIT_RP_AP_MBRS(z,i,d) __A ## i __a ## i ;
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_CTOR
-//
-// Expands to a fragment of a constructor (parameters or init-list)
-# define BOOST_SPIRIT_RP_CTOR(what,pars,np,acts) \
- BOOST_SPIRIT_RP_EMIT(PM_CTOR_ ## what,pars,__T) \
- BOOST_SPIRIT_RP_EMIT(AP_CTOR_ ## what,acts,np)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_CTOR_COMMA
-//
-// RP_CTOR with a trailing comma
-# define BOOST_SPIRIT_RP_CTOR_COMMA(what,pars,np,acts) \
- BOOST_SPIRIT_RP_CTOR(what,pars,np,acts) ,
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_TPL_PARAMS
-//
-// Expands to the template parameters or arguments of the rule parser template
-# define BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,prefix,defaults) \
- prefix ## Dummy \
- BOOST_SPIRIT_RP_EMIT(PM_TEMPLATE_PARAMS,pars,prefix ## T) \
- BOOST_SPIRIT_RP_EMIT(AP_TEMPLATE_PARAMS,acts,(prefix ## A,defaults))
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_GEN_FUNC
-//
-// Generator function
-# define BOOST_SPIRIT_RP_GEN_FUNC(name,name_t,np,na) \
- template< BOOST_PP_ENUM_PARAMS(np,typename T) > \
- inline name_t < void BOOST_PP_ENUM_TRAILING_PARAMS(np,T) > \
- name( BOOST_PP_ENUM_BINARY_PARAMS(np,T, const & p) ) \
- { return name_t < void BOOST_PP_ENUM_TRAILING_PARAMS(np,T) > \
- (BOOST_PP_ENUM_PARAMS(np,p) BOOST_PP_ENUM_TRAILING_PARAMS(na, \
- ::boost::spirit::type_of::nop_functor() BOOST_PP_INTERCEPT) ); \
- }
-// RP_GEN_OPAQUE
-//
-// non-templated version for opaque rule parsers.
-# define BOOST_SPIRIT_RP_GEN_OPAQUE(name,name_t,np,pars) \
- inline name_t name( BOOST_SPIRIT_RP_EMIT(PM_OPAQUE_GEN_PARAMS,pars,p)) \
- { return name_t (BOOST_PP_ENUM_PARAMS(np,p)); }
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_GLOB_VAR
-//
-// Global variable -- used instead of the generator function if there are no
-// parameters
-# define BOOST_SPIRIT_RP_GLOB_VAR(name,name_t,np,na) \
- static name_t <void> const name = name_t <void>(BOOST_PP_ENUM_PARAMS(na, \
- ::boost::spirit::type_of::nop_functor() BOOST_PP_INTERCEPT) );
-
-// RP_GLOB_OPAQUE
-//
-// non-templated version for opaque rule parsers.
-# define BOOST_SPIRIT_RP_GLOB_OPAQUE(name,name_t,np,pars) \
- static name_t const name = name_t () ;
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// PP_EMIT operations (fragment emittion based on array input)
-
-// - - Namespace handling
-
-// NS_OPEN
-# define BOOST_SPIRIT_RP__NS_OPEN(r,data,i,elem) \
- namespace BOOST_SPIRIT_RP_OPTIONAL(elem) {
-
-// NS_QUALIFY
-# define BOOST_SPIRIT_RP__NS_QUALIFY(r,data,i,elem) \
- BOOST_SPIRIT_RP_OPTIONAL(elem ::)
-
-// NS_CLOSE
-# define BOOST_SPIRIT_RP__NS_CLOSE(r,data,i,elem) }
-
-// - - Parameter handling
-
-// PM_STATIC
-# define BOOST_SPIRIT_RP__PM_STATIC(r,data,i,elem) \
- static typename ::boost::call_traits< data ## i >::reference elem ;
-
-// PM_CTOR_PARAMS
-# define BOOST_SPIRIT_RP__PM_CTOR_PARAMS(r,data,i,elem) \
- BOOST_PP_COMMA_IF(i) \
- typename ::boost::call_traits< data ## i >::param_type elem
-
-// PM_CTOR_ARGS
-# define BOOST_SPIRIT_RP__PM_CTOR_ARGS(r,data,i,elem) \
- BOOST_PP_COMMA_IF(i) elem
-
-// PM_CTOR_INIT_LIST
-# define BOOST_SPIRIT_RP__PM_CTOR_INIT_LIST(r,data,i,elem) \
- BOOST_PP_COMMA_IF(i) __p ## i ( elem )
-
-// PM_CTOR_COPY_INIT_LIST
-# define BOOST_SPIRIT_RP__PM_CTOR_COPY_INIT_LIST(r,data,i,elem) \
- BOOST_PP_COMMA_IF(i) __p ## i ( that. __p ## i )
-
-
-// PM_TEMPLATE_PARAMS
-# define BOOST_SPIRIT_RP__PM_TEMPLATE_PARAMS(r,data,i,elem) , data ## i
-
-// - strictly typed parameters of the opaque rule_parser
-
-// PM_OPAQUE_STATIC
-# define BOOST_SPIRIT_RP__PM_OPAQUE_STATIC(r,data,i,elem) \
- static ::boost::call_traits< \
- BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(2,0,elem)) \
- >::reference BOOST_PP_TUPLE_ELEM(2,1,elem) ;
-
-// PM_OPAQUE_CTOR_PARAMS
-# define BOOST_SPIRIT_RP__PM_OPAQUE_CTOR_PARAMS(r,data,i,elem) \
- BOOST_PP_COMMA_IF(i) ::boost::call_traits< \
- BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(2,0,elem)) \
- >::param_type BOOST_PP_TUPLE_ELEM(2,1,elem)
-
-// PM_OPAQUE_GEN_PARAMS
-# define BOOST_SPIRIT_RP__PM_OPAQUE_GEN_PARAMS(r,data,i,elem) \
- BOOST_PP_COMMA_IF(i) ::boost::call_traits< \
- BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(2,0,elem)) \
- >::param_type data ## i
-
-// - - Member variable handling
-
-// MV_NONSTATIC
-# define BOOST_SPIRIT_RP__MV_NONSTATIC(r,data,i,elem) \
- data() BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(3,0,elem)) \
- BOOST_PP_TUPLE_ELEM(3,1,elem) ;
-
-// MV_STATIC
-# define BOOST_SPIRIT_RP__MV_STATIC(r,data,i,elem) \
- static data() ::boost::call_traits< \
- data() BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(3,0,elem)) \
- >::reference BOOST_PP_TUPLE_ELEM(3,1,elem) ;
-
-// MV_CTOR_INIT_LIST
-# define BOOST_SPIRIT_RP__MV_CTOR_INIT_LIST(r,data,i,elem) \
- BOOST_PP_COMMA_IF(i) \
- BOOST_PP_TUPLE_ELEM(3,1,elem) BOOST_PP_TUPLE_ELEM(3,2,elem)
-
-// MV_CTOR_COPY_INIT_LIST
-# define BOOST_SPIRIT_RP__MV_CTOR_COPY_INIT_LIST(r,data,i,elem) \
- BOOST_PP_COMMA_IF(i) \
- BOOST_PP_TUPLE_ELEM(3,1,elem) (data . BOOST_PP_TUPLE_ELEM(3,1,elem))
-
-// - - Action placeholder handling
-
-// AP_STATIC
-# define BOOST_SPIRIT_RP__AP_STATIC(r,data,i,elem) static __A ## i & elem ;
-
-// AP_CTOR_PARAMS
-# define BOOST_SPIRIT_RP__AP_CTOR_PARAMS(r,data,i,elem) \
- BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) \
- typename ::boost::call_traits< __A ## i >::param_type elem
-
-// AP_CTOR_ARGS
-# define BOOST_SPIRIT_RP__AP_CTOR_ARGS(r,data,i,elem) \
- BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) elem
-
-// AP_CTOR_INIT_LIST
-# define BOOST_SPIRIT_RP__AP_CTOR_INIT_LIST(r,data,i,elem) \
- BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) __a ## i ( elem )
-
-// AP_CTOR_COPY_INIT_LIST
-# define BOOST_SPIRIT_RP__AP_CTOR_COPY_INIT_LIST(r,data,i,elem) \
- BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) __a ## i ( that. __a ## i )
-
-// AP_TEMPLATE_PARAMS
-# define BOOST_SPIRIT_RP__AP_TEMPLATE_PARAMS(r,data,i,elem) \
- , BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,data),i) \
- BOOST_PP_EXPR_IIF(BOOST_PP_TUPLE_ELEM(2,1,data), \
- = ::boost::spirit::type_of::nop_functor)
-
-// AP_REBOUND_ARGS
-# define BOOST_SPIRIT_RP__AP_REBOUND_ARGS(r,data,i,elem) \
- BOOST_PP_COMMA_IF(i) \
- ::boost::spirit::type_of::get_placeholdee< __action_placeholder:: elem > \
- ( __a ## i , data )
-
-// AP_REBOUND_TPL_ARGS
-# define BOOST_SPIRIT_RP__AP_REBOUND_TPL_ARGS(r,data,i,elem) \
- , typename ::boost::spirit::type_of::placeholdee< \
- __action_placeholder:: elem , __A ## i, data >::type
-
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// PP_EMIT
-//
-// Performs one of the operations in the above section on an optional array.
-//
-# define BOOST_SPIRIT_RP_EMIT(op, array, data) \
- BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I(BOOST_SPIRIT_RP__ ## op,data,array)
-// --- --- - - --- - - --- - - - - --- - - - - - - - - - - - - - - - - - - - - -
-// RP_ARRAY_FOR_EACH_I
-//
-// Iterates an optional array. That is you can pass e.g.'-' or 'none' to denote
-// emptiness.
-# define BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I(macro,data,optional_array) \
- BOOST_PP_IIF(BOOST_PP_IS_BINARY(optional_array), \
- BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I_IMPL, \
- BOOST_PP_TUPLE_EAT(3))(macro,data,optional_array)
-
-// RP_ARRAY_FOR_EACH_I_IMPL
-# define BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I_IMPL(macro,data,array) \
- BOOST_SPIRIT_RP_IF(BOOST_PP_ARRAY_SIZE(array),PP_SEQ_FOR_EACH_I,3) \
- (macro,data, BOOST_SPIRIT_RP_IF(BOOST_PP_ARRAY_SIZE(array), \
- PP_TUPLE_TO_SEQ,2) array)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_ARRAY_SIZE
-//
-// Expands to the size of an "optional array".
-//
-// Examples:
-//
-// BOOST_SPIRIT_RP_ARRAY_SIZE( (2,(a,b)) ) // 2
-// BOOST_SPIRIT_RP_ARRAY_SIZE( (0,()) ) // 0
-// BOOST_SPIRIT_RP_ARRAY_SIZE( none ) // 0
-// BOOST_SPIRIT_RP_ARRAY_SIZE( - ) // 0
-//
-# define BOOST_SPIRIT_RP_ARRAY_SIZE(optional_array) \
- BOOST_PP_IIF(BOOST_PP_IS_BINARY(optional_array), \
- BOOST_PP_ARRAY_SIZE, 0 BOOST_PP_TUPLE_EAT(1))(optional_array)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_OPTIONAL
-//
-// Expands to nothing if the argument is parenthesized.
-//
-// Examples:
-//
-// BOOST_SPIRIT_RP_OPTIONAL( foobar ) // foobar
-// BOOST_SPIRIT_RP_OPTIONAL( (none) ) // evaluates to nothing
-//
-# define BOOST_SPIRIT_RP_OPTIONAL(elem) \
- BOOST_PP_EXPR_IIF(BOOST_PP_COMPL(BOOST_PP_IS_UNARY(elem)),elem)
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_COMMA_IF_OR
-//
-// Expands to nothing if both arguments are zero, otherwise expands to a comma.
-//
-# define BOOST_SPIRIT_RP_COMMA_IF_OR(a,b) \
- BOOST_PP_IIF(BOOST_PP_OR(a,b),BOOST_PP_COMMA,BOOST_PP_EMPTY)()
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-// RP_IF
-//
-// BOOST_SPIRIT_RP_IF(cond,name,arity)
-//
-// is equivalent to:
-//
-// BOOST_PP_IF(cond,BOOST_name,BOOST_PP_TUPLE_EAT(arity))
-//
-# define BOOST_SPIRIT_RP_IF(cond,name,arity) \
- BOOST_PP_IF(cond,BOOST_ ## name,BOOST_PP_TUPLE_EAT(arity))
-
-//------------------------------------------------------------------------------
-// Wrapper and gernator function to embed a parser by reference
-//------------------------------------------------------------------------------
-
-namespace boost { namespace spirit {
-
- // Wrapper to embed a parser by reference
-
- template<class P> class parser_reference
- : public parser< parser_reference<P> >
- {
- P const & ref_that;
- public:
- parser_reference(P & that)
- // we allow implicit conversion but forbid temporaries.
- : ref_that(that)
- { }
-
- typedef parser_reference<P> self_t;
- typedef self_t const & embed_t;
- typedef typename P::parser_category_t parser_category_t;
-
- template<typename ScannerT> struct result
- { typedef typename P::BOOST_NESTED_TEMPLATE result<ScannerT>::type type; };
-
- template<typename ScannerT>
- typename result<ScannerT>::type
- parse(ScannerT const & scan) const
- { return this->ref_that.parse(scan); }
- };
-
- template<class P> parser_reference<P>
- embed_by_reference(::boost::spirit::parser<P> & p)
- { return p; }
-
-} } // namespace ::boost::spirit
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parser_reference, 1)
-
-//------------------------------------------------------------------------------
-// Expression templates for action placeholders.
-//------------------------------------------------------------------------------
-
-namespace boost { namespace spirit { namespace type_of {
-
- // No-operation functor
-
- struct nop_functor
- {
- template<typename T>
- bool operator()(T const &) const
- { return false; }
- template<typename T, typename U>
- bool operator()(T const &, U const &) const
- { return false; }
-
- typedef bool result_type;
- };
-
- // Composite action
-
- template<typename Action1, typename Action2>
- class composite_action
- {
- Action1 fnc_a1;
- Action2 fnc_a2;
- public:
- composite_action(Action1 const & a1, Action2 const & a2)
- : fnc_a1(a1), fnc_a2(a2)
- { }
-
- template<typename T>
- void operator()(T const & inp) const
- { fnc_a1(inp); fnc_a2(inp); }
-
- template<typename T, typename U>
- void operator()(T const & inp1, U const inp2) const
- { fnc_a1(inp1, inp2); fnc_a2(inp1, inp2); }
- };
-
- // Action concatenation (and optimize away nop_functorS)
-
- template<typename Action1, typename Action2>
- struct action_concatenator
- {
- typedef composite_action<Action1,Action2> type;
-
- static type concatenate(Action1 const & a1, Action2 const & a2)
- { return composite_action<Action1,Action2>(a1,a2); }
- };
- template<typename Action> struct action_concatenator<nop_functor, Action>
- {
- typedef Action type;
-
- static type concatenate(nop_functor const &, Action const & a)
- { return a; }
- };
- template<typename Action> struct action_concatenator<Action, nop_functor>
- {
- typedef Action type;
-
- static type concatenate(Action const & a, nop_functor const &)
- { return a; }
- };
- template<> struct action_concatenator<nop_functor, nop_functor>
- {
- typedef nop_functor type;
-
- static type concatenate(nop_functor const &, nop_functor const &)
- { return nop_functor(); }
- };
-
- template<typename Action1, typename Action2>
- typename action_concatenator<Action1,Action2>::type
- concatenate_actions(Action1 const & a1, Action2 const & a2)
- {
- return action_concatenator<Action1,Action2>::concatenate(a1,a2);
- }
-
- // Action chains
-
- enum action_chain_mode { replace, append };
-
- template<class Placeholder, action_chain_mode Mode, typename Action>
- class action_chain
- {
- Action fnc_action;
- public:
- action_chain(Action const & a)
- : fnc_action(a)
- { }
-
- typedef Action action_type;
-
- Action const & action() const { return fnc_action; }
- };
-
- // This operator adds actions to an action chain definition
- template<class PH, action_chain_mode M, typename A1, typename A2>
- action_chain<PH, M, typename action_concatenator<A1,A2>::type>
- operator, (action_chain<PH,M,A1> const & chain, A2 const & a)
- {
- return action_chain<PH,M,typename action_concatenator<A1,A2>::type>
- ( concatenate_actions(chain.action(), a) );
- }
-
- // Expression template for mutiple action chain assignments
- template<class ChainOrChains, class LastChain>
- class action_chains
- {
- ChainOrChains obj_head;
- LastChain obj_tail;
- public:
- action_chains(ChainOrChains const & head, LastChain const & tail)
- : obj_head(head), obj_tail(tail)
- { }
-
- typedef ChainOrChains head_type;
- typedef LastChain tail_type;
-
- head_type const & head() const { return obj_head; }
- tail_type const & tail() const { return obj_tail; }
- };
-
- // Action chain concatenation
- template<class Head, class Tail>
- action_chains<Head,Tail> make_chain(Head const & h, Tail const & t)
- { return action_chains<Head,Tail>(h,t); }
-
- template<class PH1, action_chain_mode M1, typename A1,
- class PH2, action_chain_mode M2, typename A2>
- action_chains< action_chain<PH1,M1,A1>, action_chain<PH2,M2,A2> >
- operator, (action_chain<PH1,M1,A1> const & h,
- action_chain<PH2,M2,A2> const & t)
- { return make_chain(h,t); }
-
- template<class Head, class Tail,class PH, action_chain_mode M, typename A>
- action_chains< action_chains<Head,Tail>, action_chain<PH,M,A> >
- operator, (action_chains<Head,Tail> const & h, action_chain<PH,M,A> const & t)
- { return make_chain(h,t); }
-
-
- // Extract the (maybe composite) action associated with an action
- // placeholders from the chains with a fold algorithm.
- template<class Placeholder, typename StartAction, class NewChainOrChains>
- struct placeholdee
- {
- typedef StartAction type;
-
- static type get(StartAction const & a, NewChainOrChains const &)
- { return a; }
- };
-
- template<class Placeholder, // <-- non-deduced
- typename StartAction, class NewChainOrChains>
- typename placeholdee<Placeholder,StartAction,NewChainOrChains>::type
- get_placeholdee(StartAction const & a, NewChainOrChains const & c)
- { return placeholdee<Placeholder,StartAction,NewChainOrChains>::get(a,c); }
-
- template<class Placeholder, typename StartAction, class Head, class Tail>
- struct placeholdee
- < Placeholder, StartAction, action_chains<Head,Tail> >
- {
- typedef typename placeholdee<Placeholder,
- typename placeholdee<Placeholder,StartAction,Head>::type, Tail >::type
- type;
-
- static type get(StartAction const & a, action_chains<Head,Tail> const & c)
- {
- return get_placeholdee<Placeholder>(
- get_placeholdee<Placeholder>(a,c.head()), c.tail() );
- }
- };
-
- template<class Placeholder, typename StartAction, typename A>
- struct placeholdee
- < Placeholder, StartAction, action_chain<Placeholder,replace,A> >
- {
- typedef A type;
-
- static type get(StartAction const &,
- action_chain<Placeholder,replace,A> const & c)
- { return c.action(); }
- };
-
- template<class Placeholder, typename StartAction, typename A>
- struct placeholdee
- < Placeholder, StartAction, action_chain<Placeholder,append,A> >
- {
- typedef typename action_concatenator<StartAction,A>::type type;
-
- static type get(StartAction const & a,
- action_chain<Placeholder,append,A> const & c)
- { return concatenate_actions(a,c.action()); }
- };
-
-} } } // namespace ::boost::spirit::type_of
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::type_of::nop_functor)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::type_of::composite_action,2)
-
-//------------------------------------------------------------------------------
-// Misc.utilities
-//------------------------------------------------------------------------------
-
-namespace boost { namespace spirit { namespace type_of {
-
- // Utility function to create a dependency to a template argument.
-
- template<typename T, typename X>
- X const & depend_on_type(X const & x)
- { return x; }
-
- // Utility to allow use parenthesized type expressions with commas inside
- // as a type within macros. Thanks to Dave Abrahams for telling me this nice
- // trick.
-
- #define BOOST_SPIRIT_RP_TYPE(x) \
- ::boost::spirit::type_of::remove_special_fptr \
- < ::boost::spirit::type_of::special_result & (*) x >::type
-
- struct special_result;
-
- template<typename T> struct remove_special_fptr { };
- template<typename T> struct remove_special_fptr< special_result & (*)(T) >
- { typedef T type; };
-
-} } } // namespace ::boost::spirit::type_of
-
-//------------------------------------------------------------------------------
-#endif
-//------------------------------------------------------------------------------
+/*=============================================================================
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_RULE_PARSER
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_RULE_PARSER
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_rule_parser.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_rule_parser.hpp"
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_rule_parser.hpp>
 
+#endif

Modified: branches/CMake/release/boost/spirit/utility/scoped_lock.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/scoped_lock.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/scoped_lock.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,108 +1,23 @@
 /*=============================================================================
- Copyright (c) 2003 Martin Wille
- http://spirit.sourceforge.net/
-
- Use, modification and distribution is subject to the 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_SPIRIT_UTILITY_SCOPED_LOCK_HPP
-#define BOOST_SPIRIT_UTILITY_SCOPED_LOCK_HPP
-
-///////////////////////////////////////////////////////////////////////////////
-#if !defined(BOOST_SPIRIT_COMPOSITE_HPP)
-#include <boost/spirit/core/composite.hpp>
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Distributed under the 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_SPIRIT_DEPRECATED_INCLUDE_SCOPED_LOCK
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_SCOPED_LOCK
+
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_scoped_lock.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_scoped_lock.hpp"
 #endif
 
-///////////////////////////////////////////////////////////////////////////////
-namespace boost { namespace spirit {
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // scoped_lock_parser class
- //
- // implements locking of a mutex during execution of
- // the parse method of an embedded parser
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename MutexT, typename ParserT>
- struct scoped_lock_parser
- : public unary< ParserT, parser< scoped_lock_parser<MutexT, ParserT> > >
- {
- typedef scoped_lock_parser<MutexT, ParserT> self_t;
- typedef MutexT mutex_t;
- typedef ParserT parser_t;
-
- template <typename ScannerT>
- struct result
- {
- typedef typename parser_result<parser_t, ScannerT>::type type;
- };
-
- scoped_lock_parser(mutex_t &m, parser_t const &p)
- : unary< ParserT, parser< scoped_lock_parser<MutexT, ParserT> > >(p)
- , mutex(m)
- {}
-
-
- template <typename ScannerT>
- typename parser_result<self_t, ScannerT>::type
- parse(ScannerT const &scan) const
- {
- typedef typename mutex_t::scoped_lock scoped_lock_t;
- scoped_lock_t lock(mutex);
- return this->subject().parse(scan);
- }
-
- mutex_t &mutex;
- };
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // scoped_lock_parser_gen
- //
- // generator for scoped_lock_parser objects
- // operator[] returns scoped_lock_parser according to its argument
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename MutexT>
- struct scoped_lock_parser_gen
- {
- typedef MutexT mutex_t;
- explicit scoped_lock_parser_gen(mutex_t &m) : mutex(m) {}
-
- template<typename ParserT>
- scoped_lock_parser
- <
- MutexT,
- typename as_parser<ParserT>::type
- >
- operator[](ParserT const &p) const
- {
- typedef ::boost::spirit::as_parser<ParserT> as_parser_t;
- typedef typename as_parser_t::type parser_t;
-
- return scoped_lock_parser<mutex_t, parser_t>
- (mutex, as_parser_t::convert(p));
- }
-
- mutex_t &mutex;
- };
-
-
- ///////////////////////////////////////////////////////////////////////////
- //
- // scoped_lock_d parser directive
- //
- // constructs a scoped_lock_parser generator from its argument
- //
- ///////////////////////////////////////////////////////////////////////////
- template <typename MutexT>
- scoped_lock_parser_gen<MutexT>
- scoped_lock_d(MutexT &mutex)
- {
- return scoped_lock_parser_gen<MutexT>(mutex);
- }
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_scoped_lock.hpp>
 
-}} // namespace boost::spirit
-#endif // BOOST_SPIRIT_UTILITY_SCOPED_LOCK_HPP
+#endif

Modified: branches/CMake/release/boost/spirit/utility/typeof.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/utility/typeof.hpp (original)
+++ branches/CMake/release/boost/spirit/utility/typeof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,146 +1,23 @@
 /*=============================================================================
- Copyright (c) 2006 Tobias Schwinger
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(BOOST_SPIRIT_UTILITY_TYPEOF_HPP)
-#define BOOST_SPIRIT_UTILITY_TYPEOF_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_TYPEOF
 
-#include <boost/typeof/typeof.hpp>
-
-#include <boost/spirit/core/typeof.hpp>
-
-#include <boost/spirit/utility/escape_char_fwd.hpp>
-#include <boost/spirit/utility/confix_fwd.hpp>
-#include <boost/spirit/utility/lists_fwd.hpp>
-#include <boost/spirit/utility/distinct_fwd.hpp>
-#include <boost/spirit/utility/grammar_def_fwd.hpp>
-
-namespace boost { namespace spirit {
-
- // chset.hpp
- template<typename CharT> class chset;
-
- // functor_parser.hpp
- template<typename FunctorT> struct functor_parser;
-
- // loops.hpp
- template<class ParserT, typename ExactT> class fixed_loop;
- template<class ParserT, typename MinT, typename MaxT> class finite_loop;
- template<class ParserT, typename MinT> class infinite_loop;
-
- // regex.hpp
- template<typename CharT> struct rxstrlit;
-
- // flush_multi_pass.hpp
- class flush_multi_pass_parser;
-
- // scoped_lock.hpp
- template<class MutexT, class ParserT> struct scoped_lock_parser;
-
-}} // namespace boost::spirit
-
-
-#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
-
-
-// chset.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::chset,1)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chset<char>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chset<wchar_t>)
-
-
-// escape_char.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::escape_char_parser,(BOOST_TYPEOF_INTEGRAL(unsigned long))(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::escape_char_action,(class)(typename)(BOOST_TYPEOF_INTEGRAL(unsigned long))(typename))
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::escape_char_parser,(BOOST_TYPEOF_INTEGRAL(unsigned long)))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::escape_char_action,(class)(typename)(BOOST_TYPEOF_INTEGRAL(unsigned long)))
-
-
-// functor_parser.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::functor_parser,1)
-
-
-// loops.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fixed_loop,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::finite_loop,3)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::infinite_loop,2)
-
-
-// regex.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::rxstrlit,1)
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::rxstrlit<char>)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::rxstrlit<wchar_t>)
-
-
-// confix.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::confix_parser, 6)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::confix_parser, 5)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::confix_parser, 4)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::confix_parser, 3)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::comment_nest_parser, 2)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::is_nested)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::non_nested)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::is_lexeme)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::non_lexeme)
-
-
-// lists.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::list_parser,4)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::list_parser,3)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::list_parser,2)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::no_list_endtoken)
-
-
-// distinct.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::distinct_parser,2)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::distinct_parser,1)
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::dynamic_distinct_parser,1)
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::distinct_parser<>)
-
-
-// flush_multi_pass.hpp
-
-BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::flush_multi_pass_parser)
-
-
-// scoped_lock.hpp
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scoped_lock_parser,2)
-
-
-// grammar_gen.hpp (has forward header)
-
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar_def,BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT)
-
-#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 12
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar_def,12)
-#endif
-#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 9
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar_def, 9)
-#endif
-#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 6
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar_def, 6)
-#endif
-#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 3
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar_def, 3)
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_typeof.hpp"
 #endif
 
-
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
 #endif
+#include <boost/spirit/include/classic_typeof.hpp>
 
-
+#endif

Modified: branches/CMake/release/boost/spirit/version.hpp
==============================================================================
--- branches/CMake/release/boost/spirit/version.hpp (original)
+++ branches/CMake/release/boost/spirit/version.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,31 +1,23 @@
 /*=============================================================================
- Copyright (c) 2001-2003 Hartmut Kaiser
- http://spirit.sourceforge.net/
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
 
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
-#if !defined(SPIRIT_VERSION_HPP)
-#define SPIRIT_VERSION_HPP
+#ifndef BOOST_SPIRIT_DEPRECATED_INCLUDE_VERSION
+#define BOOST_SPIRIT_DEPRECATED_INCLUDE_VERSION
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// This checks, whether the used Boost library is at least V1.32.0
-//
-///////////////////////////////////////////////////////////////////////////////
-#include <boost/version.hpp>
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+# pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic_version.hpp")
+#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
+# warning "This header is deprecated. Please use: boost/spirit/include/classic_version.hpp"
+#endif
 
-#if BOOST_VERSION < 103200
-#error "Spirit v1.8.x needs at least Boost V1.32.0 to compile successfully."
-#endif
+#if !defined(BOOST_SPIRIT_USE_OLD_NAMESPACE)
+#define BOOST_SPIRIT_USE_OLD_NAMESPACE
+#endif
+#include <boost/spirit/include/classic_version.hpp>
 
-///////////////////////////////////////////////////////////////////////////////
-//
-// This is the version of the current Spirit distribution
-//
-///////////////////////////////////////////////////////////////////////////////
-#define SPIRIT_VERSION 0x1806
-#define SPIRIT_PIZZA_VERSION SPIRIT_MEGA_VEGGI // :-)
-
-#endif // defined(SPIRIT_VERSION_HPP)
+#endif

Modified: branches/CMake/release/boost/thread.hpp
==============================================================================
--- branches/CMake/release/boost/thread.hpp (original)
+++ branches/CMake/release/boost/thread.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,5 +1,6 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
+// (C) Copyright 2008 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -10,12 +11,15 @@
 #define BOOST_THREAD_WEK01082003_HPP
 
 #include <boost/thread/thread.hpp>
-#include <boost/thread/condition.hpp>
+#include <boost/thread/condition_variable.hpp>
 #include <boost/thread/exceptions.hpp>
 #include <boost/thread/mutex.hpp>
 #include <boost/thread/once.hpp>
 #include <boost/thread/recursive_mutex.hpp>
 #include <boost/thread/tss.hpp>
-#include <boost/thread/xtime.hpp>
+#include <boost/thread/thread_time.hpp>
+#include <boost/thread/locks.hpp>
+#include <boost/thread/shared_mutex.hpp>
+#include <boost/thread/barrier.hpp>
 
 #endif

Modified: branches/CMake/release/boost/thread/barrier.hpp
==============================================================================
--- branches/CMake/release/boost/thread/barrier.hpp (original)
+++ branches/CMake/release/boost/thread/barrier.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Copyright (C) 2002-2003
 // David Moore, William E. Kempf
-// Copyright (C) 2007 Anthony Williams
+// Copyright (C) 2007-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -15,6 +15,8 @@
 #include <string>
 #include <stdexcept>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
 
@@ -56,4 +58,6 @@
 
 } // namespace boost
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/detail/move.hpp
==============================================================================
--- branches/CMake/release/boost/thread/detail/move.hpp (original)
+++ branches/CMake/release/boost/thread/detail/move.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,11 +1,16 @@
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 
 #ifndef BOOST_THREAD_MOVE_HPP
 #define BOOST_THREAD_MOVE_HPP
 
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -14,10 +19,15 @@
         struct thread_move_t
         {
             T& t;
- thread_move_t(T& t_):
+ explicit thread_move_t(T& t_):
                 t(t_)
             {}
 
+ T& operator*() const
+ {
+ return t;
+ }
+
             T* operator->() const
             {
                 return &t;
@@ -26,8 +36,21 @@
             void operator=(thread_move_t&);
         };
     }
+
+ template<typename T>
+ typename enable_if<boost::is_convertible<T&,detail::thread_move_t<T> >, detail::thread_move_t<T> >::type move(T& t)
+ {
+ return t;
+ }
+
+ template<typename T>
+ detail::thread_move_t<T> move(detail::thread_move_t<T> t)
+ {
+ return t;
+ }
     
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/CMake/release/boost/thread/detail/tss_hooks.hpp
==============================================================================
--- branches/CMake/release/boost/thread/detail/tss_hooks.hpp (original)
+++ branches/CMake/release/boost/thread/detail/tss_hooks.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -8,6 +8,8 @@
 
 #include <boost/thread/detail/config.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 #if defined(BOOST_HAS_WINTHREADS)
 
     typedef void (__cdecl *thread_exit_handler)(void);
@@ -59,7 +61,7 @@
             //a method for doing so has been discovered.
         //May be omitted; may be called multiple times.
 
- extern "C" BOOST_THREAD_DECL void on_thread_exit(void);
+ extern "C" BOOST_THREAD_DECL void __cdecl on_thread_exit(void);
         //Function to be called just be fore a thread ends
             //in an exe or dll that uses Boost.Threads.
         //Must be called in the context of the thread
@@ -75,4 +77,6 @@
 
 #endif //defined(BOOST_HAS_WINTHREADS)
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif //!defined(BOOST_TLS_HOOKS_HPP)

Modified: branches/CMake/release/boost/thread/exceptions.hpp
==============================================================================
--- branches/CMake/release/boost/thread/exceptions.hpp (original)
+++ branches/CMake/release/boost/thread/exceptions.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
-// Copyright (C) 2007 Anthony Williams
+// Copyright (C) 2007-8 Anthony Williams
 //
 // Distributed under the 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,7 +19,13 @@
 #include <string>
 #include <stdexcept>
 
-namespace boost {
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
+
+ class BOOST_THREAD_DECL thread_interrupted
+ {};
 
 class BOOST_THREAD_DECL thread_exception : public std::exception
 {
@@ -99,6 +105,8 @@
 
 } // namespace boost
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif // BOOST_THREAD_CONFIG_PDM070801_H
 
 // Change log:

Modified: branches/CMake/release/boost/thread/locks.hpp
==============================================================================
--- branches/CMake/release/boost/thread/locks.hpp (original)
+++ branches/CMake/release/boost/thread/locks.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -8,10 +8,77 @@
 #include <boost/thread/exceptions.hpp>
 #include <boost/thread/detail/move.hpp>
 #include <algorithm>
+#include <iterator>
 #include <boost/thread/thread_time.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/config/abi_prefix.hpp>
 
 namespace boost
 {
+ namespace detail
+ {
+ template<typename T>
+ struct has_member_lock
+ {
+ typedef char true_type;
+ struct false_type
+ {
+ true_type dummy[2];
+ };
+
+ template<typename U>
+ static true_type has_member(U*,void (U::*dummy)()=&U::lock);
+ static false_type has_member(void*);
+
+ BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_lock<T>::has_member((T*)NULL))==sizeof(true_type));
+ };
+
+ template<typename T>
+ struct has_member_unlock
+ {
+ typedef char true_type;
+ struct false_type
+ {
+ true_type dummy[2];
+ };
+
+ template<typename U>
+ static true_type has_member(U*,void (U::*dummy)()=&U::unlock);
+ static false_type has_member(void*);
+
+ BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_unlock<T>::has_member((T*)NULL))==sizeof(true_type));
+ };
+
+ template<typename T>
+ struct has_member_try_lock
+ {
+ typedef char true_type;
+ struct false_type
+ {
+ true_type dummy[2];
+ };
+
+ template<typename U>
+ static true_type has_member(U*,bool (U::*dummy)()=&U::try_lock);
+ static false_type has_member(void*);
+
+ BOOST_STATIC_CONSTANT(bool, value=sizeof(has_member_try_lock<T>::has_member((T*)NULL))==sizeof(true_type));
+ };
+
+ }
+
+
+ template<typename T>
+ struct is_mutex_type
+ {
+ BOOST_STATIC_CONSTANT(bool, value = detail::has_member_lock<T>::value &&
+ detail::has_member_unlock<T>::value &&
+ detail::has_member_try_lock<T>::value);
+
+ };
+
+
     struct defer_lock_t
     {};
     struct try_to_lock_t
@@ -62,6 +129,10 @@
         explicit unique_lock(unique_lock&);
         unique_lock& operator=(unique_lock&);
     public:
+ unique_lock():
+ m(0),is_locked(false)
+ {}
+
         explicit unique_lock(Mutex& m_):
             m(&m_),is_locked(false)
         {
@@ -205,15 +276,9 @@
     };
 
     template<typename Mutex>
- inline detail::thread_move_t<unique_lock<Mutex> > move(unique_lock<Mutex> & x)
- {
- return x.move();
- }
-
- template<typename Mutex>
- inline detail::thread_move_t<unique_lock<Mutex> > move(detail::thread_move_t<unique_lock<Mutex> > x)
+ void swap(unique_lock<Mutex>& lhs,unique_lock<Mutex>& rhs)
     {
- return x;
+ lhs.swap(rhs);
     }
 
     template<typename Mutex>
@@ -226,6 +291,10 @@
         explicit shared_lock(shared_lock&);
         shared_lock& operator=(shared_lock&);
     public:
+ shared_lock():
+ m(0),is_locked(false)
+ {}
+
         explicit shared_lock(Mutex& m_):
             m(&m_),is_locked(false)
         {
@@ -252,26 +321,29 @@
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
+ other->m=0;
         }
 
         shared_lock(detail::thread_move_t<unique_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
- other->is_locked=false;
             if(is_locked)
             {
                 m->unlock_and_lock_shared();
             }
+ other->is_locked=false;
+ other->m=0;
         }
 
         shared_lock(detail::thread_move_t<upgrade_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
- other->is_locked=false;
             if(is_locked)
             {
                 m->unlock_upgrade_and_lock_shared();
             }
+ other->is_locked=false;
+ other->m=0;
         }
 
         operator detail::thread_move_t<shared_lock<Mutex> >()
@@ -373,19 +445,6 @@
     };
 
     template<typename Mutex>
- inline detail::thread_move_t<shared_lock<Mutex> > move(shared_lock<Mutex> & x)
- {
- return x.move();
- }
-
- template<typename Mutex>
- inline detail::thread_move_t<shared_lock<Mutex> > move(detail::thread_move_t<shared_lock<Mutex> > x)
- {
- return x;
- }
-
-
- template<typename Mutex>
     class upgrade_lock
     {
     protected:
@@ -395,33 +454,42 @@
         explicit upgrade_lock(upgrade_lock&);
         upgrade_lock& operator=(upgrade_lock&);
     public:
+ upgrade_lock():
+ m(0),is_locked(false)
+ {}
+
         explicit upgrade_lock(Mutex& m_):
             m(&m_),is_locked(false)
         {
             lock();
         }
- upgrade_lock(Mutex& m_,bool do_lock):
+ upgrade_lock(Mutex& m_,adopt_lock_t):
+ m(&m_),is_locked(true)
+ {}
+ upgrade_lock(Mutex& m_,defer_lock_t):
+ m(&m_),is_locked(false)
+ {}
+ upgrade_lock(Mutex& m_,try_to_lock_t):
             m(&m_),is_locked(false)
         {
- if(do_lock)
- {
- lock();
- }
+ try_lock();
         }
         upgrade_lock(detail::thread_move_t<upgrade_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
+ other->m=0;
         }
 
         upgrade_lock(detail::thread_move_t<unique_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
- other->is_locked=false;
             if(is_locked)
             {
                 m->unlock_and_lock_upgrade();
             }
+ other->is_locked=false;
+ other->m=0;
         }
 
         operator detail::thread_move_t<upgrade_lock<Mutex> >()
@@ -509,18 +577,6 @@
 
 
     template<typename Mutex>
- inline detail::thread_move_t<upgrade_lock<Mutex> > move(upgrade_lock<Mutex> & x)
- {
- return x.move();
- }
-
- template<typename Mutex>
- inline detail::thread_move_t<upgrade_lock<Mutex> > move(detail::thread_move_t<upgrade_lock<Mutex> > x)
- {
- return x;
- }
-
- template<typename Mutex>
     unique_lock<Mutex>::unique_lock(detail::thread_move_t<upgrade_lock<Mutex> > other):
         m(other->m),is_locked(other->is_locked)
     {
@@ -584,6 +640,496 @@
         }
     };
 
+ namespace detail
+ {
+ template<typename Mutex>
+ class try_lock_wrapper:
+ private unique_lock<Mutex>
+ {
+ typedef unique_lock<Mutex> base;
+ public:
+ try_lock_wrapper()
+ {}
+
+ explicit try_lock_wrapper(Mutex& m):
+ base(m,try_to_lock)
+ {}
+
+ try_lock_wrapper(Mutex& m_,adopt_lock_t):
+ base(m_,adopt_lock)
+ {}
+ try_lock_wrapper(Mutex& m_,defer_lock_t):
+ base(m_,defer_lock)
+ {}
+ try_lock_wrapper(Mutex& m_,try_to_lock_t):
+ base(m_,try_to_lock)
+ {}
+ try_lock_wrapper(detail::thread_move_t<try_lock_wrapper<Mutex> > other):
+ base(detail::thread_move_t<base>(*other))
+ {}
+
+ operator detail::thread_move_t<try_lock_wrapper<Mutex> >()
+ {
+ return move();
+ }
+
+ detail::thread_move_t<try_lock_wrapper<Mutex> > move()
+ {
+ return detail::thread_move_t<try_lock_wrapper<Mutex> >(*this);
+ }
+
+ try_lock_wrapper& operator=(detail::thread_move_t<try_lock_wrapper<Mutex> > other)
+ {
+ try_lock_wrapper temp(other);
+ swap(temp);
+ return *this;
+ }
+
+ void swap(try_lock_wrapper& other)
+ {
+ base::swap(other);
+ }
+ void swap(detail::thread_move_t<try_lock_wrapper<Mutex> > other)
+ {
+ base::swap(*other);
+ }
+
+ void lock()
+ {
+ base::lock();
+ }
+ bool try_lock()
+ {
+ return base::try_lock();
+ }
+ void unlock()
+ {
+ base::unlock();
+ }
+ bool owns_lock() const
+ {
+ return base::owns_lock();
+ }
+ Mutex* mutex() const
+ {
+ return base::mutex();
+ }
+ Mutex* release()
+ {
+ return base::release();
+ }
+ bool operator!() const
+ {
+ return !this->owns_lock();
+ }
+
+ typedef typename base::bool_type bool_type;
+ operator bool_type() const
+ {
+ return static_cast<base const&>(*this);
+ }
+ };
+
+ template<typename Mutex>
+ void swap(try_lock_wrapper<Mutex>& lhs,try_lock_wrapper<Mutex>& rhs)
+ {
+ lhs.swap(rhs);
+ }
+
+ template<typename MutexType1,typename MutexType2>
+ unsigned try_lock_internal(MutexType1& m1,MutexType2& m2)
+ {
+ boost::unique_lock<MutexType1> l1(m1,boost::try_to_lock);
+ if(!l1)
+ {
+ return 1;
+ }
+ if(!m2.try_lock())
+ {
+ return 2;
+ }
+ l1.release();
+ return 0;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3>
+ unsigned try_lock_internal(MutexType1& m1,MutexType2& m2,MutexType3& m3)
+ {
+ boost::unique_lock<MutexType1> l1(m1,boost::try_to_lock);
+ if(!l1)
+ {
+ return 1;
+ }
+ if(unsigned const failed_lock=try_lock_internal(m2,m3))
+ {
+ return failed_lock+1;
+ }
+ l1.release();
+ return 0;
+ }
+
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3,
+ typename MutexType4>
+ unsigned try_lock_internal(MutexType1& m1,MutexType2& m2,MutexType3& m3,
+ MutexType4& m4)
+ {
+ boost::unique_lock<MutexType1> l1(m1,boost::try_to_lock);
+ if(!l1)
+ {
+ return 1;
+ }
+ if(unsigned const failed_lock=try_lock_internal(m2,m3,m4))
+ {
+ return failed_lock+1;
+ }
+ l1.release();
+ return 0;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3,
+ typename MutexType4,typename MutexType5>
+ unsigned try_lock_internal(MutexType1& m1,MutexType2& m2,MutexType3& m3,
+ MutexType4& m4,MutexType5& m5)
+ {
+ boost::unique_lock<MutexType1> l1(m1,boost::try_to_lock);
+ if(!l1)
+ {
+ return 1;
+ }
+ if(unsigned const failed_lock=try_lock_internal(m2,m3,m4,m5))
+ {
+ return failed_lock+1;
+ }
+ l1.release();
+ return 0;
+ }
+
+
+ template<typename MutexType1,typename MutexType2>
+ unsigned lock_helper(MutexType1& m1,MutexType2& m2)
+ {
+ boost::unique_lock<MutexType1> l1(m1);
+ if(!m2.try_lock())
+ {
+ return 1;
+ }
+ l1.release();
+ return 0;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3>
+ unsigned lock_helper(MutexType1& m1,MutexType2& m2,MutexType3& m3)
+ {
+ boost::unique_lock<MutexType1> l1(m1);
+ if(unsigned const failed_lock=try_lock_internal(m2,m3))
+ {
+ return failed_lock;
+ }
+ l1.release();
+ return 0;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3,
+ typename MutexType4>
+ unsigned lock_helper(MutexType1& m1,MutexType2& m2,MutexType3& m3,
+ MutexType4& m4)
+ {
+ boost::unique_lock<MutexType1> l1(m1);
+ if(unsigned const failed_lock=try_lock_internal(m2,m3,m4))
+ {
+ return failed_lock;
+ }
+ l1.release();
+ return 0;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3,
+ typename MutexType4,typename MutexType5>
+ unsigned lock_helper(MutexType1& m1,MutexType2& m2,MutexType3& m3,
+ MutexType4& m4,MutexType5& m5)
+ {
+ boost::unique_lock<MutexType1> l1(m1);
+ if(unsigned const failed_lock=try_lock_internal(m2,m3,m4,m5))
+ {
+ return failed_lock;
+ }
+ l1.release();
+ return 0;
+ }
+ }
+
+ template<typename MutexType1,typename MutexType2>
+ typename enable_if<is_mutex_type<MutexType1>, void>::type lock(MutexType1& m1,MutexType2& m2)
+ {
+ unsigned const lock_count=2;
+ unsigned lock_first=0;
+ while(true)
+ {
+ switch(lock_first)
+ {
+ case 0:
+ lock_first=detail::lock_helper(m1,m2);
+ if(!lock_first)
+ return;
+ break;
+ case 1:
+ lock_first=detail::lock_helper(m2,m1);
+ if(!lock_first)
+ return;
+ lock_first=(lock_first+1)%lock_count;
+ break;
+ }
+ }
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3>
+ void lock(MutexType1& m1,MutexType2& m2,MutexType3& m3)
+ {
+ unsigned const lock_count=3;
+ unsigned lock_first=0;
+ while(true)
+ {
+ switch(lock_first)
+ {
+ case 0:
+ lock_first=detail::lock_helper(m1,m2,m3);
+ if(!lock_first)
+ return;
+ break;
+ case 1:
+ lock_first=detail::lock_helper(m2,m3,m1);
+ if(!lock_first)
+ return;
+ lock_first=(lock_first+1)%lock_count;
+ break;
+ case 2:
+ lock_first=detail::lock_helper(m3,m1,m2);
+ if(!lock_first)
+ return;
+ lock_first=(lock_first+2)%lock_count;
+ break;
+ }
+ }
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3,
+ typename MutexType4>
+ void lock(MutexType1& m1,MutexType2& m2,MutexType3& m3,
+ MutexType4& m4)
+ {
+ unsigned const lock_count=4;
+ unsigned lock_first=0;
+ while(true)
+ {
+ switch(lock_first)
+ {
+ case 0:
+ lock_first=detail::lock_helper(m1,m2,m3,m4);
+ if(!lock_first)
+ return;
+ break;
+ case 1:
+ lock_first=detail::lock_helper(m2,m3,m4,m1);
+ if(!lock_first)
+ return;
+ lock_first=(lock_first+1)%lock_count;
+ break;
+ case 2:
+ lock_first=detail::lock_helper(m3,m4,m1,m2);
+ if(!lock_first)
+ return;
+ lock_first=(lock_first+2)%lock_count;
+ break;
+ case 3:
+ lock_first=detail::lock_helper(m4,m1,m2,m3);
+ if(!lock_first)
+ return;
+ lock_first=(lock_first+3)%lock_count;
+ break;
+ }
+ }
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3,
+ typename MutexType4,typename MutexType5>
+ void lock(MutexType1& m1,MutexType2& m2,MutexType3& m3,
+ MutexType4& m4,MutexType5& m5)
+ {
+ unsigned const lock_count=5;
+ unsigned lock_first=0;
+ while(true)
+ {
+ switch(lock_first)
+ {
+ case 0:
+ lock_first=detail::lock_helper(m1,m2,m3,m4,m5);
+ if(!lock_first)
+ return;
+ break;
+ case 1:
+ lock_first=detail::lock_helper(m2,m3,m4,m5,m1);
+ if(!lock_first)
+ return;
+ lock_first=(lock_first+1)%lock_count;
+ break;
+ case 2:
+ lock_first=detail::lock_helper(m3,m4,m5,m1,m2);
+ if(!lock_first)
+ return;
+ lock_first=(lock_first+2)%lock_count;
+ break;
+ case 3:
+ lock_first=detail::lock_helper(m4,m5,m1,m2,m3);
+ if(!lock_first)
+ return;
+ lock_first=(lock_first+3)%lock_count;
+ break;
+ case 4:
+ lock_first=detail::lock_helper(m5,m1,m2,m3,m4);
+ if(!lock_first)
+ return;
+ lock_first=(lock_first+4)%lock_count;
+ break;
+ }
+ }
+ }
+
+ template<typename MutexType1,typename MutexType2>
+ typename enable_if<is_mutex_type<MutexType1>, int>::type try_lock(MutexType1& m1,MutexType2& m2)
+ {
+ return ((int)detail::try_lock_internal(m1,m2))-1;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3>
+ int try_lock(MutexType1& m1,MutexType2& m2,MutexType3& m3)
+ {
+ return ((int)detail::try_lock_internal(m1,m2,m3))-1;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3,typename MutexType4>
+ int try_lock(MutexType1& m1,MutexType2& m2,MutexType3& m3,MutexType4& m4)
+ {
+ return ((int)detail::try_lock_internal(m1,m2,m3,m4))-1;
+ }
+
+ template<typename MutexType1,typename MutexType2,typename MutexType3,typename MutexType4,typename MutexType5>
+ int try_lock(MutexType1& m1,MutexType2& m2,MutexType3& m3,MutexType4& m4,MutexType5& m5)
+ {
+ return ((int)detail::try_lock_internal(m1,m2,m3,m4,m5))-1;
+ }
+
+
+ template<typename Iterator>
+ typename disable_if<is_mutex_type<Iterator>, void>::type lock(Iterator begin,Iterator end);
+
+ namespace detail
+ {
+ template<typename Iterator>
+ struct range_lock_guard
+ {
+ Iterator begin;
+ Iterator end;
+
+ range_lock_guard(Iterator begin_,Iterator end_):
+ begin(begin_),end(end_)
+ {
+ lock(begin,end);
+ }
+
+ void release()
+ {
+ begin=end;
+ }
+
+ ~range_lock_guard()
+ {
+ for(;begin!=end;++begin)
+ {
+ begin->unlock();
+ }
+ }
+ };
+ }
+
+ template<typename Iterator>
+ typename disable_if<is_mutex_type<Iterator>, Iterator>::type try_lock(Iterator begin,Iterator end)
+ {
+ if(begin==end)
+ {
+ return end;
+ }
+ typedef typename std::iterator_traits<Iterator>::value_type lock_type;
+ unique_lock<lock_type> guard(*begin,try_to_lock);
+
+ if(!guard.owns_lock())
+ {
+ return begin;
+ }
+ Iterator const failed=try_lock(++begin,end);
+ if(failed==end)
+ {
+ guard.release();
+ }
+
+ return failed;
+ }
+
+ template<typename Iterator>
+ typename disable_if<is_mutex_type<Iterator>, void>::type lock(Iterator begin,Iterator end)
+ {
+ typedef typename std::iterator_traits<Iterator>::value_type lock_type;
+
+ if(begin==end)
+ {
+ return;
+ }
+ bool start_with_begin=true;
+ Iterator second=begin;
+ ++second;
+ Iterator next=second;
+
+ for(;;)
+ {
+ unique_lock<lock_type> begin_lock(*begin,defer_lock);
+ if(start_with_begin)
+ {
+ begin_lock.lock();
+ Iterator const failed_lock=try_lock(next,end);
+ if(failed_lock==end)
+ {
+ begin_lock.release();
+ return;
+ }
+ start_with_begin=false;
+ next=failed_lock;
+ }
+ else
+ {
+ detail::range_lock_guard<Iterator> guard(next,end);
+ if(begin_lock.try_lock())
+ {
+ Iterator const failed_lock=try_lock(second,next);
+ if(failed_lock==next)
+ {
+ begin_lock.release();
+ guard.release();
+ return;
+ }
+ start_with_begin=false;
+ next=failed_lock;
+ }
+ else
+ {
+ start_with_begin=true;
+ next=second;
+ }
+ }
+ }
+ }
+
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/once.hpp
==============================================================================
--- branches/CMake/release/boost/thread/once.hpp (original)
+++ branches/CMake/release/boost/thread/once.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -18,6 +18,8 @@
 #error "Boost threads unavailable on this platform"
 #endif
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     inline void call_once(void (*func)(),once_flag& flag)
@@ -26,4 +28,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/pthread/condition_variable.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/condition_variable.hpp (original)
+++ branches/CMake/release/boost/thread/pthread/condition_variable.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -3,32 +3,17 @@
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 
-#include <limits.h>
-#include <boost/assert.hpp>
-#include <algorithm>
-#include <pthread.h>
 #include "timespec.hpp"
 #include "pthread_mutex_scoped_lock.hpp"
 #include "thread_data.hpp"
 #include "condition_variable_fwd.hpp"
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
- inline condition_variable::condition_variable()
- {
- int const res=pthread_cond_init(&cond,NULL);
- if(res)
- {
- throw thread_resource_error();
- }
- }
- inline condition_variable::~condition_variable()
- {
- BOOST_VERIFY(!pthread_cond_destroy(&cond));
- }
-
     inline void condition_variable::wait(unique_lock<mutex>& m)
     {
         detail::interruption_checker check_for_interruption(&cond);
@@ -175,4 +160,6 @@
 
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/pthread/condition_variable_fwd.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/condition_variable_fwd.hpp (original)
+++ branches/CMake/release/boost/thread/pthread/condition_variable_fwd.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -3,14 +3,17 @@
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 
+#include <boost/assert.hpp>
 #include <pthread.h>
 #include <boost/thread/mutex.hpp>
 #include <boost/thread/locks.hpp>
 #include <boost/thread/thread_time.hpp>
 #include <boost/thread/xtime.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class condition_variable
@@ -22,8 +25,18 @@
         condition_variable& operator=(condition_variable&);
 
     public:
- condition_variable();
- ~condition_variable();
+ condition_variable()
+ {
+ int const res=pthread_cond_init(&cond,NULL);
+ if(res)
+ {
+ throw thread_resource_error();
+ }
+ }
+ ~condition_variable()
+ {
+ BOOST_VERIFY(!pthread_cond_destroy(&cond));
+ }
 
         void wait(unique_lock<mutex>& m);
 
@@ -58,9 +71,17 @@
             return timed_wait(m,get_system_time()+wait_duration,pred);
         }
 
+ typedef pthread_cond_t* native_handle_type;
+ native_handle_type native_handle()
+ {
+ return &cond;
+ }
+
         void notify_one();
         void notify_all();
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/pthread/mutex.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/mutex.hpp (original)
+++ branches/CMake/release/boost/thread/pthread/mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 #ifndef BOOST_THREAD_PTHREAD_MUTEX_HPP
 #define BOOST_THREAD_PTHREAD_MUTEX_HPP
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
@@ -11,9 +11,6 @@
 #include <boost/thread/locks.hpp>
 #include <boost/thread/thread_time.hpp>
 #include <boost/assert.hpp>
-#ifndef WIN32
-#include <unistd.h>
-#endif
 #include <errno.h>
 #include "timespec.hpp"
 #include "pthread_mutex_scoped_lock.hpp"
@@ -24,6 +21,8 @@
 #endif
 #endif
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class mutex:
@@ -69,7 +68,7 @@
         }
 
         typedef unique_lock<mutex> scoped_lock;
- typedef scoped_lock scoped_try_lock;
+ typedef detail::try_lock_wrapper<mutex> scoped_try_lock;
     };
 
     typedef mutex try_mutex;
@@ -136,9 +135,16 @@
         {
             struct timespec const timeout=detail::get_timespec(abs_time);
             int const res=pthread_mutex_timedlock(&m,&timeout);
- BOOST_ASSERT(!res || res==EBUSY);
+ BOOST_ASSERT(!res || res==ETIMEDOUT);
             return !res;
         }
+
+ typedef pthread_mutex_t* native_handle_type;
+ native_handle_type native_handle()
+ {
+ return &m;
+ }
+
 #else
         void lock()
         {
@@ -187,11 +193,13 @@
 #endif
 
         typedef unique_lock<timed_mutex> scoped_timed_lock;
- typedef scoped_timed_lock scoped_try_lock;
+ typedef detail::try_lock_wrapper<timed_mutex> scoped_try_lock;
         typedef scoped_timed_lock scoped_lock;
     };
 
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 
 #endif

Modified: branches/CMake/release/boost/thread/pthread/once.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/once.hpp (original)
+++ branches/CMake/release/boost/thread/pthread/once.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -3,7 +3,7 @@
 
 // once.hpp
 //
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -17,7 +17,10 @@
 #include <boost/thread/pthread/pthread_mutex_scoped_lock.hpp>
 #include <boost/cstdint.hpp>
 
-namespace boost {
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost
+{
 
     struct once_flag
     {
@@ -82,4 +85,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/pthread/pthread_mutex_scoped_lock.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/pthread_mutex_scoped_lock.hpp (original)
+++ branches/CMake/release/boost/thread/pthread/pthread_mutex_scoped_lock.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 #ifndef BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP
 #define BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -9,6 +9,8 @@
 #include <pthread.h>
 #include <boost/assert.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace pthread
@@ -47,4 +49,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/pthread/recursive_mutex.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/recursive_mutex.hpp (original)
+++ branches/CMake/release/boost/thread/pthread/recursive_mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 #ifndef BOOST_THREAD_PTHREAD_RECURSIVE_MUTEX_HPP
 #define BOOST_THREAD_PTHREAD_RECURSIVE_MUTEX_HPP
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
@@ -11,7 +11,7 @@
 #include <boost/thread/locks.hpp>
 #include <boost/thread/thread_time.hpp>
 #include <boost/assert.hpp>
-#ifndef WIN32
+#ifndef _WIN32
 #include <unistd.h>
 #endif
 #include <boost/date_time/posix_time/conversion.hpp>
@@ -25,6 +25,8 @@
 #endif
 #endif
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class recursive_mutex:
@@ -76,8 +78,15 @@
             BOOST_ASSERT(!res || res==EBUSY);
             return !res;
         }
+
+ typedef pthread_mutex_t* native_handle_type;
+ native_handle_type native_handle()
+ {
+ return &m;
+ }
+
         typedef unique_lock<recursive_mutex> scoped_lock;
- typedef scoped_lock scoped_try_lock;
+ typedef detail::try_lock_wrapper<recursive_mutex> scoped_try_lock;
     };
 
     typedef recursive_mutex recursive_try_mutex;
@@ -171,6 +180,13 @@
             BOOST_ASSERT(!res || res==EBUSY);
             return !res;
         }
+
+ typedef pthread_mutex_t* native_handle_type;
+ native_handle_type native_handle()
+ {
+ return &m;
+ }
+
 #else
         void lock()
         {
@@ -239,11 +255,12 @@
 #endif
 
         typedef unique_lock<recursive_timed_mutex> scoped_timed_lock;
- typedef scoped_timed_lock scoped_try_lock;
+ typedef detail::try_lock_wrapper<recursive_timed_mutex> scoped_try_lock;
         typedef scoped_timed_lock scoped_lock;
     };
 
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/CMake/release/boost/thread/pthread/shared_mutex.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/shared_mutex.hpp (original)
+++ branches/CMake/release/boost/thread/pthread/shared_mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP
 #define BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP
 
-// (C) Copyright 2006-7 Anthony Williams
+// (C) Copyright 2006-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -13,6 +13,8 @@
 #include <boost/thread/thread.hpp>
 #include <boost/thread/condition_variable.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class shared_mutex
@@ -44,7 +46,7 @@
     public:
         shared_mutex()
         {
- state_data state_={0};
+ state_data state_={0,0,0,0};
             state=state_;
         }
 
@@ -57,23 +59,11 @@
             boost::this_thread::disable_interruption do_not_disturb;
             boost::mutex::scoped_lock lock(state_change);
                 
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
- while(true)
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
+ while(state.exclusive || state.exclusive_waiting_blocked)
             {
- if(!state.exclusive && !state.exclusive_waiting_blocked)
- {
- ++state.shared_count;
- return;
- }
-
                 shared_cond.wait(lock);
             }
+ ++state.shared_count;
         }
 
         bool try_lock_shared()
@@ -96,26 +86,21 @@
             boost::this_thread::disable_interruption do_not_disturb;
             boost::mutex::scoped_lock lock(state_change);
                 
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
- while(true)
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
+ while(state.exclusive || state.exclusive_waiting_blocked)
             {
- if(!state.exclusive && !state.exclusive_waiting_blocked)
- {
- ++state.shared_count;
- return true;
- }
-
                 if(!shared_cond.timed_wait(lock,timeout))
                 {
                     return false;
                 }
             }
+ ++state.shared_count;
+ return true;
+ }
+
+ template<typename TimeDuration>
+ bool timed_lock_shared(TimeDuration const & relative_time)
+ {
+ return timed_lock_shared(get_system_time()+relative_time);
         }
 
         void unlock_shared()
@@ -144,56 +129,41 @@
             boost::this_thread::disable_interruption do_not_disturb;
             boost::mutex::scoped_lock lock(state_change);
                 
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
- while(true)
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
+ while(state.shared_count || state.exclusive)
             {
- if(state.shared_count || state.exclusive)
- {
- state.exclusive_waiting_blocked=true;
- }
- else
- {
- state.exclusive=true;
- return;
- }
+ state.exclusive_waiting_blocked=true;
                 exclusive_cond.wait(lock);
             }
+ state.exclusive=true;
         }
 
         bool timed_lock(system_time const& timeout)
         {
             boost::this_thread::disable_interruption do_not_disturb;
             boost::mutex::scoped_lock lock(state_change);
-
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
- while(true)
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
+
+ while(state.shared_count || state.exclusive)
             {
- if(state.shared_count || state.exclusive)
- {
- state.exclusive_waiting_blocked=true;
- }
- else
- {
- state.exclusive=true;
- return true;
- }
+ state.exclusive_waiting_blocked=true;
                 if(!exclusive_cond.timed_wait(lock,timeout))
                 {
- return false;
+ if(state.shared_count || state.exclusive)
+ {
+ state.exclusive_waiting_blocked=false;
+ exclusive_cond.notify_one();
+ return false;
+ }
+ break;
                 }
             }
+ state.exclusive=true;
+ return true;
+ }
+
+ template<typename TimeDuration>
+ bool timed_lock(TimeDuration const & relative_time)
+ {
+ return timed_lock(get_system_time()+relative_time);
         }
 
         bool try_lock()
@@ -224,51 +194,38 @@
         {
             boost::this_thread::disable_interruption do_not_disturb;
             boost::mutex::scoped_lock lock(state_change);
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
- while(true)
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
+ while(state.exclusive || state.exclusive_waiting_blocked || state.upgrade)
             {
- if(!state.exclusive && !state.exclusive_waiting_blocked && !state.upgrade)
- {
- ++state.shared_count;
- state.upgrade=true;
- return;
- }
-
                 shared_cond.wait(lock);
             }
+ ++state.shared_count;
+ state.upgrade=true;
         }
 
         bool timed_lock_upgrade(system_time const& timeout)
         {
             boost::this_thread::disable_interruption do_not_disturb;
             boost::mutex::scoped_lock lock(state_change);
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
- while(true)
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
+ while(state.exclusive || state.exclusive_waiting_blocked || state.upgrade)
             {
- if(!state.exclusive && !state.exclusive_waiting_blocked && !state.upgrade)
- {
- ++state.shared_count;
- state.upgrade=true;
- return true;
- }
-
                 if(!shared_cond.timed_wait(lock,timeout))
                 {
- return false;
+ if(state.exclusive || state.exclusive_waiting_blocked || state.upgrade)
+ {
+ return false;
+ }
+ break;
                 }
             }
+ ++state.shared_count;
+ state.upgrade=true;
+ return true;
+ }
+
+ template<typename TimeDuration>
+ bool timed_lock_upgrade(TimeDuration const & relative_time)
+ {
+ return timed_lock(get_system_time()+relative_time);
         }
 
         bool try_lock_upgrade()
@@ -304,23 +261,12 @@
             boost::this_thread::disable_interruption do_not_disturb;
             boost::mutex::scoped_lock lock(state_change);
             --state.shared_count;
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
- while(true)
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
+ while(state.shared_count)
             {
- if(!state.shared_count)
- {
- state.upgrade=false;
- state.exclusive=true;
- break;
- }
                 upgrade_cond.wait(lock);
             }
+ state.upgrade=false;
+ state.exclusive=true;
         }
 
         void unlock_and_lock_upgrade()
@@ -352,5 +298,6 @@
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Deleted: branches/CMake/release/boost/thread/pthread/thread.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/thread.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
+++ (empty file)
@@ -1,329 +0,0 @@
-#ifndef BOOST_THREAD_THREAD_PTHREAD_HPP
-#define BOOST_THREAD_THREAD_PTHREAD_HPP
-// Copyright (C) 2001-2003
-// William E. Kempf
-// Copyright (C) 2007 Anthony Williams
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/thread/detail/config.hpp>
-
-#include <boost/utility.hpp>
-#include <boost/function.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/thread/condition_variable.hpp>
-#include <list>
-#include <memory>
-
-#include <pthread.h>
-#include <boost/optional.hpp>
-#include <boost/thread/detail/move.hpp>
-#include <boost/shared_ptr.hpp>
-#include "thread_data.hpp"
-#include <stdlib.h>
-
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4251)
-#endif
-
-namespace boost
-{
- class thread;
-
- namespace detail
- {
- class thread_id;
- }
-
- namespace this_thread
- {
- BOOST_THREAD_DECL detail::thread_id get_id();
- }
-
- namespace detail
- {
- class thread_id
- {
- private:
- detail::thread_data_ptr thread_data;
-
- thread_id(detail::thread_data_ptr thread_data_):
- thread_data(thread_data_)
- {}
- friend class boost::thread;
- friend thread_id this_thread::get_id();
- public:
- thread_id():
- thread_data()
- {}
-
- bool operator==(const thread_id& y) const
- {
- return thread_data==y.thread_data;
- }
-
- bool operator!=(const thread_id& y) const
- {
- return thread_data!=y.thread_data;
- }
-
- bool operator<(const thread_id& y) const
- {
- return thread_data<y.thread_data;
- }
-
- bool operator>(const thread_id& y) const
- {
- return y.thread_data<thread_data;
- }
-
- bool operator<=(const thread_id& y) const
- {
- return !(y.thread_data<thread_data);
- }
-
- bool operator>=(const thread_id& y) const
- {
- return !(thread_data<y.thread_data);
- }
-
- template<class charT, class traits>
- friend std::basic_ostream<charT, traits>&
- operator<<(std::basic_ostream<charT, traits>& os, const thread_id& x)
- {
- if(x.thread_data)
- {
- return os<<x.thread_data;
- }
- else
- {
- return os<<"{Not-any-thread}";
- }
- }
- };
- }
-
- struct xtime;
- class BOOST_THREAD_DECL thread
- {
- private:
- thread(thread&);
- thread& operator=(thread&);
-
- template<typename F>
- struct thread_data:
- detail::thread_data_base
- {
- F f;
-
- thread_data(F f_):
- f(f_)
- {}
- thread_data(detail::thread_move_t<F> f_):
- f(f_)
- {}
-
- void run()
- {
- f();
- }
- };
-
- mutable boost::mutex thread_info_mutex;
- detail::thread_data_ptr thread_info;
-
- void start_thread();
-
- explicit thread(detail::thread_data_ptr data);
-
- detail::thread_data_ptr get_thread_info() const;
-
- public:
- thread();
- ~thread();
-
- template <class F>
- explicit thread(F f):
- thread_info(new thread_data<F>(f))
- {
- start_thread();
- }
- template <class F>
- thread(detail::thread_move_t<F> f):
- thread_info(new thread_data<F>(f))
- {
- start_thread();
- }
-
- thread(detail::thread_move_t<thread> x);
- thread& operator=(detail::thread_move_t<thread> x);
- operator detail::thread_move_t<thread>();
- detail::thread_move_t<thread> move();
-
- void swap(thread& x);
-
- typedef detail::thread_id id;
-
- id get_id() const;
-
- bool joinable() const;
- void join();
- bool timed_join(const system_time& wait_until);
-
- template<typename TimeDuration>
- inline bool timed_join(TimeDuration const& rel_time)
- {
- return timed_join(get_system_time()+rel_time);
- }
- void detach();
-
- static unsigned hardware_concurrency();
-
- // backwards compatibility
- bool operator==(const thread& other) const;
- bool operator!=(const thread& other) const;
-
- static void sleep(const system_time& xt);
- static void yield();
-
- // extensions
- void interrupt();
- bool interruption_requested() const;
- };
-
- inline detail::thread_move_t<thread> move(thread& x)
- {
- return x.move();
- }
-
- inline detail::thread_move_t<thread> move(detail::thread_move_t<thread> x)
- {
- return x;
- }
-
-
- template<typename F>
- struct thread::thread_data<boost::reference_wrapper<F> >:
- detail::thread_data_base
- {
- F& f;
-
- thread_data(boost::reference_wrapper<F> f_):
- f(f_)
- {}
-
- void run()
- {
- f();
- }
- };
-
- namespace this_thread
- {
- class BOOST_THREAD_DECL disable_interruption
- {
- disable_interruption(const disable_interruption&);
- disable_interruption& operator=(const disable_interruption&);
-
- bool interruption_was_enabled;
- friend class restore_interruption;
- public:
- disable_interruption();
- ~disable_interruption();
- };
-
- class BOOST_THREAD_DECL restore_interruption
- {
- restore_interruption(const restore_interruption&);
- restore_interruption& operator=(const restore_interruption&);
- public:
- explicit restore_interruption(disable_interruption& d);
- ~restore_interruption();
- };
-
- BOOST_THREAD_DECL thread::id get_id();
-
- BOOST_THREAD_DECL void interruption_point();
- BOOST_THREAD_DECL bool interruption_enabled();
- BOOST_THREAD_DECL bool interruption_requested();
-
- inline void yield()
- {
- thread::yield();
- }
-
- template<typename TimeDuration>
- inline void sleep(TimeDuration const& rel_time)
- {
- thread::sleep(get_system_time()+rel_time);
- }
- }
-
- namespace detail
- {
- struct thread_exit_function_base
- {
- virtual ~thread_exit_function_base()
- {}
- virtual void operator()() const=0;
- };
-
- template<typename F>
- struct thread_exit_function:
- thread_exit_function_base
- {
- F f;
-
- thread_exit_function(F f_):
- f(f_)
- {}
-
- void operator()() const
- {
- f();
- }
- };
-
- BOOST_THREAD_DECL void add_thread_exit_function(thread_exit_function_base*);
- }
-
- namespace this_thread
- {
- template<typename F>
- inline void at_thread_exit(F f)
- {
- detail::thread_exit_function_base* const thread_exit_func=new detail::thread_exit_function<F>(f);
- detail::add_thread_exit_function(thread_exit_func);
- }
- }
-
- class BOOST_THREAD_DECL thread_group
- {
- public:
- thread_group();
- ~thread_group();
-
- thread* create_thread(const function0<void>& threadfunc);
- void add_thread(thread* thrd);
- void remove_thread(thread* thrd);
- void join_all();
- void interrupt_all();
- size_t size() const;
-
- private:
- thread_group(thread_group&);
- void operator=(thread_group&);
-
- std::list<thread*> m_threads;
- mutex m_mutex;
- };
-} // namespace boost
-
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-
-
-#endif

Modified: branches/CMake/release/boost/thread/pthread/thread_data.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/thread_data.hpp (original)
+++ branches/CMake/release/boost/thread/pthread/thread_data.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -6,6 +6,7 @@
 // (C) Copyright 2007 Anthony Williams
 
 #include <boost/thread/detail/config.hpp>
+#include <boost/thread/exceptions.hpp>
 #include <boost/shared_ptr.hpp>
 #include <boost/enable_shared_from_this.hpp>
 #include <boost/thread/mutex.hpp>
@@ -13,11 +14,12 @@
 #include <pthread.h>
 #include "condition_variable_fwd.hpp"
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
- class thread_interrupted
- {};
-
+ class thread;
+
     namespace detail
     {
         struct thread_exit_callback_node;
@@ -26,7 +28,7 @@
         struct thread_data_base;
         typedef boost::shared_ptr<thread_data_base> thread_data_ptr;
         
- struct thread_data_base:
+ struct BOOST_THREAD_DECL thread_data_base:
             enable_shared_from_this<thread_data_base>
         {
             thread_data_ptr self;
@@ -51,8 +53,9 @@
                 interrupt_requested(false),
                 current_cond(0)
             {}
- virtual ~thread_data_base()
- {}
+ virtual ~thread_data_base();
+
+ typedef pthread_t native_handle_type;
 
             virtual void run()=0;
         };
@@ -95,7 +98,21 @@
             }
         };
     }
+
+ namespace this_thread
+ {
+ void BOOST_THREAD_DECL yield();
+
+ void BOOST_THREAD_DECL sleep(system_time const& abs_time);
+
+ template<typename TimeDuration>
+ inline void sleep(TimeDuration const& rel_time)
+ {
+ this_thread::sleep(get_system_time()+rel_time);
+ }
+ }
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/CMake/release/boost/thread/pthread/timespec.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/timespec.hpp (original)
+++ branches/CMake/release/boost/thread/pthread/timespec.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 #ifndef BOOST_THREAD_PTHREAD_TIMESPEC_HPP
 #define BOOST_THREAD_PTHREAD_TIMESPEC_HPP
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -8,6 +8,12 @@
 
 #include <boost/thread/thread_time.hpp>
 #include <boost/date_time/posix_time/conversion.hpp>
+#include <pthread.h>
+#ifndef _WIN32
+#include <unistd.h>
+#endif
+
+#include <boost/config/abi_prefix.hpp>
 
 namespace boost
 {
@@ -15,14 +21,16 @@
     {
         inline struct timespec get_timespec(boost::system_time const& abs_time)
         {
- struct timespec timeout={0};
+ struct timespec timeout={0,0};
             boost::posix_time::time_duration const time_since_epoch=abs_time-boost::posix_time::from_time_t(0);
             
             timeout.tv_sec=time_since_epoch.total_seconds();
- timeout.tv_nsec=time_since_epoch.fractional_seconds()*(1000000000/time_since_epoch.ticks_per_second());
+ timeout.tv_nsec=(long)(time_since_epoch.fractional_seconds()*(1000000000l/time_since_epoch.ticks_per_second()));
             return timeout;
         }
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Deleted: branches/CMake/release/boost/thread/pthread/tss.hpp
==============================================================================
--- branches/CMake/release/boost/thread/pthread/tss.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
+++ (empty file)
@@ -1,103 +0,0 @@
-#ifndef BOOST_THREAD_PTHREAD_TSS_HPP
-#define BOOST_THREAD_PTHREAD_TSS_HPP
-
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-// (C) Copyright 2007 Anthony Williams
-
-#include <boost/thread/detail/config.hpp>
-#include <boost/shared_ptr.hpp>
-
-namespace boost
-{
- namespace detail
- {
- struct tss_cleanup_function
- {
- virtual ~tss_cleanup_function()
- {}
-
- virtual void operator()(void* data)=0;
- };
-
- BOOST_THREAD_DECL void set_tss_data(void const* key,boost::shared_ptr<tss_cleanup_function> func,void* tss_data,bool cleanup_existing);
- BOOST_THREAD_DECL void* get_tss_data(void const* key);
- }
-
- template <typename T>
- class thread_specific_ptr
- {
- private:
- thread_specific_ptr(thread_specific_ptr&);
- thread_specific_ptr& operator=(thread_specific_ptr&);
-
- struct delete_data:
- detail::tss_cleanup_function
- {
- void operator()(void* data)
- {
- delete static_cast<T*>(data);
- }
- };
-
- struct run_custom_cleanup_function:
- detail::tss_cleanup_function
- {
- void (*cleanup_function)(T*);
-
- explicit run_custom_cleanup_function(void (*cleanup_function_)(T*)):
- cleanup_function(cleanup_function_)
- {}
-
- void operator()(void* data)
- {
- cleanup_function(static_cast<T*>(data));
- }
- };
-
-
- boost::shared_ptr<detail::tss_cleanup_function> cleanup;
-
- public:
- thread_specific_ptr():
- cleanup(new delete_data)
- {}
- explicit thread_specific_ptr(void (*func_)(T*)):
- cleanup(new run_custom_cleanup_function(func_))
- {}
- ~thread_specific_ptr()
- {
- reset();
- }
-
- T* get() const
- {
- return static_cast<T*>(detail::get_tss_data(this));
- }
- T* operator->() const
- {
- return get();
- }
- T& operator*() const
- {
- return *get();
- }
- T* release()
- {
- T* const temp=get();
- detail::set_tss_data(this,boost::shared_ptr<detail::tss_cleanup_function>(),0,false);
- return temp;
- }
- void reset(T* new_value=0)
- {
- T* const current_value=get();
- if(current_value!=new_value)
- {
- detail::set_tss_data(this,cleanup,new_value,true);
- }
- }
- };
-}
-
-#endif

Modified: branches/CMake/release/boost/thread/thread.hpp
==============================================================================
--- branches/CMake/release/boost/thread/thread.hpp (original)
+++ branches/CMake/release/boost/thread/thread.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -3,7 +3,7 @@
 
 // thread.hpp
 //
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -12,11 +12,14 @@
 #include <boost/thread/detail/platform.hpp>
 
 #if defined(BOOST_THREAD_PLATFORM_WIN32)
-#include <boost/thread/win32/thread.hpp>
+#include <boost/thread/win32/thread_data.hpp>
 #elif defined(BOOST_THREAD_PLATFORM_PTHREAD)
-#include <boost/thread/pthread/thread.hpp>
+#include <boost/thread/pthread/thread_data.hpp>
 #else
 #error "Boost threads unavailable on this platform"
 #endif
 
+#include <boost/thread/detail/thread.hpp>
+
+
 #endif

Modified: branches/CMake/release/boost/thread/thread_time.hpp
==============================================================================
--- branches/CMake/release/boost/thread/thread_time.hpp (original)
+++ branches/CMake/release/boost/thread/thread_time.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -9,6 +9,8 @@
 #include <boost/date_time/microsec_time_clock.hpp>
 #include <boost/date_time/posix_time/posix_time_types.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     typedef boost::posix_time::ptime system_time;
@@ -43,4 +45,6 @@
     
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/win32/basic_recursive_mutex.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/basic_recursive_mutex.hpp (original)
+++ branches/CMake/release/boost/thread/win32/basic_recursive_mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -3,7 +3,7 @@
 
 // basic_recursive_mutex.hpp
 //
-// (C) Copyright 2006-7 Anthony Williams
+// (C) Copyright 2006-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -12,6 +12,8 @@
 #include "thread_primitives.hpp"
 #include "basic_timed_mutex.hpp"
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -123,4 +125,6 @@
 
 #define BOOST_BASIC_RECURSIVE_MUTEX_INITIALIZER {0}
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/win32/basic_timed_mutex.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/basic_timed_mutex.hpp (original)
+++ branches/CMake/release/boost/thread/win32/basic_timed_mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -3,7 +3,7 @@
 
 // basic_timed_mutex_win32.hpp
 //
-// (C) Copyright 2006 Anthony Williams
+// (C) Copyright 2006-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -15,13 +15,18 @@
 #include <boost/thread/thread_time.hpp>
 #include <boost/detail/interlocked.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
     {
         struct basic_timed_mutex
         {
- BOOST_STATIC_CONSTANT(long,lock_flag_value=0x80000000);
+ BOOST_STATIC_CONSTANT(unsigned char,lock_flag_bit=31);
+ BOOST_STATIC_CONSTANT(unsigned char,event_set_flag_bit=30);
+ BOOST_STATIC_CONSTANT(long,lock_flag_value=1<<lock_flag_bit);
+ BOOST_STATIC_CONSTANT(long,event_set_flag_value=1<<event_set_flag_bit);
             long active_count;
             void* event;
 
@@ -50,18 +55,7 @@
           
             bool try_lock()
             {
- long old_count=active_count&~lock_flag_value;
- do
- {
- long const current_count=BOOST_INTERLOCKED_COMPARE_EXCHANGE(&active_count,(old_count+1)|lock_flag_value,old_count);
- if(current_count==old_count)
- {
- return true;
- }
- old_count=current_count;
- }
- while(!(old_count&lock_flag_value));
- return false;
+ return !win32::interlocked_bit_test_and_set(&active_count,lock_flag_bit);
             }
             
             void lock()
@@ -70,47 +64,46 @@
             }
             bool timed_lock(::boost::system_time const& wait_until)
             {
+ if(!win32::interlocked_bit_test_and_set(&active_count,lock_flag_bit))
+ {
+ return true;
+ }
                 long old_count=active_count;
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
- while(true)
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
+ for(;;)
                 {
- long const current_count=BOOST_INTERLOCKED_COMPARE_EXCHANGE(&active_count,(old_count+1)|lock_flag_value,old_count);
- if(current_count==old_count)
+ long const new_count=(old_count&lock_flag_value)?(old_count+1):(old_count|lock_flag_value);
+ long const current=BOOST_INTERLOCKED_COMPARE_EXCHANGE(&active_count,new_count,old_count);
+ if(current==old_count)
                     {
                         break;
                     }
- old_count=current_count;
+ old_count=current;
                 }
 
                 if(old_count&lock_flag_value)
                 {
                     bool lock_acquired=false;
                     void* const sem=get_event();
- ++old_count; // we're waiting, too
+
                     do
                     {
- old_count-=(lock_flag_value+1); // there will be one less active thread on this mutex when it gets unlocked
                         if(win32::WaitForSingleObject(sem,::boost::detail::get_milliseconds_until(wait_until))!=0)
                         {
                             BOOST_INTERLOCKED_DECREMENT(&active_count);
                             return false;
                         }
- do
+ old_count&=~lock_flag_value;
+ old_count|=event_set_flag_value;
+ for(;;)
                         {
- long const current_count=BOOST_INTERLOCKED_COMPARE_EXCHANGE(&active_count,old_count|lock_flag_value,old_count);
- if(current_count==old_count)
+ long const new_count=((old_count&lock_flag_value)?old_count:((old_count-1)|lock_flag_value))&~event_set_flag_value;
+ long const current=BOOST_INTERLOCKED_COMPARE_EXCHANGE(&active_count,new_count,old_count);
+ if(current==old_count)
                             {
                                 break;
                             }
- old_count=current_count;
+ old_count=current;
                         }
- while(!(old_count&lock_flag_value));
                         lock_acquired=!(old_count&lock_flag_value);
                     }
                     while(!lock_acquired);
@@ -131,12 +124,14 @@
 
             void unlock()
             {
- long const offset=lock_flag_value+1;
- long old_count=BOOST_INTERLOCKED_EXCHANGE_ADD(&active_count,(~offset)+1);
-
- if(old_count>offset)
+ long const offset=lock_flag_value;
+ long const old_count=BOOST_INTERLOCKED_EXCHANGE_ADD(&active_count,lock_flag_value);
+ if(!(old_count&event_set_flag_value) && (old_count>offset))
                 {
- win32::SetEvent(get_event());
+ if(!win32::interlocked_bit_test_and_set(&active_count,event_set_flag_bit))
+ {
+ win32::SetEvent(get_event());
+ }
                 }
             }
 
@@ -182,4 +177,6 @@
 
 #define BOOST_BASIC_TIMED_MUTEX_INITIALIZER {0}
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/win32/condition_variable.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/condition_variable.hpp (original)
+++ branches/CMake/release/boost/thread/win32/condition_variable.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -3,7 +3,7 @@
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
-// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007-8 Anthony Williams
 
 #include <boost/thread/mutex.hpp>
 #include "thread_primitives.hpp"
@@ -14,85 +14,118 @@
 #include <boost/thread/thread_time.hpp>
 #include "interlocked_read.hpp"
 #include <boost/thread/xtime.hpp>
+#include <vector>
+#include <boost/intrusive_ptr.hpp>
+
+#include <boost/config/abi_prefix.hpp>
 
 namespace boost
 {
     namespace detail
     {
- class basic_condition_variable
+ class basic_cv_list_entry;
+ void intrusive_ptr_add_ref(basic_cv_list_entry * p);
+ void intrusive_ptr_release(basic_cv_list_entry * p);
+
+ class basic_cv_list_entry
         {
- boost::mutex internal_mutex;
- long total_count;
- unsigned active_generation_count;
+ private:
+ detail::win32::handle_manager semaphore;
+ detail::win32::handle_manager wake_sem;
+ long waiters;
+ bool notified;
+ long references;
 
- struct list_entry
- {
- detail::win32::handle semaphore;
- long count;
- bool notified;
+ basic_cv_list_entry(basic_cv_list_entry&);
+ void operator=(basic_cv_list_entry&);
+
+ public:
+ explicit basic_cv_list_entry(detail::win32::handle_manager const& wake_sem_):
+ semaphore(detail::win32::create_anonymous_semaphore(0,LONG_MAX)),
+ wake_sem(wake_sem_.duplicate()),
+ waiters(1),notified(false),references(0)
+ {}
 
- list_entry():
- semaphore(0),count(0),notified(0)
- {}
- };
+ static bool no_waiters(boost::intrusive_ptr<basic_cv_list_entry> const& entry)
+ {
+ return !detail::interlocked_read_acquire(&entry->waiters);
+ }
 
- BOOST_STATIC_CONSTANT(unsigned,generation_count=3);
+ void add_waiter()
+ {
+ BOOST_INTERLOCKED_INCREMENT(&waiters);
+ }
+
+ void remove_waiter()
+ {
+ BOOST_INTERLOCKED_DECREMENT(&waiters);
+ }
 
- list_entry generations[generation_count];
- detail::win32::handle wake_sem;
+ void release(unsigned count_to_release)
+ {
+ notified=true;
+ detail::win32::ReleaseSemaphore(semaphore,count_to_release,0);
+ }
 
- static bool no_waiters(list_entry const& entry)
+ void release_waiters()
             {
- return entry.count==0;
+ release(detail::interlocked_read_acquire(&waiters));
             }
 
- void shift_generations_down()
+ bool is_notified() const
             {
- list_entry* const last_active_entry=std::remove_if(generations,generations+generation_count,no_waiters);
- if(last_active_entry==generations+generation_count)
- {
- broadcast_entry(generations[generation_count-1],false);
- }
- else
- {
- active_generation_count=unsigned(last_active_entry-generations)+1;
- }
+ return notified;
+ }
 
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4996)
-#endif
- std::copy_backward(generations,generations+active_generation_count-1,generations+active_generation_count);
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
- generations[0]=list_entry();
+ bool wait(timeout wait_until)
+ {
+ return this_thread::interruptible_wait(semaphore,wait_until);
             }
 
- void broadcast_entry(list_entry& entry,bool wake)
+ bool woken()
             {
- long const count_to_wake=entry.count;
- detail::interlocked_write_release(&total_count,total_count-count_to_wake);
- if(wake)
- {
- detail::win32::ReleaseSemaphore(wake_sem,count_to_wake,0);
- }
- detail::win32::ReleaseSemaphore(entry.semaphore,count_to_wake,0);
- entry.count=0;
- dispose_entry(entry);
+ unsigned long const woken_result=detail::win32::WaitForSingleObject(wake_sem,0);
+ BOOST_ASSERT((woken_result==detail::win32::timeout) || (woken_result==0));
+ return woken_result==0;
             }
-
 
- void dispose_entry(list_entry& entry)
+ friend void intrusive_ptr_add_ref(basic_cv_list_entry * p);
+ friend void intrusive_ptr_release(basic_cv_list_entry * p);
+ };
+
+ inline void intrusive_ptr_add_ref(basic_cv_list_entry * p)
+ {
+ BOOST_INTERLOCKED_INCREMENT(&p->references);
+ }
+
+ inline void intrusive_ptr_release(basic_cv_list_entry * p)
+ {
+ if(!BOOST_INTERLOCKED_DECREMENT(&p->references))
             {
- if(entry.semaphore)
- {
- BOOST_VERIFY(detail::win32::CloseHandle(entry.semaphore));
- entry.semaphore=0;
- }
- entry.notified=false;
+ delete p;
             }
+ }
+
+ class basic_condition_variable
+ {
+ boost::mutex internal_mutex;
+ long total_count;
+ unsigned active_generation_count;
+
+ typedef basic_cv_list_entry list_entry;
 
+ typedef boost::intrusive_ptr<list_entry> entry_ptr;
+ typedef std::vector<entry_ptr> generation_list;
+
+ generation_list generations;
+ detail::win32::handle_manager wake_sem;
+
+ void wake_waiters(long count_to_wake)
+ {
+ detail::interlocked_write_release(&total_count,total_count-count_to_wake);
+ detail::win32::ReleaseSemaphore(wake_sem,count_to_wake,0);
+ }
+
             template<typename lock_type>
             struct relocker
             {
@@ -116,75 +149,78 @@
                     
                 }
             private:
+ relocker(relocker&);
                 void operator=(relocker&);
             };
             
 
- template<typename lock_type>
- void start_wait_loop_first_time(relocker<lock_type>& locker,
- detail::win32::handle_manager& local_wake_sem)
+ entry_ptr get_wait_entry()
             {
- locker.unlock();
+ boost::lock_guard<boost::mutex> internal_lock(internal_mutex);
+
                 if(!wake_sem)
                 {
                     wake_sem=detail::win32::create_anonymous_semaphore(0,LONG_MAX);
                     BOOST_ASSERT(wake_sem);
                 }
- local_wake_sem=detail::win32::duplicate_handle(wake_sem);
-
- if(generations[0].notified)
+
+ detail::interlocked_write_release(&total_count,total_count+1);
+ if(generations.empty() || generations.back()->is_notified())
                 {
- shift_generations_down();
+ entry_ptr new_entry(new list_entry(wake_sem));
+ generations.push_back(new_entry);
+ return new_entry;
                 }
- else if(!active_generation_count)
+ else
                 {
- active_generation_count=1;
+ generations.back()->add_waiter();
+ return generations.back();
                 }
             }
             
- template<typename lock_type>
- void start_wait_loop(relocker<lock_type>& locker,
- detail::win32::handle_manager& local_wake_sem,
- detail::win32::handle_manager& sem)
+ struct entry_manager
             {
- boost::mutex::scoped_lock internal_lock(internal_mutex);
- detail::interlocked_write_release(&total_count,total_count+1);
- if(!local_wake_sem)
+ entry_ptr const entry;
+
+ entry_manager(entry_ptr const& entry_):
+ entry(entry_)
+ {}
+
+ ~entry_manager()
                 {
- start_wait_loop_first_time(locker,local_wake_sem);
+ entry->remove_waiter();
                 }
- if(!generations[0].semaphore)
+
+ list_entry* operator->()
                 {
- generations[0].semaphore=detail::win32::create_anonymous_semaphore(0,LONG_MAX);
- BOOST_ASSERT(generations[0].semaphore);
+ return entry.get();
                 }
- ++generations[0].count;
- sem=detail::win32::duplicate_handle(generations[0].semaphore);
- }
+
+ private:
+ void operator=(entry_manager&);
+ entry_manager(entry_manager&);
+ };
+
 
         protected:
             template<typename lock_type>
             bool do_wait(lock_type& lock,timeout wait_until)
             {
- detail::win32::handle_manager local_wake_sem;
- detail::win32::handle_manager sem;
- bool woken=false;
-
                 relocker<lock_type> locker(lock);
-
+
+ entry_manager entry(get_wait_entry());
+
+ locker.unlock();
+
+ bool woken=false;
                 while(!woken)
                 {
- start_wait_loop(locker,local_wake_sem,sem);
-
- if(!this_thread::interruptible_wait(sem,wait_until))
+ if(!entry->wait(wait_until))
                     {
                         return false;
                     }
                 
- unsigned long const woken_result=detail::win32::WaitForSingleObject(local_wake_sem,0);
- BOOST_ASSERT(woken_result==detail::win32::timeout || woken_result==0);
-
- woken=(woken_result==0);
+ woken=entry->woken();
                 }
                 return woken;
             }
@@ -202,45 +238,33 @@
         
             basic_condition_variable(const basic_condition_variable& other);
             basic_condition_variable& operator=(const basic_condition_variable& other);
+
         public:
             basic_condition_variable():
                 total_count(0),active_generation_count(0),wake_sem(0)
             {}
             
             ~basic_condition_variable()
- {
- for(unsigned i=0;i<generation_count;++i)
- {
- dispose_entry(generations[i]);
- }
- detail::win32::CloseHandle(wake_sem);
- }
+ {}
 
-
             void notify_one()
             {
                 if(detail::interlocked_read_acquire(&total_count))
                 {
- boost::mutex::scoped_lock internal_lock(internal_mutex);
- detail::win32::ReleaseSemaphore(wake_sem,1,0);
- for(unsigned generation=active_generation_count;generation!=0;--generation)
+ boost::lock_guard<boost::mutex> internal_lock(internal_mutex);
+ if(!total_count)
+ {
+ return;
+ }
+ wake_waiters(1);
+
+ for(generation_list::iterator it=generations.begin(),
+ end=generations.end();
+ it!=end;++it)
                     {
- list_entry& entry=generations[generation-1];
- if(entry.count)
- {
- detail::interlocked_write_release(&total_count,total_count-1);
- entry.notified=true;
- detail::win32::ReleaseSemaphore(entry.semaphore,1,0);
- if(!--entry.count)
- {
- dispose_entry(entry);
- if(generation==active_generation_count)
- {
- --active_generation_count;
- }
- }
- }
+ (*it)->release(1);
                     }
+ generations.erase(std::remove_if(generations.begin(),generations.end(),&basic_cv_list_entry::no_waiters),generations.end());
                 }
             }
         
@@ -248,16 +272,20 @@
             {
                 if(detail::interlocked_read_acquire(&total_count))
                 {
- boost::mutex::scoped_lock internal_lock(internal_mutex);
- for(unsigned generation=active_generation_count;generation!=0;--generation)
+ boost::lock_guard<boost::mutex> internal_lock(internal_mutex);
+ if(!total_count)
+ {
+ return;
+ }
+ wake_waiters(total_count);
+ for(generation_list::iterator it=generations.begin(),
+ end=generations.end();
+ it!=end;++it)
                     {
- list_entry& entry=generations[generation-1];
- if(entry.count)
- {
- broadcast_entry(entry,true);
- }
+ (*it)->release_waiters();
                     }
- active_generation_count=0;
+ generations.clear();
+ wake_sem=detail::win32::handle(0);
                 }
             }
         
@@ -265,9 +293,18 @@
     }
 
     class condition_variable:
- public detail::basic_condition_variable
+ private detail::basic_condition_variable
     {
+ private:
+ condition_variable(condition_variable&);
+ void operator=(condition_variable&);
     public:
+ condition_variable()
+ {}
+
+ using detail::basic_condition_variable::notify_one;
+ using detail::basic_condition_variable::notify_all;
+
         void wait(unique_lock<mutex>& m)
         {
             do_wait(m,detail::timeout::sentinel());
@@ -313,9 +350,18 @@
     };
     
     class condition_variable_any:
- public detail::basic_condition_variable
+ private detail::basic_condition_variable
     {
+ private:
+ condition_variable_any(condition_variable_any&);
+ void operator=(condition_variable_any&);
     public:
+ condition_variable_any()
+ {}
+
+ using detail::basic_condition_variable::notify_one;
+ using detail::basic_condition_variable::notify_all;
+
         template<typename lock_type>
         void wait(lock_type& m)
         {
@@ -367,4 +413,6 @@
 
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/win32/interlocked_read.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/interlocked_read.hpp (original)
+++ branches/CMake/release/boost/thread/win32/interlocked_read.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -3,12 +3,16 @@
 
 // interlocked_read_win32.hpp
 //
-// (C) Copyright 2005-7 Anthony Williams
+// (C) Copyright 2005-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
+#include <boost/detail/interlocked.hpp>
+
+#include <boost/config/abi_prefix.hpp>
+
 #ifdef BOOST_MSVC
 
 extern "C" void _ReadWriteBarrier(void);
@@ -46,8 +50,6 @@
 
 #else
 
-#include <boost/detail/interlocked.hpp>
-
 namespace boost
 {
     namespace detail
@@ -73,5 +75,6 @@
 
 #endif
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/CMake/release/boost/thread/win32/mutex.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/mutex.hpp (original)
+++ branches/CMake/release/boost/thread/win32/mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -10,6 +10,8 @@
 #include <boost/thread/exceptions.hpp>
 #include <boost/thread/locks.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -32,7 +34,7 @@
         }
 
         typedef unique_lock<mutex> scoped_lock;
- typedef scoped_lock scoped_try_lock;
+ typedef detail::try_lock_wrapper<mutex> scoped_try_lock;
     };
 
     typedef mutex try_mutex;
@@ -53,9 +55,11 @@
         }
 
         typedef unique_lock<timed_mutex> scoped_timed_lock;
- typedef scoped_timed_lock scoped_try_lock;
+ typedef detail::try_lock_wrapper<timed_mutex> scoped_try_lock;
         typedef scoped_timed_lock scoped_lock;
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/win32/once.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/once.hpp (original)
+++ branches/CMake/release/boost/thread/win32/once.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -18,6 +18,8 @@
 #include <boost/thread/win32/thread_primitives.hpp>
 #include <boost/thread/win32/interlocked_read.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 #ifdef BOOST_NO_STDC_NAMESPACE
 namespace std
 {
@@ -129,4 +131,6 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif

Modified: branches/CMake/release/boost/thread/win32/recursive_mutex.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/recursive_mutex.hpp (original)
+++ branches/CMake/release/boost/thread/win32/recursive_mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -15,6 +15,8 @@
 #include <boost/thread/exceptions.hpp>
 #include <boost/thread/locks.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class recursive_mutex:
@@ -32,7 +34,7 @@
         }
 
         typedef unique_lock<recursive_mutex> scoped_lock;
- typedef scoped_lock scoped_try_lock;
+ typedef detail::try_lock_wrapper<recursive_mutex> scoped_try_lock;
     };
 
     typedef recursive_mutex recursive_try_mutex;
@@ -52,10 +54,11 @@
         }
 
         typedef unique_lock<recursive_timed_mutex> scoped_timed_lock;
- typedef scoped_timed_lock scoped_try_lock;
+ typedef detail::try_lock_wrapper<recursive_timed_mutex> scoped_try_lock;
         typedef scoped_timed_lock scoped_lock;
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Modified: branches/CMake/release/boost/thread/win32/shared_mutex.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/shared_mutex.hpp (original)
+++ branches/CMake/release/boost/thread/win32/shared_mutex.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -15,6 +15,8 @@
 #include <boost/utility.hpp>
 #include <boost/thread/thread_time.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     class shared_mutex:
@@ -23,12 +25,12 @@
     private:
         struct state_data
         {
- unsigned shared_count:11;
- unsigned shared_waiting:11;
- unsigned exclusive:1;
- unsigned upgrade:1;
- unsigned exclusive_waiting:7;
- unsigned exclusive_waiting_blocked:1;
+ unsigned shared_count:11,
+ shared_waiting:11,
+ exclusive:1,
+ upgrade:1,
+ exclusive_waiting:7,
+ exclusive_waiting_blocked:1;
 
             friend bool operator==(state_data const& lhs,state_data const& rhs)
             {
@@ -120,6 +122,12 @@
             BOOST_VERIFY(timed_lock_shared(::boost::detail::get_system_time_sentinel()));
         }
 
+ template<typename TimeDuration>
+ bool timed_lock_shared(TimeDuration const & relative_time)
+ {
+ return timed_lock_shared(get_system_time()+relative_time);
+ }
+
         bool timed_lock_shared(boost::system_time const& wait_until)
         {
 #ifdef BOOST_MSVC
@@ -269,6 +277,12 @@
             BOOST_VERIFY(timed_lock(::boost::detail::get_system_time_sentinel()));
         }
 
+ template<typename TimeDuration>
+ bool timed_lock(TimeDuration const & relative_time)
+ {
+ return timed_lock(get_system_time()+relative_time);
+ }
+
         bool timed_lock(boost::system_time const& wait_until)
         {
 #ifdef BOOST_MSVC
@@ -325,7 +339,10 @@
                         {
                             if(new_state.exclusive_waiting)
                             {
- --new_state.exclusive_waiting;
+ if(!--new_state.exclusive_waiting)
+ {
+ new_state.exclusive_waiting_blocked=false;
+ }
                             }
                         }
                         else
@@ -617,5 +634,6 @@
     };
 }
 
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Deleted: branches/CMake/release/boost/thread/win32/thread.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/thread.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
+++ (empty file)
@@ -1,524 +0,0 @@
-#ifndef BOOST_THREAD_THREAD_WIN32_HPP
-#define BOOST_THREAD_THREAD_WIN32_HPP
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-// (C) Copyright 2007 Anthony Williams
-
-#include <exception>
-#include <boost/thread/exceptions.hpp>
-#include <ostream>
-#include <boost/thread/detail/move.hpp>
-#include <boost/intrusive_ptr.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/thread/thread_time.hpp>
-#include "thread_primitives.hpp"
-#include "thread_heap_alloc.hpp"
-#include <boost/utility.hpp>
-#include <boost/assert.hpp>
-#include <list>
-#include <algorithm>
-#include <boost/ref.hpp>
-#include <boost/cstdint.hpp>
-#include <stdlib.h>
-#include <memory>
-
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4251)
-#endif
-
-namespace boost
-{
- class thread_interrupted
- {};
-
- namespace detail
- {
- struct thread_exit_callback_node;
- struct tss_data_node;
-
- struct thread_data_base
- {
- long count;
- detail::win32::handle_manager thread_handle;
- detail::win32::handle_manager interruption_handle;
- boost::detail::thread_exit_callback_node* thread_exit_callbacks;
- boost::detail::tss_data_node* tss_data;
- bool interruption_enabled;
- unsigned id;
-
- thread_data_base():
- count(0),thread_handle(detail::win32::invalid_handle_value),
- interruption_handle(create_anonymous_event(detail::win32::manual_reset_event,detail::win32::event_initially_reset)),
- thread_exit_callbacks(0),tss_data(0),
- interruption_enabled(true),
- id(0)
- {}
- virtual ~thread_data_base()
- {}
-
- friend void intrusive_ptr_add_ref(thread_data_base * p)
- {
- BOOST_INTERLOCKED_INCREMENT(&p->count);
- }
-
- friend void intrusive_ptr_release(thread_data_base * p)
- {
- if(!BOOST_INTERLOCKED_DECREMENT(&p->count))
- {
- detail::heap_delete(p);
- }
- }
-
- void interrupt()
- {
- BOOST_VERIFY(detail::win32::SetEvent(interruption_handle)!=0);
- }
-
-
- virtual void run()=0;
- };
-
- typedef boost::intrusive_ptr<detail::thread_data_base> thread_data_ptr;
-
- struct timeout
- {
- unsigned long start;
- uintmax_t milliseconds;
- bool relative;
- boost::system_time abs_time;
-
- static unsigned long const max_non_infinite_wait=0xfffffffe;
-
- timeout(uintmax_t milliseconds_):
- start(win32::GetTickCount()),
- milliseconds(milliseconds_),
- relative(true),
- abs_time(boost::get_system_time())
- {}
-
- timeout(boost::system_time const& abs_time_):
- start(win32::GetTickCount()),
- milliseconds(0),
- relative(false),
- abs_time(abs_time_)
- {}
-
- struct remaining_time
- {
- bool more;
- unsigned long milliseconds;
-
- remaining_time(uintmax_t remaining):
- more(remaining>max_non_infinite_wait),
- milliseconds(more?max_non_infinite_wait:(unsigned long)remaining)
- {}
- };
-
- remaining_time remaining_milliseconds() const
- {
- if(is_sentinel())
- {
- return remaining_time(win32::infinite);
- }
- else if(relative)
- {
- unsigned long const now=win32::GetTickCount();
- unsigned long const elapsed=now-start;
- return remaining_time((elapsed<milliseconds)?(milliseconds-elapsed):0);
- }
- else
- {
- system_time const now=get_system_time();
- if(abs_time<=now)
- {
- return remaining_time(0);
- }
- return remaining_time((abs_time-now).total_milliseconds()+1);
- }
- }
-
- bool is_sentinel() const
- {
- return milliseconds==~uintmax_t(0);
- }
-
-
- static timeout sentinel()
- {
- return timeout(sentinel_type());
- }
- private:
- struct sentinel_type
- {};
-
- explicit timeout(sentinel_type):
- start(0),milliseconds(~uintmax_t(0)),relative(true)
- {}
- };
- }
-
- class BOOST_THREAD_DECL thread
- {
- private:
- thread(thread&);
- thread& operator=(thread&);
-
- void release_handle();
-
- template<typename F>
- struct thread_data:
- detail::thread_data_base
- {
- F f;
-
- thread_data(F f_):
- f(f_)
- {}
- thread_data(detail::thread_move_t<F> f_):
- f(f_)
- {}
-
- void run()
- {
- f();
- }
- };
-
- mutable boost::mutex thread_info_mutex;
- detail::thread_data_ptr thread_info;
-
- static unsigned __stdcall thread_start_function(void* param);
-
- void start_thread();
-
- explicit thread(detail::thread_data_ptr data);
-
- detail::thread_data_ptr get_thread_info() const;
- public:
- thread();
- ~thread();
-
- template <class F>
- explicit thread(F f):
- thread_info(detail::heap_new<thread_data<F> >(f))
- {
- start_thread();
- }
- template <class F>
- thread(detail::thread_move_t<F> f):
- thread_info(detail::heap_new<thread_data<F> >(f))
- {
- start_thread();
- }
-
- thread(detail::thread_move_t<thread> x);
- thread& operator=(detail::thread_move_t<thread> x);
- operator detail::thread_move_t<thread>();
- detail::thread_move_t<thread> move();
-
- void swap(thread& x);
-
- class id;
- id get_id() const;
-
-
- bool joinable() const;
- void join();
- bool timed_join(const system_time& wait_until);
-
- template<typename TimeDuration>
- inline bool timed_join(TimeDuration const& rel_time)
- {
- return timed_join(get_system_time()+rel_time);
- }
- void detach();
-
- static unsigned hardware_concurrency();
-
- typedef detail::win32::handle native_handle_type;
- native_handle_type native_handle();
-
- // backwards compatibility
- bool operator==(const thread& other) const;
- bool operator!=(const thread& other) const;
-
- static void yield();
- static void sleep(const system_time& xt);
-
- // extensions
- void interrupt();
- bool interruption_requested() const;
- };
-
- inline detail::thread_move_t<thread> move(thread& x)
- {
- return x.move();
- }
-
- inline detail::thread_move_t<thread> move(detail::thread_move_t<thread> x)
- {
- return x;
- }
-
- template<typename F>
- struct thread::thread_data<boost::reference_wrapper<F> >:
- detail::thread_data_base
- {
- F& f;
-
- thread_data(boost::reference_wrapper<F> f_):
- f(f_)
- {}
-
- void run()
- {
- f();
- }
- };
-
-
- namespace this_thread
- {
- class BOOST_THREAD_DECL disable_interruption
- {
- disable_interruption(const disable_interruption&);
- disable_interruption& operator=(const disable_interruption&);
-
- bool interruption_was_enabled;
- friend class restore_interruption;
- public:
- disable_interruption();
- ~disable_interruption();
- };
-
- class BOOST_THREAD_DECL restore_interruption
- {
- restore_interruption(const restore_interruption&);
- restore_interruption& operator=(const restore_interruption&);
- public:
- explicit restore_interruption(disable_interruption& d);
- ~restore_interruption();
- };
-
- thread::id BOOST_THREAD_DECL get_id();
-
- bool BOOST_THREAD_DECL interruptible_wait(detail::win32::handle handle_to_wait_for,detail::timeout target_time);
- inline bool interruptible_wait(unsigned long milliseconds)
- {
- return interruptible_wait(detail::win32::invalid_handle_value,milliseconds);
- }
-
- void BOOST_THREAD_DECL interruption_point();
- bool BOOST_THREAD_DECL interruption_enabled();
- bool BOOST_THREAD_DECL interruption_requested();
-
- void BOOST_THREAD_DECL yield();
- template<typename TimeDuration>
- void sleep(TimeDuration const& rel_time)
- {
- interruptible_wait(static_cast<unsigned long>(rel_time.total_milliseconds()));
- }
- }
-
- class thread::id
- {
- private:
- detail::thread_data_ptr thread_data;
-
- id(detail::thread_data_ptr thread_data_):
- thread_data(thread_data_)
- {}
- friend class thread;
- friend id this_thread::get_id();
- public:
- id():
- thread_data(0)
- {}
-
- bool operator==(const id& y) const
- {
- return thread_data==y.thread_data;
- }
-
- bool operator!=(const id& y) const
- {
- return thread_data!=y.thread_data;
- }
-
- bool operator<(const id& y) const
- {
- return thread_data<y.thread_data;
- }
-
- bool operator>(const id& y) const
- {
- return y.thread_data<thread_data;
- }
-
- bool operator<=(const id& y) const
- {
- return !(y.thread_data<thread_data);
- }
-
- bool operator>=(const id& y) const
- {
- return !(thread_data<y.thread_data);
- }
-
- template<class charT, class traits>
- friend std::basic_ostream<charT, traits>&
- operator<<(std::basic_ostream<charT, traits>& os, const id& x)
- {
- if(x.thread_data)
- {
- return os<<x.thread_data;
- }
- else
- {
- return os<<"{Not-any-thread}";
- }
- }
-
- void interrupt()
- {
- if(thread_data)
- {
- thread_data->interrupt();
- }
- }
-
- };
-
- inline bool thread::operator==(const thread& other) const
- {
- return get_id()==other.get_id();
- }
-
- inline bool thread::operator!=(const thread& other) const
- {
- return get_id()!=other.get_id();
- }
-
- namespace detail
- {
- struct thread_exit_function_base
- {
- virtual ~thread_exit_function_base()
- {}
- virtual void operator()() const=0;
- };
-
- template<typename F>
- struct thread_exit_function:
- thread_exit_function_base
- {
- F f;
-
- thread_exit_function(F f_):
- f(f_)
- {}
-
- void operator()() const
- {
- f();
- }
- };
-
- void add_thread_exit_function(thread_exit_function_base*);
- }
-
- namespace this_thread
- {
- template<typename F>
- void at_thread_exit(F f)
- {
- detail::thread_exit_function_base* const thread_exit_func=detail::heap_new<detail::thread_exit_function<F> >(f);
- detail::add_thread_exit_function(thread_exit_func);
- }
- }
-
- class thread_group:
- private noncopyable
- {
- public:
- ~thread_group()
- {
- for(std::list<thread*>::iterator it=threads.begin(),end=threads.end();
- it!=end;
- ++it)
- {
- delete *it;
- }
- }
-
- template<typename F>
- thread* create_thread(F threadfunc)
- {
- boost::lock_guard<mutex> guard(m);
- std::auto_ptr<thread> new_thread(new thread(threadfunc));
- threads.push_back(new_thread.get());
- return new_thread.release();
- }
-
- void add_thread(thread* thrd)
- {
- if(thrd)
- {
- boost::lock_guard<mutex> guard(m);
- threads.push_back(thrd);
- }
- }
-
- void remove_thread(thread* thrd)
- {
- boost::lock_guard<mutex> guard(m);
- std::list<thread*>::iterator const it=std::find(threads.begin(),threads.end(),thrd);
- if(it!=threads.end())
- {
- threads.erase(it);
- }
- }
-
- void join_all()
- {
- boost::lock_guard<mutex> guard(m);
-
- for(std::list<thread*>::iterator it=threads.begin(),end=threads.end();
- it!=end;
- ++it)
- {
- (*it)->join();
- }
- }
-
- void interrupt_all()
- {
- boost::lock_guard<mutex> guard(m);
-
- for(std::list<thread*>::iterator it=threads.begin(),end=threads.end();
- it!=end;
- ++it)
- {
- (*it)->interrupt();
- }
- }
-
- size_t size() const
- {
- boost::lock_guard<mutex> guard(m);
- return threads.size();
- }
-
- private:
- std::list<thread*> threads;
- mutable mutex m;
- };
-}
-
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-
-#endif

Modified: branches/CMake/release/boost/thread/win32/thread_heap_alloc.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/thread_heap_alloc.hpp (original)
+++ branches/CMake/release/boost/thread/win32/thread_heap_alloc.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -49,6 +49,8 @@
 
 #endif
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -69,7 +71,7 @@
         }
             
         template<typename T>
- T* heap_new()
+ inline T* heap_new()
         {
             void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
             try
@@ -84,8 +86,72 @@
             }
         }
 
+#ifdef BOOST_HAS_RVALUE_REFS
+ template<typename T,typename A1>
+ inline T* heap_new(A1&& a1)
+ {
+ void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
+ try
+ {
+ T* const data=new (heap_memory) T(static_cast<A1&&>(a1));
+ return data;
+ }
+ catch(...)
+ {
+ free_raw_heap_memory(heap_memory);
+ throw;
+ }
+ }
+ template<typename T,typename A1,typename A2>
+ inline T* heap_new(A1&& a1,A2&& a2)
+ {
+ void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
+ try
+ {
+ T* const data=new (heap_memory) T(static_cast<A1&&>(a1),static_cast<A2&&>(a2));
+ return data;
+ }
+ catch(...)
+ {
+ free_raw_heap_memory(heap_memory);
+ throw;
+ }
+ }
+ template<typename T,typename A1,typename A2,typename A3>
+ inline T* heap_new(A1&& a1,A2&& a2,A3&& a3)
+ {
+ void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
+ try
+ {
+ T* const data=new (heap_memory) T(static_cast<A1&&>(a1),static_cast<A2&&>(a2),
+ static_cast<A3&&>(a3));
+ return data;
+ }
+ catch(...)
+ {
+ free_raw_heap_memory(heap_memory);
+ throw;
+ }
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1&& a1,A2&& a2,A3&& a3,A4&& a4)
+ {
+ void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
+ try
+ {
+ T* const data=new (heap_memory) T(static_cast<A1&&>(a1),static_cast<A2&&>(a2),
+ static_cast<A3&&>(a3),static_cast<A4&&>(a4));
+ return data;
+ }
+ catch(...)
+ {
+ free_raw_heap_memory(heap_memory);
+ throw;
+ }
+ }
+#else
         template<typename T,typename A1>
- T* heap_new(A1 a1)
+ inline T* heap_new_impl(A1 a1)
         {
             void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
             try
@@ -99,9 +165,9 @@
                 throw;
             }
         }
-
+
         template<typename T,typename A1,typename A2>
- T* heap_new(A1 a1,A2 a2)
+ inline T* heap_new_impl(A1 a1,A2 a2)
         {
             void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
             try
@@ -117,7 +183,7 @@
         }
 
         template<typename T,typename A1,typename A2,typename A3>
- T* heap_new(A1 a1,A2 a2,A3 a3)
+ inline T* heap_new_impl(A1 a1,A2 a2,A3 a3)
         {
             void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
             try
@@ -131,9 +197,9 @@
                 throw;
             }
         }
-
+
         template<typename T,typename A1,typename A2,typename A3,typename A4>
- T* heap_new(A1 a1,A2 a2,A3 a3,A4 a4)
+ inline T* heap_new_impl(A1 a1,A2 a2,A3 a3,A4 a4)
         {
             void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
             try
@@ -147,9 +213,168 @@
                 throw;
             }
         }
+
+
+ template<typename T,typename A1>
+ inline T* heap_new(A1 const& a1)
+ {
+ return heap_new_impl<T,A1 const&>(a1);
+ }
+ template<typename T,typename A1>
+ inline T* heap_new(A1& a1)
+ {
+ return heap_new_impl<T,A1&>(a1);
+ }
+
+ template<typename T,typename A1,typename A2>
+ inline T* heap_new(A1 const& a1,A2 const& a2)
+ {
+ return heap_new_impl<T,A1 const&,A2 const&>(a1,a2);
+ }
+ template<typename T,typename A1,typename A2>
+ inline T* heap_new(A1& a1,A2 const& a2)
+ {
+ return heap_new_impl<T,A1&,A2 const&>(a1,a2);
+ }
+ template<typename T,typename A1,typename A2>
+ inline T* heap_new(A1 const& a1,A2& a2)
+ {
+ return heap_new_impl<T,A1 const&,A2&>(a1,a2);
+ }
+ template<typename T,typename A1,typename A2>
+ inline T* heap_new(A1& a1,A2& a2)
+ {
+ return heap_new_impl<T,A1&,A2&>(a1,a2);
+ }
+
+ template<typename T,typename A1,typename A2,typename A3>
+ inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3)
+ {
+ return heap_new_impl<T,A1 const&,A2 const&,A3 const&>(a1,a2,a3);
+ }
+ template<typename T,typename A1,typename A2,typename A3>
+ inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3)
+ {
+ return heap_new_impl<T,A1&,A2 const&,A3 const&>(a1,a2,a3);
+ }
+ template<typename T,typename A1,typename A2,typename A3>
+ inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3)
+ {
+ return heap_new_impl<T,A1 const&,A2&,A3 const&>(a1,a2,a3);
+ }
+ template<typename T,typename A1,typename A2,typename A3>
+ inline T* heap_new(A1& a1,A2& a2,A3 const& a3)
+ {
+ return heap_new_impl<T,A1&,A2&,A3 const&>(a1,a2,a3);
+ }
+
+ template<typename T,typename A1,typename A2,typename A3>
+ inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3)
+ {
+ return heap_new_impl<T,A1 const&,A2 const&,A3&>(a1,a2,a3);
+ }
+ template<typename T,typename A1,typename A2,typename A3>
+ inline T* heap_new(A1& a1,A2 const& a2,A3& a3)
+ {
+ return heap_new_impl<T,A1&,A2 const&,A3&>(a1,a2,a3);
+ }
+ template<typename T,typename A1,typename A2,typename A3>
+ inline T* heap_new(A1 const& a1,A2& a2,A3& a3)
+ {
+ return heap_new_impl<T,A1 const&,A2&,A3&>(a1,a2,a3);
+ }
+ template<typename T,typename A1,typename A2,typename A3>
+ inline T* heap_new(A1& a1,A2& a2,A3& a3)
+ {
+ return heap_new_impl<T,A1&,A2&,A3&>(a1,a2,a3);
+ }
+
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4 const& a4)
+ {
+ return heap_new_impl<T,A1 const&,A2 const&,A3 const&,A4 const&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4 const& a4)
+ {
+ return heap_new_impl<T,A1&,A2 const&,A3 const&,A4 const&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4 const& a4)
+ {
+ return heap_new_impl<T,A1 const&,A2&,A3 const&,A4 const&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4 const& a4)
+ {
+ return heap_new_impl<T,A1&,A2&,A3 const&,A4 const&>(a1,a2,a3,a4);
+ }
+
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4 const& a4)
+ {
+ return heap_new_impl<T,A1 const&,A2 const&,A3&,A4 const&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4 const& a4)
+ {
+ return heap_new_impl<T,A1&,A2 const&,A3&,A4 const&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4 const& a4)
+ {
+ return heap_new_impl<T,A1 const&,A2&,A3&,A4 const&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1& a1,A2& a2,A3& a3,A4 const& a4)
+ {
+ return heap_new_impl<T,A1&,A2&,A3&,A4 const&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4& a4)
+ {
+ return heap_new_impl<T,A1 const&,A2 const&,A3 const&,A4&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4& a4)
+ {
+ return heap_new_impl<T,A1&,A2 const&,A3 const&,A4&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4& a4)
+ {
+ return heap_new_impl<T,A1 const&,A2&,A3 const&,A4&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4& a4)
+ {
+ return heap_new_impl<T,A1&,A2&,A3 const&,A4&>(a1,a2,a3,a4);
+ }
+
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4& a4)
+ {
+ return heap_new_impl<T,A1 const&,A2 const&,A3&,A4&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4& a4)
+ {
+ return heap_new_impl<T,A1&,A2 const&,A3&,A4&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4& a4)
+ {
+ return heap_new_impl<T,A1 const&,A2&,A3&,A4&>(a1,a2,a3,a4);
+ }
+ template<typename T,typename A1,typename A2,typename A3,typename A4>
+ inline T* heap_new(A1& a1,A2& a2,A3& a3,A4& a4)
+ {
+ return heap_new_impl<T,A1&,A2&,A3&,A4&>(a1,a2,a3,a4);
+ }
         
+#endif
         template<typename T>
- void heap_delete(T* data)
+ inline void heap_delete(T* data)
         {
             data->~T();
             free_raw_heap_memory(data);
@@ -166,5 +391,7 @@
     }
 }
 
+#include <boost/config/abi_suffix.hpp>
+
 
 #endif

Modified: branches/CMake/release/boost/thread/win32/thread_primitives.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/thread_primitives.hpp (original)
+++ branches/CMake/release/boost/thread/win32/thread_primitives.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -13,10 +13,12 @@
 #include <boost/config.hpp>
 #include <boost/assert.hpp>
 #include <boost/thread/exceptions.hpp>
+#include <boost/detail/interlocked.hpp>
 #include <algorithm>
 
 #if defined( BOOST_USE_WINDOWS_H )
 # include <windows.h>
+
 namespace boost
 {
     namespace detail
@@ -146,6 +148,8 @@
 # error "Win32 functions not available"
 #endif
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost
 {
     namespace detail
@@ -277,5 +281,117 @@
     }
 }
 
+#if defined(BOOST_MSVC) && (_MSC_VER>=1400) && !defined(UNDER_CE)
+#if _MSC_VER==1400
+extern "C" unsigned char _interlockedbittestandset(long *a,long b);
+extern "C" unsigned char _interlockedbittestandreset(long *a,long b);
+#else
+extern "C" unsigned char _interlockedbittestandset(volatile long *a,long b);
+extern "C" unsigned char _interlockedbittestandreset(volatile long *a,long b);
+#endif
+
+#pragma intrinsic(_interlockedbittestandset)
+#pragma intrinsic(_interlockedbittestandreset)
+
+namespace boost
+{
+ namespace detail
+ {
+ namespace win32
+ {
+ inline bool interlocked_bit_test_and_set(long* x,long bit)
+ {
+ return _interlockedbittestandset(x,bit)!=0;
+ }
+
+ inline bool interlocked_bit_test_and_reset(long* x,long bit)
+ {
+ return _interlockedbittestandreset(x,bit)!=0;
+ }
+
+ }
+ }
+}
+#define BOOST_THREAD_BTS_DEFINED
+#elif (defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN)) && defined(_M_IX86)
+namespace boost
+{
+ namespace detail
+ {
+ namespace win32
+ {
+ inline bool interlocked_bit_test_and_set(long* x,long bit)
+ {
+ __asm {
+ mov eax,bit;
+ mov edx,x;
+ lock bts [edx],eax;
+ setc al;
+ };
+ }
+
+ inline bool interlocked_bit_test_and_reset(long* x,long bit)
+ {
+ __asm {
+ mov eax,bit;
+ mov edx,x;
+ lock btr [edx],eax;
+ setc al;
+ };
+ }
+
+ }
+ }
+}
+#define BOOST_THREAD_BTS_DEFINED
+#endif
+
+#ifndef BOOST_THREAD_BTS_DEFINED
+
+namespace boost
+{
+ namespace detail
+ {
+ namespace win32
+ {
+ inline bool interlocked_bit_test_and_set(long* x,long bit)
+ {
+ long const value=1<<bit;
+ long old=*x;
+ do
+ {
+ long const current=BOOST_INTERLOCKED_COMPARE_EXCHANGE(x,old|value,old);
+ if(current==old)
+ {
+ break;
+ }
+ old=current;
+ }
+ while(true);
+ return (old&value)!=0;
+ }
+
+ inline bool interlocked_bit_test_and_reset(long* x,long bit)
+ {
+ long const value=1<<bit;
+ long old=*x;
+ do
+ {
+ long const current=BOOST_INTERLOCKED_COMPARE_EXCHANGE(x,old&~value,old);
+ if(current==old)
+ {
+ break;
+ }
+ old=current;
+ }
+ while(true);
+ return (old&value)!=0;
+ }
+ }
+ }
+}
+#endif
+
+#include <boost/config/abi_suffix.hpp>
 
 #endif

Deleted: branches/CMake/release/boost/thread/win32/tss.hpp
==============================================================================
--- branches/CMake/release/boost/thread/win32/tss.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
+++ (empty file)
@@ -1,103 +0,0 @@
-#ifndef BOOST_THREAD_WIN32_TSS_HPP
-#define BOOST_THREAD_WIN32_TSS_HPP
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-// (C) Copyright 2007 Anthony Williams
-
-#include <boost/shared_ptr.hpp>
-#include "thread_heap_alloc.hpp"
-
-namespace boost
-{
- namespace detail
- {
- struct tss_cleanup_function
- {
- virtual ~tss_cleanup_function()
- {}
-
- virtual void operator()(void* data)=0;
- };
-
- BOOST_THREAD_DECL void set_tss_data(void const* key,boost::shared_ptr<tss_cleanup_function> func,void* tss_data,bool cleanup_existing);
- BOOST_THREAD_DECL void* get_tss_data(void const* key);
- }
-
- template <typename T>
- class thread_specific_ptr
- {
- private:
- thread_specific_ptr(thread_specific_ptr&);
- thread_specific_ptr& operator=(thread_specific_ptr&);
-
- struct delete_data:
- detail::tss_cleanup_function
- {
- void operator()(void* data)
- {
- delete static_cast<T*>(data);
- }
- };
-
- struct run_custom_cleanup_function:
- detail::tss_cleanup_function
- {
- void (*cleanup_function)(T*);
-
- explicit run_custom_cleanup_function(void (*cleanup_function_)(T*)):
- cleanup_function(cleanup_function_)
- {}
-
- void operator()(void* data)
- {
- cleanup_function(static_cast<T*>(data));
- }
- };
-
-
- boost::shared_ptr<detail::tss_cleanup_function> cleanup;
-
- public:
- thread_specific_ptr():
- cleanup(detail::heap_new<delete_data>(),detail::do_heap_delete<delete_data>())
- {}
- explicit thread_specific_ptr(void (*func_)(T*)):
- cleanup(detail::heap_new<run_custom_cleanup_function>(func_),detail::do_heap_delete<run_custom_cleanup_function>())
- {}
- ~thread_specific_ptr()
- {
- reset();
- }
-
- T* get() const
- {
- return static_cast<T*>(detail::get_tss_data(this));
- }
- T* operator->() const
- {
- return get();
- }
- T& operator*() const
- {
- return *get();
- }
- T* release()
- {
- T* const temp=get();
- detail::set_tss_data(this,boost::shared_ptr<detail::tss_cleanup_function>(),0,false);
- return temp;
- }
- void reset(T* new_value=0)
- {
- T* const current_value=get();
- if(current_value!=new_value)
- {
- detail::set_tss_data(this,cleanup,new_value,true);
- }
- }
- };
-}
-
-
-#endif

Modified: branches/CMake/release/boost/thread/xtime.hpp
==============================================================================
--- branches/CMake/release/boost/thread/xtime.hpp (original)
+++ branches/CMake/release/boost/thread/xtime.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // Copyright (C) 2001-2003
 // William E. Kempf
-// Copyright (C) 2007 Anthony Williams
+// Copyright (C) 2007-8 Anthony Williams
 //
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -14,6 +14,8 @@
 #include <boost/thread/thread_time.hpp>
 #include <boost/date_time/posix_time/conversion.hpp>
 
+#include <boost/config/abi_prefix.hpp>
+
 namespace boost {
 
 enum xtime_clock_types
@@ -56,7 +58,7 @@
 
 inline xtime get_xtime(boost::system_time const& abs_time)
 {
- xtime res={0};
+ xtime res;
     boost::posix_time::time_duration const time_since_epoch=abs_time-boost::posix_time::from_time_t(0);
             
     res.sec=static_cast<xtime::xtime_sec_t>(time_since_epoch.total_seconds());
@@ -85,4 +87,6 @@
 
 } // namespace boost
 
+#include <boost/config/abi_suffix.hpp>
+
 #endif //BOOST_XTIME_WEK070601_HPP

Modified: branches/CMake/release/boost/tuple/detail/tuple_basic.hpp
==============================================================================
--- branches/CMake/release/boost/tuple/detail/tuple_basic.hpp (original)
+++ branches/CMake/release/boost/tuple/detail/tuple_basic.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // tuple_basic.hpp -----------------------------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/tuple/detail/tuple_basic_no_partial_spec.hpp
==============================================================================
--- branches/CMake/release/boost/tuple/detail/tuple_basic_no_partial_spec.hpp (original)
+++ branches/CMake/release/boost/tuple/detail/tuple_basic_no_partial_spec.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // - tuple_basic_no_partial_spec.hpp -----------------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2001 Douglas Gregor (gregod_at_[hidden])
 // Copyright (C) 2001 Gary Powell (gary.powell_at_[hidden])
 //

Modified: branches/CMake/release/boost/tuple/tuple.hpp
==============================================================================
--- branches/CMake/release/boost/tuple/tuple.hpp (original)
+++ branches/CMake/release/boost/tuple/tuple.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // tuple.hpp - Boost Tuple Library --------------------------------------
 
-// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/CMake/release/boost/tuple/tuple_comparison.hpp
==============================================================================
--- branches/CMake/release/boost/tuple/tuple_comparison.hpp (original)
+++ branches/CMake/release/boost/tuple/tuple_comparison.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // tuple_comparison.hpp -----------------------------------------------------
 //
-// Copyright (C) 2001 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 2001 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // Copyright (C) 2001 Gary Powell (gary.powell_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See

Modified: branches/CMake/release/boost/tuple/tuple_io.hpp
==============================================================================
--- branches/CMake/release/boost/tuple/tuple_io.hpp (original)
+++ branches/CMake/release/boost/tuple/tuple_io.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,6 @@
 // tuple_io.hpp --------------------------------------------------------------
 
-// Copyright (C) 2001 Jaakko Järvi (jaakko.jarvi_at_[hidden])
+// Copyright (C) 2001 Jaakko Jarvi (jaakko.jarvi_at_[hidden])
 // 2001 Gary Powell (gary.powell_at_[hidden])
 //
 // Distributed under the Boost Software License, Version 1.0. (See

Modified: branches/CMake/release/boost/utility/addressof.hpp
==============================================================================
--- branches/CMake/release/boost/utility/addressof.hpp (original)
+++ branches/CMake/release/boost/utility/addressof.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,6 +1,7 @@
 // Copyright (C) 2002 Brad King (brad.king_at_[hidden])
 // Douglas Gregor (gregod_at_[hidden])
-// Peter Dimov
+//
+// Copyright (C) 2002, 2008 Peter Dimov
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -14,27 +15,31 @@
 # include <boost/config.hpp>
 # include <boost/detail/workaround.hpp>
 
-namespace boost {
-
-// Do not make addressof() inline. Breaks MSVC 7. (Peter Dimov)
+namespace boost
+{
 
-// VC7 strips const from nested classes unless we add indirection here
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+namespace detail
+{
 
-template<class T> struct _addp
+template<class T> struct addressof_impl
 {
- typedef T * type;
+ static inline T * f( T & v, long )
+ {
+ return reinterpret_cast<T*>(
+ &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
+ }
+
+ static inline T * f( T * v, int )
+ {
+ return v;
+ }
 };
-
-template <typename T> typename _addp<T>::type
 
-# else
-template <typename T> T*
-# endif
-addressof(T& v)
+} // namespace detail
+
+template<class T> T * addressof( T & v )
 {
- return reinterpret_cast<T*>(
- &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
+ return boost::detail::addressof_impl<T>::f( v, 0 );
 }
 
 // Borland doesn't like casting an array reference to a char reference
@@ -53,6 +58,6 @@
 }
 # endif
 
-}
+} // namespace boost
 
 #endif // BOOST_UTILITY_ADDRESSOF_HPP

Modified: branches/CMake/release/boost/utility/enable_if.hpp
==============================================================================
--- branches/CMake/release/boost/utility/enable_if.hpp (original)
+++ branches/CMake/release/boost/utility/enable_if.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -6,7 +6,7 @@
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
-// Authors: Jaakko Järvi (jajarvi at osl.iu.edu)
+// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
 // Jeremiah Willcock (jewillco at osl.iu.edu)
 // Andrew Lumsdaine (lums at osl.iu.edu)
 

Modified: branches/CMake/release/boost/utility/value_init.hpp
==============================================================================
--- branches/CMake/release/boost/utility/value_init.hpp (original)
+++ branches/CMake/release/boost/utility/value_init.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -1,4 +1,4 @@
-// (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
@@ -6,29 +6,20 @@
 //
 // 21 Ago 2002 (Created) Fernando Cacciola
 // 24 Dec 2007 (Refactored and worked around various compiler bugs) Fernando Cacciola, Niels Dekker
+// 23 May 2008 (Fixed operator= const issue, added initialized_value) Niels Dekker, Fernando Cacciola
 //
 #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>
+#include <boost/static_assert.hpp>
 #include <boost/type_traits/cv_traits.hpp>
 #include <boost/type_traits/alignment_of.hpp>
 #include <cstring>
@@ -48,23 +39,32 @@
       remove_const<T>::type data;
     };
 
- mutable aligned_storage<sizeof(wrapper), alignment_of<wrapper>::value> x;
+ mutable
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+ typename
+#endif
+ aligned_storage<sizeof(wrapper), alignment_of<wrapper>::value>::type x;
+
+ wrapper * wrapper_address() const
+ {
+ return static_cast<wrapper *>( static_cast<void*>(&x));
+ }
 
   public :
 
     value_initialized()
     {
- std::memset(x.address(), 0, sizeof(x));
+ std::memset(&x, 0, sizeof(x));
 #ifdef BOOST_MSVC
 #pragma warning(push)
 #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
- new (x.address()) wrapper();
+ new (wrapper_address()) wrapper();
 #ifdef BOOST_MSVC
 #pragma warning(pop)
 #endif
@@ -72,25 +72,25 @@
 
     value_initialized(value_initialized const & arg)
     {
- new (x.address()) wrapper( *static_cast<wrapper const *>(arg.x.address()) );
+ new (wrapper_address()) wrapper( static_cast<wrapper const &>(*(arg.wrapper_address())));
     }
 
     value_initialized & operator=(value_initialized const & arg)
     {
- T & this_data = this->data();
- T const & arg_data = arg.data();
- this_data = arg_data;
+ // Assignment is only allowed when T is non-const.
+ BOOST_STATIC_ASSERT( ! is_const<T>::value );
+ *wrapper_address() = static_cast<wrapper const &>(*(arg.wrapper_address()));
       return *this;
     }
 
     ~value_initialized()
     {
- static_cast<wrapper *>(x.address())->wrapper::~wrapper();
+ wrapper_address()->wrapper::~wrapper();
     }
 
     T& data() const
     {
- return static_cast<wrapper *>(x.address())->data;
+ return wrapper_address()->data;
     }
 
     operator T&() const { return this->data(); }
@@ -110,6 +110,20 @@
   return x.data() ;
 }
 
+
+class initialized_value_t
+{
+ public :
+
+ template <class T> operator T() const
+ {
+ return get( value_initialized<T>() );
+ }
+};
+
+initialized_value_t const initialized_value = {} ;
+
+
 } // namespace boost
 
 

Modified: branches/CMake/release/boost/version.hpp
==============================================================================
--- branches/CMake/release/boost/version.hpp (original)
+++ branches/CMake/release/boost/version.hpp 2008-06-29 10:40:47 EDT (Sun, 29 Jun 2008)
@@ -15,19 +15,19 @@
 // will cause a recompile every time a new boost version is
 // released.
 //
-// BOOST_VERSION % 100 is the sub-minor version
+// BOOST_VERSION % 100 is the patch level
 // BOOST_VERSION / 100 % 1000 is the minor version
 // BOOST_VERSION / 100000 is the major version
 
-#define BOOST_VERSION 103501
+#define BOOST_VERSION 103600
 
 //
 // BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
-// but as a *string* in the form "x_y" where x is the major version
-// number and y is the minor version number. This is used by
-// <config/auto_link.hpp> to select which library version to link to.
+// but as a *string* in the form "x_y[_z]" where x is the major version
+// number, y is the minor version number, and z is the patch level if not 0.
+// This is used by <config/auto_link.hpp> to select which library version to link to.
 
-#define BOOST_LIB_VERSION "1_35_1"
+#define BOOST_LIB_VERSION "1_36"
 
 #endif
 


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