From f57c914b8fd083603cf65f16a7b1cfb62a0e6372 Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Tue, 22 Jul 2003 00:06:41 +0000 Subject: [PATCH] Preparation for delivering nicely-formatted error messages in Boost.Python. The major change is that, instead of being boost::function2, py_function is now a runtime-polymorphic wrapper for compile-time polymorphic behavior (just like function) of our own which carries more information/behaviors. In particular, you can retrieve an array of c-strings describing the types in the function signature. Additionally, the minimum and maximum arity are stored in the py_function object instead of in the 'function' object which wraps it. * data_members.hpp - Adjustments for the new py_function. Workarounds for CodeWarrior Pro 8.3 bugs in function template argument deduction with pointers-to-members. * has_back_reference.hpp, test/back_reference.cpp, test/select_holder.cpp - Updated to follow the metafunction protocol * init.hpp, detail/defaults_gen.hpp - Make Keywords a more-specific type in function signatures to prevent string literals that show up as char[N] from binding to the wrong argument (at least Intel 7.1 for Windows does this). * make_function.hpp - Adjustments for the new py_function. Arities are now computed by caller<>. * opaque_pointer_converter.hpp, type_id.hpp - Use BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS facilities; generate specializations that all compilers can handle. * raw_function.hpp - Adjustments for the new py_function. * caller.hpp - Added arity and signature type name reporting. * detail/config.hpp Enable __declspec(dllexport) for Cygwin, thereby fixing the recent horrible Cygwin linking problems. * detail/msvc_typeinfo.hpp - Always pass boost::type* explicitly, thereby working around incompatible notions of how to specialize function templates with default arguments on various compilers. * object/function.hpp , object/function_handle.hpp , object/function_object.hpp , object/function_object.cpp Adjustments for the new py_function. Arities are carried by py_function. * object/iterator.hpp, object/iterator.cpp Adjustments for the new py_function; we have to compute a signature of types to construct it with. * object/py_function.hpp Removed dependency on boost::function; see the comment at the top of this entry for more details. * object/select_holder.hpp Clean up to more closely follow MPL idioms. * test/Jamfile - Adjust the embedding test for the new Cygwin use of declspec. Update bases and pointee tests with missing properties. * test/input_iterator.cpp - Updates for the new iterator adaptors. * test/opaque.py - Add Python encoding comment to suppress PendinDeprecationWarning with recent Python builds. * test/str.cpp Pass a Python long instead of a float to string.expandtabs, suppressing a PendinDeprecationWarning with recent Python builds. * libs/utility/counting_iterator_example.cpp Borland workaround * libs/utility/indirect_iterator_example.cpp const-correctness fix. * [SVN r19247] --- counting_iterator_example.cpp | 11 ++++++++--- indirect_iterator_example.cpp | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/counting_iterator_example.cpp b/counting_iterator_example.cpp index 7b77992..b85188a 100644 --- a/counting_iterator_example.cpp +++ b/counting_iterator_example.cpp @@ -44,11 +44,16 @@ int main(int, char*[]) std::cout << std::endl; // Example of using counting iterator to create an array of pointers. - const int N = 7; +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) + const +#endif + int N = 7; std::vector numbers; // Fill "numbers" array with [0,N) - std::copy(boost::make_counting_iterator(0), boost::make_counting_iterator(N), - std::back_inserter(numbers)); + std::copy( + boost::make_counting_iterator(0) + , boost::make_counting_iterator(N) + , std::back_inserter(numbers)); std::vector::iterator> pointers; diff --git a/indirect_iterator_example.cpp b/indirect_iterator_example.cpp index 22d1a21..d78f9f8 100644 --- a/indirect_iterator_example.cpp +++ b/indirect_iterator_example.cpp @@ -72,7 +72,7 @@ int main(int, char*[]) boost::indirect_iterator mutable_indirect_first(pointers_to_mutable_chars), mutable_indirect_last(pointers_to_mutable_chars + N); - boost::indirect_iterator const_indirect_first(pointers_to_chars), + boost::indirect_iterator const_indirect_first(pointers_to_chars), const_indirect_last(pointers_to_chars + N); std::transform(const_indirect_first, const_indirect_last,