2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-19 16:32:16 +00:00

Compare commits

...

1308 Commits

Author SHA1 Message Date
Eric Niebler
7772b8894f Merged revisions 43810-43907 via svnmerge from
https://svn.boost.org/svn/boost/trunk

................
  r43810 | eric_niebler | 2008-03-23 14:51:40 -0700 (Sun, 23 Mar 2008) | 1 line
  
  mark up new foreach tests
................
  r43823 | fmhess | 2008-03-24 08:07:00 -0700 (Mon, 24 Mar 2008) | 3 lines
  
  Fixed compile error with new enable_shared_from_this code,
  reported by Tim Blechmann 
................
  r43825 | ramey | 2008-03-24 08:46:09 -0700 (Mon, 24 Mar 2008) | 1 line
  
  removed EXIT_SUCCESS
................
  r43826 | ramey | 2008-03-24 08:46:43 -0700 (Mon, 24 Mar 2008) | 1 line
  
  fixed minor typo
................
  r43829 | pdimov | 2008-03-24 09:00:28 -0700 (Mon, 24 Mar 2008) | 1 line
  
  New enable_shared_from_this tests, fix.
................
  r43838 | danieljames | 2008-03-24 10:03:15 -0700 (Mon, 24 Mar 2008) | 12 lines
  
  Merge new changes to unordered & hash.
  
   - Unordered tests can run lightweight test or Boost.Test (at least
     theoretically).
   - Workaround Open BSD's incorrect numeric_limits.
   - Move the hash extensions in their own file.
   - Various small improvements to the unordered docs.
   - Fix some unordered examples.
  
  Merged revisions 43117-43837 via svnmerge from 
  https://svn.boost.org/svn/boost/branches/unordered/trunk
................
  r43845 | dave | 2008-03-24 11:27:22 -0700 (Mon, 24 Mar 2008) | 1 line
  
  Work around vc9 bugs
................
  r43847 | anthonyw | 2008-03-24 14:44:36 -0700 (Mon, 24 Mar 2008) | 1 line
  
  removed forward declaration for undefined type exclusive_lock
................
  r43852 | hkaiser | 2008-03-25 06:40:53 -0700 (Tue, 25 Mar 2008) | 1 line
  
  Wave: Removed an assertion causing compilation problems on certain platforms.
................
  r43856 | pdimov | 2008-03-25 08:46:40 -0700 (Tue, 25 Mar 2008) | 1 line
  
  _internal_accept_owner now checks if _owned isn't already true.
................
  r43861 | dave | 2008-03-25 13:47:38 -0700 (Tue, 25 Mar 2008) | 2 lines
  
  Work around intel-10.0-win compiler bug
................
  r43864 | dave | 2008-03-25 15:28:59 -0700 (Tue, 25 Mar 2008) | 2 lines
  
  Account for intel 10.x compiler bug
................
  r43865 | dave | 2008-03-25 16:06:50 -0700 (Tue, 25 Mar 2008) | 2 lines
  
  Work around intel-win-10.0 preprocessor bug
................
  r43866 | danieljames | 2008-03-26 02:10:29 -0700 (Wed, 26 Mar 2008) | 3 lines
  
  Boost.Thread's documentation no longer has a build section - so just link to
  the library's documentation like we do for other libraries.
................
  r43867 | bemandawes | 2008-03-26 08:59:52 -0700 (Wed, 26 Mar 2008) | 1 line
  
  Initial commit
................
  r43873 | pdimov | 2008-03-26 11:34:29 -0700 (Wed, 26 Mar 2008) | 1 line
  
  Added "Throws: nothing" to get_deleter.
................
  r43875 | bemandawes | 2008-03-26 14:26:55 -0700 (Wed, 26 Mar 2008) | 1 line
  
  Initial commit
................
  r43876 | danieljames | 2008-03-26 22:49:45 -0700 (Wed, 26 Mar 2008) | 2 lines
  
  Update the thread links in the generated getting started documentation.
................
  r43879 | chris_kohlhoff | 2008-03-27 07:18:07 -0700 (Thu, 27 Mar 2008) | 3 lines
  
  Fix double-free error that occurs when an exception is thrown from a
  handler that has been dispatched (i.e. not posted) through a strand.
................
  r43880 | ramey | 2008-03-27 08:53:37 -0700 (Thu, 27 Mar 2008) | 1 line
  
  removed suppression of builds for certain platforms with shared libraries
................
  r43882 | ramey | 2008-03-27 10:11:23 -0700 (Thu, 27 Mar 2008) | 1 line
  
  tweaks to sneak past PGI compiler error message
................
  r43883 | ramey | 2008-03-27 10:12:22 -0700 (Thu, 27 Mar 2008) | 1 line
  
  added test to check warnings on type trait
................
  r43884 | dgregor | 2008-03-27 12:44:37 -0700 (Thu, 27 Mar 2008) | 1 line
  
  Change Boost.Function allocator behavior, from Emil Dotchevski
................
  r43887 | pdimov | 2008-03-27 15:13:55 -0700 (Thu, 27 Mar 2008) | 1 line
  
  Silence unused parameter warning.
................
  r43888 | pdimov | 2008-03-27 15:20:11 -0700 (Thu, 27 Mar 2008) | 1 line
  
  detail::yield(k) added.
................
  r43895 | danieljames | 2008-03-27 16:38:01 -0700 (Thu, 27 Mar 2008) | 25 lines
  
  Merged revisions 43838-43894 via svnmerge from 
  https://svn.boost.org/svn/boost/branches/unordered/trunk
  
  ........
    r43840 | danieljames | 2008-03-24 17:25:07 +0000 (Mon, 24 Mar 2008) | 1 line
    
    Fix a g++ warning.
  ........
    r43844 | danieljames | 2008-03-24 17:56:28 +0000 (Mon, 24 Mar 2008) | 1 line
    
    It's a new-ish year.
  ........
    r43885 | danieljames | 2008-03-27 20:36:10 +0000 (Thu, 27 Mar 2008) | 1 line
    
    The release script doesn't need to copy images and css - because that's now done in the jamfiles. Also tweak the shell script a tad bit.
  ........
    r43890 | danieljames | 2008-03-27 23:01:40 +0000 (Thu, 27 Mar 2008) | 1 line
    
    Starting to add a docbook bibliography.
  ........
    r43894 | danieljames | 2008-03-27 23:24:18 +0000 (Thu, 27 Mar 2008) | 1 line
    
    Redeclare 'data' in iterator_base to help compilers which have trouble with accessing the nested typedef.
  ........
................
  r43900 | noel_belcourt | 2008-03-27 19:10:04 -0700 (Thu, 27 Mar 2008) | 4 lines
  
  Fix address-model support for 32/64 bit code generation.
  Replaced -mcmodel with -m32 / -m64.
................
  r43901 | bemandawes | 2008-03-27 19:11:13 -0700 (Thu, 27 Mar 2008) | 1 line
  
  Remove per email from Dave
................
  r43906 | eric_niebler | 2008-03-27 23:10:55 -0700 (Thu, 27 Mar 2008) | 1 line
  
  proto support for BOOST_PROTO_MAX_FUNCTION_CALL_ARITY
................


[SVN r43910]
2008-03-28 14:52:50 +00:00
Eric Niebler
18de881748 huh
[SVN r43907]
2008-03-28 06:39:09 +00:00
Eric Niebler
c63980b7ea Merged revisions 43533-43552 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r43534 | eric_niebler | 2008-03-06 23:37:46 -0800 (Thu, 06 Mar 2008) | 1 line
  
  fix oops
........
  r43535 | hkaiser | 2008-03-07 05:26:53 -0800 (Fri, 07 Mar 2008) | 1 line
  
  Wave: more fixes for #1673
........
  r43537 | vladimir_prus | 2008-03-07 08:18:13 -0800 (Fri, 07 Mar 2008) | 1 line
  
  Fix PCH on OSX
........
  r43538 | eric_niebler | 2008-03-07 09:46:38 -0800 (Fri, 07 Mar 2008) | 1 line
  
  use a __pragma to disable a msvc warning, fixes #1672
........
  r43539 | eric_niebler | 2008-03-07 09:47:40 -0800 (Fri, 07 Mar 2008) | 1 line
  
  fix oops
........
  r43540 | hkaiser | 2008-03-07 11:51:26 -0800 (Fri, 07 Mar 2008) | 1 line
  
  Wave: Started to add testing of preprocessor hooks.
........
  r43541 | grafik | 2008-03-07 13:59:06 -0800 (Fri, 07 Mar 2008) | 1 line
  
  Disable exception testing line as it's breaking testing.
........
  r43542 | hkaiser | 2008-03-07 14:53:13 -0800 (Fri, 07 Mar 2008) | 1 line
  
  Wave: Applied a workaround for Intel compilers and for Pathscale.
........
  r43544 | emildotchevski | 2008-03-07 15:07:13 -0800 (Fri, 07 Mar 2008) | 1 line
  
  Hooking up boost exception for testing, second attempt.
........
  r43546 | rwgk | 2008-03-08 20:30:13 -0800 (Sat, 08 Mar 2008) | 1 line
  
  map std::invalid_argument -> Python ValueError
........


[SVN r43554]
2008-03-10 20:14:31 +00:00
Eric Niebler
1cea4d0d21 Merged revisions 42451-43517 via svnmerge from
https://svn.boost.org/svn/boost/trunk

................
  r42455 | johnmaddock | 2008-01-04 08:54:35 -0800 (Fri, 04 Jan 2008) | 1 line
  
  Fix typos.
................
  r42456 | eric_niebler | 2008-01-04 09:14:53 -0800 (Fri, 04 Jan 2008) | 1 line
  
  mark up borland and sun accumulators failures
................
  r42459 | andreas_huber69 | 2008-01-04 10:23:18 -0800 (Fri, 04 Jan 2008) | 1 line
  
  This should fix template parameter shadowing errors for gcc and Intel compilers.
................
  r42462 | bgubenko | 2008-01-04 15:55:43 -0800 (Fri, 04 Jan 2008) | 1 line
  
  mark Accumulators tests for gcc 4.2.1 affected by GCC Bugzilla Bug 33580
................
  r42471 | turkanis | 2008-01-04 20:51:49 -0800 (Fri, 04 Jan 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 42441-42469; added 'std::' for Intel on Linux/Darwin; added STDCXX workaround for codecvt; fixed docs for invert.hpp
................
  r42473 | turkanis | 2008-01-04 23:35:44 -0800 (Fri, 04 Jan 2008) | 1 line
  
  new iostreams expected failures: stream_offset_64bit_test.cpp on Borland, and wide stream tests on gcc-3.4.2_hpux_pa_risc
................
  r42475 | andreas_huber69 | 2008-01-05 04:42:02 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Added defaults for in_state_reaction template parameters and updated tests accordingly.
................
  r42476 | bemandawes | 2008-01-05 06:41:55 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Disable Microsoft "secure" overloads in Dinkumware libraries since they cause compile errors with Intel versions 9 and 10
................
  r42478 | jurko | 2008-01-05 07:19:53 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Typo corrections. Minor stylistic changes.
................
  r42479 | jurko | 2008-01-05 08:53:03 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Updated Boost.Jam command line option texts. Minor stylistic changes.
................
  r42480 | jurko | 2008-01-05 08:55:36 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Typo corrections. Minor stylistic changes.
................
  r42481 | jurko | 2008-01-05 08:56:42 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Typo correction. Corrected an invalid command-line option name.
................
  r42482 | jurko | 2008-01-05 08:57:17 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Corrected an invalid command-line option name reference.
................
  r42483 | jurko | 2008-01-05 08:58:01 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Corrected an out-of-date comment listing all command-line options.
................
  r42484 | jurko | 2008-01-05 09:11:50 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Corrected the used file suffix for the VERBATIM file type. Now the documentation is in sync with the 'customization' example. This also closes the Trac ticket 134. Minor stylistic changes.
................
  r42485 | jurko | 2008-01-05 09:46:45 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Stylistic comment changes & typo corrections.
................
  r42486 | jurko | 2008-01-05 09:52:31 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Stylistic comment changes & typo corrections in several files. Corrected an incorrect error message in boost-build/build/project.jam displayed when a --build-dir command-line option and a non top-level project build-dir attribute are specified.
................
  r42487 | jurko | 2008-01-05 09:54:02 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Cleaned up some import rule calls.
................
  r42488 | jurko | 2008-01-05 10:02:23 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Documentation wording cleaned up a bit.
................
  r42489 | jurko | 2008-01-05 10:13:10 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Removed or simplified some import calls. Comment updates. Minor stylistic changes.
................
  r42490 | jurko | 2008-01-05 10:14:20 -0800 (Sat, 05 Jan 2008) | 2 lines
  
  Simplified the used make rules. Removed some dead code. Minor stylistic changes.
................
  r42492 | jurko | 2008-01-05 10:29:36 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Removed trailing spaces and some empty lines.
................
  r42494 | jurko | 2008-01-05 12:02:24 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Minor stylistic changes such as: comment typo corrections, wrapping lines to 80 characters, indentations, removing trailing spaces, etc.
................
  r42495 | jurko | 2008-01-05 12:06:15 -0800 (Sat, 05 Jan 2008) | 2 lines
  
  Cleaned up where the stage module is imported in tools/builtin.jam. Added a missing import in tools/stage.jam that causes errors with the previous fix. Minor stylistic changes in tools/stage.jam.
................
  r42496 | jurko | 2008-01-05 12:14:48 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Comment cleanup.
................
  r42497 | jurko | 2008-01-05 12:37:44 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Minor stylistic changes - cleaned up import calls, wrapped much text at 80 characters updated comments, typo corrections, removed trailing spaces, etc.
................
  r42498 | jurko | 2008-01-05 12:48:50 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Renamed some Jamfile and project-root.jam references to Jamfile.jam and Jamroot.jam respectively.
................
  r42499 | jurko | 2008-01-05 13:37:15 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Test code cleaned up a bit. No functional changes.
................
  r42502 | hkaiser | 2008-01-05 14:44:28 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Wave: updated copyright messages to include the year 2008 (merged from release branch).
................
  r42504 | jurko | 2008-01-05 15:18:17 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Refactored the test into two separate test functions. Made the 'directory names with dots' test use the expect_output_line() tool instead of a manual find, causing a better diagnostic to be displayed in case of a failure. Made one of the test Jam scripts more compact. Made the test use the Jamroot.jam file instead of project-root.jam.
................
  r42505 | bgubenko | 2008-01-05 15:35:05 -0800 (Sat, 05 Jan 2008) | 1 line
  
  mark up accumulators library test weighted_kurtosis for acc toolset
................
  r42506 | jurko | 2008-01-05 16:25:48 -0800 (Sat, 05 Jan 2008) | 1 line
  
  No functional changes but only stylistic changes such as: comment typo corrections, wrapping lines to 80 characters, indentations, removing trailing spaces, removing empty lines, made tests use Jamfile.jam and Jamroot.jam Boost Build script names, removed unnecessary module imports, etc.
................
  r42507 | jurko | 2008-01-05 16:53:09 -0800 (Sat, 05 Jan 2008) | 1 line
  
  No functional changes but only stylistic changes such as: comment typo corrections, wrapping lines to 80 characters, indentations, removing trailing spaces, removing empty lines, removed unnecessary module imports, etc.
................
  r42508 | jurko | 2008-01-05 22:15:39 -0800 (Sat, 05 Jan 2008) | 5 lines
  
  Refactored build-system.jam. Added many detailed comments.
  
  Test configuration module now gets loaded the same as all other configuration modules.
  
  In addition to being able to specify which user configuration to load, user may now also prevent loading the user configuration by specifying an empty file name for it.
................
  r42509 | jurko | 2008-01-05 22:50:56 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Added a --test-config command-line option for specifying where the test configuration file should be loaded from instead of always being looked up in Boost Build's test folder. This allows non-test builds to not use test config when it exists on the system and different tests to use different test configurations when needed.
................
  r42510 | jurko | 2008-01-05 22:58:24 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Specifying that a build uses test configuration no longer prevents toolset auto-configuration and therefore no longer causes --toolset options to be ignored.
................
  r42511 | jurko | 2008-01-05 23:13:28 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Minor stylistic comment changes.
................
  r42512 | jurko | 2008-01-05 23:17:08 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Added support for choosing the toolset and toolset version to be used 'by default' by Boost Build. Allows testing of default toolset functionality.
................
  r42513 | jurko | 2008-01-05 23:26:46 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Upgraded the tool for testing that a certain line exists in the given output support so that it now also knows how to test that a certain line does not exist in the given output.
................
  r42514 | jurko | 2008-01-05 23:28:47 -0800 (Sat, 05 Jan 2008) | 1 line
  
  Added the --ignore-site-config option telling Boost.Build not to load the site configuration file.
................
  r42516 | jurko | 2008-01-06 00:16:34 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Stylistic changes: typo corrections, comment alignments, output string updates, no functional changes, etc.
................
  r42527 | andreas_huber69 | 2008-01-06 05:49:31 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Various doc updates.
................
  r42528 | danieljames | 2008-01-06 08:47:16 -0800 (Sun, 06 Jan 2008) | 2 lines
  
  Add Boost.Unordered and add to the documentation. Not fully integrated yet.
................
  r42529 | danieljames | 2008-01-06 08:48:36 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Add more libraries that use Boost.Hash to its intro.
................
  r42530 | danieljames | 2008-01-06 08:49:11 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Add Boost.Unordered to Boost.Hash's intro.
................
  r42531 | danieljames | 2008-01-06 08:59:18 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Combine the 'container' and 'unordered' tests.
................
  r42532 | danieljames | 2008-01-06 08:59:49 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Give the unordered exception test suite its own name.
................
  r42533 | danieljames | 2008-01-06 09:13:15 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Add the contents of compile_tests.cpp to set_compile.cpp and map_compile.cpp
................
  r42534 | danieljames | 2008-01-06 09:16:51 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Rename the test-suites to match other libraries' style.
................
  r42535 | danieljames | 2008-01-06 09:23:16 -0800 (Sun, 06 Jan 2008) | 2 lines
  
  Add forwarding html files for Boost.Unordered.
................
  r42536 | danieljames | 2008-01-06 09:40:32 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Add Boost.Unordered to the regression tests.
................
  r42537 | eric_niebler | 2008-01-06 09:44:06 -0800 (Sun, 06 Jan 2008) | 1 line
  
  add myself as maintainer of accumulators
................
  r42538 | danieljames | 2008-01-06 09:45:18 -0800 (Sun, 06 Jan 2008) | 2 lines
  
  Add library identification.
................
  r42539 | danieljames | 2008-01-06 09:48:11 -0800 (Sun, 06 Jan 2008) | 2 lines
  
  Add the unordered library to the maintainers list.
................
  r42540 | danieljames | 2008-01-06 09:56:06 -0800 (Sun, 06 Jan 2008) | 2 lines
  
  Add unordered to the library list.
................
  r42544 | turkanis | 2008-01-06 10:32:05 -0800 (Sun, 06 Jan 2008) | 18 lines
  
  copy.hpp: 
  
      fix for Visual Age: std::min was passed arguments of different types; replaced std:: min with conditional
  
  detail/streambuf/indirect_streambuf.hpp: 
  
      removed trailing comma in enum definition
  
  test/combine_test.cpp:
  test/symmetric_filter_test.cpp:
  test/compose_test.cpp:
  test/close_test.cpp:
  test/invert_test.cpp:
  test/tee_test.cpp:
  test/restrict_test.cpp:
  test/Jamfile.v2:
  
      moved tests for close() into the test files for various adapters
................
  r42546 | jurko | 2008-01-06 12:06:33 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Corrected a bug with the customized default toolset being read from the toolset module but defined in the build-system module. Effect was that customized default toolsets were getting ignored.
................
  r42547 | jurko | 2008-01-06 12:37:55 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Simple code cleanup. Typo corrections.
................
  r42548 | jurko | 2008-01-06 12:43:25 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Added support for tests configuring whether they want their Boost Build to ignore toolset requirements instead of always ignoring them. Minor stylistic changes.
................
  r42549 | jurko | 2008-01-06 12:56:20 -0800 (Sun, 06 Jan 2008) | 1 line
  
  Added new tests related to Boost Build's default toolset handling. They test that the correct default toolset gets use and that when it gets used that has no different status than any other explicitly specified toolset.
................
  r42563 | turkanis | 2008-01-06 17:26:52 -0800 (Sun, 06 Jan 2008) | 1 line
  
  marked restrict_test.cpp as failing on vacpp and stream_offset_64bit_test as failing on sun (iostreams)
................
  r42564 | turkanis | 2008-01-06 17:32:29 -0800 (Sun, 06 Jan 2008) | 1 line
  
  alphabetized the iostreams failures
................
  r42565 | turkanis | 2008-01-06 21:20:32 -0800 (Sun, 06 Jan 2008) | 5 lines
  
  merged changes from branches/iostreams_dev, revisions 42544-42544
  
  - added "slice" as an alias for "restrict", for platforms on which "restrict" is a keyword
  - attempted to configure file_descriptor for __IBMCPP__
  - added better error output to stream_offset_64bit_test.cpp
................
  r42566 | jurko | 2008-01-07 09:00:59 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Corrected explicitly specified user-config file handling. Was not looking for the specified file in the regular path instead of the current folder and did not work with absolute paths.
................
  r42567 | jurko | 2008-01-07 10:15:13 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Code cleanup. Converted to using True/False instead of 1/0. Changed to obey documented coding conventions regarding whitespace and function parameters. Renamed private member functions to use the __ name prefix.
................
  r42568 | jurko | 2008-01-07 10:38:28 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Added a new configuration test making sure that the bug with not being able to process absolute user-config configuration file references never rears its ugly head again.
................
  r42570 | eric_niebler | 2008-01-07 11:06:31 -0800 (Mon, 07 Jan 2008) | 1 line
  
  s/order/tail/
................
  r42571 | eric_niebler | 2008-01-07 11:08:16 -0800 (Mon, 07 Jan 2008) | 1 line
  
  add missing includes, fix signed/unsigned warnings, clean-up trailing whitespace, fixes #1552
................
  r42572 | danieljames | 2008-01-07 11:40:32 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Rename the exception tests so that they don't clash with the normal tests.
................
  r42573 | danieljames | 2008-01-07 11:41:05 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Remove some development code.
................
  r42575 | danieljames | 2008-01-07 11:44:13 -0800 (Mon, 07 Jan 2008) | 3 lines
  
  Add missing 'use namespace std'. Which I should have done when I was told about
  them before. Sorry.
................
  r42576 | danieljames | 2008-01-07 11:46:27 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Add support for multiple copyrights in the library info.
................
  r42578 | danieljames | 2008-01-07 11:51:02 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Reneame the set and map compile tests so they'll be adjacent in the test results.
................
  r42580 | danieljames | 2008-01-07 12:06:15 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Avoid some uses of an invalid pointer.
................
  r42581 | danieljames | 2008-01-07 12:07:12 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Use the default location for the reference documentation.
................
  r42587 | danieljames | 2008-01-07 13:05:42 -0800 (Mon, 07 Jan 2008) | 5 lines
  
  Fix a bug which was causing the memory area stuff to fail.
  
  I should probably try to be less clever and use memory area's lower
  bounds as the key, and do the extra work required to get that working.
................
  r42588 | danieljames | 2008-01-07 13:07:43 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Fix an off by one error.
................
  r42591 | danieljames | 2008-01-07 13:47:24 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Merge in spell check.
................
  r42596 | turkanis | 2008-01-07 15:13:26 -0800 (Mon, 07 Jan 2008) | 5 lines
  
  merged changes from branches/iostreams_dev, revisions 42565-42595:
  
  - Simplified implementation with the help to the C-runtime function _get_osfhandle so that on Windows only a single HANDLE is stored and the POSIX-style implementation is never needed; added the handle_type on POSIX systems (typedef for int) and a function returning the underlying handle as an instance of handle_type
  - fixed the bug described in ticket Ticket #1551 (stream_buffer::seekpos ignores openmode parameter)
  - fixed test/operation_sequence_test.cpp file description
................
  r42598 | grafik | 2008-01-07 18:49:25 -0800 (Mon, 07 Jan 2008) | 1 line
  
  Mostly fix bad path calc for direct html from doxygen doc generation. (fixes #1562)
................
  r42600 | turkanis | 2008-01-07 19:49:23 -0800 (Mon, 07 Jan 2008) | 1 line
  
  merged changes from branches/iostreams_dev revisions 42595-42599; applied Dinkumware implementation of positioning functions to IBM Visual Age; simplified and corrected implementation
................
  r42602 | turkanis | 2008-01-07 20:20:38 -0800 (Mon, 07 Jan 2008) | 1 line
  
  removed unneeded headers, one of which (restrict.hpp) causes failures on IBM Visual Age
................
  r42603 | turkanis | 2008-01-07 20:52:54 -0800 (Mon, 07 Jan 2008) | 1 line
  
  removed spurious '.cpp' extension from test names (iostreams)
................
  r42612 | danieljames | 2008-01-08 05:59:01 -0800 (Tue, 08 Jan 2008) | 3 lines
  
  Merge in latest unordered developments (revisions 42607-42611).
................
  r42613 | jurko | 2008-01-08 06:40:24 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Added a new test making sure properties conditioned on multiple different feature values are handled correctly. This especially includes testing the case when one of those features is <toolset> and the value given for it includes a toolset version.
................
  r42614 | jurko | 2008-01-08 07:21:15 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Made some debugging messages more consistent.
................
  r42615 | eric_niebler | 2008-01-08 09:42:20 -0800 (Tue, 08 Jan 2008) | 1 line
  
  support for LaTeX formulas in Doxygen comments
................
  r42616 | eric_niebler | 2008-01-08 09:43:34 -0800 (Tue, 08 Jan 2008) | 1 line
  
  automatically generate png files from LaTeX formulas using doxygen
................
  r42617 | jurko | 2008-01-08 09:51:30 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Comment correction.
................
  r42619 | danieljames | 2008-01-08 10:15:01 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Merge: Another missing 'using namespace std'
................
  r42620 | eric_niebler | 2008-01-08 10:43:43 -0800 (Tue, 08 Jan 2008) | 1 line
  
  fix signed/unsigned warnings, clean up trailing whitespace
................
  r42624 | eric_niebler | 2008-01-08 13:40:52 -0800 (Tue, 08 Jan 2008) | 1 line
  
  disable iterator debugging for all msvc versions
................
  r42625 | turkanis | 2008-01-08 14:25:01 -0800 (Tue, 08 Jan 2008) | 1 line
  
  merged changes from branches/iostreams_dev, revisions 42602-42624: adding missing included to fix #1550; fix for positioning on IBM; fix for file_descriptor on POSIX; restructed the version range for the Borland workaround in large_file_test.cpp
................
  r42626 | jurko | 2008-01-08 17:09:26 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Minor stylistic code indentation changes.
................
  r42627 | jurko | 2008-01-08 17:11:03 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Tried trailing spaces. Minor comment typo corrections.
................
  r42628 | jurko | 2008-01-08 17:18:38 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Remove trailing spaces. Removed an empty line.
................
  r42629 | jurko | 2008-01-08 20:05:29 -0800 (Tue, 08 Jan 2008) | 8 lines
  
  Updated the __ACTION_RULE__ to not return its action command output as a single string but instead split it into a list of output lines. This allows Jam code using this output to work correctly independently of what newline character combinations are in use. This was causing problems with Boost Build unit tests which can now be updated to pass.
  
  Consequences & checks:
    * Final __ACTION_RULE__ rule parameter has changed from output ? to output-lines *.
    * Updated corresponding Jam documentation.
    * Updated the all related Boost Build code.
    * No code on the Boost trunk uses this rule except for Boost Build itself.
................
  r42630 | jurko | 2008-01-08 20:15:35 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Fixed a failing test by making it access action output using the __ACTION_RULE__ rule so it would not be affected by the level of debug output given by Boost Build/Jam.
................
  r42631 | jurko | 2008-01-08 20:30:25 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Fixed a failing test by making it access its action results using the __ACTION_RULE__ rule. Now it works with the default debug level settings (i.e. no action output displayed).
................
  r42632 | grafik | 2008-01-08 20:31:58 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Revert various changes that break backward compatibility, and also some minor edits.
................
  r42633 | grafik | 2008-01-08 20:34:12 -0800 (Tue, 08 Jan 2008) | 1 line
  
  Revert various changes that break backward compatibility, and also some minor edits.
................
  r42637 | jurko | 2008-01-09 06:36:37 -0800 (Wed, 09 Jan 2008) | 1 line
  
  Updated the test so it passes on Windows. Had to change it to enable action output logging and compensate for the fact that now action names are sent to the output as well. Minor stylistic changes.
................
  r42639 | jurko | 2008-01-09 09:03:45 -0800 (Wed, 09 Jan 2008) | 1 line
  
  Updated the test so it passes on Windows. Had to change it to enable action output logging and compensate for the fact that now action names are sent to the output as well. Minor stylistic changes.
................
  r42641 | eric_niebler | 2008-01-09 12:21:51 -0800 (Wed, 09 Jan 2008) | 1 line
  
  copy the png files to where fop will look for them when building pdf
................
  r42642 | eric_niebler | 2008-01-09 12:33:05 -0800 (Wed, 09 Jan 2008) | 1 line
  
  fix more signed/unsigned warnings
................
  r42644 | turkanis | 2008-01-09 15:13:57 -0800 (Wed, 09 Jan 2008) | 1 line
  
  marked stream_offset_64bit_test as an expected failure on vacpp (iostreams)
................
  r42645 | turkanis | 2008-01-09 15:16:17 -0800 (Wed, 09 Jan 2008) | 1 line
  
  replaced 2 occurrences of the identifier 'restrict' with BOOST_IOSTREAMS_RESTRICT
................
  r42646 | turkanis | 2008-01-09 19:27:51 -0800 (Wed, 09 Jan 2008) | 1 line
  
  added expected failures for Sun and IBM; removed a Borland intermittent failure; removed some obsolete toolsets (iostreams)
................
  r42647 | troyer | 2008-01-10 01:49:16 -0800 (Thu, 10 Jan 2008) | 1 line
  
  Optimizations for Boost.MPI
................
  r42648 | troyer | 2008-01-10 03:54:36 -0800 (Thu, 10 Jan 2008) | 1 line
  
  Undid backward-compatibility breaking change in pair serialization
................
  r42651 | johnmaddock | 2008-01-10 04:10:37 -0800 (Thu, 10 Jan 2008) | 1 line
  
  Apply patch from Issue #1187.
................
  r42657 | anthonyw | 2008-01-10 06:19:36 -0800 (Thu, 10 Jan 2008) | 1 line
  
  removed references to NULL
................
  r42658 | turkanis | 2008-01-10 10:50:19 -0800 (Thu, 10 Jan 2008) | 1 line
  
  marked up two moe expected failures for sun-5.7-5.8 (iostreams)
................
  r42664 | bgubenko | 2008-01-10 13:13:42 -0800 (Thu, 10 Jan 2008) | 1 line
  
  marked iostreams library compose_test for gcc-3.4.6_linux_ia64 : linking exceeds 10 min. limit
................
  r42665 | danieljames | 2008-01-10 14:25:35 -0800 (Thu, 10 Jan 2008) | 2 lines
  
  Initialise svnmerge for merging changes for unordered.
................
  r42666 | danieljames | 2008-01-10 14:30:46 -0800 (Thu, 10 Jan 2008) | 6 lines
  
  Merge latest unordered developments:
  
  Make simple_test test a little more.
  Use doubles for calculating max load factor.
  Some workarounds, mostly for Borland and running the tests.
................
  r42670 | turkanis | 2008-01-10 16:02:36 -0800 (Thu, 10 Jan 2008) | 1 line
  
  merged changes from branches/iostreams_dev, revisions 42645=42660; fix for Intel-darwin; removed dependence of file_descriptor_test and mapped_file_test on library boost_iostreams
................
  r42672 | turkanis | 2008-01-10 17:35:46 -0800 (Thu, 10 Jan 2008) | 1 line
  
  force static runtime-link for intel-darwin
................
  r42674 | johnmaddock | 2008-01-11 01:55:43 -0800 (Fri, 11 Jan 2008) | 1 line
  
  Fix bugs reported by Will Drewry: certain invalid regexes can cause the library to access invalid memory, changed to ensure that the correct exception is thrown long before this happens.
................
  r42676 | jurko | 2008-01-11 05:44:51 -0800 (Fri, 11 Jan 2008) | 1 line
  
  Removed the manual boost-build.jam file creation since that file already exists in the SVN repository and this only overwrote it with the same content minus the copyright notice. Removed a reference to the no longer existing boost_build_v2.html file.
................
  r42677 | johnmaddock | 2008-01-11 05:48:57 -0800 (Fri, 11 Jan 2008) | 1 line
  
  Update for Intel-10.1.
................
  r42684 | turkanis | 2008-01-11 11:12:22 -0800 (Fri, 11 Jan 2008) | 1 line
  
  another attempt to fix linking for compression tests on intel-darwin
................
  r42688 | turkanis | 2008-01-11 14:58:21 -0800 (Fri, 11 Jan 2008) | 1 line
  
  merged changes from iostreams_dev; fixes for IBM and more documentation
................
  r42689 | turkanis | 2008-01-11 18:45:55 -0800 (Fri, 11 Jan 2008) | 1 line
  
  more detailed note for vacpp (iostreams)
................
  r42691 | eric_niebler | 2008-01-11 22:43:28 -0800 (Fri, 11 Jan 2008) | 1 line
  
  new style transforms a-la proto v3
................
  r42693 | nesotto | 2008-01-12 04:38:57 -0800 (Sat, 12 Jan 2008) | 1 line
  
  doc fixes
................
  r42698 | danieljames | 2008-01-12 06:43:40 -0800 (Sat, 12 Jan 2008) | 9 lines
  
  Merge the latest unordered changes. These are concerned with getting the tests
  working on more compilers. The biggest change is that the exception tests have
  been changed to use a very simple exception testing mechanism on top of
  lightweight_test. This was because Boost.Test exception testing isn't working
  on several platforms. I'm trying to set this up so that I can use Boost.Test on
  compilers which it completely supports, and lightweight test on others.
  Boost.Test tests more than my simple exception testing code ever will so it's
  worth using where I can.
................
  r42700 | eric_niebler | 2008-01-12 09:09:17 -0800 (Sat, 12 Jan 2008) | 1 line
  
  missing includes
................
  r42701 | eric_niebler | 2008-01-12 09:40:40 -0800 (Sat, 12 Jan 2008) | 1 line
  
  more msvc-7.1-friendly default_context implementation, more missing headers
................
  r42706 | turkanis | 2008-01-12 12:19:42 -0800 (Sat, 12 Jan 2008) | 1 line
  
  corrected use of feature detection macros for AIX; simplified implementation slightly; updated docs
................
  r42707 | turkanis | 2008-01-12 12:20:35 -0800 (Sat, 12 Jan 2008) | 1 line
  
  removed intel-darwin sepcific code, since it didn't work
................
  r42708 | eric_niebler | 2008-01-12 13:19:45 -0800 (Sat, 12 Jan 2008) | 1 line
  
  port toy_spirit example to proto v3
................
  r42713 | turkanis | 2008-01-12 23:17:07 -0800 (Sat, 12 Jan 2008) | 1 line
  
  improved docs
................
  r42715 | nesotto | 2008-01-13 03:37:41 -0800 (Sun, 13 Jan 2008) | 1 line
  
  fixed #if to #ifdef
................
  r42722 | bgubenko | 2008-01-13 07:52:12 -0800 (Sun, 13 Jan 2008) | 1 line
  
  better note for iostreams library test compose_test on gcc-3.4.6_linux_ia64
................
  r42723 | bgubenko | 2008-01-13 08:12:37 -0800 (Sun, 13 Jan 2008) | 1 line
  
  marked up random library test random_test for gcc-3.4.6_linux_ia64
................
  r42724 | danieljames | 2008-01-13 08:19:26 -0800 (Sun, 13 Jan 2008) | 3 lines
  
  Merge in latest changes to Boost.Unordered. Some compiler workarounds and
  starting to clean up the tests a little.
................
  r42729 | eric_niebler | 2008-01-13 11:39:54 -0800 (Sun, 13 Jan 2008) | 1 line
  
  work around msvc-7.1 bug
................
  r42741 | eric_niebler | 2008-01-13 13:56:56 -0800 (Sun, 13 Jan 2008) | 1 line
  
  boost template instantiation depth on darwin
................
  r42745 | johnmaddock | 2008-01-14 01:46:12 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Ooops, fix broken escape sequence.
................
  r42747 | johnmaddock | 2008-01-14 01:58:36 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Fix documentation typos.
................
  r42750 | chris_kohlhoff | 2008-01-14 05:13:35 -0800 (Mon, 14 Jan 2008) | 2 lines
  
  Fix concept name in comment.
................
  r42751 | johnmaddock | 2008-01-14 05:17:09 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Patch regex concept checks and TR1 library to work with VC9 + MS TR1 feature pack.
................
  r42752 | chris_kohlhoff | 2008-01-14 05:20:06 -0800 (Mon, 14 Jan 2008) | 2 lines
  
  Add missing broken pipe error.
................
  r42753 | chris_kohlhoff | 2008-01-14 05:21:37 -0800 (Mon, 14 Jan 2008) | 3 lines
  
  Don't include sys/time.h when compiling with aCC, as that header does not
  supply pselect(), which is needed for HP-UX/aCC to work correctly.
................
  r42754 | chris_kohlhoff | 2008-01-14 05:22:21 -0800 (Mon, 14 Jan 2008) | 2 lines
  
  Disable noisy and incorrect /Wp64 warnings generated by MSVC.
................
  r42755 | chris_kohlhoff | 2008-01-14 05:24:28 -0800 (Mon, 14 Jan 2008) | 3 lines
  
  Don't call epoll_wait/kevent if there are no old operations (where old means
  added prior to the last epoll_wait/kevent call) needing to be demultiplexed.
................
  r42756 | chris_kohlhoff | 2008-01-14 05:25:24 -0800 (Mon, 14 Jan 2008) | 2 lines
  
  Silence some integer truncation warnings.
................
  r42758 | chris_kohlhoff | 2008-01-14 05:27:52 -0800 (Mon, 14 Jan 2008) | 8 lines
  
  Silence some integer truncation warnings.
  
  Only perform the windows-bug workaround where we use a short timeout with
  GetQueuedCompletionStatus from one thread, i.e. the timer thread.
  
  Keep track of the number of OVERLAPPED-derived operations to ensure that
  they all get cleaned up when the io_service is destroyed.
................
  r42759 | chris_kohlhoff | 2008-01-14 05:29:08 -0800 (Mon, 14 Jan 2008) | 5 lines
  
  Check for truncation when converting buffer size from size_t to openssl's
  int argument.
  
  Try to fix possible thread-safety issues in SSL wrapper.
................
  r42766 | eric_niebler | 2008-01-14 08:49:32 -0800 (Mon, 14 Jan 2008) | 1 line
  
  register mpl::bool_ with typeof
................
  r42767 | dgregor | 2008-01-14 09:01:26 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Improved suggestion for dealing with Qt MOC, from Niels Dekker
................
  r42771 | niels_dekker | 2008-01-14 10:17:30 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Documented value_init workaround to compiler issues, added new introduction, updated to 2003 edition of C++ Standard -- reviewed by Fernando Cacciola
................
  r42773 | guwi17 | 2008-01-14 11:04:43 -0800 (Mon, 14 Jan 2008) | 2 lines
  
  - fixed typo
................
  r42776 | eric_niebler | 2008-01-14 12:26:58 -0800 (Mon, 14 Jan 2008) | 1 line
  
  add skip(), for specifying a skip regex
................
  r42778 | turkanis | 2008-01-14 12:47:17 -0800 (Mon, 14 Jan 2008) | 1 line
  
  overhaul of dual_use filters: close() is now called just once; suppressed Borland/Dinkumware warnings in mapped_file.hpp
................
  r42779 | niels_dekker | 2008-01-14 13:46:20 -0800 (Mon, 14 Jan 2008) | 1 line
  
  Minor "beautifications" of value_init documentation, inc. placing references in order of appearance
................
  r42780 | lbourdev | 2008-01-14 14:06:07 -0800 (Mon, 14 Jan 2008) | 3 lines
  
  Changed size_t to std::size_t
................
  r42781 | lbourdev | 2008-01-14 15:25:10 -0800 (Mon, 14 Jan 2008) | 3 lines
  
  GIL: Changing size_t to std::size_t
................
  r42788 | eric_niebler | 2008-01-14 22:46:39 -0800 (Mon, 14 Jan 2008) | 1 line
  
  code clean-up, begin updating the transform section in proto's docs
................
  r42789 | eric_niebler | 2008-01-14 23:46:51 -0800 (Mon, 14 Jan 2008) | 1 line
  
  try disabling iterator debugging for intel-win toolset
................
  r42797 | t_schwinger | 2008-01-15 11:46:10 -0800 (Tue, 15 Jan 2008) | 3 lines
  
  adds missing #include
................
  r42798 | niels_dekker | 2008-01-15 11:53:28 -0800 (Tue, 15 Jan 2008) | 1 line
  
  value_init doc + test: Added revision date.
................
  r42801 | jurko | 2008-01-15 13:13:52 -0800 (Tue, 15 Jan 2008) | 1 line
  
  Minor stylistic comment changes. Removed trailing spaces.
................
  r42804 | eric_niebler | 2008-01-15 14:06:51 -0800 (Tue, 15 Jan 2008) | 1 line
  
  document call<>, make<> and bind<>
................
  r42807 | turkanis | 2008-01-15 14:54:40 -0800 (Tue, 15 Jan 2008) | 1 line
  
  rewrote treatment of result_of in terms of a new (hopefully temporary) config macro BOOST_IOSTREAMS_NO_RESULT_OF; fixed docs
................
  r42811 | turkanis | 2008-01-15 17:14:04 -0800 (Tue, 15 Jan 2008) | 1 line
  
  reverted last change except for doc fixes; regression was result of test runner's local patch
................
  r42813 | turkanis | 2008-01-15 17:16:36 -0800 (Tue, 15 Jan 2008) | 1 line
  
  botched last commit
................
  r42814 | djenkins | 2008-01-15 22:39:34 -0800 (Tue, 15 Jan 2008) | 1 line
  
  missing include
................
  r42815 | niels_dekker | 2008-01-16 01:35:12 -0800 (Wed, 16 Jan 2008) | 1 line
  
  Added convenience class initialized_value, as announced at http://article.gmane.org/gmane.comp.lib.boost.devel/169833
................
  r42816 | niels_dekker | 2008-01-16 01:37:25 -0800 (Wed, 16 Jan 2008) | 1 line
  
  Added test and documentation for convenience class initialized_value, that was added with changeset [42815]
................
  r42817 | chris_kohlhoff | 2008-01-16 05:46:01 -0800 (Wed, 16 Jan 2008) | 2 lines
  
  Set the openssl callback function for getting a thread ID.
................
  r42818 | anthonyw | 2008-01-16 07:23:36 -0800 (Wed, 16 Jan 2008) | 1 line
  
  Provide tss_cleanup_implemented as a dummy function on Windows CE to allow tests to run
................
  r42821 | t_schwinger | 2008-01-16 11:16:37 -0800 (Wed, 16 Jan 2008) | 3 lines
  
  works around MSVC7.1 problems (hopefully)
................
  r42822 | t_schwinger | 2008-01-16 11:17:09 -0800 (Wed, 16 Jan 2008) | 3 lines
  
  attempts to fix Borland regressions
................
  r42823 | eric_niebler | 2008-01-16 11:24:33 -0800 (Wed, 16 Jan 2008) | 1 line
  
  document when<> and is_callable<>
................
  r42825 | turkanis | 2008-01-16 12:46:56 -0800 (Wed, 16 Jan 2008) | 1 line
  
  replaced __IBMCPP__ with _AIX
................
  r42827 | turkanis | 2008-01-16 16:50:14 -0800 (Wed, 16 Jan 2008) | 1 line
  
  added pgi to toolsets expected to fail seekawble_file_test (iostreams)
................
  r42836 | eric_niebler | 2008-01-17 14:47:54 -0800 (Thu, 17 Jan 2008) | 1 line
  
  stl_iterator does better error handling
................
  r42837 | jurko | 2008-01-17 17:14:17 -0800 (Thu, 17 Jan 2008) | 1 line
  
  Stylistic changes. Removed trailing spaces. Removed empty lines. Corrected comment typos and wording.
................
  r42839 | eric_niebler | 2008-01-17 23:56:31 -0800 (Thu, 17 Jan 2008) | 1 line
  
  tweaks for better doxygen-ated output
................
  r42840 | eric_niebler | 2008-01-17 23:56:59 -0800 (Thu, 17 Jan 2008) | 1 line
  
  updated reference section
................
  r42841 | eric_niebler | 2008-01-17 23:58:48 -0800 (Thu, 17 Jan 2008) | 1 line
  
  add back reference section, document user-defined transforms
................
  r42843 | t_schwinger | 2008-01-18 06:37:41 -0800 (Fri, 18 Jan 2008) | 3 lines
  
  makes member object support work with BCC
................
  r42851 | johnmaddock | 2008-01-18 08:56:57 -0800 (Fri, 18 Jan 2008) | 1 line
  
  Add needed <iostream> include.
................
  r42852 | johnmaddock | 2008-01-18 09:05:35 -0800 (Fri, 18 Jan 2008) | 1 line
  
  We don't have a tr1::hash functor if the std lib is the Apache version.
................
  r42853 | hkaiser | 2008-01-18 09:56:53 -0800 (Fri, 18 Jan 2008) | 1 line
  
  Wave: removed T_DEFINED token id from the library.
................
  r42855 | johnmaddock | 2008-01-18 10:18:17 -0800 (Fri, 18 Jan 2008) | 1 line
  
  Needs to #include <cstring> in order to use std::memset.
................
  r42856 | danieljames | 2008-01-18 11:35:55 -0800 (Fri, 18 Jan 2008) | 2 lines
  
  Merge in some changes to the unordered tests.
................
  r42857 | t_schwinger | 2008-01-18 12:05:56 -0800 (Fri, 18 Jan 2008) | 3 lines
  
  simplifies function_types markup
................
  r42858 | t_schwinger | 2008-01-18 12:52:06 -0800 (Fri, 18 Jan 2008) | 3 lines
  
  attempts to fix BCB 5.9 regression in synthesis/mem_func_ptr_cv_ptr_to_this test
................
  r42859 | t_schwinger | 2008-01-18 13:06:44 -0800 (Fri, 18 Jan 2008) | 3 lines
  
  attempts to fix pathscale failure 
................
  r42868 | niels_dekker | 2008-01-19 12:21:18 -0800 (Sat, 19 Jan 2008) | 1 line
  
  value_init_test now works around Borland 5.82 bug ("Error E2015: Ambiguity..." when using initialized_value), that is fixed with a newer compiler version
................
  r42869 | niels_dekker | 2008-01-19 12:52:04 -0800 (Sat, 19 Jan 2008) | 1 line
  
  Removed local named variable from     value_initialized::operator=, as Fernando Cacciola suggested me to avoid unnecessary named variables.
................
  r42873 | bemandawes | 2008-01-19 18:01:35 -0800 (Sat, 19 Jan 2008) | 1 line
  
  Remove extraneous defines since they are inherited from library build Jamfile
................
  r42877 | johnmaddock | 2008-01-20 01:42:35 -0800 (Sun, 20 Jan 2008) | 1 line
  
  Add include of <eh.h> for msvc.
................
  r42878 | igaztanaga | 2008-01-20 03:54:47 -0800 (Sun, 20 Jan 2008) | 5 lines
  
  Updated Interprocess and Intrusive:
  
  -> Added linear slist to intrusive
  -> Updated all allocators to version 2 allocators in Interprocess
  -> Optimized rbtree_best_fit size overhead to 1 std:size_t.
................
  r42881 | danieljames | 2008-01-20 09:37:21 -0800 (Sun, 20 Jan 2008) | 1 line
  
  Include <new> to get std::bad_alloc.
................
  r42882 | danieljames | 2008-01-20 10:55:57 -0800 (Sun, 20 Jan 2008) | 22 lines
  
  Merged revisions 42856-42881 via svnmerge from 
  https://svn.boost.org/svn/boost/branches/unordered/trunk
  
  ........
    r42880 | danieljames | 2008-01-20 16:10:43 +0000 (Sun, 20 Jan 2008) | 17 lines
    
    Simplify the tests a little:
    
    Add a parameter to random_values to control what sort of values it generates.
    This means that instead of using equivalent_object to test collisions (which
    was a total hack) we now just need another parameter.
    
    This requires some meta programming to act differently for maps and sets.
    Because of this pairs no longer need to be generated so remove the code for
    doing that (which doesn't work on some compilers).
    
    Remove the generator object, just call generate directly.
    
    Remove some of the tests using int containers, they didn't really add to
    anthing other than the compile time (some tests are timing out).
  ........
................
  r42884 | jurko | 2008-01-20 12:18:50 -0800 (Sun, 20 Jan 2008) | 5 lines
  
  Minor stylistic changes:
    * Removed trailing spaces.
    * Added a comment for code discovering the user's home-directories.
    * Removed a stale regex import.
    * Removed an old corpse 'identity' rule found inside the __test__ rule.
................
  r42890 | johnmaddock | 2008-01-21 01:41:17 -0800 (Mon, 21 Jan 2008) | 1 line
  
  Only disable wide character support for HP aCC: for gcc the logic is already taken care of in libstdcpp3.hpp.
................
  r42897 | hkaiser | 2008-01-21 08:13:31 -0800 (Mon, 21 Jan 2008) | 1 line
  
  Removed a duplicate entry.
................
  r42898 | rogeeff | 2008-01-21 09:02:53 -0800 (Mon, 21 Jan 2008) | 1 line
  
  changed output of booleans
................
  r42899 | johnmaddock | 2008-01-21 10:11:09 -0800 (Mon, 21 Jan 2008) | 1 line
  
  Updated type traits library so that everything compiles with -Wall -pedantic with GCC.
................
  r42904 | davedeakins | 2008-01-21 11:38:44 -0800 (Mon, 21 Jan 2008) | 1 line
  
  Don't include <eh.h> for WinCE (since WinCE does not have this header)
................
  r42906 | eric_niebler | 2008-01-21 12:39:35 -0800 (Mon, 21 Jan 2008) | 1 line
  
  minor clean-up
................
  r42909 | rogeeff | 2008-01-21 19:41:23 -0800 (Mon, 21 Jan 2008) | 1 line
  
  missing header
................
  r42911 | igaztanaga | 2008-01-22 08:49:22 -0800 (Tue, 22 Jan 2008) | 1 line
  
  Refactor some allocation code and fix instantiation problem in 64 bit platforms
................
  r42916 | eric_niebler | 2008-01-22 12:42:18 -0800 (Tue, 22 Jan 2008) | 1 line
  
  add concepts section to proto reference
................
  r42917 | hljin | 2008-01-22 14:10:48 -0800 (Tue, 22 Jan 2008) | 1 line
  
  GIL: fixed the problem with std::hex by adding #include <ios>
................
  r42918 | eric_niebler | 2008-01-22 18:23:15 -0800 (Tue, 22 Jan 2008) | 1 line
  
  proto works with boost 1.34.1
................
  r42929 | johnmaddock | 2008-01-23 08:08:44 -0800 (Wed, 23 Jan 2008) | 1 line
  
  Applies fix for issue #1598: added missing #include.
................
  r42931 | igaztanaga | 2008-01-23 11:34:39 -0800 (Wed, 23 Jan 2008) | 1 line
  
  Ticket #1593: [interprocess] 'streamoff' : is not a member of 'std'
................
  r42934 | andreas_huber69 | 2008-01-23 13:46:58 -0800 (Wed, 23 Jan 2008) | 1 line
  
  Fixes #1594
................
  r42935 | eric_niebler | 2008-01-23 13:57:47 -0800 (Wed, 23 Jan 2008) | 1 line
  
  fix dependency issue in Jamfile
................
  r42938 | jano_gaspar | 2008-01-23 15:04:57 -0800 (Wed, 23 Jan 2008) | 1 line
  
  circular_buffer: updated documentation
................
  r42939 | eric_niebler | 2008-01-23 15:25:24 -0800 (Wed, 23 Jan 2008) | 1 line
  
  fix quickbook scanner to recognize the [import ...] block
................
  r42943 | danieljames | 2008-01-23 15:39:59 -0800 (Wed, 23 Jan 2008) | 60 lines
  
  Merged revisions 42882-42941 via svnmerge from 
  https://svn.boost.org/svn/boost/branches/unordered/trunk
  
  ................
    r42887 | danieljames | 2008-01-20 21:32:04 +0000 (Sun, 20 Jan 2008) | 10 lines
    
    Merged revisions 42590-42664,42667-42697,42699-42723,42725-42855,42857-42881 via svnmerge from 
    https://svn.boost.org/svn/boost/trunk
    
    ........
      r42881 | danieljames | 2008-01-20 17:37:21 +0000 (Sun, 20 Jan 2008) | 1 line
      
      Include <new> to get std::bad_alloc.
    ........
  ................
    r42892 | danieljames | 2008-01-21 13:03:16 +0000 (Mon, 21 Jan 2008) | 1 line
    
    On some compilers the Rogue Wave/Apache stdcxx library doesn't have the normal std::distance, but instead has a variant that takes the result as the third parameter so it doesn't have to work out the type from the iterator.
  ................
    r42893 | danieljames | 2008-01-21 13:07:58 +0000 (Mon, 21 Jan 2008) | 1 line
    
    Fix a typo in the last commit.
  ................
    r42895 | danieljames | 2008-01-21 13:33:29 +0000 (Mon, 21 Jan 2008) | 1 line
    
    Remove tabs from the last checkin.
  ................
    r42896 | danieljames | 2008-01-21 15:51:40 +0000 (Mon, 21 Jan 2008) | 1 line
    
    Use Boost config to tell when we have a std::distance function. Also, no need for a macro.
  ................
    r42908 | danieljames | 2008-01-21 21:37:04 +0000 (Mon, 21 Jan 2008) | 1 line
    
    Use boost::long_long_type and boost::ulong_long_type.
  ................
    r42921 | danieljames | 2008-01-23 11:43:35 +0000 (Wed, 23 Jan 2008) | 1 line
    
    Remove some tabs.
  ................
    r42922 | danieljames | 2008-01-23 11:46:28 +0000 (Wed, 23 Jan 2008) | 2 lines
    
    Add missing include. Refs #1596
  ................
    r42923 | danieljames | 2008-01-23 11:52:47 +0000 (Wed, 23 Jan 2008) | 2 lines
    
    Always use void const* for the second parameter of allocate. Refs #1596.
  ................
    r42936 | danieljames | 2008-01-23 22:22:16 +0000 (Wed, 23 Jan 2008) | 1 line
    
    Use Boost style library name in the documentation.
  ................
    r42937 | danieljames | 2008-01-23 22:22:32 +0000 (Wed, 23 Jan 2008) | 1 line
    
    More tabs.
  ................
    r42941 | danieljames | 2008-01-23 23:35:01 +0000 (Wed, 23 Jan 2008) | 1 line
    
    Fix all the allocators.
  ................
................
  r42948 | turkanis | 2008-01-23 22:50:32 -0800 (Wed, 23 Jan 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 42825-42947
................
  r42950 | t_schwinger | 2008-01-24 10:56:27 -0800 (Thu, 24 Jan 2008) | 3 lines
  
  correctsbroken compiler support for MPL
................
  r42951 | eric_niebler | 2008-01-24 13:06:23 -0800 (Thu, 24 Jan 2008) | 1 line
  
  peeker optimization looks inside independent sub-expressions
................
  r42952 | nesotto | 2008-01-24 14:22:35 -0800 (Thu, 24 Jan 2008) | 1 line
  
  test of output iterators
................
  r42953 | nesotto | 2008-01-24 14:26:36 -0800 (Thu, 24 Jan 2008) | 1 line
  
  output iterator test
................
  r42954 | nesotto | 2008-01-24 14:27:27 -0800 (Thu, 24 Jan 2008) | 1 line
  
  output iterators for ptr_containers 
................
  r42957 | t_schwinger | 2008-01-24 16:26:16 -0800 (Thu, 24 Jan 2008) | 3 lines
  
  simplifies preprocessing code
................
  r42958 | t_schwinger | 2008-01-24 16:28:15 -0800 (Thu, 24 Jan 2008) | 3 lines
  
  touched
................
  r42960 | noel_belcourt | 2008-01-24 20:41:16 -0800 (Thu, 24 Jan 2008) | 6 lines
  
  Changed the -soname and -shared options in intel-darwin.jam
  to use -dynamiclib and -install_name, as done in darwin.jam.
  Apparently the Intel compilers on the Mac support the same 
  options as gcc for setting the internal dynamic library name.
................
  r42963 | nesotto | 2008-01-24 23:52:14 -0800 (Thu, 24 Jan 2008) | 1 line
  
  renaming ...
................
  r42964 | nesotto | 2008-01-24 23:52:56 -0800 (Thu, 24 Jan 2008) | 1 line
  
  renaming
................
  r42965 | nesotto | 2008-01-24 23:54:28 -0800 (Thu, 24 Jan 2008) | 1 line
  
  renaming
................
  r42970 | turkanis | 2008-01-25 09:56:25 -0800 (Fri, 25 Jan 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 42947-42962: fixed tickets 1003, 1139, 1140, 1149
................
  r42971 | noel_belcourt | 2008-01-25 11:52:47 -0800 (Fri, 25 Jan 2008) | 2 lines
  
  Fixed a typo to yesterdays patch.
................
  r42972 | dgregor | 2008-01-25 13:07:14 -0800 (Fri, 25 Jan 2008) | 2 lines
  
  Include <ios> to get std::boolalpha. Fixes #1586
................
  r42974 | igaztanaga | 2008-01-25 15:07:51 -0800 (Fri, 25 Jan 2008) | 4 lines
  
  1)Fixed gcc release mode warnings.
  2)Replaced throw with BOOST_RETHROW when BOOST_TRY is used.
  3)Fixed issues with singly linked lists
................
  r42976 | hkaiser | 2008-01-25 17:24:21 -0800 (Fri, 25 Jan 2008) | 2 lines
  
  Wave: Fixed a problem in flex_string::compare() (#include_next was non-functional).
................
  r42977 | hkaiser | 2008-01-25 17:36:20 -0800 (Fri, 25 Jan 2008) | 1 line
  
  Wave: Added new testcase.
................
  r42980 | hkaiser | 2008-01-25 17:44:32 -0800 (Fri, 25 Jan 2008) | 1 line
  
  Wave: Tweaked new testcase.
................
  r42982 | igaztanaga | 2008-01-26 03:52:25 -0800 (Sat, 26 Jan 2008) | 1 line
  
  Refactored common slist functions in a single class
................
  r42984 | noel_belcourt | 2008-01-26 10:35:59 -0800 (Sat, 26 Jan 2008) | 7 lines
  
  Fixes #416
  
  Fixed spelling of Jack Edmonds name and renamed files
  where necessary.  Updated the documentation as well.
  Tested changes by building/running tests in libs/graph/test.
................
  r42985 | noel_belcourt | 2008-01-26 10:51:28 -0800 (Sat, 26 Jan 2008) | 5 lines
  
  Fixes #640
  
  Corrected the mpl push_front html documentation.
................
  r42986 | eric_niebler | 2008-01-26 11:38:44 -0800 (Sat, 26 Jan 2008) | 1 line
  
  optimize repeated searches with patterns that have leading repeats
................
  r42987 | t_schwinger | 2008-01-26 13:50:14 -0800 (Sat, 26 Jan 2008) | 3 lines
  
  attempts to allow some preprocessing with VACPP (IBM)
................
  r42988 | noel_belcourt | 2008-01-26 14:21:57 -0800 (Sat, 26 Jan 2008) | 5 lines
  
  Fixes #1539
  
  Fixed typo in the random documentation.
................
  r42989 | noel_belcourt | 2008-01-26 15:06:24 -0800 (Sat, 26 Jan 2008) | 6 lines
  
  Fixes #965
  
  Patched the XML and will check to ensure the html
  page reflects this change.
................
  r42990 | eric_niebler | 2008-01-26 21:56:46 -0800 (Sat, 26 Jan 2008) | 1 line
  
  updated vcproj
................
  r42991 | eric_niebler | 2008-01-26 21:57:08 -0800 (Sat, 26 Jan 2008) | 1 line
  
  fix typo
................
  r42992 | johnmaddock | 2008-01-27 10:43:35 -0800 (Sun, 27 Jan 2008) | 1 line
  
  Extended leading repeat optimization to more cases.
................
  r42997 | vladimir_prus | 2008-01-28 09:59:27 -0800 (Mon, 28 Jan 2008) | 1 line
  
  Correct speliing of --build-dir in --help output
................
  r43000 | eric_niebler | 2008-01-28 12:03:41 -0800 (Mon, 28 Jan 2008) | 1 line
  
  update acknowledgement of john maddock
................
  r43001 | bgubenko | 2008-01-28 13:27:13 -0800 (Mon, 28 Jan 2008) | 1 line
  
  marked 2 asio library tests for gcc-4.2.1_hpux_ia64 (HP-UX 11.23 with gcc)
................
  r43002 | eric_niebler | 2008-01-28 14:55:30 -0800 (Mon, 28 Jan 2008) | 1 line
  
  doc more concepts, misc clean-up
................
  r43003 | eric_niebler | 2008-01-28 14:56:46 -0800 (Mon, 28 Jan 2008) | 1 line
  
  proto doxygen comments, misc clean-up
................
  r43006 | eric_niebler | 2008-01-28 18:20:45 -0800 (Mon, 28 Jan 2008) | 1 line
  
  more proto doxygen comments, update copyright
................
  r43007 | vladimir_prus | 2008-01-28 22:28:09 -0800 (Mon, 28 Jan 2008) | 1 line
  
  Retain top-level boost-build.jam
................
  r43008 | vladimir_prus | 2008-01-28 22:40:06 -0800 (Mon, 28 Jan 2008) | 4 lines
  
  Disable relinking when <target-os> is either windows or cygwin.
  
  Fixes #1062.
................
  r43009 | eric_niebler | 2008-01-28 23:03:03 -0800 (Mon, 28 Jan 2008) | 1 line
  
  add tests for deep_copy, make_expr, unpack_expr; fix bugs; update more copyrights
................
  r43012 | djenkins | 2008-01-29 08:41:12 -0800 (Tue, 29 Jan 2008) | 1 line
  
  fix typo
................
  r43013 | djenkins | 2008-01-29 08:43:51 -0800 (Tue, 29 Jan 2008) | 1 line
  
  update copyright and misc cleanup
................
  r43014 | bgubenko | 2008-01-29 09:47:01 -0800 (Tue, 29 Jan 2008) | 1 line
  
  marked interprocess library unusable on gcc-4.2.1_hpux_ia64 (until it is ported to HP-UX platform)
................
  r43016 | eric_niebler | 2008-01-29 13:02:52 -0800 (Tue, 29 Jan 2008) | 1 line
  
  make_expr and unpack_expr improvements, fix scary transform::arg_c bug
................
  r43018 | djenkins | 2008-01-29 19:39:02 -0800 (Tue, 29 Jan 2008) | 1 line
  
  use skip directive to simplify example
................
  r43023 | eric_niebler | 2008-01-30 14:10:13 -0800 (Wed, 30 Jan 2008) | 1 line
  
  finally, a make_expr() I can live with
................
  r43024 | eric_niebler | 2008-01-30 14:26:34 -0800 (Wed, 30 Jan 2008) | 1 line
  
  regenerated boostbook reference
................
  r43025 | niels_dekker | 2008-01-30 14:42:23 -0800 (Wed, 30 Jan 2008) | 1 line
  
  value_init: Removed aligned_storage::address() calls, to improve TR1 compatibility, as confirmed by John Maddock. Added internal helper function, wrapper_address(), as discussed with Fernando.
................
  r43026 | eric_niebler | 2008-01-30 15:03:36 -0800 (Wed, 30 Jan 2008) | 1 line
  
  minor tweak to make_expr result_of return type calculation
................
  r43031 | eric_niebler | 2008-01-30 23:36:28 -0800 (Wed, 30 Jan 2008) | 1 line
  
  simplify make_expr.hpp, user docs for make_expr()
................
  r43035 | eric_niebler | 2008-01-31 10:44:17 -0800 (Thu, 31 Jan 2008) | 1 line
  
  minor tweak to fusion value_of and value_at for expressions, for better interop with proto::unpack_expr
................
  r43037 | vladimir_prus | 2008-01-31 11:47:12 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Build in MT mode (as long as wave links to boost.thread)
................
  r43038 | hkaiser | 2008-01-31 12:57:47 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Wave: fixed expanding_function_like_macro()
................
  r43040 | eric_niebler | 2008-01-31 13:12:44 -0800 (Thu, 31 Jan 2008) | 1 line
  
  finish documentation for expression construction utilities
................
  r43041 | hkaiser | 2008-01-31 14:33:43 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Wave: Added additional configuration possibility to allow control threading support.
................
  r43042 | hkaiser | 2008-01-31 14:48:56 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Wave: Added additional configuration possibility to allow control threading support. Updated the documentation.
................
  r43043 | jurko | 2008-01-31 16:27:31 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Reverted changes made in rev 43038 which seem to have been committed by mistake and include some user specific settings in it local to the comitter's environment while this file is intended to be used as generic template for actual user-config.jam files and do nothing in case user does not specify his own settings there.
................
  r43044 | jurko | 2008-01-31 16:44:23 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Minor stylistic spacing changes. Remove trailing spaces.
................
  r43045 | jurko | 2008-01-31 16:46:50 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Corrected outputting native Windows paths so that it works correctly for absolute paths without the drive letter being explicitly specified, e.g. \aaa\bbb or /aaa/bbb.
................
  r43046 | jurko | 2008-01-31 17:49:16 -0800 (Thu, 31 Jan 2008) | 1 line
  
  Added the missing end-of-line character when outputting DEBUG_SEARCH debug messages from file_build1(). This cleans up the -d+6 bjam output a lot.
................
  r43050 | eric_niebler | 2008-02-01 12:30:29 -0800 (Fri, 01 Feb 2008) | 1 line
  
  add future group example
................
  r43052 | noel_belcourt | 2008-02-01 18:41:23 -0800 (Fri, 01 Feb 2008) | 4 lines
  
  Fix a typo in pgi.jam that prevented shared libraries
  from being built correctly.
................
  r43054 | chris_kohlhoff | 2008-02-02 03:37:45 -0800 (Sat, 02 Feb 2008) | 4 lines
  
  Ensure that the workaround for the MSVC secure iterator problem is only
  used when compiling with MSVC. The workaround causes g++'s library debug
  mode to report errors due to the assignment from a singular iterator.
................
  r43055 | chris_kohlhoff | 2008-02-02 03:39:17 -0800 (Sat, 02 Feb 2008) | 2 lines
  
  Fix "possible loss of data" warning when building for Windows 2000 targets.
................
  r43056 | chris_kohlhoff | 2008-02-02 04:02:23 -0800 (Sat, 02 Feb 2008) | 3 lines
  
  The latest Windows SDKs don't support IPv6 when building for Windows 2000,
  so we need to use the SDK emulation in that case.
................
  r43057 | eric_niebler | 2008-02-02 04:27:16 -0800 (Sat, 02 Feb 2008) | 1 line
  
  port test to boost version 1.34.1
................
  r43061 | turkanis | 2008-02-02 14:10:46 -0800 (Sat, 02 Feb 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 42962-43059: updated copyright notices
................
  r43080 | eric_niebler | 2008-02-03 10:40:03 -0800 (Sun, 03 Feb 2008) | 1 line
  
  fix bug found by L. Evans re: fusion and stateful function objects
................
  r43083 | johnmaddock | 2008-02-04 01:13:36 -0800 (Mon, 04 Feb 2008) | 1 line
  
  Added missing file.
................
  r43085 | johnmaddock | 2008-02-04 01:17:35 -0800 (Mon, 04 Feb 2008) | 1 line
  
  Removed dead file.
................
  r43087 | johnmaddock | 2008-02-04 01:20:46 -0800 (Mon, 04 Feb 2008) | 1 line
  
  Removed dead files.
................
  r43089 | johnmaddock | 2008-02-04 01:23:28 -0800 (Mon, 04 Feb 2008) | 1 line
  
  Removed dead files.
................
  r43094 | anthonyw | 2008-02-04 05:16:32 -0800 (Mon, 04 Feb 2008) | 1 line
  
  added test for duration overloads of timed_lock, and added missing implementation to win32 version
................
  r43101 | hkaiser | 2008-02-04 11:21:46 -0800 (Mon, 04 Feb 2008) | 1 line
  
  Wave: trying to fix stdcxx_gcc regression.
................
  r43103 | matias | 2008-02-04 13:01:06 -0800 (Mon, 04 Feb 2008) | 1 line
  
  hooking --> additional information in html docs
................
  r43106 | eric_niebler | 2008-02-04 18:09:51 -0800 (Mon, 04 Feb 2008) | 1 line
  
  fleshing out evaluation.qbk, document transforms of if_, not_, and_ and or_
................
  r43107 | eric_niebler | 2008-02-04 21:33:12 -0800 (Mon, 04 Feb 2008) | 1 line
  
  eliminate warnings under msvc's -W4
................
  r43111 | eric_niebler | 2008-02-04 22:03:01 -0800 (Mon, 04 Feb 2008) | 1 line
  
  fix typo
................
  r43112 | marshall | 2008-02-05 08:07:19 -0800 (Tue, 05 Feb 2008) | 1 line
  
  Fix typo (bug #1434)
................
  r43113 | marshall | 2008-02-05 08:15:35 -0800 (Tue, 05 Feb 2008) | 1 line
  
  Applied patch (fixes bug #1307)
................
  r43117 | dgregor | 2008-02-05 12:51:23 -0800 (Tue, 05 Feb 2008) | 1 line
  
  Fix add_vertex and add_vertices when the CSR graph has vertex properties
................
  r43118 | danieljames | 2008-02-05 12:57:02 -0800 (Tue, 05 Feb 2008) | 13 lines
  
  Merged revisions 42942-43116 via svnmerge from 
  https://svn.boost.org/svn/boost/branches/unordered/trunk
  
  ........
    r42975 | danieljames | 2008-01-26 00:29:32 +0000 (Sat, 26 Jan 2008) | 1 line
    
    Typedef some types before using them, to make life easier for Borland.
  ........
    r43116 | danieljames | 2008-02-05 20:47:44 +0000 (Tue, 05 Feb 2008) | 1 line
    
    Some compilers and libraries combinations have problems with deques of non-assingable types. Using a list instead.
  ........
................
  r43120 | eric_niebler | 2008-02-05 13:07:31 -0800 (Tue, 05 Feb 2008) | 1 line
  
  add missing #include
................
  r43121 | bemandawes | 2008-02-05 18:01:46 -0800 (Tue, 05 Feb 2008) | 1 line
  
  Add circular_buffer to the alphabetic list
................
  r43125 | t_schwinger | 2008-02-06 05:00:08 -0800 (Wed, 06 Feb 2008) | 3 lines
  
  attempts to make synthesis metafunctions work with sun compiler
................
  r43129 | danieljames | 2008-02-06 11:02:38 -0800 (Wed, 06 Feb 2008) | 2 lines
  
  In the boostbook navbar, link FAQ and people to the website.
................
  r43130 | eric_niebler | 2008-02-06 11:57:51 -0800 (Wed, 06 Feb 2008) | 1 line
  
  untabify
................
  r43132 | nesotto | 2008-02-06 14:46:19 -0800 (Wed, 06 Feb 2008) | 1 line
  
  cleanup to pass inspection report
................
  r43133 | nesotto | 2008-02-06 14:46:31 -0800 (Wed, 06 Feb 2008) | 1 line
  
  cleanup to pass inspection report
................
  r43134 | eric_niebler | 2008-02-06 14:57:57 -0800 (Wed, 06 Feb 2008) | 1 line
  
  add handy get() accessors on literal<> wrapper
................
  r43135 | nesotto | 2008-02-06 15:12:21 -0800 (Wed, 06 Feb 2008) | 1 line
  
  cleanup to pass inspection tool
................
  r43136 | eric_niebler | 2008-02-06 16:05:01 -0800 (Wed, 06 Feb 2008) | 1 line
  
  reasonably complete user docs for expression evaluation
................
  r43138 | eric_niebler | 2008-02-07 00:06:29 -0800 (Thu, 07 Feb 2008) | 1 line
  
  tweaks for doxygen 1.5.4, document matches<>
................
  r43141 | johnmaddock | 2008-02-07 01:55:41 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Fix last checked version.
................
  r43143 | johnmaddock | 2008-02-07 02:03:16 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Remove tabs.
................
  r43145 | johnmaddock | 2008-02-07 02:13:31 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Fix min/max usage violation.
................
  r43147 | vladimir_prus | 2008-02-07 02:17:03 -0800 (Thu, 07 Feb 2008) | 2 lines
  
  Attempt to unbreak <library-file>
................
  r43148 | johnmaddock | 2008-02-07 02:24:29 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Added comment to suppress inspect warning.
................
  r43150 | johnmaddock | 2008-02-07 02:29:59 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Added fix for inspection report.
................
  r43152 | vladimir_prus | 2008-02-07 03:04:30 -0800 (Thu, 07 Feb 2008) | 4 lines
  
  Fix <framework> with no path.
  
  Patch from Jon Olsson.
................
  r43154 | bemandawes | 2008-02-07 05:22:34 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Remove obsolete CVS scripts, add 1.35.0 SVN scripts, beginning of docs page
................
  r43155 | nesotto | 2008-02-07 06:41:04 -0800 (Thu, 07 Feb 2008) | 6 lines
  
  
  iterator_range disables msvc warning 4996
      <http://svn.boost.org/trac/boost/ticket/1565>
  
  [range] sub_range assignment issue
      <http://svn.boost.org/trac/boost/ticket/1284> 
................
  r43156 | nesotto | 2008-02-07 06:46:19 -0800 (Thu, 07 Feb 2008) | 1 line
  
  test
................
  r43157 | joaquin | 2008-02-07 08:29:27 -0800 (Thu, 07 Feb 2008) | 1 line
  
  updated according to latest regression tests results, fixed a broken link, typo
................
  r43159 | turkanis | 2008-02-07 09:07:28 -0800 (Thu, 07 Feb 2008) | 1 line
  
  added missing 'self.' qualification
................
  r43165 | dgregor | 2008-02-07 13:08:09 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Support for non-blocking MPI operations in Python, from Andreas Kloeckner
................
  r43166 | dgregor | 2008-02-07 13:09:38 -0800 (Thu, 07 Feb 2008) | 1 line
  
  Note addition of nonblocking operations to the Python interface
................
  r43171 | nesotto | 2008-02-08 01:58:35 -0800 (Fri, 08 Feb 2008) | 1 line
  
  silence of warnings for unused arguments
................
  r43175 | nesotto | 2008-02-08 07:25:01 -0800 (Fri, 08 Feb 2008) | 1 line
  
  missing ) fixed
................
  r43176 | noel_belcourt | 2008-02-08 08:32:35 -0800 (Fri, 08 Feb 2008) | 14 lines
  
  Force PPC Darwin to use fork instead of vfork.  This change
  requires both the parent and child process to explicitly set
  the process group id. Vfork guarantees the child process 
  runs to the exec before it releases the parent process.  
  Now that we use fork instead of vfork, it's possible for the 
  parent to wait on the child process without having the child 
  setpgid on itself.  This eliminates spurious hangs on ppc
  darwin caused by either a race condition between vfork and
  execvp, or a bug in the vfork implementation.
  
  Added a test to ensure we don't try to read from the
  stderr pipe descriptor if the descriptor's not valid.
................
  r43177 | eric_niebler | 2008-02-08 09:11:57 -0800 (Fri, 08 Feb 2008) | 1 line
  
  reserve some c_type bits for dinkumware on windows, fixes #1625
................
  r43179 | noel_belcourt | 2008-02-08 09:53:50 -0800 (Fri, 08 Feb 2008) | 13 lines
  
  I've added the -single_module option to the intel-darwin.link.dll
  action to fix this linker error when linking dylibs:
  
  ld: common symbols not allowed with MH_DYLIB output format with the -multi_module option
  boost/bin.v2/libs/system/build/intel-darwin-9.1/debug/macosx-version-10.4/error_code.o 
    definition of common __ZGVZNK5boost6system14error_category7messageEiE1s (size 16)
  boost/bin.v2/libs/system/build/intel-darwin-9.1/debug/macosx-version-10.4/error_code.o 
    definition of common __ZZNK5boost6system14error_category7messageEiE1s (size 16)
  
  though I would note that the common symbols problem occurs in a number of
  other libraries (test, graph, spirit, ...) as well.
................
  r43188 | danieljames | 2008-02-09 04:29:02 -0800 (Sat, 09 Feb 2008) | 2 lines
  
  Fix a link in the intrusive redirect.
................
  r43189 | danieljames | 2008-02-09 04:37:00 -0800 (Sat, 09 Feb 2008) | 1 line
  
  Fix another redirect link.
................
  r43190 | danieljames | 2008-02-09 04:38:19 -0800 (Sat, 09 Feb 2008) | 1 line
  
  Update link to Jamfile, to link to the version 2 jamfile.
................
  r43191 | danieljames | 2008-02-09 04:39:06 -0800 (Sat, 09 Feb 2008) | 1 line
  
  Fix a link.
................
  r43192 | danieljames | 2008-02-09 04:45:32 -0800 (Sat, 09 Feb 2008) | 2 lines
  
  Add a forwarding header for hash/custom.html as Boost.Bimap links to it.
................
  r43193 | danieljames | 2008-02-09 05:02:45 -0800 (Sat, 09 Feb 2008) | 1 line
  
  Fix the link to the license.
................
  r43199 | eric_niebler | 2008-02-09 12:32:27 -0800 (Sat, 09 Feb 2008) | 1 line
  
  more doxygen comments, const-correctness tweak for fusion::at() on proto expression
................
  r43200 | eric_niebler | 2008-02-09 12:34:33 -0800 (Sat, 09 Feb 2008) | 1 line
  
  document how to access children of proto expressions
................
  r43204 | eric_niebler | 2008-02-09 22:57:24 -0800 (Sat, 09 Feb 2008) | 1 line
  
  fix oops in proto fusion interface
................
  r43205 | eric_niebler | 2008-02-09 23:02:54 -0800 (Sat, 09 Feb 2008) | 1 line
  
  suppress msvc warning
................
  r43206 | danieljames | 2008-02-10 01:55:03 -0800 (Sun, 10 Feb 2008) | 1 line
  
  Fix some broken links.
................
  r43207 | vladimir_prus | 2008-02-10 05:13:41 -0800 (Sun, 10 Feb 2008) | 4 lines
  
  Tolerate argc being zero.
  
  Patch from C. K. Jester-Young.
................
  r43209 | danieljames | 2008-02-10 06:56:22 -0800 (Sun, 10 Feb 2008) | 1 line
  
  Link to people pages on the website, as they've been removed from the download.
................
  r43210 | danieljames | 2008-02-10 07:02:17 -0800 (Sun, 10 Feb 2008) | 1 line
  
  Point links to the pages that used to be in 'more' to the site.
................
  r43212 | danieljames | 2008-02-10 08:10:16 -0800 (Sun, 10 Feb 2008) | 1 line
  
  Fix links on the home page as well.
................
  r43213 | danieljames | 2008-02-10 08:21:22 -0800 (Sun, 10 Feb 2008) | 1 line
  
  Generated documentation which is no longer generated.
................
  r43220 | eric_niebler | 2008-02-10 19:48:41 -0800 (Sun, 10 Feb 2008) | 1 line
  
  include config.hpp and workaround.hpp before uses of BOOST_WORKAROUND and BOOST_MSVC
................
  r43221 | chris_kohlhoff | 2008-02-11 05:59:44 -0800 (Mon, 11 Feb 2008) | 2 lines
  
  Need to define _XOPEN_SOURCE_EXTENDED when compiling for HP-UX.
................
  r43226 | djenkins | 2008-02-11 12:49:19 -0800 (Mon, 11 Feb 2008) | 1 line
  
  cleanup using local<> and skip()
................
  r43239 | turkanis | 2008-02-12 21:43:39 -0800 (Tue, 12 Feb 2008) | 1 line
  
  fixed return value of read(), to correctly handle eof
................
  r43240 | turkanis | 2008-02-12 21:47:44 -0800 (Tue, 12 Feb 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 43059-43238: better debug output for mapped file; fixed large_file_test.cpp under UNICODE on Windows
................
  r43241 | turkanis | 2008-02-13 11:38:52 -0800 (Wed, 13 Feb 2008) | 1 line
  
  added markup for stdcxx failures (iostreams)
................
  r43243 | turkanis | 2008-02-13 11:42:10 -0800 (Wed, 13 Feb 2008) | 1 line
  
  switched from <wchar.h> to <cwchar>, for stdcxx (which is conforming in this case)
................
  r43246 | matias | 2008-02-14 09:33:12 -0800 (Thu, 14 Feb 2008) | 1 line
  
  remove local admonitions
................
  r43247 | matias | 2008-02-14 09:43:52 -0800 (Thu, 14 Feb 2008) | 1 line
  
  optional docs fixes
................
  r43248 | matias | 2008-02-14 09:44:21 -0800 (Thu, 14 Feb 2008) | 1 line
  
  redirect optional docs to new version
................
  r43251 | matias | 2008-02-14 10:08:16 -0800 (Thu, 14 Feb 2008) | 1 line
  
  conversion docs fixes
................
  r43252 | matias | 2008-02-14 10:09:34 -0800 (Thu, 14 Feb 2008) | 1 line
  
  redirect to new conversion docs
................
  r43253 | matias | 2008-02-14 10:19:34 -0800 (Thu, 14 Feb 2008) | 1 line
  
  redirect optional and numeric/conversion docs to new version
................
  r43254 | matias | 2008-02-14 11:03:55 -0800 (Thu, 14 Feb 2008) | 1 line
  
  bimap doc fixes
................
  r43255 | matias | 2008-02-14 11:05:04 -0800 (Thu, 14 Feb 2008) | 1 line
  
  fix tabs in files
................
  r43256 | matias | 2008-02-14 11:22:15 -0800 (Thu, 14 Feb 2008) | 1 line
  
  fix tabs in files
................
  r43260 | matias | 2008-02-14 13:24:11 -0800 (Thu, 14 Feb 2008) | 1 line
  
  add missing images
................
  r43262 | hkaiser | 2008-02-14 14:01:54 -0800 (Thu, 14 Feb 2008) | 1 line
  
  Fixed a whitespace insertion glitch, where whitespace got inserted unconditionally between two operators even if one of these was a comma.
................
  r43264 | hkaiser | 2008-02-14 15:52:33 -0800 (Thu, 14 Feb 2008) | 1 line
  
  Wave: More fixes to whitespace insertion engine.
................
  r43266 | hkaiser | 2008-02-15 06:35:36 -0800 (Fri, 15 Feb 2008) | 1 line
  
  Wave: More fixes to whitespace insertion engine.
................
  r43269 | pdimov | 2008-02-15 10:40:36 -0800 (Fri, 15 Feb 2008) | 1 line
  
  Added support for &&, ||
................
  r43272 | andreas_huber69 | 2008-02-16 02:13:08 -0800 (Sat, 16 Feb 2008) | 1 line
  
  Updated statechart markup
................
  r43274 | andreas_huber69 | 2008-02-16 02:19:49 -0800 (Sat, 16 Feb 2008) | 2 lines
  
  Silenced GCC 4.0.1 warning (patch supplied by Euan)
  <http://thread.gmane.org/gmane.comp.lib.boost.devel/171071>
................
  r43280 | jurko | 2008-02-16 08:50:42 -0800 (Sat, 16 Feb 2008) | 1 line
  
  Corrected comments related to the allowed linker & linker-type values. Minor stylistic changes.
................
  r43281 | jurko | 2008-02-16 08:53:33 -0800 (Sat, 16 Feb 2008) | 1 line
  
  Added support for compiling C++ programs without RTTI support using the gcc toolset.
................
  r43282 | jurko | 2008-02-16 09:03:54 -0800 (Sat, 16 Feb 2008) | 1 line
  
  Made the msvc toolset always explicitly enable or disable rtti support based on the <rtti> feature value instead of only setting it if <rtti>on and depending on it being disabled by default. The original behaviour did not work well with msvc 8.0 for which there was not way to disable rtti support as that compiler enables rtti support by default.
................
  r43283 | bemandawes | 2008-02-16 18:01:32 -0800 (Sat, 16 Feb 2008) | 1 line
  
  Show output of example program
................
  r43290 | hkaiser | 2008-02-17 08:45:08 -0800 (Sun, 17 Feb 2008) | 1 line
  
  Wave: Extended a workaround to newest Intel compiler version (Linux V10.1)
................
  r43292 | nesotto | 2008-02-17 08:49:38 -0800 (Sun, 17 Feb 2008) | 1 line
  
  support for comparinson operators
................
  r43293 | nesotto | 2008-02-17 08:50:02 -0800 (Sun, 17 Feb 2008) | 1 line
  
  support for comparison operators
................
  r43294 | hkaiser | 2008-02-17 09:00:20 -0800 (Sun, 17 Feb 2008) | 1 line
  
  Wave: Fixed test cases to reflect recent changes to whitespace insertion.
................
  r43296 | eric_niebler | 2008-02-17 12:53:18 -0800 (Sun, 17 Feb 2008) | 1 line
  
  proto documentation improvements
................
  r43299 | turkanis | 2008-02-17 21:48:13 -0800 (Sun, 17 Feb 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 43243-43298: overhaul of category_of and close(): stringstream is now dual_seekable; standard file streams and string streams are closable; public Boost.Iostreams streams and streambufs are closable; close() pops filtering streams and streambufs
................
  r43300 | eric_niebler | 2008-02-17 22:16:27 -0800 (Sun, 17 Feb 2008) | 1 line
  
  remove dependence on boost.lambda, make numeric function objects work with std binders
................
  r43301 | chris_kohlhoff | 2008-02-18 05:31:26 -0800 (Mon, 18 Feb 2008) | 2 lines
  
  Fix printing of error messages.
................
  r43302 | chris_kohlhoff | 2008-02-18 05:33:23 -0800 (Mon, 18 Feb 2008) | 2 lines
  
  Only define _XOPEN_SOURCE_EXTENDED when building with gcc on HP-UX.
................
  r43303 | chris_kohlhoff | 2008-02-18 05:35:15 -0800 (Mon, 18 Feb 2008) | 3 lines
  
  Add missing #include of socket_types.hpp needed for the SSL unit tests
  to compile successfully on Windows.
................
  r43306 | eric_niebler | 2008-02-18 10:29:29 -0800 (Mon, 18 Feb 2008) | 1 line
  
  remove post_construct docs, fix link to boost.parameter library
................
  r43308 | niels_dekker | 2008-02-18 14:11:19 -0800 (Mon, 18 Feb 2008) | 1 line
  
  Fixed the assignment of value_initialized<T> for T being a C-style array. (The previous version would trigger a compile error in this case.)
................
  r43309 | niels_dekker | 2008-02-18 14:13:21 -0800 (Mon, 18 Feb 2008) | 1 line
  
  Tested the assignment of value_initialized<T>, for T being a C-style array. Related to the fix of changeset [43308]
................
  r43310 | eric_niebler | 2008-02-18 15:03:23 -0800 (Mon, 18 Feb 2008) | 1 line
  
  some doxygen comments for proto/traits.hpp
................
  r43311 | eric_niebler | 2008-02-18 21:56:52 -0800 (Mon, 18 Feb 2008) | 1 line
  
  more proto documentation tweaks, remove unnecessary result_of::arg_c instantiation
................
  r43312 | eric_niebler | 2008-02-18 23:14:37 -0800 (Mon, 18 Feb 2008) | 1 line
  
  fix droppable accumulators
................
  r43314 | eric_niebler | 2008-02-18 23:33:30 -0800 (Mon, 18 Feb 2008) | 1 line
  
  darn, back out bad droppable changes
................
  r43316 | pdimov | 2008-02-19 05:18:58 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fixes #1590.
................
  r43317 | pdimov | 2008-02-19 06:01:13 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fixes #1444.
................
  r43318 | pdimov | 2008-02-19 06:26:36 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fix #398, as long as the macros BOOST_NO_STD_TYPEINFO and BOOST_NO_IOSTREAM are defined. I don't know how Boost.Config needs to be changed to autodetect eVC4 and set these on its own.
................
  r43319 | pdimov | 2008-02-19 06:51:10 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fix #1641.
................
  r43320 | pdimov | 2008-02-19 06:59:28 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fix #1646.
................
  r43321 | pdimov | 2008-02-19 07:09:10 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fix #1642.
................
  r43322 | nesotto | 2008-02-19 07:10:05 -0800 (Tue, 19 Feb 2008) | 1 line
  
  fixed problem with operator()() when the value_type was abstract.
................
  r43323 | pdimov | 2008-02-19 07:40:58 -0800 (Tue, 19 Feb 2008) | 1 line
  
  Fix #1643.
................
  r43325 | turkanis | 2008-02-19 11:34:07 -0800 (Tue, 19 Feb 2008) | 1 line
  
  stringstreams are no longer closable; the semantics of close() for these devices was illconsidered
................
  r43328 | turkanis | 2008-02-19 16:09:06 -0800 (Tue, 19 Feb 2008) | 1 line
  
  menu fix from iostreams_dev
................
  r43329 | turkanis | 2008-02-19 19:20:17 -0800 (Tue, 19 Feb 2008) | 1 line
  
  markup for pgi-7.0 (iostreams)
................
  r43330 | bemandawes | 2008-02-20 05:46:49 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Add .z7 archive generation
................
  r43332 | grafik | 2008-02-20 09:32:09 -0800 (Wed, 20 Feb 2008) | 1 line
  
  New readme page for now standalone release.
................
  r43334 | grafik | 2008-02-20 11:15:16 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Fix link to getting started docs.
................
  r43335 | grafik | 2008-02-20 14:50:03 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Add the <python.interpreter> to all requirements to allow other toolsets to use the currently configured python instead of relying on python being in the path.
................
  r43336 | grafik | 2008-02-20 15:01:43 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Use the configured python interpreter instead of assuming it's in the path.
................
  r43337 | grafik | 2008-02-20 15:03:28 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Add missing, and assumed, white background for screen rendering.
................
  r43338 | grafik | 2008-02-20 15:26:58 -0800 (Wed, 20 Feb 2008) | 1 line
  
  Doc cleanups.
................
  r43344 | eric_niebler | 2008-02-20 23:18:24 -0800 (Wed, 20 Feb 2008) | 1 line
  
  More Proto documentation
................
  r43346 | johnmaddock | 2008-02-21 02:37:59 -0800 (Thu, 21 Feb 2008) | 3 lines
  
  Fix typo in example.
  Added links to PDF versions of the docs.
  Regenerated all the docs to fix people links.
................
  r43347 | johnmaddock | 2008-02-21 03:53:59 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Update main overview page.
................
  r43349 | bemandawes | 2008-02-21 04:46:11 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Fix typo; .z7 should be .7z
................
  r43351 | johnmaddock | 2008-02-21 04:58:15 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Added link to PDF docs, and regenerated.
................
  r43354 | johnmaddock | 2008-02-21 05:51:18 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Added link to PDF docs, and regenerated.
................
  r43357 | johnmaddock | 2008-02-21 08:49:59 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Added link to PDF docs.
................
  r43359 | johnmaddock | 2008-02-21 09:01:26 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Regenerated docs to fix links.
................
  r43361 | bemandawes | 2008-02-21 12:11:32 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Fix still another typo
................
  r43362 | eric_niebler | 2008-02-21 12:12:02 -0800 (Thu, 21 Feb 2008) | 1 line
  
  doxygen comments for proto::when<>
................
  r43363 | eric_niebler | 2008-02-21 16:42:12 -0800 (Thu, 21 Feb 2008) | 1 line
  
  fix crash when actions are in keep() expressions
................
  r43364 | eric_niebler | 2008-02-21 18:01:46 -0800 (Thu, 21 Feb 2008) | 1 line
  
  doxygen comments
................
  r43365 | grafik | 2008-02-21 21:26:39 -0800 (Thu, 21 Feb 2008) | 1 line
  
  Rename readme.html to index.html, and add forwarding index.htm for backward compatibility.
................
  r43368 | danieljames | 2008-02-22 01:21:22 -0800 (Fri, 22 Feb 2008) | 2 lines
  
  Update the index.html link in the navbar.
................
  r43371 | grafik | 2008-02-22 08:25:21 -0800 (Fri, 22 Feb 2008) | 1 line
  
  Remove obsolete getting started files. They where replaced by more/getting_started/*.
................
  r43377 | chris_kohlhoff | 2008-02-22 14:43:54 -0800 (Fri, 22 Feb 2008) | 2 lines
  
  Use the correct vector of timer queues when dispatching timers.
................
  r43390 | turkanis | 2008-02-22 16:05:49 -0800 (Fri, 22 Feb 2008) | 2 lines
  
  Ported change from iostreams_dev
................
  r43391 | turkanis | 2008-02-22 16:06:24 -0800 (Fri, 22 Feb 2008) | 2 lines
  
  Ported changes from iostreams_dev
................
  r43392 | turkanis | 2008-02-22 16:07:13 -0800 (Fri, 22 Feb 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 43327-43389
................
  r43393 | turkanis | 2008-02-22 16:11:07 -0800 (Fri, 22 Feb 2008) | 1 line
  
  merged changes from iostreams_dev
................
  r43395 | turkanis | 2008-02-22 22:07:59 -0800 (Fri, 22 Feb 2008) | 1 line
  
  updated to test close() on filtering streambufs
................
  r43399 | turkanis | 2008-02-22 23:44:58 -0800 (Fri, 22 Feb 2008) | 1 line
  
  merged changes from iostreams_dev
................
  r43402 | bemandawes | 2008-02-23 06:04:02 -0800 (Sat, 23 Feb 2008) | 1 line
  
  Give the 1st and 2nd level index.html files a common look-and-feel.
................
  r43405 | vladimir_prus | 2008-02-24 04:59:04 -0800 (Sun, 24 Feb 2008) | 3 lines
  
  Recognize that fact, for that for intel-win, <runtime-debuggin>
  matters and should be added to the library name.
................
  r43409 | bemandawes | 2008-02-24 16:53:26 -0800 (Sun, 24 Feb 2008) | 1 line
  
  Fix html boo boo
................
  r43410 | schoepflin | 2008-02-25 00:37:10 -0800 (Mon, 25 Feb 2008) | 1 line
  
  Added missing template keyword.
................
  r43411 | t_schwinger | 2008-02-25 03:45:51 -0800 (Mon, 25 Feb 2008) | 3 lines
  
  removes unnecessary escaping
................
  r43412 | t_schwinger | 2008-02-25 03:47:59 -0800 (Mon, 25 Feb 2008) | 3 lines
  
  removes unnecessary comment
................
  r43416 | hkaiser | 2008-02-26 11:25:05 -0800 (Tue, 26 Feb 2008) | 1 line
  
  Wave: Fixed expanding_function_like_macro preprocessing hook.
................
  r43417 | danieljames | 2008-02-26 14:04:55 -0800 (Tue, 26 Feb 2008) | 2 lines
  
  Fix a link to Boost.Bimap.
................
  r43418 | danieljames | 2008-02-26 14:07:25 -0800 (Tue, 26 Feb 2008) | 2 lines
  
  Change another link that's no longer in the repository to link to the website.
................
  r43419 | hkaiser | 2008-02-26 14:36:36 -0800 (Tue, 26 Feb 2008) | 1 line
  
  Fixed a compilation problem on pathscale
................
  r43421 | eric_niebler | 2008-02-27 10:48:22 -0800 (Wed, 27 Feb 2008) | 1 line
  
  partially revert breaking change to independent sub-expressions until I can make a proper fix
................
  r43422 | danieljames | 2008-02-27 10:51:14 -0800 (Wed, 27 Feb 2008) | 1 line
  
  Fix broken copyright urls. Fixes #1573.
................
  r43423 | danieljames | 2008-02-27 11:22:01 -0800 (Wed, 27 Feb 2008) | 1 line
  
  Fix incorrect links to copyright of the form 'http:#www.boost.org
................
  r43424 | eric_niebler | 2008-02-27 11:39:43 -0800 (Wed, 27 Feb 2008) | 1 line
  
  fix bug in use_simple_repeat calculation
................
  r43428 | eric_niebler | 2008-02-27 16:03:15 -0800 (Wed, 27 Feb 2008) | 1 line
  
  add test case for use_simple_repeat fix
................
  r43433 | eric_niebler | 2008-02-28 14:47:12 -0800 (Thu, 28 Feb 2008) | 1 line
  
  fix oops
................
  r43434 | johnmaddock | 2008-02-29 01:49:42 -0800 (Fri, 29 Feb 2008) | 1 line
  
  Apply fixes to issue #1658 which fixes some broken URL's.
................
  r43435 | johnmaddock | 2008-02-29 01:58:30 -0800 (Fri, 29 Feb 2008) | 1 line
  
  Fix broken link as per report #1658.
................
  r43437 | chris_kohlhoff | 2008-02-29 04:57:57 -0800 (Fri, 29 Feb 2008) | 2 lines
  
  Add missing tie().
................
  r43438 | schoepflin | 2008-02-29 07:13:41 -0800 (Fri, 29 Feb 2008) | 2 lines
  
  Added expected failure markup for the test weighted_tail_variate_means on Tru64/CXX.
................
  r43441 | eric_niebler | 2008-03-01 11:32:56 -0800 (Sat, 01 Mar 2008) | 1 line
  
  add map_assign example
................
  r43458 | turkanis | 2008-03-02 22:20:14 -0800 (Sun, 02 Mar 2008) | 1 line
  
  merged changes from iostreams_dev, revisions 43399-43457
................
  r43461 | anthonyw | 2008-03-03 00:44:42 -0800 (Mon, 03 Mar 2008) | 1 line
  
  Test and fix for issue #1665
................
  r43464 | anthonyw | 2008-03-03 02:52:44 -0800 (Mon, 03 Mar 2008) | 1 line
  
  thread constructor now accepts up to three additional arguments to pass to thread function
................
  r43467 | danieljames | 2008-03-03 04:10:35 -0800 (Mon, 03 Mar 2008) | 2 lines
  
  Tell subversion that date_time.doc is a text file, not a word document.
................
  r43468 | danieljames | 2008-03-03 04:11:25 -0800 (Mon, 03 Mar 2008) | 1 line
  
  Fix license link in date_time.doc
................
  r43469 | chris_kohlhoff | 2008-03-03 05:21:05 -0800 (Mon, 03 Mar 2008) | 4 lines
  
  Disable use of CancelIo by default, due to the possibility of silent
  failure on some system configurations. Swallow error returned by CancelIoEx
  if there are no operations to be cancelled.
................
  r43470 | chris_kohlhoff | 2008-03-03 05:27:06 -0800 (Mon, 03 Mar 2008) | 2 lines
  
  Add missing 'boost_' prefix to helper namespace.
................
  r43471 | chris_kohlhoff | 2008-03-03 05:36:35 -0800 (Mon, 03 Mar 2008) | 2 lines
  
  Regenerate documentation.
................
  r43472 | chris_kohlhoff | 2008-03-03 06:05:35 -0800 (Mon, 03 Mar 2008) | 1 line
  
  Update copyright notices.
................
  r43473 | chris_kohlhoff | 2008-03-03 06:13:01 -0800 (Mon, 03 Mar 2008) | 2 lines
  
  Update copyright notices.
................
  r43476 | eric_niebler | 2008-03-03 11:44:54 -0800 (Mon, 03 Mar 2008) | 1 line
  
  add Map Assign example to documentation
................
  r43478 | eric_niebler | 2008-03-03 11:47:47 -0800 (Mon, 03 Mar 2008) | 1 line
  
  second attempt at fixing actions in independent expressions
................
  r43484 | eric_niebler | 2008-03-03 15:48:17 -0800 (Mon, 03 Mar 2008) | 1 line
  
  handle static regexes with actions nested in dynamic independent subexpressions
................
  r43485 | emildotchevski | 2008-03-03 17:41:17 -0800 (Mon, 03 Mar 2008) | 1 line
  
  boost exception
................
  r43496 | eric_niebler | 2008-03-04 10:51:07 -0800 (Tue, 04 Mar 2008) | 1 line
  
  rename numeric::empty to numeric::default_, fixes #1650
................
  r43501 | eric_niebler | 2008-03-04 11:31:57 -0800 (Tue, 04 Mar 2008) | 1 line
  
  eliminate msvc level 4 warnings, fixes #1631
................
  r43502 | eric_niebler | 2008-03-04 11:42:36 -0800 (Tue, 04 Mar 2008) | 1 line
  
  add Dave Jenkin's evil static/dynamic actions in keep test case
................
  r43503 | eric_niebler | 2008-03-04 13:09:47 -0800 (Tue, 04 Mar 2008) | 1 line
  
  work around msvc bug 331418, fixes #1652
................
  r43506 | eric_niebler | 2008-03-04 15:01:17 -0800 (Tue, 04 Mar 2008) | 1 line
  
  fix bad interaction between boyer-moore optimization and partial match feature, fixes #1564
................
  r43508 | eric_niebler | 2008-03-04 22:32:39 -0800 (Tue, 04 Mar 2008) | 1 line
  
  add BOOST_REVERSE_FOREACH, fixes #1071
................
  r43509 | eric_niebler | 2008-03-04 23:12:03 -0800 (Tue, 04 Mar 2008) | 1 line
  
  fix bug iterating over abstract base
................


[SVN r43519]
2008-03-05 20:37:04 +00:00
Eric Niebler
d3b54b347d Merged revisions 41984-42066 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41986 | rwgk | 2007-12-11 21:39:45 -0800 (Tue, 11 Dec 2007) | 1 line
  
  undo revision 41404; see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34238
........
  r41987 | jano_gaspar | 2007-12-12 02:40:31 -0800 (Wed, 12 Dec 2007) | 1 line
  
  circular_buffer: g++ warning fix
........
  r41988 | dgregor | 2007-12-12 05:51:21 -0800 (Wed, 12 Dec 2007) | 1 line
  
  Fix typo in maintainers file
........
  r41990 | djowel | 2007-12-12 07:48:49 -0800 (Wed, 12 Dec 2007) | 1 line
  
  added tobias as fusion maintainer + tweaked spirit mainteners to joel de guzman and hartmut kaiser
........
  r42001 | hljin | 2007-12-12 17:28:15 -0800 (Wed, 12 Dec 2007) | 1 line
  
  GIL: fixed the Makefile along with a minor fix
........
  r42005 | t_schwinger | 2007-12-13 02:32:11 -0800 (Thu, 13 Dec 2007) | 3 lines
  
  fixes typo
........
  r42006 | nesotto | 2007-12-13 04:06:21 -0800 (Thu, 13 Dec 2007) | 1 line
  
  M. Marcin's improved version of erase_if + minor indentation tweaks
........
  r42007 | igaztanaga | 2007-12-13 08:49:58 -0800 (Thu, 13 Dec 2007) | 1 line
  
  Solved warning when using -Wall
........
  r42009 | dgregor | 2007-12-13 10:14:01 -0800 (Thu, 13 Dec 2007) | 1 line
  
  Tweak e-mail that sends notes to maintainers
........
  r42012 | johnmaddock | 2007-12-13 10:45:58 -0800 (Thu, 13 Dec 2007) | 5 lines
  
  Fixes #1454.
  
  Previous fix was incomplete, so added new tests, confirmed problem report, and added fixes.
  
  All the tests now compile cleanly with g++ -pedantic -Wall -Wno-long-long (checked with gcc-4.4.1 and 3.4.4).
........
  r42013 | dgregor | 2007-12-13 11:20:23 -0800 (Thu, 13 Dec 2007) | 1 line
  
  Send information about broken platforms to platform maintainers and the Boost testing list
........
  r42014 | dgregor | 2007-12-13 11:20:55 -0800 (Thu, 13 Dec 2007) | 1 line
  
  Set up initial platform maintainers file
........
  r42015 | dgregor | 2007-12-13 11:21:21 -0800 (Thu, 13 Dec 2007) | 1 line
  
  Add instructions and license for the maintainers file
........
  r42016 | dgregor | 2007-12-13 11:22:52 -0800 (Thu, 13 Dec 2007) | 1 line
  
  Minor tweak
........
  r42017 | dgregor | 2007-12-13 11:57:47 -0800 (Thu, 13 Dec 2007) | 1 line
  
  Fix generated URL
........
  r42018 | nesotto | 2007-12-13 12:00:22 -0800 (Thu, 13 Dec 2007) | 1 line
  
  forgot to submit this too
........
  r42020 | bgubenko | 2007-12-13 13:40:26 -0800 (Thu, 13 Dec 2007) | 1 line
  
  some markup for gcc 3.4.2 on PA-RISC and gcc 3.4.6 on Linux ia64
........
  r42023 | lbourdev | 2007-12-13 21:32:21 -0800 (Thu, 13 Dec 2007) | 3 lines
  
  GIL: Fixed Intel compiler errors.
........
  r42025 | johnmaddock | 2007-12-14 02:11:21 -0800 (Fri, 14 Dec 2007) | 1 line
  
  Fix typos reported by Sebastian Pipping.
........
  r42035 | johnmaddock | 2007-12-14 08:36:40 -0800 (Fri, 14 Dec 2007) | 1 line
  
  Fix bad comments in test files.
........
  r42047 | turkanis | 2007-12-14 11:30:07 -0800 (Fri, 14 Dec 2007) | 127 lines
  
  I. Changed signature and specification of boost::iostreams::close(),
     and made corresponding changes throughout the iostreams library.
     New spec is:
     
     template<typename T>
     void close(T& t);
  
       Convenience function for closing a device; calls close(t, in) and 
       close(t, out).
  
     template<typename T>
     void close(T& t, openmode which);
  
     template<typename T, typename Sink>
     void close(T& t, Sink& snk, openmode which);
  
       These two functions should only be called by the library implementation
       or by advanced users. The openmode parameter must always equal in or 
       out, never in | out.
  
       There are three cases:
  
       1. If T is not closable and which == out, calls boost::iostreams::flush
  
       2. If T operates on a single sequence, and is NOT a dual-use filter:
  
          a. If which == in and the mode of T is convertible to input but
             not to output, calls t.close() (or t.close(snk))
  
          b. If which == out and the mode of T is not convertible to input or
             is convertible to input and to output, calls t.close() 
             (or t.close(snk))
  
          The effect of a. and b. is that for any T in this category, 
          close() is called exactly once.
  
       3. If T operates on two sequences or is a dual-use filter, calls
          t.close(which) (or t.close(snk, which))
  
       If multiple operations that might throw must be called in the course
       of closing a filter or device, all of the operations are attempted
       and the first exception thrown by any of the operations is rethrown
  
    The new test close_test.cpp contains 95 checks verifying that the operation
    behaves as sepcified.
  
    This affects the following files:
  
      chain.hpp
      close.hpp
      code_converter.hpp
      combine.hpp
      compose.hpp
      copy.hpp
      detail/adapter/basic_adapter.hpp [removed]
      detail/adapter/device_adapter.hpp [new]
      detail/adapter/direct_adapter.hpp
      detail/adapter/filter_adapter.hpp [new]
      detail/adapter/mode_adapter.hpp
      detail/broken_overload_resolution/stream_buffer.hpp
      detail/closer.hpp [removed]
      detail/config/limits.hpp
      detail/execute.hpp [new]
      detail/functional.hpp [new]
      detail/streambuf/direct_streambuf.hpp
      detail/streambuf/indirect_streambuf.hpp
      detail/streambuf/linked_streambuf.hpp
      detail/vc6/close.hpp
      device/null.hpp
      filter/aggregate.hpp
      filter/bzip2.hpp
      filter/gzip.hpp
      filter/line.hpp
      filter/newline.hpp
      filter/symmetric.hpp
      filter/test.hpp
      invert.hpp
      restrict.hpp
      tee.hpp
      example/finite_state_filter.hpp
      test/Jamfile.v2
      test/close_test.cpp [new]
      test/code_converter_test.cpp
      test/execute_test.cpp [new]
      test/operation_sequence_test.cpp [new]
  
  II. When exceptions are caught and ignored, we now use catch (...)
      uniformly instead of catch (std::exception&). This affects the 
      following files:
  
      stream_buffer.hpp
      src/mapped_file.cpp
  
  III. Unnecessary dependence on Boost.Range has been eliminated. This
       affects the following files:
  
      detail/is_iterator_range.hpp
      detail/resolve.hpp
      traits.hpp
      test/Jamfile.v2
      test/filtering_stream_test.cpp
      test/offset_test.cpp
      test/seek_test.hpp
      test/seekable_filter_test.cpp
      test/sequence_test.cpp [new]
      test/wide_stream_test.cpp
  
  IV. There are several fixes to the documentation. This affects the
      following files:
  
      doc/classes/symmetric_filter.html
      doc/guide/concepts.html
      doc/guide/modes.html
      doc/tutorial/container_device.html [serious error in algorithm]
      doc/tutorial/dictionary_filters.html [unused member variable]
      doc/tutorial/multichar_filters.html
  
  V. Other changes include:
  
      stream.hpp [missing include directive]
      example/container_device.hpp [serious error in algorithm]
      example/container_device_example.cpp [outdated naming]
      example/container_sink_example.cpp [outdated naming]
      example/container_source_example.cpp [outdated naming]
      example/dictionary_filter.hpp [unused member variable]
      test/compose_test.cpp [added comments]
      test/example_test.cpp [reformatted]
........
  r42053 | anthonyw | 2007-12-14 13:47:10 -0800 (Fri, 14 Dec 2007) | 1 line
  
  updated explicit failures for thread library
........
  r42064 | bgubenko | 2007-12-14 19:42:49 -0800 (Fri, 14 Dec 2007) | 1 line
  
  don't use identifires R1 and R2: some HP-UX headers define them as macros
........
  r42065 | bgubenko | 2007-12-14 20:16:05 -0800 (Fri, 14 Dec 2007) | 1 line
  
  don't use identifires R1 and R2: some HP-UX headers define them as macros
........


[SVN r42083]
2007-12-15 20:38:27 +00:00
Eric Niebler
88daba7005 Merged revisions 41596-41677 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41613 | hkaiser | 2007-12-02 16:34:52 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Wave: One more fix to enable standalone header compilation.
........
  r41621 | hkaiser | 2007-12-02 17:16:28 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Wave: Updated documentation.
........
  r41625 | noel_belcourt | 2007-12-02 18:04:30 -0800 (Sun, 02 Dec 2007) | 4 lines
  
  Change macro logic to get <stdarg.h> included on
  SunOS.
........
  r41626 | grafik | 2007-12-02 18:57:49 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Work around some Windows CMD.EXE programs that will fail executing a totally empty batch file.
........
  r41627 | grafik | 2007-12-02 19:06:22 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Work around some Windows CMD.EXE programs that will fail executing a totally empty batch file.
........
  r41629 | grafik | 2007-12-02 20:05:39 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Bump bjam to 3.1.17 after 3.1.16 release.
........
  r41636 | nesotto | 2007-12-03 01:00:23 -0800 (Mon, 03 Dec 2007) | 1 line
  
  missing include
........
  r41638 | nesotto | 2007-12-03 01:08:02 -0800 (Mon, 03 Dec 2007) | 1 line
  
  Ticket #1477 
........
  r41639 | vladimir_prus | 2007-12-03 02:39:46 -0800 (Mon, 03 Dec 2007) | 2 lines
  
  Fix 64-bit windows msvc detection, again.
........
  r41642 | t_schwinger | 2007-12-03 05:25:26 -0800 (Mon, 03 Dec 2007) | 3 lines
  
  Strips top-level cv-qualifiers off non-reference types, now.
........
  r41644 | nesotto | 2007-12-03 07:16:16 -0800 (Mon, 03 Dec 2007) | 1 line
  
  Ticket #1488 
........
  r41645 | nesotto | 2007-12-03 07:19:37 -0800 (Mon, 03 Dec 2007) | 1 line
  
  Ticket #1467 
........
  r41646 | grafik | 2007-12-03 07:48:40 -0800 (Mon, 03 Dec 2007) | 1 line
  
  Switch testing to 3.1.16 bjam release.
........
  r41647 | niels_dekker | 2007-12-03 10:14:37 -0800 (Mon, 03 Dec 2007) | 1 line
  
  Added value_init test for C style array of bytes
........
  r41648 | niels_dekker | 2007-12-03 10:20:19 -0800 (Mon, 03 Dec 2007) | 1 line
  
  Added missing #include to value_init_test.cpp. (My mistake!)
........
  r41649 | jhunold | 2007-12-03 10:47:17 -0800 (Mon, 03 Dec 2007) | 2 lines
  
  Silence unused paramter warning in release mode.
........
  r41650 | jhunold | 2007-12-03 10:51:26 -0800 (Mon, 03 Dec 2007) | 2 lines
  
  Add cosmetic virtual detructors to silence compile warnings.
........
  r41651 | t_schwinger | 2007-12-03 11:00:09 -0800 (Mon, 03 Dec 2007) | 3 lines
  
  adds explicit failures markup for function_types
........
  r41653 | lbourdev | 2007-12-03 11:13:15 -0800 (Mon, 03 Dec 2007) | 3 lines
  
  GIL: Typo in documentation.
........
  r41663 | noel_belcourt | 2007-12-03 12:50:58 -0800 (Mon, 03 Dec 2007) | 5 lines
  
  Changes to support pgi-7.0 on Linux.
    * pthread requires rt
    * force IEEE 754 math for slow, but correct, numerics
........
  r41667 | niels_dekker | 2007-12-03 13:41:59 -0800 (Mon, 03 Dec 2007) | 2 lines
  
  Added value_init test for an value_initialized<T> object allocated on the heap.
........
  r41668 | anthonyw | 2007-12-03 14:00:26 -0800 (Mon, 03 Dec 2007) | 1 line
  
  check predicate before returning if we time out on a predicated version of timed_wait
........


[SVN r41678]
2007-12-04 07:28:37 +00:00
Eric Niebler
b841d1eadf Merged revisions 41488-41595 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41489 | djowel | 2007-11-30 02:07:41 -0800 (Fri, 30 Nov 2007) | 1 line
  
  fixed link
........
  r41493 | grafik | 2007-11-30 07:56:42 -0800 (Fri, 30 Nov 2007) | 1 line
  
  Mode proposal.pdf to new web site. (fixes #1364)
........
  r41494 | grafik | 2007-11-30 07:58:59 -0800 (Fri, 30 Nov 2007) | 1 line
  
  Obsolete. (fixes #1362)
........
  r41497 | grafik | 2007-11-30 08:21:49 -0800 (Fri, 30 Nov 2007) | 1 line
  
  Move the content of old more/links.html doc to new web site. (fixes #1360).
........
  r41500 | bemandawes | 2007-11-30 08:44:23 -0800 (Fri, 30 Nov 2007) | 1 line
  
  Refresh examples, add example build script, reflect that in docs. Apply suggestions from Darren Cook.
........
  r41501 | grafik | 2007-11-30 09:13:02 -0800 (Fri, 30 Nov 2007) | 1 line
  
  Obsolete. (fixes #1365)
........
  r41502 | grafik | 2007-11-30 09:16:00 -0800 (Fri, 30 Nov 2007) | 1 line
  
  Obsolete. (fixes #1348)
........
  r41504 | grafik | 2007-11-30 09:45:24 -0800 (Fri, 30 Nov 2007) | 1 line
  
  Obsolete. (fixes #1345)
........
  r41505 | anthonyw | 2007-11-30 10:38:21 -0800 (Fri, 30 Nov 2007) | 1 line
  
  interruptible_wait (and hence condition timed_wait) now uses a WaitableTimer where possible, to be robust in the face of clock changes
........
  r41506 | danieljames | 2007-11-30 11:28:46 -0800 (Fri, 30 Nov 2007) | 2 lines
  
  Frank Mori Hess's patch to get the documentation building.
........
  r41511 | danieljames | 2007-11-30 12:06:44 -0800 (Fri, 30 Nov 2007) | 3 lines
  
  Remove the formal review schedule, as it has been moved to the new site.
  Fixes #1351
........
  r41519 | djowel | 2007-11-30 17:11:44 -0800 (Fri, 30 Nov 2007) | 1 line
  
  remove old unused file
........
  r41521 | dave | 2007-11-30 18:15:17 -0800 (Fri, 30 Nov 2007) | 7 lines
  
  
  Boost.Python:
  
  * Workarounds for many SunCC 5.9 bugs
  * Suppression of many SunCC 5.9 warnings
  * Improve the style of some test invocations in Jamfile
........
  r41526 | dave | 2007-11-30 21:07:13 -0800 (Fri, 30 Nov 2007) | 2 lines
  
  Fixed grammar in error message
........
  r41529 | niels_dekker | 2007-12-01 04:14:37 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Added value_init tests, based upon GCC bug report by Jonathan Wakely. Added URL to Borland bug report.
........
  r41530 | niels_dekker | 2007-12-01 05:57:06 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Marked value_init_test failures on GCC as "expected failures", referring to ticket #1491
........
  r41532 | vladimir_prus | 2007-12-01 06:56:23 -0800 (Sat, 01 Dec 2007) | 2 lines
  
  Change the detection of 64-bit windows to handle EM64T processors.
........
  r41534 | danieljames | 2007-12-01 08:44:20 -0800 (Sat, 01 Dec 2007) | 4 lines
  
  Transfer the rest of the version history to the new website.
  
  Fixes #1374.
........
  r41535 | grafik | 2007-12-01 08:44:54 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Plug memory leak when closing out actions. Thanks to Martin Kortmann for finding this.
........
  r41538 | vladimir_prus | 2007-12-01 09:56:47 -0800 (Sat, 01 Dec 2007) | 2 lines
  
  Document 64-bit compilation.
........
  r41539 | danieljames | 2007-12-01 09:58:44 -0800 (Sat, 01 Dec 2007) | 2 lines
  
  Mark hash_long_double_test as failing on all PA-RISC compilers.
........
  r41540 | igaztanaga | 2007-12-01 10:01:15 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Simplified mutexes for systems with no _POSIX_TIMEOUTS. 
........
  r41542 | vladimir_prus | 2007-12-01 11:07:22 -0800 (Sat, 01 Dec 2007) | 4 lines
  
  Add <testing.arg> functionality to unit-test rule.
  
  Patch from Mark Desnoyer.
........
  r41544 | jhunold | 2007-12-01 11:27:06 -0800 (Sat, 01 Dec 2007) | 2 lines
  
  Silence compiler by adding cosmetic virtual destructors.
........
  r41547 | vladimir_prus | 2007-12-01 12:06:43 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Document runtime-link
........
  r41548 | grafik | 2007-12-01 12:17:52 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Add support for detection and building with vc9. (fixes #1490)
........
  r41549 | jhunold | 2007-12-01 12:24:51 -0800 (Sat, 01 Dec 2007) | 2 lines
  
  Silence compiler by adding cosmetic virtual destructors.
........
  r41550 | jhunold | 2007-12-01 12:26:37 -0800 (Sat, 01 Dec 2007) | 3 lines
  
  Remove unused paramters.
  Add -Wextra to gcc flags to enable more warnings.
........
  r41552 | grafik | 2007-12-01 12:40:56 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Remove borders from simple list tables.
........
  r41553 | grafik | 2007-12-01 12:42:27 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Remove borders from simple list tables.
........
  r41554 | t_schwinger | 2007-12-01 12:52:00 -0800 (Sat, 01 Dec 2007) | 3 lines
  
  Using central stylesheet now.
........
  r41555 | vladimir_prus | 2007-12-01 13:26:09 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Document STLport
........
  r41556 | grafik | 2007-12-01 13:53:47 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Document various "new" features, and add in the history till now for 3.1.16. (fixes #1445 #1447 #1448)
........
  r41557 | vladimir_prus | 2007-12-01 14:31:04 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Remove unused method
........
  r41562 | grafik | 2007-12-01 17:59:02 -0800 (Sat, 01 Dec 2007) | 1 line
  
  No-op no-empty action.
........
  r41563 | grafik | 2007-12-01 18:03:48 -0800 (Sat, 01 Dec 2007) | 1 line
  
  ';' can't be a no-op on nix.
........
  r41565 | grafik | 2007-12-01 20:06:28 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Remove outdated release procedures, and move content to wiki. Content moved to <http://svn.boost.org/trac/boost/wiki/ReleasePractices/Procedures> and <http://svn.boost.org/trac/boost/wiki/ReleasePractices/ManagerCheckList>. (fixes #1366 #1367)
........
  r41566 | grafik | 2007-12-01 20:22:34 -0800 (Sat, 01 Dec 2007) | 1 line
  
  Remove obsolete images. (fixes #1257)
........
  r41568 | grafik | 2007-12-01 22:56:38 -0800 (Sat, 01 Dec 2007) | 1 line
  
  "Who's Using Boost?" content moved to new web site.
........
  r41569 | grafik | 2007-12-01 23:02:12 -0800 (Sat, 01 Dec 2007) | 1 line
  
  "Who's Using Boost?" content moved to new web site.
........
  r41571 | igaztanaga | 2007-12-02 01:25:53 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Added missing #include <typeinfo> overwritten by previous commit
........
  r41572 | danieljames | 2007-12-02 01:59:15 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Add some parameters to the standalone hash build.
........
  r41574 | danieljames | 2007-12-02 02:23:58 -0800 (Sun, 02 Dec 2007) | 2 lines
  
  Initialise svnmerge.
........
  r41575 | danieljames | 2007-12-02 02:25:22 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Fix the navbar links.
........
  r41577 | jhunold | 2007-12-02 03:51:08 -0800 (Sun, 02 Dec 2007) | 3 lines
  
  Revert revisions 41544 and 41549.
  See http://lists.boost.org/Archives/boost/2007/12/131116.php for details.
........
  r41580 | danieljames | 2007-12-02 05:47:31 -0800 (Sun, 02 Dec 2007) | 2 lines
  
  Revert a change I mean to make on the fix-links branch.
........
  r41582 | danieljames | 2007-12-02 06:15:25 -0800 (Sun, 02 Dec 2007) | 5 lines
  
  Remove formal_review_process, it looks like I forgot to when I updated the
  version in the new site.
  
  Refs #1350.
........
  r41587 | grafik | 2007-12-02 09:03:43 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Obsolete.
........
  r41588 | hkaiser | 2007-12-02 09:18:54 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Applied patch supplied by Jens Seidel. Fixed #1410.
........
  r41590 | hkaiser | 2007-12-02 11:08:13 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Wave: More fixes to allow error free compilation of every header on its own.
........
  r41592 | grafik | 2007-12-02 12:15:25 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Support building of universal binaries using architecture options. Thanks to Mat Marcus. (fixes #552 #1342 #989)
........
  r41593 | niels_dekker | 2007-12-02 14:10:45 -0800 (Sun, 02 Dec 2007) | 1 line
  
  Added missing GCC version (4.0) to expected GCC failures of value_init_test
........


[SVN r41596]
2007-12-02 23:20:06 +00:00
Eric Niebler
6987211717 Merged revisions 41399-41442 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41400 | igaztanaga | 2007-11-26 08:34:13 -0800 (Mon, 26 Nov 2007) | 1 line
  
  Added missing #include <typeinfo>
........
  r41401 | anthonyw | 2007-11-26 09:01:08 -0800 (Mon, 26 Nov 2007) | 1 line
  
  once_flag uses zero-initialization on POSIX as well as windows
........
  r41402 | niels_dekker | 2007-11-26 09:36:52 -0800 (Mon, 26 Nov 2007) | 1 line
  
  Marked value_init_test failures on Borland C++ as "expected failures", as discussed with Fernando Cacciola.
........
  r41404 | rwgk | 2007-11-26 12:46:28 -0800 (Mon, 26 Nov 2007) | 1 line
  
  g++ 4.3.0 compatibility (4.3.0 20071125 (experimental))
........
  r41405 | anthonyw | 2007-11-26 13:15:04 -0800 (Mon, 26 Nov 2007) | 1 line
  
  reverted accidental checkin of new timed_wait functions on condition_variable
........
  r41406 | nasonov | 2007-11-26 13:29:04 -0800 (Mon, 26 Nov 2007) | 3 lines
  
  Remove redundant BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION.
........
  r41407 | chris_kohlhoff | 2007-11-26 13:29:38 -0800 (Mon, 26 Nov 2007) | 3 lines
  
  WinCE doesn't work with all multicast addresses, and even though it doesn't
  support the multicast::enable_loopback option you can still get the value.
........
  r41408 | dave | 2007-11-26 14:01:50 -0800 (Mon, 26 Nov 2007) | 2 lines
  
  Try to extend the workaround to SunPro 5.9, since we're marked as not working on 5.8
........
  r41409 | dave | 2007-11-26 17:40:01 -0800 (Mon, 26 Nov 2007) | 3 lines
  
  Allow Sun-5.7 and Sun-5.8 to fail loudly for Boost.Python so I can see
  what's really wrong.
........
  r41413 | anthonyw | 2007-11-27 06:24:29 -0800 (Tue, 27 Nov 2007) | 1 line
  
  add support for relative timeouts to condition timed_wait
........
  r41414 | grafik | 2007-11-27 09:53:56 -0800 (Tue, 27 Nov 2007) | 1 line
  
  Remove non-existent option info.
........
  r41415 | grafik | 2007-11-27 09:55:13 -0800 (Tue, 27 Nov 2007) | 1 line
  
  Add some utility output formatting functions.
........
  r41416 | grafik | 2007-11-27 09:57:15 -0800 (Tue, 27 Nov 2007) | 1 line
  
  Check empty string invariants, instead of assuming all strings are allocated. And reset strings when they are freed.
........
  r41417 | grafik | 2007-11-27 09:58:50 -0800 (Tue, 27 Nov 2007) | 1 line
  
  Fix buffer overrun bug in expanding @() subexpressions.
........
  r41418 | hkaiser | 2007-11-27 10:18:10 -0800 (Tue, 27 Nov 2007) | 1 line
  
  Wave: Fixed gcc warning, bumped version number.
........
  r41419 | djenkins | 2007-11-27 10:57:48 -0800 (Tue, 27 Nov 2007) | 1 line
  
  Changes for msvc-9.0 /clr flag
........
  r41420 | djenkins | 2007-11-27 10:59:06 -0800 (Tue, 27 Nov 2007) | 1 line
  
  Changes for msvc-9.0 /clr flag
........
  r41423 | niels_dekker | 2007-11-27 13:34:08 -0800 (Tue, 27 Nov 2007) | 1 line
  
  Added value_init test for struct as used in MSVC bug report regarding value-initialization.
........
  r41429 | noel_belcourt | 2007-11-27 18:27:13 -0800 (Tue, 27 Nov 2007) | 3 lines
  
  Fix pathscale rpath issue per Alain Minussi's suggestion.
........
  r41430 | grafik | 2007-11-27 23:08:13 -0800 (Tue, 27 Nov 2007) | 1 line
  
  Add test for result status values of simple actions, i.e. empty actions.
........
  r41431 | grafik | 2007-11-27 23:21:49 -0800 (Tue, 27 Nov 2007) | 19 lines
  
  build-system.jam
  * Reflect added start/end timestamps for actions in xml output. And update action rules for new args.
  
  execcmd.h
  * Add start/end timestamps to action timing info.
  
  execnt.c
  * Fix filetime_seconds calculation when time is larger than low 32 bit value.
  * Add calc of C time_t from Windows FILETIME.
  * Add start/end timestamps recording to action timing info.
  
  execunix.c
  * Add start/end timestamps recording to action timing info.
  
  jam.c
  * Change JAMDATE to use common ISO date format.
  
  make1.c
  * Redo __TIMING_RULE__ and __ACTION__RULE__ invocations to new argument ordering and added end/result timestamp values.
........
  r41432 | chris_kohlhoff | 2007-11-28 05:26:33 -0800 (Wed, 28 Nov 2007) | 3 lines
  
  Make async operations fail with an error if the socket descriptor doesn't
  fit into the select call's fd_set.
........
  r41433 | bgubenko | 2007-11-28 07:33:16 -0800 (Wed, 28 Nov 2007) | 1 line
  
  add "gcc*hpux*" toolset for serialization library bug on big endian platforms
........
  r41436 | niels_dekker | 2007-11-28 09:19:37 -0800 (Wed, 28 Nov 2007) | 1 line
  
  Added tests for two more struct types to value_init_test -- discussed with Fernando Cacciola
........
  r41439 | bgubenko | 2007-11-28 11:04:53 -0800 (Wed, 28 Nov 2007) | 1 line
  
  add "<linkflags>-lrt" for acc* toolsets
........
  r41440 | grafik | 2007-11-28 12:24:17 -0800 (Wed, 28 Nov 2007) | 1 line
  
  Fix for latest Doxygen namespace file names. And support for method groups. From Samuel Debionne.
........


[SVN r41444]
2007-11-28 22:03:59 +00:00
Eric Niebler
4c9cd66655 Merged revisions 41268-41398 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41270 | dgregor | 2007-11-20 21:50:21 -0800 (Tue, 20 Nov 2007) | 1 line
  
  Fixes #1456
........
  r41271 | johnmaddock | 2007-11-21 01:39:00 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Added super/subscript styling as per boost-docs mailing list discussion.
........
  r41272 | johnmaddock | 2007-11-21 01:46:36 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Fix << iostream operator for the NTL bindings.
........
  r41273 | anthonyw | 2007-11-21 02:44:22 -0800 (Wed, 21 Nov 2007) | 1 line
  
  changed platform split to allow bjam to track includes and check dependencies
........
  r41274 | schoepflin | 2007-11-21 03:00:18 -0800 (Wed, 21 Nov 2007) | 2 lines
  
  Added myself to the platform maintainers file.
........
  r41276 | bgubenko | 2007-11-21 03:43:00 -0800 (Wed, 21 Nov 2007) | 1 line
  
  fix typo in the marking of function_types library tests
........
  r41277 | johnmaddock | 2007-11-21 04:09:28 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Change warning suppression, to suppress warnings for VC8 as well.
........
  r41278 | johnmaddock | 2007-11-21 06:03:16 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Apply warning fix for VC8 and later only: earlier versions warn about the warning suppression :-(
........
  r41279 | schoepflin | 2007-11-21 07:21:53 -0800 (Wed, 21 Nov 2007) | 2 lines
  
  Marked function_types failures depending on stdcall as expected on Tru64/CXX.
........
  r41280 | igaztanaga | 2007-11-21 08:18:29 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Added offset_ptr test
........
  r41281 | igaztanaga | 2007-11-21 08:19:19 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Fixed offset_ptr issues with volatile values.
........
  r41282 | igaztanaga | 2007-11-21 08:39:48 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Changed precalculated sqrt(2) values selection to use enable_if.
........
  r41284 | igaztanaga | 2007-11-21 09:32:20 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Added performance Jamfile to the project
........
  r41285 | hkaiser | 2007-11-21 09:53:37 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Wave: Fixed #line statements in generated files not to contain Windows paths anymore.
........
  r41286 | marshall | 2007-11-21 11:20:15 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Bug fixes #284, #836, #991
........
  r41287 | grafik | 2007-11-21 11:29:55 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Fix search for Boost.Build so that it only finds the approved version.
........
  r41288 | djowel | 2007-11-21 14:24:37 -0800 (Wed, 21 Nov 2007) | 1 line
  
  updated the master css
........
  r41289 | matias | 2007-11-21 20:55:54 -0800 (Wed, 21 Nov 2007) | 1 line
  
  Explicit failure markup for Bimap
........
  r41290 | matias | 2007-11-21 21:18:38 -0800 (Wed, 21 Nov 2007) | 1 line
  
  remove wrong placed typename
........
  r41297 | joaquin | 2007-11-21 23:59:28 -0800 (Wed, 21 Nov 2007) | 1 line
  
  included an exe filename modifying rule to avoid interference problems with Vista UAC (fixes #1429)
........
  r41299 | djowel | 2007-11-22 00:39:46 -0800 (Thu, 22 Nov 2007) | 1 line
  
  bug fix
........
  r41300 | schoepflin | 2007-11-22 01:32:15 -0800 (Thu, 22 Nov 2007) | 3 lines
  
  Marked failures for kolmogorov_max_flow_test and max_flow_test in the graph
  library as expected for cxx and acc.
........
  r41301 | johnmaddock | 2007-11-22 01:59:38 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Added try...catch around TSS initialisation.
........
  r41302 | johnmaddock | 2007-11-22 02:38:48 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Fixes #501 #1334.
........
  r41303 | bgubenko | 2007-11-22 03:33:09 -0800 (Thu, 22 Nov 2007) | 1 line
  
  fix typo in r41302 causing validation error
........
  r41304 | rogeeff | 2007-11-22 11:44:12 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Try to make it work in release build
........
  r41305 | rogeeff | 2007-11-22 11:56:58 -0800 (Thu, 22 Nov 2007) | 1 line
  
  new file
........
  r41308 | rogeeff | 2007-11-22 12:56:07 -0800 (Thu, 22 Nov 2007) | 2 lines
  
  negative chars test added
  some statements added to the online_test
........
  r41310 | rogeeff | 2007-11-22 13:57:16 -0800 (Thu, 22 Nov 2007) | 1 line
  
  issue with class base test cases addressed
........
  r41311 | anthonyw | 2007-11-22 14:01:30 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Removed thread::self in favour of allowing interruption through a thread::id; no longer requires DuplicateHandle
........
  r41312 | rogeeff | 2007-11-22 14:06:59 -0800 (Thu, 22 Nov 2007) | 1 line
  
  comments cleanup
........
  r41313 | grafik | 2007-11-22 18:57:42 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Produce less regression reports to reduce the cycle time for test reporting.
........
  r41314 | grafik | 2007-11-22 18:58:14 -0800 (Thu, 22 Nov 2007) | 1 line
  
  Produce less regression reports to reduce the cycle time for test reporting.
........
  r41315 | joaquin | 2007-11-22 23:57:15 -0800 (Thu, 22 Nov 2007) | 1 line
  
  added .exe suffix missing at rev 41297
........
  r41317 | johnmaddock | 2007-11-23 09:05:25 -0800 (Fri, 23 Nov 2007) | 1 line
  
  Remove the log files, we don't need these in SVN Trunk.
........
  r41318 | grafik | 2007-11-23 12:43:38 -0800 (Fri, 23 Nov 2007) | 1 line
  
  Add --skip-script-download option to run.py to avoid repeated regression script downloads. Thanks to _m_ for the changes.
........
  r41319 | bemandawes | 2007-11-23 14:55:48 -0800 (Fri, 23 Nov 2007) | 1 line
  
  Add the instructions formerly in the (now deleted) runner sub-directory
........
  r41320 | anthonyw | 2007-11-23 15:09:36 -0800 (Fri, 23 Nov 2007) | 1 line
  
  Integrate TSS with thread data; test to ensure cleanup done for native threads as well as boost::thread-launched threads now runs for pthread API as well as win32 API
........
  r41324 | grafik | 2007-11-23 18:16:50 -0800 (Fri, 23 Nov 2007) | 1 line
  
  Allow use of "conditional" to multiply a condition that already has the full condition in it.
........
  r41325 | igaztanaga | 2007-11-24 01:44:30 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Marked msvc-8.0-wm5 as unusable
........
  r41326 | niels_dekker | 2007-11-24 03:51:03 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Checked the result of value_init test function, hoping to pinpoint exactly for what particular type T value_initialized<T> might fail, on some platforms
........
  r41327 | johnmaddock | 2007-11-24 04:25:25 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Apply patches for building regex on WinCE see: http://lists.boost.org/Archives/boost/2007/11/130839.php
........
  r41328 | bemandawes | 2007-11-24 05:15:03 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Bring required compilers list closer into sync with actual testers and list discussion
........
  r41330 | bemandawes | 2007-11-24 06:59:08 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Remove mingw plus some compilers no longer being tested from required list
........
  r41331 | nasonov | 2007-11-24 07:22:52 -0800 (Sat, 24 Nov 2007) | 1 line
  
  minor changes
........
  r41333 | bemandawes | 2007-11-24 08:39:30 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Change long name inspection to follow ISO 9660:1997, thus replacing all length requirements with a single 207 maximum path length requirement. 
........
  r41338 | garcia | 2007-11-24 10:19:22 -0800 (Sat, 24 Nov 2007) | 2 lines
  
  A bunch of review dates have been added.
........
  r41339 | johnmaddock | 2007-11-24 10:34:17 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Changed meaning of "at_end" needs copy-constructor fix.
........
  r41341 | noel_belcourt | 2007-11-24 11:09:56 -0800 (Sat, 24 Nov 2007) | 6 lines
  
  Replace mpi wrappers with native pathscale compilers.
  Fixed how we invoke f77 (pathf90 -f77).
  
  Thanks to Alain Miniussi for reporting this.
........
  r41342 | igaztanaga | 2007-11-24 11:47:58 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Added workaround for systems without SEM_FAILED and semaphores based on filesystem
........
  r41343 | rogeeff | 2007-11-24 11:49:24 -0800 (Sat, 24 Nov 2007) | 5 lines
  
  switch to nasic_cstring.hpp instead of fwd header
  added failed expression to the system error
  system_error is caught and reported in cpp_main.ipp
  64 bit compatibility issue in debug.ipp fixed
  missing headers in algorithm.hpp added
........
  r41344 | davedeakins | 2007-11-24 12:30:50 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Define the BOOST_NO_SWPRINTF macro for WinCE.  WinCE's CRT does not have a conforming swprintf signature.
........
  r41348 | igaztanaga | 2007-11-24 16:55:14 -0800 (Sat, 24 Nov 2007) | 1 line
  
  Marked pathscale and vacpp as unusable for Interprocess/Intrusive
........
  r41350 | davedeakins | 2007-11-24 20:30:02 -0800 (Sat, 24 Nov 2007) | 1 line
  
  A few corrections to the WinCE patches
........
  r41352 | dave | 2007-11-25 01:02:01 -0800 (Sun, 25 Nov 2007) | 2 lines
  
  Attempt SunPro workaround
........
  r41353 | guwi17 | 2007-11-25 05:34:20 -0800 (Sun, 25 Nov 2007) | 6 lines
  
  - fix and close #1237
  - symmetric resize used wrong internal resize method
  -- Dese und die folgenden Zeilen werden ignoriert --
  
  M    symmetric.hpp
........
  r41355 | bemandawes | 2007-11-25 05:56:09 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Remove extra ) from prior commit
........
  r41356 | danieljames | 2007-11-25 06:10:05 -0800 (Sun, 25 Nov 2007) | 2 lines
  
  Deleting the BoostCon* files. Fixes #1256
........
  r41357 | bemandawes | 2007-11-25 07:08:28 -0800 (Sun, 25 Nov 2007) | 1 line
  
  clear # 1230, mbstate uninitialized
........
  r41358 | igaztanaga | 2007-11-25 07:18:04 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Marked intel-linux-8.* as unusable for Interprocess and Intrusive
........
  r41359 | johnmaddock | 2007-11-25 07:47:58 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Oops, previous commit messed up POSIX timing code, now fixed.
........
  r41361 | johnmaddock | 2007-11-25 08:26:36 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Redirection file.
........
  r41362 | grafik | 2007-11-25 09:06:17 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Move buildbot support to sandbox until we decide what to do with it.
........
  r41363 | grafik | 2007-11-25 09:12:42 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Some cleanup of tools documentation. Add boostbook redir file. Delete duplicate time_string.hpp. Repoint regression instructions to web site.
........
  r41364 | johnmaddock | 2007-11-25 09:23:25 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Fix date.
........
  r41378 | bemandawes | 2007-11-25 11:56:10 -0800 (Sun, 25 Nov 2007) | 1 line
  
  remove hp_cxx-71_006_tru64 as required.
........
  r41380 | grafik | 2007-11-25 12:10:10 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Add --build-type option to root build. Two choices possible at the moment "minimal" and "complete". With minimal as the default we only build the common release variant. The old behavior of building many variants is available with "complete".
........
  r41381 | fcacciola | 2007-11-25 12:26:14 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Cast to base added to avoid a call to the convertir constructor/assignment (see Tickes 1419 and 1420)
........
  r41383 | burbelgruff | 2007-11-25 13:16:46 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Revert to old sizeof based solution for retrieving the type from a typeof hack. This is in order to overcome problems with the code analysis module introduced in Visual Studio 2005.
........
  r41384 | davedeakins | 2007-11-25 13:53:26 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Added a primitive tmpnam function for WinCE (which does not supply any kind of tmpnam in its CRT)
........
  r41385 | nasonov | 2007-11-25 14:28:16 -0800 (Sun, 25 Nov 2007) | 3 lines
  
  Pass unsigned type to lcast_put_unsigned.
........
  r41387 | nasonov | 2007-11-25 15:08:50 -0800 (Sun, 25 Nov 2007) | 2 lines
  
  Support for string with non-default char_traits and allocator.
........
  r41391 | davedeakins | 2007-11-25 22:36:55 -0800 (Sun, 25 Nov 2007) | 1 line
  
  Nearly all test for the intrusive library pass on the MSVC8/WM5 platform.
........
  r41394 | joaquin | 2007-11-26 03:52:03 -0800 (Mon, 26 Nov 2007) | 1 line
  
  added missing traits template arg to a lexical_stream instantiation
........
  r41395 | anthonyw | 2007-11-26 04:17:45 -0800 (Mon, 26 Nov 2007) | 1 line
  
  workaround for Borland compiler
........
  r41396 | anthonyw | 2007-11-26 05:29:15 -0800 (Mon, 26 Nov 2007) | 1 line
  
  Don't compare native_handle_t against 0 --- do appropriate checks in create_native_thread for platforms where pthread_t is not comparable
........
  r41397 | joaquin | 2007-11-26 05:48:36 -0800 (Mon, 26 Nov 2007) | 1 line
  
  ADL-based swap call moved to an utility function (after mistaken attempt at rev 41220 to solve name-hiding issues)
........
  r41398 | anthonyw | 2007-11-26 07:44:07 -0800 (Mon, 26 Nov 2007) | 1 line
  
  fixed import/export declarations so new once code works with pthread-win32
........


[SVN r41399]
2007-11-26 16:25:40 +00:00
Eric Niebler
e498a226c6 Merged revisions 41161-41246 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41161 | bemandawes | 2007-11-16 15:21:47 -0800 (Fri, 16 Nov 2007) | 1 line
  
  Fix markup error
........
  r41163 | bgubenko | 2007-11-16 17:28:10 -0800 (Fri, 16 Nov 2007) | 1 line
  
  mark some fusion library tests for acc toolset
........
  r41164 | djowel | 2007-11-16 17:51:04 -0800 (Fri, 16 Nov 2007) | 1 line
  
  fix for trac ticket #1450
........
  r41165 | lbourdev | 2007-11-16 19:38:25 -0800 (Fri, 16 Nov 2007) | 10 lines
  
  Updated to version 2.1.2
  Added support for more compilers.
  Added new flag GIL_NONWORD_POINTER_ALIGNMENT_SUPPORTED to indicate whether dereferencing on non-word
  boundary is supported. Enabling this flag improves performance.
  Fixed two bugs related to non-byte-aligned images. The image alignment parameter is now specified in
  bytes, and has a default of 0, which means "packed" alignment. In particular, for non-byte-aligned
  images alignment of 0 means there are no padding bits at the ends of rows.
  Added the allocator as an optional parameter to image constructors and image recreate methods.
........
  r41167 | grafik | 2007-11-16 20:11:49 -0800 (Fri, 16 Nov 2007) | 1 line
  
  Add "--out-xml=xyz.xml" option that dumps the output of all actions, and the test.jam information, to the given file. Changes are mostly from Dave.
........
  r41169 | johnmaddock | 2007-11-17 02:00:43 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Ooops, check on wrong index, now fixed.
........
  r41170 | johnmaddock | 2007-11-17 04:17:05 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Fix WinCE issues.
........
  r41172 | johnmaddock | 2007-11-17 10:41:29 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Changed test to catch throw exceptions from thread creation.
........
  r41173 | bemandawes | 2007-11-17 12:13:16 -0800 (Sat, 17 Nov 2007) | 1 line
  
  // Add or correct comment identifying Boost library this header is associated with.
........
  r41174 | grafik | 2007-11-17 12:14:24 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Add in Dave's comments, and expand information in XML output to include action names, sources, properties, bjam info, and platform info. This required one minor change to actions to keep track of the action object generating the targets.
........
  r41175 | nesotto | 2007-11-17 12:22:05 -0800 (Sat, 17 Nov 2007) | 1 line
  
  minor update of comments
........
  r41176 | nesotto | 2007-11-17 12:22:20 -0800 (Sat, 17 Nov 2007) | 1 line
  
  last updates
........
  r41177 | nesotto | 2007-11-17 12:44:29 -0800 (Sat, 17 Nov 2007) | 1 line
  
  works after local test with vc8
........
  r41178 | nesotto | 2007-11-17 13:02:22 -0800 (Sat, 17 Nov 2007) | 1 line
  
  added missing header
........
  r41180 | nesotto | 2007-11-17 13:19:13 -0800 (Sat, 17 Nov 2007) | 1 line
  
  iostream macro patch
........
  r41181 | nesotto | 2007-11-17 13:21:53 -0800 (Sat, 17 Nov 2007) | 1 line
  
  removed some warnings
........
  r41182 | grafik | 2007-11-17 13:22:40 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Add working dir to build description, move jam version to an attribute.
........
  r41183 | nesotto | 2007-11-17 13:24:16 -0800 (Sat, 17 Nov 2007) | 1 line
  
  macro patch
........
  r41185 | nesotto | 2007-11-17 13:43:32 -0800 (Sat, 17 Nov 2007) | 1 line
  
  minor change to define the value type of the iterators better
........
  r41186 | grafik | 2007-11-17 14:09:26 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Change "actual" to the more natural "target", and change "target" to "path". Add bjam command and bb version to XML.
........
  r41187 | bemandawes | 2007-11-17 14:48:06 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Add or correct comment identifying Boost library this header is associated with.
........
  r41188 | andreas_huber69 | 2007-11-17 16:08:46 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Added markup for statechart failures on msvc-8.0~wm5~stlport5.1
........
  r41192 | grafik | 2007-11-17 22:42:14 -0800 (Sat, 17 Nov 2007) | 1 line
  
  Add to XML output the known targets and dependencies to allow creation of the full build dependency graph. Merge from Dave's Bitten branch.
........
  r41193 | johnmaddock | 2007-11-18 02:07:14 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Ooops: previous commit broke platforms/compilers with no long double support, added workaround as fix.
........
  r41194 | igaztanaga | 2007-11-18 02:41:57 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Interprocess changes to support systems with filesystem-based shared memory
........
  r41195 | igaztanaga | 2007-11-18 02:43:35 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Added scapegoat trees and an option to store the hash value in the hook for unordered containers
........
  r41196 | igaztanaga | 2007-11-18 02:44:56 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Added scapegoat trees and an option to store the hash value in the hook for unordered containers
........
  r41197 | igaztanaga | 2007-11-18 02:51:19 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Interprocess changes to support systems with filesystem-based shared memory
........
  r41198 | igaztanaga | 2007-11-18 02:54:48 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Interprocess changes to support systems with filesystem-based shared memory
........
  r41199 | johnmaddock | 2007-11-18 04:23:37 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Added missing template argument to specialisations.
........
  r41200 | johnmaddock | 2007-11-18 04:24:42 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Fix IMB xlc error limits, added workarounds where these were missed by the last commit.
........
  r41201 | t_schwinger | 2007-11-18 06:06:47 -0800 (Sun, 18 Nov 2007) | 3 lines
  
  adds comment to fusion aCC failure markup
........
  r41202 | danieljames | 2007-11-18 08:10:12 -0800 (Sun, 18 Nov 2007) | 2 lines
  
  Move the instructions for running regression tests to the new site. Fixes #1265.
........
  r41210 | danieljames | 2007-11-18 12:18:04 -0800 (Sun, 18 Nov 2007) | 2 lines
  
  Move the 'implementation variations' page to the new site. Fixes #1355.
........
  r41211 | eric_niebler | 2007-11-18 12:19:55 -0800 (Sun, 18 Nov 2007) | 1 line
  
  vc6 doesn't like BOOST_MPL_ASSERT_MSG
........
  r41212 | grafik | 2007-11-18 12:24:25 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Inspection report fixes.
........
  r41213 | grafik | 2007-11-18 12:53:28 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Cleanup tools/regression to remove obsolete runner scripts, move existing docs to doc subdir, and clean html docs into valid xhtml.
........
  r41214 | grafik | 2007-11-18 13:02:51 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Add missing <cstring> include, for std::strchr function.
........
  r41215 | grafik | 2007-11-18 13:07:26 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Add keyword tags.
........
  r41216 | niels_dekker | 2007-11-18 14:11:57 -0800 (Sun, 18 Nov 2007) | 1 line
  
  Code refactoring: removed private base classes of value_initialized, as suggested by Fernando Cacciola.
........
  r41217 | djowel | 2007-11-18 16:05:43 -0800 (Sun, 18 Nov 2007) | 1 line
  
  added link to docs
........
  r41218 | johnmaddock | 2007-11-19 02:02:16 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Oops: added missing template specialisation argument.
........
  r41219 | johnmaddock | 2007-11-19 02:20:36 -0800 (Mon, 19 Nov 2007) | 1 line
  
  No user32.lib on WinCE
........
  r41220 | joaquin | 2007-11-19 03:08:11 -0800 (Mon, 19 Nov 2007) | 1 line
  
  moved some ADL stuff out of a potentially name-hiding scope
........
  r41221 | troyer | 2007-11-19 04:15:58 -0800 (Mon, 19 Nov 2007) | 1 line
  
  made complex seriaqlization more portable
........
  r41222 | anthonyw | 2007-11-19 04:17:31 -0800 (Mon, 19 Nov 2007) | 1 line
  
  fixed TSS cleanup on 64-bit Windows
........
  r41223 | anthonyw | 2007-11-19 04:29:14 -0800 (Mon, 19 Nov 2007) | 1 line
  
  fixed problems with TSS cleanup when using LoadLibrary and when threads finish after thread_specific_ptr instance has been destroyed
........
  r41224 | garcia | 2007-11-19 05:28:00 -0800 (Mon, 19 Nov 2007) | 2 lines
  
  A bunch of review volunteers.
........
  r41225 | garcia | 2007-11-19 06:01:34 -0800 (Mon, 19 Nov 2007) | 2 lines
  
  Added boost.range update
........
  r41226 | anthonyw | 2007-11-19 06:29:22 -0800 (Mon, 19 Nov 2007) | 1 line
  
  added copyright
........
  r41227 | aaron_windsor | 2007-11-19 07:28:26 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Cleaning up #includes to avoid errors on gcc 4.1 and above.
........
  r41234 | igaztanaga | 2007-11-19 08:55:23 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Fixed errors detected by gcc-4.3
........
  r41235 | hljin | 2007-11-19 09:26:12 -0800 (Mon, 19 Nov 2007) | 1 line
  
  GIL: updated the design guide based on the new changes
........
  r41236 | grafik | 2007-11-19 09:44:31 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Make quietly actions really quiet by not printing the command output. The output for the quietly actions is still available through "__ACTION_RULE__".
........
  r41237 | grafik | 2007-11-19 10:02:43 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Add architecture and instruction-set values for HP/PA-RISC.
........
  r41238 | igaztanaga | 2007-11-19 10:09:13 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Corrected ifdef
........
  r41240 | igaztanaga | 2007-11-19 10:32:12 -0800 (Mon, 19 Nov 2007) | 1 line
  
  Fixed 64 bit std::size_t specialization error
........
  r41241 | hljin | 2007-11-19 10:34:59 -0800 (Mon, 19 Nov 2007) | 1 line
  
  GIL: broke the main test into small tests
........
  r41242 | bgubenko | 2007-11-19 11:25:21 -0800 (Mon, 19 Nov 2007) | 1 line
  
  add OSPLAT=PARISC for HP-UX PA-RISC
........


[SVN r41247]
2007-11-20 07:41:38 +00:00
Eric Niebler
f8e11c2bfc Merged revisions 41072-41140 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41077 | troyer | 2007-11-13 23:00:02 -0800 (Tue, 13 Nov 2007) | 1 line
  
  Added support for std::complex to serialization
........
  r41078 | joaquin | 2007-11-13 23:09:29 -0800 (Tue, 13 Nov 2007) | 1 line
  
  added missing include
........
  r41079 | djowel | 2007-11-14 02:13:51 -0800 (Wed, 14 Nov 2007) | 1 line
  
  adjust to compensate for lack of <small> tag.
........
  r41080 | djowel | 2007-11-14 02:17:09 -0800 (Wed, 14 Nov 2007) | 1 line
  
  refresh docs
........
  r41081 | djowel | 2007-11-14 02:23:23 -0800 (Wed, 14 Nov 2007) | 1 line
  
  refresh docs
........
  r41082 | djowel | 2007-11-14 02:24:21 -0800 (Wed, 14 Nov 2007) | 1 line
  
  refresh docs
........
  r41083 | anthonyw | 2007-11-14 03:08:09 -0800 (Wed, 14 Nov 2007) | 1 line
  
  ignore and join all threads in group on exception
........
  r41084 | anthonyw | 2007-11-14 03:56:53 -0800 (Wed, 14 Nov 2007) | 1 line
  
  interrupt and join all threads in a group if an exception is thrown during a test
........
  r41086 | johnmaddock | 2007-11-14 04:14:19 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Merged changes from the Sandbox to Trunk.
........
  r41087 | anthonyw | 2007-11-14 04:17:41 -0800 (Wed, 14 Nov 2007) | 1 line
  
  interrupt and join all threads in a group if an exception is thrown during a test
........
  r41088 | johnmaddock | 2007-11-14 04:41:32 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Added WinCE workaround.
........
  r41089 | johnmaddock | 2007-11-14 05:03:15 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Catch exceptions thrown from thread creation.
........
  r41090 | anthonyw | 2007-11-14 06:49:58 -0800 (Wed, 14 Nov 2007) | 1 line
  
  fixes for pthread implementation
........
  r41091 | bemandawes | 2007-11-14 07:50:43 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Replace old docs with excerpts from http://article.gmane.org/gmane.comp.lib.boost.testing/5020
........
  r41093 | eric_niebler | 2007-11-14 08:36:15 -0800 (Wed, 14 Nov 2007) | 1 line
  
  fix support for segmented iteration
........
  r41094 | dave | 2007-11-14 09:37:55 -0800 (Wed, 14 Nov 2007) | 3 lines
  
  Update command-prompt instructions per
  http://news.gmane.org/find-root.php?message_id=%3cfhcrem%24c4%241%40ger.gmane.org%3e
........
  r41095 | bemandawes | 2007-11-14 12:05:30 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Bring docs more in line with reality:-)
........
  r41097 | hljin | 2007-11-14 18:07:53 -0800 (Wed, 14 Nov 2007) | 1 line
  
  GIL: removed the example directory from the documentation as it is a duplication and re-directed the Doxygen documentation to a local copy (to be submitted next)
........
  r41098 | hljin | 2007-11-14 18:30:13 -0800 (Wed, 14 Nov 2007) | 1 line
  
  GIL: added a local copy of the Doxygen documentation
........
  r41099 | hljin | 2007-11-14 18:32:04 -0800 (Wed, 14 Nov 2007) | 1 line
  
  GIL: added a local copy of the Doxygen documentation (second batch)
........
  r41100 | chris_kohlhoff | 2007-11-14 22:19:04 -0800 (Wed, 14 Nov 2007) | 6 lines
  
  Try to fix an order-of-initialisation problem with error_category references.
  The symptom, which only occurs in some applications, is a crash due to a
  dereference of a null pointer. The exact conditions under which the problem
  occurs are not fully understood, so this fix is probably more paranoid than
  necessary.
........
  r41102 | jhunold | 2007-11-14 23:04:24 -0800 (Wed, 14 Nov 2007) | 1 line
  
  Suppress msvc "deprecated" warnings.
........
  r41103 | johnmaddock | 2007-11-15 01:52:26 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Fix some compiler warnings when building with the Intel and aCC compilers.
........
  r41104 | garcia | 2007-11-15 04:50:48 -0800 (Thu, 15 Nov 2007) | 2 lines
  
  John Torjo is reviewing the X-files.
........
  r41105 | hkaiser | 2007-11-15 05:27:24 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Suppressed more warnings during build of Wave.
........
  r41106 | bemandawes | 2007-11-15 06:36:40 -0800 (Thu, 15 Nov 2007) | 1 line
  
  GetUserDefaultUILanguage isn't present for Cygwin, so disable use
........
  r41107 | bemandawes | 2007-11-15 07:20:27 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Get rid of .cvsignore files
........
  r41108 | eric_niebler | 2007-11-15 08:06:22 -0800 (Thu, 15 Nov 2007) | 1 line
  
  fix typo
........
  r41110 | grafik | 2007-11-15 08:58:21 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Fix building of multiple regression tools at once.
........
  r41111 | gmelquio | 2007-11-15 09:52:31 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Fixed documentation typo.
........
  r41113 | grafik | 2007-11-15 10:56:43 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Switch intel-win32 to use static multi thread runtime since the single thread static runtime is no longer available. (fixes #1287)
........
  r41114 | andreas_huber69 | 2007-11-15 11:22:12 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Added new FAQ item suggested by Chris Paulse.
........
  r41116 | guwi17 | 2007-11-15 12:52:37 -0800 (Thu, 15 Nov 2007) | 4 lines
  
  This patch now lets the Sun compiler work for most of uBLAS. 'test4' is now failing.
  Too avoid other compilers complaining about missing return values in some functions where exceptions are thrown, code was added so an arbitatry were chosen.
........
  r41117 | danmarsden | 2007-11-15 13:15:47 -0800 (Thu, 15 Nov 2007) | 1 line
  
  removing failing test on EDG compilers
........
  r41118 | grafik | 2007-11-15 14:05:15 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Remove redundant reference to system library. It causes double linking when used indirectly through filesystem. Which can lead to double linking incompatible variants when a specific filesystem variant is requested.
........
  r41119 | grafik | 2007-11-15 14:05:22 -0800 (Thu, 15 Nov 2007) | 1 line
  
  Oops, forgot we need to use the root boost project settings when building.
........


[SVN r41141]
2007-11-16 08:03:15 +00:00
Eric Niebler
784bdce341 Merged revisions 41011-41022 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41012 | danieljames | 2007-11-11 11:14:34 -0800 (Sun, 11 Nov 2007) | 4 lines
  
  Move several C++ related articles to the new site.
  
  Fixes #1343, #1344, #1347, #1352, #1353.
........
  r41013 | lbourdev | 2007-11-11 11:29:06 -0800 (Sun, 11 Nov 2007) | 3 lines
  
  GIL: Documentation
........
  r41014 | danieljames | 2007-11-11 11:40:39 -0800 (Sun, 11 Nov 2007) | 2 lines
  
  Update the discussion policy page on the beta site, and remove it from trunk.
........
  r41015 | lbourdev | 2007-11-11 11:46:14 -0800 (Sun, 11 Nov 2007) | 3 lines
  
  GIL: Documentation
........
  r41016 | danieljames | 2007-11-11 11:58:48 -0800 (Sun, 11 Nov 2007) | 2 lines
  
  Move the moderators page to the beta site. Fixes #1363.
........
  r41018 | lbourdev | 2007-11-11 12:01:45 -0800 (Sun, 11 Nov 2007) | 2 lines
  
  GIL documentation
........
  r41019 | djowel | 2007-11-11 14:32:48 -0800 (Sun, 11 Nov 2007) | 1 line
  
  fix mismatch include guard
........


[SVN r41023]
2007-11-12 05:44:58 +00:00
Eric Niebler
2a34d0df3b Merged revisions 40922-40969 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r40923 | eric_niebler | 2007-11-07 22:48:08 -0800 (Wed, 07 Nov 2007) | 1 line
  
  fix errors and warnings on msvc-9
........
  r40924 | chris_kohlhoff | 2007-11-07 23:52:49 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  Fix timer stalls.
........
  r40925 | johnmaddock | 2007-11-08 01:38:22 -0800 (Thu, 08 Nov 2007) | 1 line
  
  Fixed license text.
........
  r40926 | bemandawes | 2007-11-08 04:35:50 -0800 (Thu, 08 Nov 2007) | 1 line
  
  Borland appends newline, so just check text
........
  r40927 | johnmaddock | 2007-11-08 04:39:58 -0800 (Thu, 08 Nov 2007) | 1 line
  
  Removed non-BSL files, updated and regenerated docs accordingly.
........
  r40928 | bemandawes | 2007-11-08 05:01:23 -0800 (Thu, 08 Nov 2007) | 1 line
  
  Markup older Borland compilers that don't support enable_if
........
  r40932 | bemandawes | 2007-11-08 06:25:09 -0800 (Thu, 08 Nov 2007) | 1 line
  
  Clarify comment
........
  r40934 | joaquin | 2007-11-08 07:46:57 -0800 (Thu, 08 Nov 2007) | 1 line
  
  removed markup for a fixed failure of multi_index on vacpp
........
  r40935 | nikiml | 2007-11-08 08:28:44 -0800 (Thu, 08 Nov 2007) | 1 line
  
  changed handle cast to downcast
........
  r40936 | hljin | 2007-11-08 09:31:56 -0800 (Thu, 08 Nov 2007) | 1 line
  
  GIL: added missing standard C++ header files
........
  r40937 | hljin | 2007-11-08 09:35:37 -0800 (Thu, 08 Nov 2007) | 1 line
  
  GIL: added namespace prefix to avoid confusion
........
  r40938 | danieljames | 2007-11-08 10:04:12 -0800 (Thu, 08 Nov 2007) | 3 lines
  
  Remove the <small> from the copyright footer, because it was causing the markup
  to be invalid.
........
  r40939 | johnmaddock | 2007-11-08 10:05:28 -0800 (Thu, 08 Nov 2007) | 1 line
  
  Applied fix from http://svn.boost.org/trac/boost/ticket/1023.
........
  r40956 | vladimir_prus | 2007-11-09 00:26:47 -0800 (Fri, 09 Nov 2007) | 1 line
  
  Don't use toolset.register
........
  r40957 | vladimir_prus | 2007-11-09 00:30:27 -0800 (Fri, 09 Nov 2007) | 2 lines
  
  Remove toolset.register.
........
  r40958 | speedsnail | 2007-11-09 00:31:45 -0800 (Fri, 09 Nov 2007) | 2 lines
  
  Force static linking for toolsets mingw and boorland.
........
  r40959 | speedsnail | 2007-11-09 01:28:29 -0800 (Fri, 09 Nov 2007) | 1 line
  
  Reverted the previous commit, until I find a better solution...
........
  r40960 | johnmaddock | 2007-11-09 01:54:43 -0800 (Fri, 09 Nov 2007) | 1 line
  
  Still trying to get the Solaris error rates correct....
........
  r40961 | johnmaddock | 2007-11-09 01:59:37 -0800 (Fri, 09 Nov 2007) | 1 line
  
  Trivial fix for issue #647.
........
  r40962 | nesotto | 2007-11-09 02:27:42 -0800 (Fri, 09 Nov 2007) | 1 line
  
  major update wrt. new range concepts
........
  r40963 | johnmaddock | 2007-11-09 03:01:45 -0800 (Fri, 09 Nov 2007) | 1 line
  
  Improved error messages and added tentative fixes for HP Tru64: the compiler appears to store constants that should underflow to zero as a small non-zero values which messes up the logic used in the test cases.
........
  r40964 | nesotto | 2007-11-09 05:13:06 -0800 (Fri, 09 Nov 2007) | 1 line
  
  minor editorial issue
........
  r40965 | nesotto | 2007-11-09 05:30:57 -0800 (Fri, 09 Nov 2007) | 1 line
  
  update of new concepts, and replacement of range_size<T>::type with range_difference<T>::type throughut the library
........
  r40966 | nesotto | 2007-11-09 05:31:43 -0800 (Fri, 09 Nov 2007) | 1 line
  
  minor tweaks to avoid warnings ... extension mechanism updated to follow new protocol
........
  r40967 | schoepflin | 2007-11-09 06:25:44 -0800 (Fri, 09 Nov 2007) | 1 line
  
  Added memory barriers to Tru64 atomic ops.
........
  r40968 | nesotto | 2007-11-09 07:15:28 -0800 (Fri, 09 Nov 2007) | 1 line
  
  improved reference
........
  r40969 | johnmaddock | 2007-11-09 08:57:42 -0800 (Fri, 09 Nov 2007) | 1 line
  
  Added needed macro suppression to use of isfinite.
........


[SVN r40970]
2007-11-09 17:28:34 +00:00
Eric Niebler
1f77aea9d2 Merged revisions 40889-40921 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r40889 | nikiml | 2007-11-07 08:06:55 -0800 (Wed, 07 Nov 2007) | 1 line
  
  added forgotten array_object_manager_traits::get_pytype
........
  r40890 | bemandawes | 2007-11-07 08:08:09 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Copyright and/or License cleanup
........
  r40892 | nesotto | 2007-11-07 08:54:10 -0800 (Wed, 07 Nov 2007) | 1 line
  
  changed constants to inline function to avoid ODR problems
........
  r40893 | garcia | 2007-11-07 09:06:19 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  changed url to the right one.
........
  r40894 | johnmaddock | 2007-11-07 09:17:39 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added support for VC9.
........
  r40895 | johnmaddock | 2007-11-07 09:21:41 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Regenerated docs to add license info.
........
  r40896 | johnmaddock | 2007-11-07 09:38:19 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  Removed PDF docs: we'll put these somewhere else.
  Fixed some license/copyright issues.
........
  r40897 | igaztanaga | 2007-11-07 09:55:18 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Increased shared memory size, since it was insufficient for 64 bit applications
........
  r40898 | jhunold | 2007-11-07 10:06:31 -0800 (Wed, 07 Nov 2007) | 4 lines
  
  Fix: remove <user-interface>gui from usage-requirements of QtGui.
  Rationale: <user-interface>gui merely disables console output window on <target-os>windows.
  But users often need console debug output when running Gui apps.
........
  r40900 | johnmaddock | 2007-11-07 10:26:11 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added license info.
........
  r40901 | johnmaddock | 2007-11-07 10:27:08 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added license info.
........
  r40902 | johnmaddock | 2007-11-07 10:29:00 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added copyright.
........
  r40903 | johnmaddock | 2007-11-07 10:38:23 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added license info.
........
  r40906 | guwi17 | 2007-11-07 11:34:03 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  - io.hpp: added missing include
........
  r40907 | danieljames | 2007-11-07 12:27:25 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Copied Joel's license changes to the xhtml stylesheet.
........
  r40912 | bemandawes | 2007-11-07 13:54:48 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Initial commit. The starting point for the reference documentation is N1975, Filesystem Library Proposal for TR2 (Revision 3).
........
  r40914 | pdimov | 2007-11-07 14:47:55 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Attempt unspecified bool fix for Sun 5.7-5.9
........
  r40916 | bemandawes | 2007-11-07 17:47:36 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Explicitly say 'no top-posting'. Add links to Wikipedia posting article
........
  r40918 | bemandawes | 2007-11-07 18:55:21 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Cope with larger errno on 64-bit systems
........
  r40919 | chris_kohlhoff | 2007-11-07 20:10:14 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  Eliminate the need for an extra thread to perform timer dispatching.
........


[SVN r40922]
2007-11-08 05:53:54 +00:00
Eric Niebler
9ed7bada8c Merged revisions 40861-40888 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r40862 | dave | 2007-11-06 15:39:09 -0800 (Tue, 06 Nov 2007) | 2 lines
  
  Added missing copyright/license
........
  r40863 | djowel | 2007-11-06 18:12:28 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40864 | aaron_windsor | 2007-11-06 18:30:38 -0800 (Tue, 06 Nov 2007) | 1 line
  
  Shortening file name of a graph test to < 32 characters
........
  r40865 | djowel | 2007-11-06 18:34:18 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added license info in copyright notice at the footer
........
  r40866 | djowel | 2007-11-06 19:06:23 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added license info in copyright notice at the footer
........
  r40867 | djowel | 2007-11-06 19:23:31 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added license info in copyright notice at the footer
........
  r40868 | djowel | 2007-11-06 19:25:59 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40869 | djowel | 2007-11-06 19:27:38 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added license info in copyright notice at the footer
........
  r40870 | djowel | 2007-11-06 19:30:01 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40871 | djowel | 2007-11-06 19:35:49 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40872 | djowel | 2007-11-06 19:37:51 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40873 | djowel | 2007-11-06 19:46:23 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40874 | chris_kohlhoff | 2007-11-06 22:49:36 -0800 (Tue, 06 Nov 2007) | 2 lines
  
  Add copyright notice.
........
  r40875 | chris_kohlhoff | 2007-11-06 22:53:17 -0800 (Tue, 06 Nov 2007) | 2 lines
  
  Add myself as asio maintainer.
........
  r40876 | chris_kohlhoff | 2007-11-06 23:23:53 -0800 (Tue, 06 Nov 2007) | 2 lines
  
  Add asio.
........
  r40877 | joaquin | 2007-11-07 00:45:27 -0800 (Wed, 07 Nov 2007) | 1 line
  
  reapplied change at rev 40284
........
  r40878 | johnmaddock | 2007-11-07 02:07:08 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Ooops, got the pp-logic wrong and disable long double support for all Unix platforms, instead of just Intel on Linux prior to version 10.
........
  r40879 | johnmaddock | 2007-11-07 02:09:50 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Fix calls to fpclassify so they don't trigger macro expansion when fpclassify is a macro.
........
  r40880 | t_schwinger | 2007-11-07 02:14:42 -0800 (Wed, 07 Nov 2007) | 3 lines
  
  adds FunctionTypes
........
  r40881 | johnmaddock | 2007-11-07 03:50:02 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Change test (again) so that the range of values tested matches original test: last change started testing more extreme input values, which caused regressions on Mac OS X.
........
  r40882 | johnmaddock | 2007-11-07 03:59:39 -0800 (Wed, 07 Nov 2007) | 3 lines
  
  Disabled use of long double when BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS is defined.
  Disabled special-double precision error rates when BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS is defined.
........
  r40883 | johnmaddock | 2007-11-07 04:04:01 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Oops get the name of test right!
........
  r40884 | anthonyw | 2007-11-07 04:10:17 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added missing licence and copyright
........
  r40885 | garcia | 2007-11-07 04:25:16 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  added logging library.
........
  r40886 | garcia | 2007-11-07 05:38:53 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  Exception was accepted.
........
  r40887 | fcacciola | 2007-11-07 06:12:15 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added explicit failures for newly discovered GCC const ref binding bug (see Ticket #1301)
........


[SVN r40891]
2007-11-07 16:22:38 +00:00
Eric Niebler
fcb06fbfb6 Merged revisions 38539-40814 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r38547 | djowel | 2007-08-08 19:07:16 -0700 (Wed, 08 Aug 2007) | 1 line
  
  fix line endings
........
  r38548 | djowel | 2007-08-08 19:10:29 -0700 (Wed, 08 Aug 2007) | 1 line
  
  fixed error (wrong include file assign_key.hh)
........
  r38549 | djowel | 2007-08-09 00:23:00 -0700 (Thu, 09 Aug 2007) | 1 line
  
  added fusion to libraries list.
........
  r38551 | johnmaddock | 2007-08-09 02:26:56 -0700 (Thu, 09 Aug 2007) | 1 line
  
  Updated.
........
  r38553 | bemandawes | 2007-08-09 07:56:05 -0700 (Thu, 09 Aug 2007) | 1 line
  
  Get boost.png from web site
........
  r38555 | johnmaddock | 2007-08-09 10:13:18 -0700 (Thu, 09 Aug 2007) | 1 line
  
  Added another entry
........
  r38558 | speedsnail | 2007-08-09 18:22:59 -0700 (Thu, 09 Aug 2007) | 1 line
  
  made the feature "format" propagated
........
  r38559 | djowel | 2007-08-09 18:45:05 -0700 (Thu, 09 Aug 2007) | 1 line
  
  push/pop pragma warning
........
  r38560 | djowel | 2007-08-09 18:45:21 -0700 (Thu, 09 Aug 2007) | 1 line
  
  push/pop pragma warning
........
  r38561 | johnmaddock | 2007-08-10 03:10:05 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Added two more entries.
........
  r38562 | johnmaddock | 2007-08-10 03:11:03 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Tidied up msvc-warning suppression code.
........
  r38563 | (no author) | 2007-08-10 03:32:21 -0700 (Fri, 10 Aug 2007) | 4 lines
  
  Add overloads of hash_value for more built in types. They're not strictly
  needed and aren't in the original specifiction but they avoid a warning. See
  ticket #1095 for details.
........
  r38564 | (no author) | 2007-08-10 04:08:19 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Add some missing 'inline's.
........
  r38565 | (no author) | 2007-08-10 04:22:54 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Add -Wsign-promo to the hash test compile flags since I'm now trying to avoid the warning. I still need to check that it won't break older versions of gcc.
........
  r38567 | bemandawes | 2007-08-10 05:53:52 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Fix #995 by adding inline
........
  r38568 | hkaiser | 2007-08-10 08:03:46 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Wave: Added missing file to real_positions example, fixed corresponding Jamfile.
........
  r38576 | vladimir_prus | 2007-08-10 09:33:48 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Fix typo. Closes #1150.
........
  r38587 | grafik | 2007-08-10 17:32:25 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Add test to check 'bjam -n'.
........
  r38588 | grafik | 2007-08-10 17:42:32 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Minor adjustment to -n test, and add corresponding -d2 test.
........
  r38590 | grafik | 2007-08-10 19:39:13 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Bring back midding output of -n option. The -o option continues to be broken as it has been for a long time now because of the @ file feature. (fixes #1155)
........
  r38591 | grafik | 2007-08-10 19:46:49 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Make shell script executable.
........
  r38592 | grafik | 2007-08-10 19:58:04 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Adjust test to reflect real results of empty strings instead of empty values.
........
  r38593 | vladimir_prus | 2007-08-10 22:15:54 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Stop BoostBuild.py from crashing on certain test failures.
........
  r38594 | grafik | 2007-08-10 22:53:37 -0700 (Fri, 10 Aug 2007) | 1 line
  
  Update GC support to work with Boehm GC 7.0.
........
  r38605 | djowel | 2007-08-11 18:24:22 -0700 (Sat, 11 Aug 2007) | 1 line
  
  pragma push/pop added
........
  r38606 | agurtovoy | 2007-08-11 23:10:45 -0700 (Sat, 11 Aug 2007) | 1 line
  
  Move /libs/expected_results.xml to the /status/ directory
........
  r38614 | agurtovoy | 2007-08-12 21:36:40 -0700 (Sun, 12 Aug 2007) | 1 line
  
  CVS -> SVN
........
  r38615 | grafik | 2007-08-12 23:11:14 -0700 (Sun, 12 Aug 2007) | 1 line
  
  SVN update and bjam build commands working.
........
  r38616 | agurtovoy | 2007-08-13 01:14:34 -0700 (Mon, 13 Aug 2007) | 1 line
  
  Update http://www.boost.org/regression/ redirects
........
  r38618 | speedsnail | 2007-08-13 08:35:16 -0700 (Mon, 13 Aug 2007) | 2 lines
  
  Revert the last change, since the directory passed to boost-build should be first in searched paths, else project local build system will not be picked correctly.
  The order had been changed to allow searching of alternate user-config.jam files from boost build. This better should be done with --user-config= switch or similar. 
........
  r38619 | bemandawes | 2007-08-13 09:27:31 -0700 (Mon, 13 Aug 2007) | 1 line
  
  Final agreement. Effective date August 10, 2007. Signed by Beman G. Dawes on August 7, 2007, for Boost, and Bradley M. Kuhn on August 10, 2007, for the Software Freedom Conservancy. 
........
  r38620 | speedsnail | 2007-08-13 09:39:02 -0700 (Mon, 13 Aug 2007) | 1 line
  
  Added support for BOOST_USER_CONFIG environment variable. This variable is able to take the same rhs as --user-config= switch. The switch still overrides the variable when present. (This has been added to allow for the BOOST_BUILD_PATH to be restored to its original i.e. documented behaviour.)
........
  r38626 | johnmaddock | 2007-08-13 10:54:01 -0700 (Mon, 13 Aug 2007) | 1 line
  
  Added some missing match_flag_type options.
........
  r38638 | hkaiser | 2007-08-13 18:19:20 -0700 (Mon, 13 Aug 2007) | 1 line
  
  Wave: Fixed test Jamfile.v2
........
  r38647 | danieljames | 2007-08-14 02:53:55 -0700 (Tue, 14 Aug 2007) | 3 lines
  
  Test the hash library with warning level 4 on Visual C++ - although there's
  still one warning for hashing long doubles.
........
  r38662 | garcia | 2007-08-14 12:30:31 -0700 (Tue, 14 Aug 2007) | 2 lines
  
  scope exit review begins.
........
  r38669 | igaztanaga | 2007-08-14 17:18:10 -0700 (Tue, 14 Aug 2007) | 1 line
  
  Corrected incorrect iterator definition
........
  r38679 | danieljames | 2007-08-15 07:35:39 -0700 (Wed, 15 Aug 2007) | 1 line
  
  Avoid a comparison with zero warning on gcc when compiling with -Wextra.
........
  r38688 | grafik | 2007-08-15 10:25:46 -0700 (Wed, 15 Aug 2007) | 1 line
  
  Trow ValueError exception from remove functions to match the set.remove functionality.
........
  r38694 | grafik | 2007-08-15 11:35:11 -0700 (Wed, 15 Aug 2007) | 1 line
  
  Change remove() to glob_remove() in expect_modification, even though this check is not used.
........
  r38702 | grafik | 2007-08-15 13:15:36 -0700 (Wed, 15 Aug 2007) | 1 line
  
  Do some normalizing of paths to remove some of the variant feature subdirs that may be different based on platform and toolset. This fixes some tests that pass on GCC/Linux and not on MSVC/Windows.
........
  r38704 | hljin | 2007-08-15 15:19:48 -0700 (Wed, 15 Aug 2007) | 1 line
  
  GIL: added runtime endian-ness detection routines: little_endian() and big_endian()
........
  r38705 | hljin | 2007-08-15 15:21:06 -0700 (Wed, 15 Aug 2007) | 1 line
  
  GIL: fixed a endian-ness related bug in PNG IO routines
........
  r38710 | grafik | 2007-08-15 21:56:08 -0700 (Wed, 15 Aug 2007) | 1 line
  
  More changes to account for differing variant subdirs between toolsets, and of toolset expansion.
........
  r38711 | speedsnail | 2007-08-16 05:05:44 -0700 (Thu, 16 Aug 2007) | 1 line
  
  Changed BOOST_USER_CONFIG to BOOST_BUILD_USER_CONFIG as this is a more systematic name.
........
  r38717 | samuel_krempp | 2007-08-16 06:56:57 -0700 (Thu, 16 Aug 2007) | 3 lines
  
  updated - can't be a student forever !
........
  r38724 | grafik | 2007-08-16 09:51:10 -0700 (Thu, 16 Aug 2007) | 1 line
  
  Fix changed remote shell command argument names. Disable the svn poller as it taxes the server too much. Bjam build, bjam run, and test tools build working now.
........
  r38726 | samuel_krempp | 2007-08-16 10:00:13 -0700 (Thu, 16 Aug 2007) | 2 lines
  
  small fix (charset set to utf-8, + typo)
........
  r38727 | samuel_krempp | 2007-08-16 10:04:05 -0700 (Thu, 16 Aug 2007) | 2 lines
  
  previous commit was messed-up 
........
  r38729 | samuel_krempp | 2007-08-16 10:33:47 -0700 (Thu, 16 Aug 2007) | 3 lines
  
  bug fixed : prefix_ was not reset by make_or_reuse (all other buffers were).
  Solves ticket #570
........
  r38730 | samuel_krempp | 2007-08-16 11:48:03 -0700 (Thu, 16 Aug 2007) | 3 lines
  
  handle invalid format string (ends with %) without asserting, 
  closing ticket #493
........
  r38732 | grafik | 2007-08-16 14:30:21 -0700 (Thu, 16 Aug 2007) | 1 line
  
  Add testing step, which unfortunately doesn't work.
........
  r38740 | grafik | 2007-08-17 07:51:49 -0700 (Fri, 17 Aug 2007) | 1 line
  
  Minor fix to get btest step working.
........
  r38741 | dgregor | 2007-08-17 07:57:54 -0700 (Fri, 17 Aug 2007) | 1 line
  
  Revert inadvertent changes to csr_graph_test.cpp
........
  r38755 | grafik | 2007-08-18 10:11:07 -0700 (Sat, 18 Aug 2007) | 1 line
  
  Guard against empty result files.
........
  r38756 | grafik | 2007-08-18 23:05:26 -0700 (Sat, 18 Aug 2007) | 1 line
  
  Add support for posting to Dart server using the specified http proxy.
........
  r38777 | burbelgruff | 2007-08-19 23:51:54 -0700 (Sun, 19 Aug 2007) | 1 line
  
  #1188 Removed extra (unnecessary) semicolons in BOOST_TYPEOF_NESTED_TYPEDEF. 
........
  r38781 | chris_kohlhoff | 2007-08-20 06:48:38 -0700 (Mon, 20 Aug 2007) | 1 line
  
  Fix inspect errors.
........
  r38782 | chris_kohlhoff | 2007-08-20 06:50:30 -0700 (Mon, 20 Aug 2007) | 1 line
  
  Fix gcc warning about too few braces.
........
  r38783 | chris_kohlhoff | 2007-08-20 06:53:27 -0700 (Mon, 20 Aug 2007) | 3 lines
  
  Add a note to basic_socket<>::close() indicating that shutdown() should
  be used for portable graceful closure.
........
  r38784 | chris_kohlhoff | 2007-08-20 07:07:23 -0700 (Mon, 20 Aug 2007) | 4 lines
  
  Add a workaround for Windows Vista's handling of the boolean socket option
  tcp::no_delay, where ::getsockopt will return the size of the option as one
  byte, even though a four byte integer was passed in.
........
  r38785 | chris_kohlhoff | 2007-08-20 07:08:16 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Add missing static keyword to the service_id_matches functions.
........
  r38786 | chris_kohlhoff | 2007-08-20 07:11:46 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Fix order of initialisation problem with error categories.
........
  r38787 | chris_kohlhoff | 2007-08-20 07:12:31 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Fix unused argument warning.
........
  r38788 | chris_kohlhoff | 2007-08-20 07:17:15 -0700 (Mon, 20 Aug 2007) | 5 lines
  
  Increase number of buffers that may be sent or received in a single operation.
  
  Clean up win_iocp_socket_service's close-on-destruction handling to ensure
  non-blocking socket destructors.
........
  r38789 | chris_kohlhoff | 2007-08-20 07:19:49 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Use shutdown() for portable graceful connection closure.
........
  r38790 | chris_kohlhoff | 2007-08-20 07:21:47 -0700 (Mon, 20 Aug 2007) | 1 line
  
  Clean up gcc warnings.
........
  r38791 | chris_kohlhoff | 2007-08-20 07:32:05 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Fix unused argument warnings.
........
  r38792 | grafik | 2007-08-20 09:52:55 -0700 (Mon, 20 Aug 2007) | 1 line
  
  Merge changes from Version_1_34_1 back to trunk.
........
  r38800 | ramey | 2007-08-20 11:06:17 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Merged in additions from serialization_next_release branch to support validation of one's current boost installation on a either a library by library or global basis
........
  r38801 | burbelgruff | 2007-08-20 11:09:14 -0700 (Mon, 20 Aug 2007) | 1 line
  
  native typeof implementation for VC7.1 and VC8.0 now uses typeid() instead of sizeof() to map a type. This bypasses some bugs in Microsofts sizeof implementation, and removes a limitation on the number of typeof invocations that can be done in a single compilation unit
........
  r38803 | speedsnail | 2007-08-20 12:14:14 -0700 (Mon, 20 Aug 2007) | 1 line
  
  Merge from RC_1_34_0 (CVS 1.12.2.53) to trunk. CVS RC_1_34_0 - 1.12.2.23 and CVS HEAD - 1.51 are the last versions that were equal. Between these and trunk was only a small diff for HPUX that removed pthread lib. This fix seems to be already present in the merged in version. 
........
  r38804 | garcia | 2007-08-20 12:16:39 -0700 (Mon, 20 Aug 2007) | 2 lines
  
  Added "dimensionality" compile-time constant to the MultiArray concept.
........
  r38814 | johnmaddock | 2007-08-21 02:04:39 -0700 (Tue, 21 Aug 2007) | 1 line
  
  Added needed include: see http://article.gmane.org/gmane.comp.lib.boost.devel/163941.
........
  r38815 | garcia | 2007-08-21 05:27:05 -0700 (Tue, 21 Aug 2007) | 2 lines
  
  Time Series accepted.
........
  r38820 | garcia | 2007-08-21 06:54:25 -0700 (Tue, 21 Aug 2007) | 2 lines
  
  Added "dimensionality" compile-time constant to the MultiArray concept.
........
  r38821 | garcia | 2007-08-21 06:54:58 -0700 (Tue, 21 Aug 2007) | 2 lines
  
  Changed all uses of assert to BOOST_ASSERT.
........
  r38822 | vladimir_prus | 2007-08-21 06:55:41 -0700 (Tue, 21 Aug 2007) | 1 line
  
  Revive V1 Jamfiles at Christopher's request
........
  r38827 | dgregor | 2007-08-21 08:35:19 -0700 (Tue, 21 Aug 2007) | 3 lines
  
  Committed patch to eliminate warnings with GCC's -Wundef. Fixes #1197
........
  r38834 | igaztanaga | 2007-08-21 12:18:32 -0700 (Tue, 21 Aug 2007) | 1 line
  
  Erased temporarily until problems on Mac Os PowerPC are solved
........
  r38835 | vladimir_prus | 2007-08-22 05:14:05 -0700 (Wed, 22 Aug 2007) | 1 line
  
  Revive V1 Jamfile to please asio
........
  r38837 | vladimir_prus | 2007-08-22 05:40:34 -0700 (Wed, 22 Aug 2007) | 1 line
  
  Revive V1 Jamfile to please asio
........
  r38838 | johnmaddock | 2007-08-22 05:56:39 -0700 (Wed, 22 Aug 2007) | 1 line
  
  Fixed include guard.
........
  r38847 | vladimir_prus | 2007-08-22 08:02:20 -0700 (Wed, 22 Aug 2007) | 1 line
  
  Make 'library_status' target explicit
........
  r38853 | garcia | 2007-08-22 08:29:48 -0700 (Wed, 22 Aug 2007) | 2 lines
  
  Initial Revision.
........
  r38854 | garcia | 2007-08-22 08:30:47 -0700 (Wed, 22 Aug 2007) | 2 lines
  
  Added a new test case for replacing asserts with exceptions.
........
  r38856 | garcia | 2007-08-22 11:19:43 -0700 (Wed, 22 Aug 2007) | 2 lines
  
  Added mention of assert.cpp.
........
  r38857 | garcia | 2007-08-22 11:31:43 -0700 (Wed, 22 Aug 2007) | 2 lines
  
  was missing storage_order_convert.cpp
........
  r38864 | johnmaddock | 2007-08-23 02:06:24 -0700 (Thu, 23 Aug 2007) | 2 lines
  
  Fixes track issue #775, see http://svn.boost.org/trac/boost/ticket/775.
  All regex code should now compile warning free at level 4 with MSCV.
........
  r38868 | hljin | 2007-08-23 12:26:55 -0700 (Thu, 23 Aug 2007) | 1 line
  
  GIL: a further fix on the PNG IO 16-bit bug
........
  r38871 | vladimir_prus | 2007-08-23 12:51:47 -0700 (Thu, 23 Aug 2007) | 3 lines
  
  Apply patch to fix gcc warning.
  Fixes #1209.
........
  r38872 | vladimir_prus | 2007-08-23 12:57:23 -0700 (Thu, 23 Aug 2007) | 3 lines
  
  Support the address-model feature for the sun
  toolset. Addresses #1186.
........
  r38873 | danieljames | 2007-08-23 17:42:19 -0700 (Thu, 23 Aug 2007) | 6 lines
  
  Copy hash library from 1.34.1 over trunk.
  
  For the first merge with the release branch, I only want to include some of the
  changes I've been working on (fixes and some trivial changes), so I'm starting
  again from 1.34.1.
........
  r38876 | danieljames | 2007-08-23 18:05:36 -0700 (Thu, 23 Aug 2007) | 1 line
  
  Update the copyright in the hash library.
........
  r38877 | danieljames | 2007-08-23 18:11:33 -0700 (Thu, 23 Aug 2007) | 5 lines
  
  Remove the errno check when hashing floating point numbers. It's not really
  needed and was causing problems on the Microsoft Windows Smarthone Edition
  platform. Fixes #1064.
........
  r38878 | danieljames | 2007-08-23 18:16:54 -0700 (Thu, 23 Aug 2007) | 2 lines
  
  Merge some documentation improvements from the development branch.
........
  r38881 | danieljames | 2007-08-23 18:44:15 -0700 (Thu, 23 Aug 2007) | 1 line
  
  Add extra overloads for hash_value to cover all the specializations of boost::hash. Fixes 1095
........
  r38882 | danieljames | 2007-08-23 18:56:47 -0700 (Thu, 23 Aug 2007) | 1 line
  
  Add some missing hash_value documentation for the new overloads.
........
  r38883 | danieljames | 2007-08-23 19:01:47 -0700 (Thu, 23 Aug 2007) | 6 lines
  
  Change a comparison in the float hashing code, which can cause a warning on
  gcc. Although the warning doesn't currently turn up in this branch, it could
  be caused quite easily. Originally reported in:
  
  http://lists.boost.org/Archives/boost/2007/08/126084.php
........
  r38884 | danieljames | 2007-08-23 19:33:43 -0700 (Thu, 23 Aug 2007) | 2 lines
  
  Remove hash_complex_test - it should have been removed when I reverted to 1.34.1
........
  r38911 | igaztanaga | 2007-08-24 14:24:23 -0700 (Fri, 24 Aug 2007) | 1 line
  
  Erased old archives imported from CVS
........
  r38913 | grafik | 2007-08-24 16:03:10 -0700 (Fri, 24 Aug 2007) | 1 line
  
  Disable interprocess tests until parallel execution problem is fixed. (see ticket #1211)
........
  r38914 | grafik | 2007-08-24 16:27:14 -0700 (Fri, 24 Aug 2007) | 1 line
  
  Reverting changes from revision [http://svn.boost.org/trac/boost/changeset/38800 38800] as it break XSLT regression reports.
........
  r38918 | grafik | 2007-08-24 21:08:28 -0700 (Fri, 24 Aug 2007) | 1 line
  
  On Windows static libs have the lib prefix, but DLLs don't.
........
  r38919 | vladimir_prus | 2007-08-24 21:34:31 -0700 (Fri, 24 Aug 2007) | 1 line
  
  Use -KPIC for shared libs. Addresses #1186.
........
  r38920 | vladimir_prus | 2007-08-24 21:36:02 -0700 (Fri, 24 Aug 2007) | 1 line
  
  Revert mistaken commit
........
  r38923 | ramey | 2007-08-25 00:37:21 -0700 (Sat, 25 Aug 2007) | 1 line
  
  corrections for gcc compiler
........
  r38924 | johnmaddock | 2007-08-25 01:53:29 -0700 (Sat, 25 Aug 2007) | 1 line
  
  Fix for http://svn.boost.org/trac/boost/ticket/1075.
........
  r38934 | johnmaddock | 2007-08-25 05:26:25 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  Fixes for http://svn.boost.org/trac/boost/ticket/1104, http://svn.boost.org/trac/boost/ticket/1102, http://svn.boost.org/trac/boost/ticket/1103 and http://svn.boost.org/trac/boost/ticket/1105.
  Also updated tests for some previous macro additions.
........
  r38946 | igaztanaga | 2007-08-25 11:04:13 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38948 | igaztanaga | 2007-08-25 11:14:34 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38949 | igaztanaga | 2007-08-25 12:05:18 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38950 | igaztanaga | 2007-08-25 12:07:32 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38951 | igaztanaga | 2007-08-25 12:10:12 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38952 | igaztanaga | 2007-08-25 12:13:02 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38953 | igaztanaga | 2007-08-25 12:17:24 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38954 | igaztanaga | 2007-08-25 12:18:28 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38955 | igaztanaga | 2007-08-25 12:19:34 -0700 (Sat, 25 Aug 2007) | 2 lines
  
  #1211: Interprocess tests hang when run in parallel
  #1080 boost::interprocess win32 global file mapping issue 
........
  r38956 | aaron_windsor | 2007-08-25 14:11:06 -0700 (Sat, 25 Aug 2007) | 1 line
  
  merging planar graph algorithms into the BGL
........
  r38960 | igaztanaga | 2007-08-26 02:59:28 -0700 (Sun, 26 Aug 2007) | 1 line
  
  This file is a badly imported CVS file
........
  r38963 | vladimir_prus | 2007-08-26 08:53:45 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Make executable
........
  r38964 | grafik | 2007-08-26 09:14:44 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Read expected files with universal EOL translation enabled to account for comparing with newline only Python strings.
........
  r38965 | grafik | 2007-08-26 09:16:38 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Use some wildcard matching on the expected output as 'echo' on Windows outputs extra space before EOLs, which Unix doesn't.
........
  r38968 | vladimir_prus | 2007-08-26 10:15:51 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Use SVN for nightly builds
........
  r38969 | vladimir_prus | 2007-08-26 10:23:03 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Include svn revision in nightly build
........
  r38971 | vladimir_prus | 2007-08-26 11:32:21 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Fix quoting. Remove .svn directories
........
  r38973 | grafik | 2007-08-26 12:24:13 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Make rm try the glob_file in addition to regular glob. Clears alternatives and project_glob failures on windows.
........
  r38975 | pdimov | 2007-08-26 12:42:50 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Updated the unspecified_bool_type to match shared_ptr.
........
  r38976 | pdimov | 2007-08-26 13:34:40 -0700 (Sun, 26 Aug 2007) | 1 line
  
  BOOST_NO_TYPEID support (#1108).
........
  r38977 | pdimov | 2007-08-26 13:35:52 -0700 (Sun, 26 Aug 2007) | 1 line
  
  BOOST_NO_TYPEID support (#1108).
........
  r38981 | vladimir_prus | 2007-08-26 23:18:11 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Run svnversion before removing .svn
........
  r38984 | vladimir_prus | 2007-08-26 23:30:56 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Run svnversion before modifying anything
........
  r38985 | grafik | 2007-08-26 23:34:52 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Repoint tarball source to direct tarball generator.
........
  r38986 | vladimir_prus | 2007-08-26 23:41:18 -0700 (Sun, 26 Aug 2007) | 1 line
  
  Another svnversion fix
........
  r38987 | vladimir_prus | 2007-08-27 00:00:18 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Another fix
........
  r38999 | garcia | 2007-08-27 04:51:04 -0700 (Mon, 27 Aug 2007) | 1 line
  
  *** empty log message ***
........
  r39007 | grafik | 2007-08-27 09:02:50 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Bring back the interprocess tests, as they seem fixed now for parallel execution.
........
  r39009 | danieljames | 2007-08-27 10:59:54 -0700 (Mon, 27 Aug 2007) | 2 lines
  
  Comment out -Wextra because it doesn't work on older versions of gcc.
........
  r39014 | danieljames | 2007-08-27 11:16:54 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Add proper support for long longs and unsigned long longs.
........
  r39020 | grafik | 2007-08-27 14:05:35 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Tarball generation script.
........
  r39022 | grafik | 2007-08-27 14:19:41 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Add copyright+BSL.
........
  r39052 | dgregor | 2007-08-29 09:00:53 -0700 (Wed, 29 Aug 2007) | 3 lines
  
  Constify status::count and status::cancelled. Fixes #1101
........
  r39060 | dgregor | 2007-08-29 11:59:16 -0700 (Wed, 29 Aug 2007) | 1 line
  
  Disable MSVC warning about native code generation. Fixes #1163
........
  r39061 | dgregor | 2007-08-29 12:06:11 -0700 (Wed, 29 Aug 2007) | 1 line
  
  Handle GCC's -fno-exceptions properly. Fixes #1198
........
  r39062 | dlwalker | 2007-08-29 12:54:14 -0700 (Wed, 29 Aug 2007) | 1 line
  
  Fixed comments listed in #766 that didn't match their described code
........
  r39073 | eric_niebler | 2007-08-30 08:21:00 -0700 (Thu, 30 Aug 2007) | 1 line
  
  example/main.cpp compiles clean with gcc -Wall
........
  r39075 | eric_niebler | 2007-08-30 08:40:34 -0700 (Thu, 30 Aug 2007) | 1 line
  
  dynamically optimizing TST, from Dave Jenkins
........
  r39089 | dgregor | 2007-08-31 10:23:51 -0700 (Fri, 31 Aug 2007) | 1 line
  
  Add empty directory
........
  r39090 | dgregor | 2007-08-31 10:24:36 -0700 (Fri, 31 Aug 2007) | 1 line
  
  Create an empty directory
........
  r39091 | igaztanaga | 2007-08-31 15:57:11 -0700 (Fri, 31 Aug 2007) | 1 line
  
  Added missing comma
........
  r39092 | chris_kohlhoff | 2007-08-31 23:08:45 -0700 (Fri, 31 Aug 2007) | 2 lines
  
  Need to try binding the acceptor to test whether IPv6 is supported.
........
  r39093 | chris_kohlhoff | 2007-08-31 23:13:02 -0700 (Fri, 31 Aug 2007) | 2 lines
  
  Ignore errors from shutdown().
........
  r39094 | chris_kohlhoff | 2007-08-31 23:20:19 -0700 (Fri, 31 Aug 2007) | 2 lines
  
  Enable buffer() overload workaround for Sun C++.
........
  r39095 | chris_kohlhoff | 2007-08-31 23:25:55 -0700 (Fri, 31 Aug 2007) | 3 lines
  
  Add AIX-specific compile time test for whether sockaddr_storage's family
  field is called ss_family or __ss_family.
........
  r39096 | chris_kohlhoff | 2007-08-31 23:28:40 -0700 (Fri, 31 Aug 2007) | 3 lines
  
  Ensure that a strand is kept alive as long as there are wrapped handlers
  for it.
........
  r39097 | chris_kohlhoff | 2007-08-31 23:33:44 -0700 (Fri, 31 Aug 2007) | 2 lines
  
  Add #include needed for IOV_MAX.
........
  r39098 | chris_kohlhoff | 2007-08-31 23:41:15 -0700 (Fri, 31 Aug 2007) | 7 lines
  
  Fix problem where a thread can go idle even if there are handlers that are
  ready to be dispatched.
  
  Remove need to have a mutex per idle thread.
  
  Remove need to have a mutex per idle thread.
........
  r39100 | chris_kohlhoff | 2007-09-01 00:32:28 -0700 (Sat, 01 Sep 2007) | 3 lines
  
  Define _WIN32_WINNT to suppress warnings. Add define necessary
  for building with cygwin.
........
  r39102 | vladimir_prus | 2007-09-01 01:55:35 -0700 (Sat, 01 Sep 2007) | 1 line
  
  Initial support for defining action body from Python.
........
  r39103 | vladimir_prus | 2007-09-01 13:28:42 -0700 (Sat, 01 Sep 2007) | 4 lines
  
  Fix glob excludes in subdirectories.
  
  Thanks to Norbert Unterberg for the bug report.
........
  r39104 | vladimir_prus | 2007-09-01 14:46:09 -0700 (Sat, 01 Sep 2007) | 5 lines
  
  Make free features on the command line affect all targets,
  not just directly requested ones.
  
  Fixes #985.
........
  r39105 | vladimir_prus | 2007-09-01 15:10:46 -0700 (Sat, 01 Sep 2007) | 4 lines
  
  Previously, I've accidentally committed a patch
  to make <tag> affect names of searched libraries.
  This commit greatly simplifies that.
........
  r39106 | speedsnail | 2007-09-02 08:57:36 -0700 (Sun, 02 Sep 2007) | 2 lines
  
  Merged in volodyas patch from RC_1_34_0
  http://lists.boost.org/boost-users/2007/05/27724.php
........
  r39107 | speedsnail | 2007-09-02 11:37:14 -0700 (Sun, 02 Sep 2007) | 1 line
  
  Changed library naming convention for mingw and cygwin. For details see comment in file. Also should resolve Ticket #1058 .
........
  r39112 | aaron_windsor | 2007-09-03 08:04:05 -0700 (Mon, 03 Sep 2007) | 1 line
  
  Modified odd_components_counter to fix signed/unsigned mismatch on Sandi pgi-6.1 tests.
........
  r39113 | speedsnail | 2007-09-03 12:38:40 -0700 (Mon, 03 Sep 2007) | 1 line
  
  Make use of gnu ld's -Bstatic and -Bdynamic switches to choose order of libraries searched by -l switch.
........
  r39120 | vladimir_prus | 2007-09-04 13:26:19 -0700 (Tue, 04 Sep 2007) | 2 lines
  
  Allow to print the tree delta to any file.
........
  r39121 | vladimir_prus | 2007-09-04 13:29:56 -0700 (Tue, 04 Sep 2007) | 1 line
  
  Unbreak the gcc_runtime test
........
  r39126 | eric_niebler | 2007-09-04 23:31:27 -0700 (Tue, 04 Sep 2007) | 1 line
  
  remove unused variables
........
  r39128 | vladimir_prus | 2007-09-05 01:03:17 -0700 (Wed, 05 Sep 2007) | 1 line
  
  Remove unnecessary line
........
  r39130 | bgubenko | 2007-09-05 10:14:29 -0700 (Wed, 05 Sep 2007) | 1 line
  
  missing conditionalization for g++ on HP-UX
........
  r39131 | burbelgruff | 2007-09-05 12:52:18 -0700 (Wed, 05 Sep 2007) | 1 line
  
  boost.typeof now supports native typeof for VC8.0
........
  r39132 | bgubenko | 2007-09-05 16:43:40 -0700 (Wed, 05 Sep 2007) | 1 line
  
  Boost.Build V2 toolset for the HP aC++ compiler on PA-RISC
........
  r39134 | burbelgruff | 2007-09-06 00:22:10 -0700 (Thu, 06 Sep 2007) | 1 line
  
  typeof: Implemented native typeof for DMC 8.50 based on the same bugfeature used to support VC6.5 and VC7.1
........
  r39150 | johnmaddock | 2007-09-06 10:10:05 -0700 (Thu, 06 Sep 2007) | 1 line
  
  Updated gcc config using STLport's settings so that TR1 functions correctly when Boost is installed in for example /usr/include/
........
  r39151 | bgubenko | 2007-09-06 12:01:07 -0700 (Thu, 06 Sep 2007) | 1 line
  
  marking up tests for acc_pa_risc toolset
........
  r39156 | bgubenko | 2007-09-07 10:02:12 -0700 (Fri, 07 Sep 2007) | 1 line
  
  markup test is_lvalue_iterator for acc_pa_risc toolset
........
  r39157 | nielsdekker | 2007-09-07 10:17:09 -0700 (Fri, 07 Sep 2007) | 1 line
  
  Added MSVC workaround to value_initialized, as described by ticket #1217, proposed at the Boost Developers mailing list, and discussed with Fernando Cacciola.
........
  r39158 | bgubenko | 2007-09-07 11:40:47 -0700 (Fri, 07 Sep 2007) | 1 line
  
  conditionalization for PA-RISC
........
  r39160 | vladimir_prus | 2007-09-07 14:34:27 -0700 (Fri, 07 Sep 2007) | 1 line
  
  Adjust faq entry about targets in site-config.jam
........
  r39161 | vladimir_prus | 2007-09-07 16:18:20 -0700 (Fri, 07 Sep 2007) | 4 lines
  
  Make output from test run nicer, and more structured.
  In future, we might be able to generate XML, or any other voodoo
  we want.
........
  r39162 | vladimir_prus | 2007-09-07 16:51:07 -0700 (Fri, 07 Sep 2007) | 1 line
  
  Undo #38702, which fixes alternative.py on linux. Real fix for win coming soon.
........
  r39163 | vladimir_prus | 2007-09-07 16:59:10 -0700 (Fri, 07 Sep 2007) | 1 line
  
  Make it work
........
  r39164 | vladimir_prus | 2007-09-07 16:59:54 -0700 (Fri, 07 Sep 2007) | 3 lines
  
  Implement --ignore-toolset-requirements and set in
  during testing.
........
  r39165 | vladimir_prus | 2007-09-07 17:15:23 -0700 (Fri, 07 Sep 2007) | 3 lines
  
  Fix remove_requirements test.  I have no idea how
  it could have passed as-is.
........
  r39166 | vladimir_prus | 2007-09-07 17:26:18 -0700 (Fri, 07 Sep 2007) | 1 line
  
  Print test results summary at the end
........
  r39168 | vladimir_prus | 2007-09-08 09:24:50 -0700 (Sat, 08 Sep 2007) | 4 lines
  
  	Fix the rebuilds test on linux.
  	* BoostBuild.py (wait_for_time_change): Use floor,
  	to avoid waiting 0.5 seconds.
  	* rebuilds.py: Wait for time change as necessary.
........
  r39169 | vladimir_prus | 2007-09-08 10:10:26 -0700 (Sat, 08 Sep 2007) | 1 line
  
  Record failure reason when we fail to open a file.
........
  r39173 | bemandawes | 2007-09-09 07:59:10 -0700 (Sun, 09 Sep 2007) | 1 line
  
  Merge system and filesystem branches, bringing them in sync with N2415. Several filesystem bugs fixed, and current_path setter added.
........
  r39174 | bemandawes | 2007-09-09 10:48:17 -0700 (Sun, 09 Sep 2007) | 1 line
  
  Posix and Linux fixes
........
  r39175 | johnmaddock | 2007-09-10 02:19:49 -0700 (Mon, 10 Sep 2007) | 8 lines
  
  Big type_traits update:
  
  Added make_signed, make_unsigned and is_complex.
  Added docs for some previously undocumented traits: is_signed, is_unsigned and decay.html
  Added synonyms for some traits that have changed name in the latest C++ std draft.
  Re-organised docs, moved docs out of the main doc build for now (it takes too long).
  
  This also fixes issues: http://svn.boost.org/trac/boost/ticket/492 and http://svn.boost.org/trac/boost/ticket/1008.
........
  r39176 | johnmaddock | 2007-09-10 03:35:51 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Applied fix for http://svn.boost.org/trac/boost/ticket/883.
........
  r39177 | johnmaddock | 2007-09-10 03:37:19 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Added optional code to test SGI rope with Regex.
........
  r39178 | johnmaddock | 2007-09-10 04:24:53 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Try and force a date update.
........
  r39179 | johnmaddock | 2007-09-10 04:27:31 -0700 (Mon, 10 Sep 2007) | 1 line
  
  OK finally got date modified set right.
........
  r39181 | johnmaddock | 2007-09-10 09:22:35 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Oops, doc update broke the tests, fixed now.
........
  r39183 | johnmaddock | 2007-09-10 10:18:16 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Added new macros def's that are needed by the various additions that have been added to Boost.Config.
........
  r39186 | bemandawes | 2007-09-10 18:11:03 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Chris Kohlhoff says change needed for asio to link correctly
........
  r39187 | bemandawes | 2007-09-10 19:05:58 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Ha! Finally figured out how to shut off msvc exception switch warning.
........
  r39188 | bemandawes | 2007-09-10 19:07:50 -0700 (Mon, 10 Sep 2007) | 1 line
  
  Ha! Finally figured out how to shut off msvc exception switch warning. Also fix define misspelling.
........
  r39189 | chris_kohlhoff | 2007-09-11 04:17:56 -0700 (Tue, 11 Sep 2007) | 2 lines
  
  Use enum-based error code constants.
........
  r39190 | bgubenko | 2007-09-11 09:24:28 -0700 (Tue, 11 Sep 2007) | 1 line
  
  add conditionalization for g++ on HP-UX
........
  r39191 | rwgk | 2007-09-11 09:53:50 -0700 (Tue, 11 Sep 2007) | 1 line
  
  Patches by Nikolay Mladenov (nickm at sitius com): new pythonic signatures; docstring support for enums; fix unrelated Visual C++ 6 problem
........
  r39193 | bgubenko | 2007-09-11 11:54:50 -0700 (Tue, 11 Sep 2007) | 1 line
  
  base detection of EDG-based compiler on __EDG__ macro
........
  r39194 | vladimir_prus | 2007-09-11 12:16:06 -0700 (Tue, 11 Sep 2007) | 3 lines
  
  Don't try to apply --build-dir to standalone projects.
  Fixes build_dir test failure on linux.
........
  r39195 | vladimir_prus | 2007-09-11 12:17:49 -0700 (Tue, 11 Sep 2007) | 4 lines
  
          * BoostBuild.py (wait_for_time_change): Wait
          for more serious time change, in order to
          fix sporadic dependency_test failures.
........
  r39196 | bgubenko | 2007-09-11 12:31:55 -0700 (Tue, 11 Sep 2007) | 1 line
  
  define macros specific to RW V2.2 on HP-UX
........
  r39197 | vladimir_prus | 2007-09-11 12:36:48 -0700 (Tue, 11 Sep 2007) | 1 line
  
  Don't run gcc_runtime test on msvc
........
  r39198 | bgubenko | 2007-09-11 12:54:59 -0700 (Tue, 11 Sep 2007) | 1 line
  
  make sure HP-UX-specific macros are not redefined
........
  r39199 | pdimov | 2007-09-11 13:58:19 -0700 (Tue, 11 Sep 2007) | 1 line
  
  Fixes #1243
........
  r39204 | grafik | 2007-09-11 21:21:57 -0700 (Tue, 11 Sep 2007) | 1 line
  
  Add regression result pages automation script.
........
  r39211 | chris_kohlhoff | 2007-09-12 05:24:21 -0700 (Wed, 12 Sep 2007) | 2 lines
  
  AIX seems to have the socket address family as an unsigned char rather than unsigned short.
........
  r39219 | johnmaddock | 2007-09-12 09:44:16 -0700 (Wed, 12 Sep 2007) | 1 line
  
  Fixed is_base_of/is_base_and_derived so that you get a compiler error if you try and use them with an incomplete class type.
........
  r39220 | bemandawes | 2007-09-12 11:31:25 -0700 (Wed, 12 Sep 2007) | 1 line
  
  POSIX fix from Neal Becker
........
  r39223 | nikiml | 2007-09-12 14:31:39 -0700 (Wed, 12 Sep 2007) | 1 line
  
  fixed problem reported by Neal Becker; added a test case
........
  r39226 | bemandawes | 2007-09-12 14:43:20 -0700 (Wed, 12 Sep 2007) | 1 line
  
  Some compilers warn on trailing enum constant list commas, so remove these to quiet the warnings.
........
  r39227 | guwi17 | 2007-09-12 14:44:37 -0700 (Wed, 12 Sep 2007) | 2 lines
  
  lu.hpp: introduced temporary to avoid strange compiler problem.
........
  r39230 | bemandawes | 2007-09-12 20:17:17 -0700 (Wed, 12 Sep 2007) | 1 line
  
  Add Boost.System test suite
........
  r39231 | johnmaddock | 2007-09-13 02:04:12 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Fix for broken limits_test build.
........
  r39233 | guwi17 | 2007-09-13 05:13:20 -0700 (Thu, 13 Sep 2007) | 3 lines
  
  overview.htm: fixed typo 
........
  r39237 | bgubenko | 2007-09-13 09:11:38 -0700 (Thu, 13 Sep 2007) | 1 line
  
  reapply fix for gcc on HP-UX in -r39130
........
  r39238 | garcia | 2007-09-13 09:17:05 -0700 (Thu, 13 Sep 2007) | 2 lines
  
  added fast-track reviews.
........
  r39240 | dgregor | 2007-09-13 10:38:58 -0700 (Thu, 13 Sep 2007) | 7 lines
  
  function/function_base.hpp, function/function_template.hpp:
    - Switch from dynamic initialization of the vtable pointer to static
      initialization (Fixes #1260)
    - Handle member pointers properly, only using mem_fn within the invoker
      to deal with all of the messy bits of calling member pointers
........
  r39242 | dgregor | 2007-09-13 11:43:00 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Update the nag script to use Subversion
........
  r39243 | dgregor | 2007-09-13 11:50:50 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Work around bugs in Sun Studio 11
........
  r39244 | dgregor | 2007-09-13 12:06:53 -0700 (Thu, 13 Sep 2007) | 4 lines
  
  function_template.hpp:
    - Pass-by-reference internally, when we can. Fixes #1067
........
  r39245 | dgregor | 2007-09-13 12:31:03 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Don't use BOOST_TEST_DONT_PRINT_LOG_VALUE if it isn't defined
........
  r39246 | dgregor | 2007-09-13 12:41:27 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Teach cycle_ratio_tests to find its input files during regression testing
........
  r39247 | dgregor | 2007-09-13 12:58:30 -0700 (Thu, 13 Sep 2007) | 1 line
  
  We can no longer use is_base_and_derived with incomplete types, not that it worked well before
........
  r39248 | bemandawes | 2007-09-13 14:47:25 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Ensure error_category::operator< test works regardless of how compiler lays out memory.
........
  r39249 | hkaiser | 2007-09-13 14:49:01 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Wave: fixed test build/Jamfile.v2 to include threading library
........
  r39251 | hkaiser | 2007-09-13 14:54:32 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Wave: Fixed a bug in the Slex token class, which was the reason for some failing tests lately
........
  r39254 | bemandawes | 2007-09-13 18:58:20 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Add usage-requirements. See comment in file.
........
  r39255 | bemandawes | 2007-09-13 19:00:25 -0700 (Thu, 13 Sep 2007) | 1 line
  
  Remove <runtime-link>static to see if that is what is causing link problems on a few gcc platforms
........
  r39256 | bgubenko | 2007-09-13 19:25:06 -0700 (Thu, 13 Sep 2007) | 1 line
  
  on HP-UX, macro BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS should be defined only if macro _REENTRANT is defined
........
  r39258 | johnmaddock | 2007-09-14 01:54:31 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Apply sunpro fix from 1.34.1
........
  r39259 | johnmaddock | 2007-09-14 02:20:37 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Touched header to force rebuild of config tests.
........
  r39260 | johnmaddock | 2007-09-14 02:25:29 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Touched files to force tests to be re-run with new Jamfile.
........
  r39261 | bemandawes | 2007-09-14 03:37:11 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Supply errno values missing from Windows Mobile
........
  r39266 | garcia | 2007-09-14 08:04:41 -0700 (Fri, 14 Sep 2007) | 2 lines
  
  Updated the comments on the libraries that were newly released in 1.34.
........
  r39267 | vladimir_prus | 2007-09-14 08:28:13 -0700 (Fri, 14 Sep 2007) | 3 lines
  
          * gcc.jam (init-link-flags): Add missing
          'unchecked'. This was breaking intel.
........
  r39268 | vladimir_prus | 2007-09-14 08:30:42 -0700 (Fri, 14 Sep 2007) | 4 lines
  
  Remove acc_pa_risc.jam. Given that it's a copy
  of acc.jam with only toolset name changed, I see
  no point in having this file.
........
  r39269 | bemandawes | 2007-09-14 08:43:22 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Initial commit
........
  r39270 | bemandawes | 2007-09-14 08:45:36 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Replace docs with up-to-date contents, design
........
  r39273 | grafik | 2007-09-14 09:29:37 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Point dev reports to beta.boost.org site.
........
  r39274 | cepstein | 2007-09-14 10:18:02 -0700 (Fri, 14 Sep 2007) | 2 lines
  
  Quiet unused argument warnings from gcc.
........
  r39282 | pdimov | 2007-09-14 12:19:09 -0700 (Fri, 14 Sep 2007) | 1 line
  
  CINT support (Nils Krumnack)
........
  r39283 | garcia | 2007-09-14 13:56:59 -0700 (Fri, 14 Sep 2007) | 2 lines
  
  Initial Revision.
........
  r39284 | garcia | 2007-09-14 13:59:44 -0700 (Fri, 14 Sep 2007) | 2 lines
  
  Review Wizard Status Report for October 2007.
........
  r39285 | dgregor | 2007-09-14 14:05:46 -0700 (Fri, 14 Sep 2007) | 5 lines
  
  Finalizes the fix to Bug #1260, making vtable_base an actual POD type (oops)
  and playing more nicely with reinterpret_cast (thanks to Brad King for the
  fixes).
........
  r39286 | dgregor | 2007-09-14 14:17:06 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Fix the cycle ratio tests for real
........
  r39291 | djowel | 2007-09-14 17:19:44 -0700 (Fri, 14 Sep 2007) | 2 lines
  
  Fix Ticket Ticket #1235
  (http://svn.boost.org/trac/boost/ticket/1235)
........
  r39292 | bemandawes | 2007-09-14 18:36:14 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Missing std added to ::remove to clear problem in Sun tests
........
  r39295 | grafik | 2007-09-14 21:33:32 -0700 (Fri, 14 Sep 2007) | 1 line
  
  Call the correct subjam file.
........
  r39302 | rwgk | 2007-09-15 16:11:50 -0700 (Sat, 15 Sep 2007) | 1 line
  
  work around Visual C++ 7.1 internal compiler error
........
  r39307 | johnmaddock | 2007-09-16 01:50:09 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Fix msvc warnings.
........
  r39308 | niels_dekker | 2007-09-16 02:33:34 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Visual C++ 7.1 ICE workaround by Ralf W. Grosse-Kunstleve added to ~const_T_base() as well.  See also Boost Developers mailing list, subject "utility/value_init.hpp: VC 7.1 ICE & workaround" 
........
  r39309 | niels_dekker | 2007-09-16 02:48:28 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Added unit test to make sure that Visual C++ 7.1 ICE reported by Ralf W. Grosse-Kunstleve (Boost Developers mailing list, subject "utility/value_init.hpp: VC 7.1 ICE & workaround") will not occur anymore.
........
  r39315 | johnmaddock | 2007-09-16 04:20:25 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Added needed include (for CHAR_BIT).
........
  r39330 | grafik | 2007-09-16 14:35:19 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Implement @() expansion during parse phase. (fixes #721)
........
  r39331 | grafik | 2007-09-16 14:55:02 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Define OSPLAT var unconditionally, and more generically, when possible. (fixes #798)
........
  r39332 | grafik | 2007-09-16 15:13:02 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Fix undeclared INT_MAX on some platforms, i.e. Linux.
........
  r39334 | noel_belcourt | 2007-09-16 17:27:37 -0700 (Sun, 16 Sep 2007) | 14 lines
  
  Added missing #include <utility> and qualified
  make_pair with std:: to library_status.cpp.
  
  Added missing headers to make1.c and missing prototypes
  to builtin.h
  
  Modified execunix.c to add support for terminating
  processes that consume too much cpu or that hang and
  fail to consume cpu at all.  This in support of the
  bjam -lx option.
  
  http://svn.boost.org/trac/boost/ticket/1266#comment:2
........
  r39335 | grafik | 2007-09-16 17:44:16 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Add test for ticket #431.
........
  r39336 | grafik | 2007-09-16 17:54:20 -0700 (Sun, 16 Sep 2007) | 1 line
  
  Really fix missing INT_MAX declaration. And fix pma.jam test on Unix.
........
  r39337 | lbourdev | 2007-09-16 23:36:22 -0700 (Sun, 16 Sep 2007) | 3 lines
  
  GIL: Updating mandelbrot example with the new GIL.
........
  r39338 | lbourdev | 2007-09-17 00:53:06 -0700 (Mon, 17 Sep 2007) | 1 line
  
  fixing affine
........
  r39339 | lbourdev | 2007-09-17 01:12:19 -0700 (Mon, 17 Sep 2007) | 1 line
  
  GIL 2.0 to 2.1 (see http://opensource.adobe.com/gil/gil2.1_changes.pdf). GIL 2.1 to 2.1.1 (see http://sourceforge.net/forum/forum.php?thread_id=1824588&forum_id=648138)
........
  r39341 | grafik | 2007-09-17 01:32:24 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Add internal dependencies for multi-file generating actions to indicate that the targets all only appear when the first target appears. (fixes ticket #431)
........
  r39342 | schoepflin | 2007-09-17 02:04:37 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Corrections for Tru64/CXX.
........
  r39350 | grafik | 2007-09-17 09:16:29 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Add redirect for trunk so that we can point the issues email link to a stable location.
........
  r39351 | grafik | 2007-09-17 09:17:52 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Point issues link to stable location.
........
  r39352 | grafik | 2007-09-17 09:58:10 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Add test of -l limit option now that it's implemented on windows and unix.
........
  r39353 | dgregor | 2007-09-17 11:33:20 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Support Win64
........
  r39354 | vladimir_prus | 2007-09-17 12:29:06 -0700 (Mon, 17 Sep 2007) | 3 lines
  
  Allow to specify version, and explicitly specify
  the command, when initializing the acc toolset.
........
  r39355 | grafik | 2007-09-17 13:00:18 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Add test for no-op @() expansion.
........
  r39357 | grafik | 2007-09-17 14:35:58 -0700 (Mon, 17 Sep 2007) | 1 line
  
  Handle invalid formats of @() as doing a straight substitution instead of erroring out.
........
  r39358 | noel_belcourt | 2007-09-17 16:30:57 -0700 (Mon, 17 Sep 2007) | 7 lines
  
  Rene found a problem with the code I committed to
  terminate expired processes.  This patch basically
  causes the select function to return after -l seconds.
  This gives me a shot at killing processes still
  running.
........
  r39359 | djowel | 2007-09-17 17:18:56 -0700 (Mon, 17 Sep 2007) | 1 line
  
  bugfix tuples::null_type and tuples::tuple<> iterators not comparing ok.
........
  r39360 | noel_belcourt | 2007-09-17 19:42:13 -0700 (Mon, 17 Sep 2007) | 7 lines
  
  Fix One more obscure way for the timeout to miss processes.
  
  If select times out (no processes terminated), then all running
  processes can be terminated.  Cleaned up code when this condition
  applies.
........
  r39361 | noel_belcourt | 2007-09-17 20:27:48 -0700 (Mon, 17 Sep 2007) | 7 lines
  
  A minor optimization to eliminate two OS calls (one
  to times, one to kill).  Now all expired processes
  are killed in one place.  If the select command
  times out, I set each processes start_time to zero
  to ensure it is picked up as an expired process.
........
  r39362 | vladimir_prus | 2007-09-18 04:44:13 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Expand aCC documentation
........
  r39363 | dgregor | 2007-09-18 05:09:53 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Second attempt at fixing usage of 64-bit integer type
........
  r39364 | chris_kohlhoff | 2007-09-18 06:13:40 -0700 (Tue, 18 Sep 2007) | 2 lines
  
  Fix unused argument warning.
........
  r39365 | bemandawes | 2007-09-18 08:37:36 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Remove files after tests
........
  r39366 | johnmaddock | 2007-09-18 09:32:29 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Added Mathias Kock and Joerg Walter.
........
  r39367 | grafik | 2007-09-18 10:02:04 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Replace breaks, to remove warnings, with custom structural templates.
........
  r39368 | nikiml | 2007-09-18 10:16:31 -0700 (Tue, 18 Sep 2007) | 1 line
  
  epydoc friendlier formatting
........
  r39369 | johnmaddock | 2007-09-18 10:19:41 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Updated licences using blanket_permission.txt.
........
  r39370 | nikiml | 2007-09-18 10:28:23 -0700 (Tue, 18 Sep 2007) | 1 line
  
  tabs removes, code reformatting
........
  r39371 | nikiml | 2007-09-18 10:32:06 -0700 (Tue, 18 Sep 2007) | 1 line
  
  epydoc friendlier formatting
........
  r39372 | nikiml | 2007-09-18 10:51:47 -0700 (Tue, 18 Sep 2007) | 1 line
  
  fixed cpp signature related test failure
........
  r39373 | garcia | 2007-09-18 12:03:47 -0700 (Tue, 18 Sep 2007) | 4 lines
  
  Added Tobias Schwinger as Review Manager for Exception.
  Added entry for X-files.
  Added download links for Property Maps and Graph.
........
  r39374 | garcia | 2007-09-18 12:10:12 -0700 (Tue, 18 Sep 2007) | 2 lines
  
  Split X-Files review into three separate reviews.
........
  r39375 | bemandawes | 2007-09-18 14:01:26 -0700 (Tue, 18 Sep 2007) | 1 line
  
  quiet compiler warning
........
  r39376 | hljin | 2007-09-18 14:19:05 -0700 (Tue, 18 Sep 2007) | 4 lines
  
  GIL:
  1. changed int to std::ptrdiff_t in utilities.hpp and iterator_from_2d.hpp for problems under 64-bit platforms
  2. removed several extra semi-colons after GIL_CLASS_REQUIRE
........
  r39377 | hljin | 2007-09-18 14:37:08 -0700 (Tue, 18 Sep 2007) | 1 line
  
  GIL: fixed incorrect header files for std::bad_cast
........
  r39378 | noel_belcourt | 2007-09-18 15:46:26 -0700 (Tue, 18 Sep 2007) | 14 lines
  
  Remove unnecessary overhead in execunix.c related to
  the timeout implementation.  Also removed unused variables
  as diagnosed by the Sgi (mipspro) compiler.
  
  Fixed const-correctness error in operations.hpp that
  Sgi complained about.
  
  There's no strerror_r function on Irix 6.5 so I replaced
  it with a strerror call.
  
  With these changes, I can now build process jam log and
  start running Sgi tests.
........
  r39379 | noel_belcourt | 2007-09-18 18:46:11 -0700 (Tue, 18 Sep 2007) | 4 lines
  
  Undo patch of operations.hpp, Sgi wants this fix
  but it causes svn trunk to break.
........
  r39381 | grafik | 2007-09-18 19:39:08 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Fix extra, missed, para inside warning admonition.
........
  r39382 | noel_belcourt | 2007-09-18 19:59:00 -0700 (Tue, 18 Sep 2007) | 8 lines
  
  Update the mipspro.jam file so have the compiler
  emit each referenced template in the object file
  where referenced and then rely on the linker to
  remove duplicates.
  
  Added some missing macros to sgi_mipspro.hpp.
........
  r39383 | grafik | 2007-09-18 20:59:52 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Style simplelist tables, to look like regular text lines.
........
  r39384 | grafik | 2007-09-18 21:03:22 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Don't make nav links white to prevent then from not showing up when the images are not present.
........
  r39385 | grafik | 2007-09-18 21:54:30 -0700 (Tue, 18 Sep 2007) | 1 line
  
  Remove some outdated comments as some bugs are now fixed. Try to work around boostbook XSL.
........
  r39392 | hljin | 2007-09-19 11:41:47 -0700 (Wed, 19 Sep 2007) | 1 line
  
  GIL: fixed the C4503 warnings under VC
........
  r39393 | hljin | 2007-09-19 11:45:30 -0700 (Wed, 19 Sep 2007) | 1 line
  
  GIL: commented out unnecessary pragma warning directives
........
  r39394 | bemandawes | 2007-09-19 12:28:56 -0700 (Wed, 19 Sep 2007) | 1 line
  
  Add get_posix_category, get_system_category, to solve order-of-initialization issues
........
  r39395 | grafik | 2007-09-19 12:29:31 -0700 (Wed, 19 Sep 2007) | 1 line
  
  Make get-values preserve the values exactly, instead of treating them like paths and hence munging them.
........
  r39396 | bemandawes | 2007-09-19 12:30:23 -0700 (Wed, 19 Sep 2007) | 1 line
  
  Add get_posix_category, get_system_category, to solve order-of-initialization issues
........
  r39397 | grafik | 2007-09-19 12:47:25 -0700 (Wed, 19 Sep 2007) | 1 line
  
  Work around boostbook path issues.
........
  r39398 | garcia | 2007-09-19 14:29:29 -0700 (Wed, 19 Sep 2007) | 2 lines
  
  made Tobias' reviews fast-track.
........
  r39399 | noel_belcourt | 2007-09-19 21:11:11 -0700 (Wed, 19 Sep 2007) | 15 lines
  
  Fix a bug Chris Cambly reported with the timeout code on
  AIX.  Apparently AIX doesn't permit a forked process to 
  reference (set) memory in the parent's address space.  No 
  other system seems to object to this practice but it taught
  me a lesson!
  
  The fix was to move the call to get the child process start 
  time directly before calling vfork.  This isn't really fair 
  to the forked process as we start counting time against the
  child process that we haven't even forked (we count the 
  vfork/exec call overhead against the child process).
  
  Tested Rene's test.sh script on Sun, Linux, AIX, and Sgi.
........
  r39400 | grafik | 2007-09-19 21:36:27 -0700 (Wed, 19 Sep 2007) | 1 line
  
  Now that the exec*.c files are really platform specific, adjust the build script to only build the needed ones for MinGW.
........
  r39401 | schoepflin | 2007-09-20 00:35:43 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Added missing include for assert.
........
  r39404 | garcia | 2007-09-20 05:15:28 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Fixed dates and filename.
........
  r39405 | johnmaddock | 2007-09-20 05:28:34 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Updated ICU build options to fix build on Darwin and elsewhere.
........
  r39408 | johnmaddock | 2007-09-20 05:38:53 -0700 (Thu, 20 Sep 2007) | 3 lines
  
  Update to TR1 to better support gcc.
  Refactored configuration settings so if the .hpp versions of the headers are included then there's no need to figure out the location of the actual std lib headers.
  Updated docs to match.
........
  r39409 | bgubenko | 2007-09-20 05:42:27 -0700 (Thu, 20 Sep 2007) | 1 line
  
  add -AA to link actions, remove +DD64
........
  r39412 | garcia | 2007-09-20 08:34:17 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Fixed the date, updated the copy.
........
  r39415 | garcia | 2007-09-20 08:59:57 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Added Lexer.
........
  r39416 | grafik | 2007-09-20 09:31:44 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Add partial code for indicating to the output function that a command finished because of a timeout.
........
  r39417 | bgubenko | 2007-09-20 09:34:31 -0700 (Thu, 20 Sep 2007) | 1 line
  
  more conditionalization for PA-RISC
........
  r39418 | bgubenko | 2007-09-20 09:59:45 -0700 (Thu, 20 Sep 2007) | 1 line
  
  check that on HP-UX, the Standard RW library is used
........
  r39421 | johnmaddock | 2007-09-20 10:54:55 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Oops, forgot to add new file!!
........
  r39423 | noel_belcourt | 2007-09-20 12:06:54 -0700 (Thu, 20 Sep 2007) | 13 lines
  
  Added diagnostic message to output.c to inform users
  when a process has timed out and been killed.
  
  Because timed out processes now emit a diagnostic, I
  had to update option_l.jam so we wouldn't break test.sh
  when it runs.
  
  Minor cleanup to execunix.c to remove unneeded code
  and to set the process exit status as returned from
  waitpid.  The exit status is used to identify timed
  out processes so we can emit a diagnostic to the user.
........
  r39424 | garcia | 2007-09-20 12:39:53 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Updated. Added links for constrained value.
........
  r39425 | bemandawes | 2007-09-20 12:55:32 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Always update self. Updating based on file date was not reliable on all systems.
........
  r39427 | pdimov | 2007-09-20 13:46:56 -0700 (Thu, 20 Sep 2007) | 1 line
  
  defined(__ppc) added (Daniel P Furlani)
........
  r39428 | bemandawes | 2007-09-20 14:04:34 -0700 (Thu, 20 Sep 2007) | 1 line
  
  Strictly conforming compilers (EDG with --dep_name) require the make_* functions be defined before used. Report and fix from Markus Schopflin. EDG info from Boris Gubenko.
........
  r39429 | chris_kohlhoff | 2007-09-20 15:20:57 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Larger storage size needed for Windows x64.
........
  r39430 | chris_kohlhoff | 2007-09-20 15:26:55 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Move handler queue management to a separate class.
........
  r39431 | chris_kohlhoff | 2007-09-20 15:30:54 -0700 (Thu, 20 Sep 2007) | 3 lines
  
  Some compilers require namespace-scope declarations of use_service,
  has_service and add_service.
........
  r39432 | chris_kohlhoff | 2007-09-20 15:33:29 -0700 (Thu, 20 Sep 2007) | 3 lines
  
  Eliminate use of types and structure members that may not be present when
  build for non-XOPEN targets.
........
  r39433 | chris_kohlhoff | 2007-09-20 15:44:33 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Regenerate documentation.
........
  r39434 | rwgk | 2007-09-20 16:20:45 -0700 (Thu, 20 Sep 2007) | 1 line
  
  gcc 4.3.0 compatibility (resolves new "changes meaning" error)
........
  r39435 | garcia | 2007-09-20 16:22:46 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  A little note to minimize confusion (I know I was confused).
........
  r39436 | chris_kohlhoff | 2007-09-20 22:42:55 -0700 (Thu, 20 Sep 2007) | 2 lines
  
  Fix documentation generation.
........
  r39438 | bemandawes | 2007-09-21 04:45:23 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Some compilers require all of the make_error_* functions be template specializations. See prior log message.
........
  r39440 | bemandawes | 2007-09-21 04:58:05 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Add revision to collected, uploaded, info
........
  r39441 | bemandawes | 2007-09-21 04:59:54 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Add revision to collected, uploaded, info. Add --have-source, --skip-tests options to ease regression.py testing.
........
  r39442 | garcia | 2007-09-21 05:33:31 -0700 (Fri, 21 Sep 2007) | 2 lines
  
  small html and grammar fixes.
........
  r39443 | chris_kohlhoff | 2007-09-21 05:34:19 -0700 (Fri, 21 Sep 2007) | 5 lines
  
  Strict compilers don't like it when you pass a function with C linkage
  as an argument when the parameter type has C++ linkage. Try using the type
  of the msghdr::msg_namelen field as an alternative way of deducing the
  socklen_t-equivalent type.
........
  r39447 | bemandawes | 2007-09-21 07:46:04 -0700 (Fri, 21 Sep 2007) | 1 line
  
  revision default needs actual value
........
  r39448 | danmarsden | 2007-09-21 08:44:57 -0700 (Fri, 21 Sep 2007) | 1 line
  
  fixing result of related fusion docs issues for fold, accumulate, and transform view/alg
........
  r39449 | bemandawes | 2007-09-21 09:42:27 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Fix order-of-initialization problem, add initialization_test.cpp to detect regression.
........
  r39450 | grafik | 2007-09-21 10:14:13 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Add svn_info.txt file to annotate the revision exported.
........
  r39464 | igaztanaga | 2007-09-21 13:45:14 -0700 (Fri, 21 Sep 2007) | 2 lines
  
  Glenn Schrader patch: Segmentation fault with 1.34+ on Linux x86_64.
  Reason: The ~ only complemented the 32 bit unsigned value. When the value was expanded into a size_t the value isn't sign extended so the upper 32 bits wind up being zero. Since this is used as an address mask the upper half of the address is zeroed.
........
  r39465 | bemandawes | 2007-09-21 13:57:44 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Eliminate Concept library use to reduce dependencies
........
  r39466 | grafik | 2007-09-21 14:01:45 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Adjust timing to avoid spurious test failures on busy machines.
........
  r39467 | noel_belcourt | 2007-09-21 15:38:17 -0700 (Fri, 21 Sep 2007) | 21 lines
  
  Another patch to fix the -lx timeout code.  Some actions spawn
  sub-processes after bjam forks a new process (for example, after
  g++ is forked by bjam, g++ then forks sub-processes like cc1plus).
  The timeout code would kill the g++ process, but might not kill
  the subprocesses spawned by g++.
  
  I fixed this problem by making the bjam fork'ed process (g++) a 
  session leader by calling setsid() before calling exec.  The setsid 
  call, in essence, gives all child processes a parent process id 
  (ppid) of the g++ process id.  This guarantees that killing g++ 
  will kill all child processes spawned by g++ as well.
  
  One last comment on the maximum process time before a process is actually
  killed.  The worst case process elapsed time is 2x seconds if -lx is
  given.  The reason is that a process might be one second away from being
  killed and, if there's no other signal activity, the select function will
  wait x seconds before timing out and killing any active processes.  So
  if you say -lx and monitor a build known to have lengthy processes, you 
  may see a process with up to 2x seconds of time before it is killed.
........
  r39468 | djowel | 2007-09-21 18:05:29 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Doc updates
........
  r39469 | djowel | 2007-09-21 18:08:51 -0700 (Fri, 21 Sep 2007) | 1 line
  
  bugfix tuples::null_type and tuples::tuple<> iterators not comparing ok.
........
  r39470 | igaztanaga | 2007-09-21 23:15:21 -0700 (Fri, 21 Sep 2007) | 1 line
  
  Sign extension bug. Not should be applied after the constant has been expanded to size_t. Thanks to Glenn Schrader.
........
  r39473 | johnmaddock | 2007-09-22 02:24:05 -0700 (Sat, 22 Sep 2007) | 1 line
  
  Fix for gcc -Wundef warnings. See http://svn.boost.org/trac/boost/ticket/1130.
........
  r39474 | t_schwinger | 2007-09-22 04:09:35 -0700 (Sat, 22 Sep 2007) | 2 lines
  
  adds concept examples
........
  r39475 | johnmaddock | 2007-09-22 04:27:25 -0700 (Sat, 22 Sep 2007) | 1 line
  
  Updated license declaration.
........
  r39477 | bemandawes | 2007-09-22 07:39:50 -0700 (Sat, 22 Sep 2007) | 1 line
  
  Add revision to column heads. Patch courtesy of Sebastian Redl.
........
  r39480 | aaron_windsor | 2007-09-22 10:41:18 -0700 (Sat, 22 Sep 2007) | 1 line
  
  Some fixes for errors and warnings on HP cxx.
........
  r39481 | eric_niebler | 2007-09-22 12:30:25 -0700 (Sat, 22 Sep 2007) | 1 line
  
  attempt to fix hp tru64
........
  r39484 | ramey | 2007-09-22 14:24:41 -0700 (Sat, 22 Sep 2007) | 1 line
  
  merged in changes - tested with gcc and msvc
........
  r39485 | nmusatti | 2007-09-23 05:47:52 -0700 (Sun, 23 Sep 2007) | 1 line
  
  Updated to support C++Builder 2007 Update 3 (bcc32 5.9.2)
........
  r39490 | johnmaddock | 2007-09-23 10:49:44 -0700 (Sun, 23 Sep 2007) | 1 line
  
  Fix up file so it can be compiled in C mode.
........
  r39492 | noel_belcourt | 2007-09-23 14:31:43 -0700 (Sun, 23 Sep 2007) | 5 lines
  
  Fix problems with Pathscale toolset (-G and -h options
  are unknown).   Thanks John Maddock for pointing these
  out.
........
  r39497 | djowel | 2007-09-23 23:03:12 -0700 (Sun, 23 Sep 2007) | 1 line
  
  added new import syntax for ignoring code.
........
  r39498 | schoepflin | 2007-09-24 00:31:43 -0700 (Mon, 24 Sep 2007) | 1 line
  
  Removed unused variable.
........
  r39499 | schoepflin | 2007-09-24 00:38:35 -0700 (Mon, 24 Sep 2007) | 1 line
  
  Add needed include (according to XOPEN) for definition of WIFEXITED and WEXITSTATUS.
........
  r39502 | chris_kohlhoff | 2007-09-24 05:53:37 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Use a switch rather than an array to translate system_category error codes to their corresponding default error conditions. Add translations for the Winsock error codes.
........
  r39503 | chris_kohlhoff | 2007-09-24 06:19:31 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Try making the ip::multicast::enable_loopback socket option an unsigned char on AIX.
........
  r39504 | chris_kohlhoff | 2007-09-24 06:21:03 -0700 (Mon, 24 Sep 2007) | 3 lines
  
  Check whether exceptions are enabled on the output iostream and throw or not
  throw errors accordingly.
........
  r39505 | chris_kohlhoff | 2007-09-24 06:21:49 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Output error codes and error messages when a test fails.
........
  r39506 | grafik | 2007-09-24 06:24:23 -0700 (Mon, 24 Sep 2007) | 1 line
  
  Make per target manifest files and a single global catalog files, so that one can have multiple boostbook targets in one project.
........
  r39507 | chris_kohlhoff | 2007-09-24 06:29:12 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Fix warning on AIX about omitted 'private' keyword when deriving from noncopyable.
........
  r39508 | bemandawes | 2007-09-24 06:32:43 -0700 (Mon, 24 Sep 2007) | 1 line
  
  Replace use of re in detecting revision with string functions. Nicola Musatti reported problems with Italian version of XP. Although this change should fix the crash, it isn't the final solution.
........
  r39509 | chris_kohlhoff | 2007-09-24 06:32:47 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Add extra library 'ipv6' needed on HP-UX.
........
  r39510 | hljin | 2007-09-24 11:20:56 -0700 (Mon, 24 Sep 2007) | 1 line
  
  GIL: fixed the test files to the new bit_aligned_pixel_reference interface
........
  r39511 | hljin | 2007-09-24 11:25:48 -0700 (Mon, 24 Sep 2007) | 1 line
  
  GIL: fixed endian-ness related bugs for bit_aligned_pixel_reference and pixel_aligned_pixel_iterator
........
  r39512 | hljin | 2007-09-24 11:45:57 -0700 (Mon, 24 Sep 2007) | 1 line
  
  GIL: added a MSVC macro in the Jamfile to suppress warnings on unsafe STL calls
........
  r39513 | guwi17 | 2007-09-24 14:01:11 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  - Ticket #1234 : patch committed as suggested.
........
  r39514 | noel_belcourt | 2007-09-24 14:01:45 -0700 (Mon, 24 Sep 2007) | 7 lines
  
  Fix a problem with the -lx timeout code on ppc darwin.
  The intel based darwin system was killing subprocesses
  okay but for some reason, ppc systems were not.  This
  change fixes the timeout code so subprocesses are
  properly killed on ppc darwin systems.
........
  r39516 | guwi17 | 2007-09-24 14:26:00 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  - Ticket #688 : Outer iterators can now skip empty rows. Thus matrix_assign works now as expected.
........
  r39517 | chris_kohlhoff | 2007-09-24 18:56:46 -0700 (Mon, 24 Sep 2007) | 2 lines
  
  Add missing "lib ipv6 ;" that's needed for HP-UX.
........
  r39518 | noel_belcourt | 2007-09-24 20:39:06 -0700 (Mon, 24 Sep 2007) | 3 lines
  
  Get pic and threading working with pathscale.
........
  r39519 | schoepflin | 2007-09-25 01:46:31 -0700 (Tue, 25 Sep 2007) | 1 line
  
  Added missing include.
........
  r39520 | bemandawes | 2007-09-25 06:45:52 -0700 (Tue, 25 Sep 2007) | 1 line
  
  Clear compiler warnings
........
  r39523 | garcia | 2007-09-25 08:32:23 -0700 (Tue, 25 Sep 2007) | 2 lines
  
  Initial Revision.  Stolen from the write-graphviz.html docs.
........
  r39524 | garcia | 2007-09-25 08:36:35 -0700 (Tue, 25 Sep 2007) | 2 lines
  
  Made the output of the example program more realistic.
........
  r39525 | bemandawes | 2007-09-25 10:27:04 -0700 (Tue, 25 Sep 2007) | 1 line
  
  Supply std:: to fix Borland 5.9.2 errors
........
  r39526 | bemandawes | 2007-09-25 10:55:58 -0700 (Tue, 25 Sep 2007) | 1 line
  
  Fix revision not propagating (Sebastian Redl)
........
  r39531 | noel_belcourt | 2007-09-25 13:34:36 -0700 (Tue, 25 Sep 2007) | 9 lines
  
  Add pgi.hpp configuration file for the Portland Group.
  
  Fixed problems with threading, pic code, missing math
  library, etc. to get mipspro toolset working better.
  
  Updated pgi toolset to fix various problems with the
  link line.
........
  r39532 | garcia | 2007-09-25 15:49:00 -0700 (Tue, 25 Sep 2007) | 2 lines
  
  set dates for reviews.
........
  r39534 | noel_belcourt | 2007-09-25 16:11:12 -0700 (Tue, 25 Sep 2007) | 9 lines
  
  Add macros to gcc.hpp to support pathscale toolset.
  
  Added an optimization to the -lx unix timeout code.  I
  compute the amount of time the select call should sleep
  until the "oldest" process times out.  This ensures that
  all processes that timeout will be killed within one
  second of their expiration.
........
  r39544 | garcia | 2007-09-26 08:07:19 -0700 (Wed, 26 Sep 2007) | 2 lines
  
  Thread-Safe Signals.
........
  r39545 | igaztanaga | 2007-09-26 08:07:29 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39546 | igaztanaga | 2007-09-26 08:11:38 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39547 | igaztanaga | 2007-09-26 08:25:36 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39548 | igaztanaga | 2007-09-26 08:26:35 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39549 | igaztanaga | 2007-09-26 10:35:50 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39550 | igaztanaga | 2007-09-26 10:38:32 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39551 | igaztanaga | 2007-09-26 10:39:06 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39552 | igaztanaga | 2007-09-26 10:46:34 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39553 | bemandawes | 2007-09-26 10:48:27 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Turns out the --dep_name errors were due to functions in the wrong namespace (Chris Kohlhoff)
........
  r39554 | igaztanaga | 2007-09-26 10:51:58 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39555 | igaztanaga | 2007-09-26 10:53:01 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Changes introduced by the new intrusive version.
........
  r39556 | bemandawes | 2007-09-26 11:11:27 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Win64 returns ERROR_BAD_PATHNAME for //nosuch, while Win32 returns ERROR_BAD_NETPATH
........
  r39561 | bemandawes | 2007-09-26 17:22:16 -0700 (Wed, 26 Sep 2007) | 1 line
  
  Get rid of <runtime-link>static. Appears to cause problems on Sun and perhaps other Unix boxes.
........
  r39563 | noel_belcourt | 2007-09-26 20:41:11 -0700 (Wed, 26 Sep 2007) | 4 lines
  
  Fix pathscale.jam so -rpath is passed correctly to the
  linker.
........
  r39574 | bemandawes | 2007-09-27 06:44:55 -0700 (Thu, 27 Sep 2007) | 1 line
  
  Change location of svn_info.txt to boost_root, as that's where it is in the tarball
........
  r39575 | garcia | 2007-09-27 08:52:41 -0700 (Thu, 27 Sep 2007) | 2 lines
  
  exception review dates.
........
  r39576 | igaztanaga | 2007-09-27 09:38:14 -0700 (Thu, 27 Sep 2007) | 1 line
  
  Updated unusable toolsets for Interprocess and Intrusive
........
  r39577 | bemandawes | 2007-09-27 09:56:23 -0700 (Thu, 27 Sep 2007) | 1 line
  
  AIX treats ENOTEMPTY and EEXIST as the same value. Reported by Chris Cambly
........
  r39583 | t_schwinger | 2007-09-27 14:25:18 -0700 (Thu, 27 Sep 2007) | 3 lines
  
  changes review dates for Boost.Exception as agreed on with Ron
........
  r39584 | cepstein | 2007-09-27 18:30:27 -0700 (Thu, 27 Sep 2007) | 1 line
  
  Changed required toolset gcc-4.1.1_sunos_i86pc to gcc-4.1.2_sunos_i86pc
........
  r39585 | bemandawes | 2007-09-27 19:03:29 -0700 (Thu, 27 Sep 2007) | 1 line
  
  Quiet compiler warnings
........
  r39586 | schoepflin | 2007-09-28 00:19:29 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Added missing include.
........
  r39587 | schoepflin | 2007-09-28 03:28:26 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Added two missing fwd declarations and a Tru64/CXX specific workaround.
........
  r39588 | garcia | 2007-09-28 12:39:57 -0700 (Fri, 28 Sep 2007) | 2 lines
  
  Exception has begun.
........
  r39589 | burbelgruff | 2007-09-28 13:09:01 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Implement typeof emulation for the Borland compiler. Tested with Borland 5.8.2
........
  r39590 | burbelgruff | 2007-09-28 13:11:32 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Modified tests to account for Borland compiler
........
  r39591 | burbelgruff | 2007-09-28 13:16:39 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Updated failures markup to account for typeof support for Borland
........
  r39592 | grafik | 2007-09-28 18:50:16 -0700 (Fri, 28 Sep 2007) | 1 line
  
  Minor adjustment to save half of the upload bandwidth, at the cost of another layer of compression on both ends.
........
  r39595 | eric_niebler | 2007-09-29 08:45:08 -0700 (Sat, 29 Sep 2007) | 1 line
  
  remove unnecessary semicolons
........
  r39596 | eric_niebler | 2007-09-29 08:51:29 -0700 (Sat, 29 Sep 2007) | 1 line
  
  mark xpressive unusable with sun compiler
........
  r39597 | vladimir_prus | 2007-09-29 10:12:49 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Summarize changes
........
  r39601 | vladimir_prus | 2007-09-29 10:28:10 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Update version.
........
  r39602 | vladimir_prus | 2007-09-29 10:29:49 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Update download locations.
........
  r39603 | vladimir_prus | 2007-09-29 10:31:44 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Adjust date
........
  r39605 | vladimir_prus | 2007-09-29 11:17:27 -0700 (Sat, 29 Sep 2007) | 7 lines
  
  Adjust boostbook test for boostbook changes. It
  seems that doxygen target now produces a target
  with different name, and it does not produce
  any target unless there's explicit dependency
  on it. I'm not sure I like the change, but
  anyway.
........
  r39606 | vladimir_prus | 2007-09-29 11:21:49 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Adjust Qt4 example test
........
  r39607 | vladimir_prus | 2007-09-29 11:22:57 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Set executable flag
........
  r39608 | grafik | 2007-09-29 11:30:06 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Fix action multi-generation for case when there are no targets for the action.
........
  r39609 | bemandawes | 2007-09-29 12:40:23 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Limit Windows expected message check to US English
........
  r39610 | grafik | 2007-09-29 12:48:51 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Update distribution and build scripts to account for inclusion of boehm_gc sources. Add history of changes to docs.
........
  r39611 | grafik | 2007-09-29 12:58:28 -0700 (Sat, 29 Sep 2007) | 1 line
  
  Set executable flag.
........
  r39612 | noel_belcourt | 2007-09-29 13:23:29 -0700 (Sat, 29 Sep 2007) | 6 lines
  
  When terminating unix processes I forgot to check for negative 
  time differences.  This patch only sets the select timeout if
  the difference between the requested and consumed time is 
  positive.
........
  r39613 | noel_belcourt | 2007-09-29 14:47:24 -0700 (Sat, 29 Sep 2007) | 15 lines
  
  Renamed variables used in timeout code so I don't make
  silly mistakes like using a negative time for the select
  timeout.  
  
  Also added the setrlimit call back in since the
  named_condition_test occassionally consumes multiple cpus
  worth of time.  That is, when I ran this test -j4, I found
  the named_condition test consuming 4 cpus worth of time so
  after 300 seconds of elapsed time when the test timed out, 
  it had consumed almost 1200 seconds worth of cpu.  While the 
  test is killed after the elapsed time expired, setting a hard 
  cpu limit ensures it's killed after consuming either -lx seconds 
  worth of cpu or -lx seconds of elapsed time.
........
  r39614 | eric_niebler | 2007-09-29 21:05:31 -0700 (Sat, 29 Sep 2007) | 1 line
  
  slightly more informative test errors
........
  r39615 | garcia | 2007-09-30 07:58:38 -0700 (Sun, 30 Sep 2007) | 2 lines
  
  FSM dates.
........
  r39616 | grafik | 2007-09-30 08:52:31 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Fix missing files in tar generation, by using a tar format that doesn't have short limits on file name lengths. (and that is still readable by the Python tarfile module)
........
  r39617 | grafik | 2007-09-30 09:33:36 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Fix copying the wrong files for the archive, and prefer using POSIX/pax format.
........
  r39619 | johnmaddock | 2007-09-30 10:29:54 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Fix for failing Borland test results.
........
  r39620 | grafik | 2007-09-30 10:33:21 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Bump to bjam version 3.1.16
........
  r39621 | johnmaddock | 2007-09-30 10:35:14 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Touched file to force regressions runners to rebuild the test.
........
  r39623 | vladimir_prus | 2007-09-30 12:05:38 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Update example test-config.jam
........
  r39624 | vladimir_prus | 2007-09-30 12:06:19 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Update roll.sh
........
  r39630 | vladimir_prus | 2007-09-30 23:04:17 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Correct example test-config.jam
........
  r39631 | vladimir_prus | 2007-09-30 23:05:03 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Update release procedure
........
  r39632 | vladimir_prus | 2007-09-30 23:06:25 -0700 (Sun, 30 Sep 2007) | 1 line
  
  Set release date
........
  r39633 | johnmaddock | 2007-10-01 01:29:15 -0700 (Mon, 01 Oct 2007) | 1 line
  
  Disable test for Intel-10.
........
  r39634 | johnmaddock | 2007-10-01 02:38:05 -0700 (Mon, 01 Oct 2007) | 1 line
  
  Almost get things building with Borland.
........
  r39635 | johnmaddock | 2007-10-01 02:39:07 -0700 (Mon, 01 Oct 2007) | 1 line
  
  Added workarounds for broken WCHAR_MAX.
........
  r39638 | guwi17 | 2007-10-01 06:04:29 -0700 (Mon, 01 Oct 2007) | 2 lines
  
  - added redirect from index.html to real start page: index.htm
........
  r39641 | vladimir_prus | 2007-10-01 10:29:11 -0700 (Mon, 01 Oct 2007) | 3 lines
  
  Allow to specify the list of bound targets
  and flags, when defining action from Python.
........
  r39642 | vladimir_prus | 2007-10-01 10:34:43 -0700 (Mon, 01 Oct 2007) | 2 lines
  
  Fix gcc on HP-UX. Patch from Boris Gubenko. 
........
  r39643 | vladimir_prus | 2007-10-01 11:27:53 -0700 (Mon, 01 Oct 2007) | 3 lines
  
  Append .lib suffix to library names without :S= modifier.
  The latter will remove any existing suffix.
........
  r39644 | vladimir_prus | 2007-10-01 11:40:44 -0700 (Mon, 01 Oct 2007) | 4 lines
  
          * builtin.jam (searched-lib-generator.run):
          When no <name> feature present, use requested
          name.
........
  r39645 | vladimir_prus | 2007-10-01 11:44:44 -0700 (Mon, 01 Oct 2007) | 8 lines
  
  STLPort improvements:
          - Add _static in library name as necessary
          - Define _STLP_USE_DYNAMIC_LIB depending
          on <runtime-link>, not <runtime-debugging>
  
  Patch from David Deakins.
  Addresses #1177.
........
  r39646 | vladimir_prus | 2007-10-01 11:53:05 -0700 (Mon, 01 Oct 2007) | 5 lines
  
  Disallow using stlport by just adding /stlport//stlport
  to sources.  This logic was trying to use non-free
  usage requirements that are not supported, and can
  potentially result in inconsistent builds.
........
  r39647 | bemandawes | 2007-10-01 14:50:02 -0700 (Mon, 01 Oct 2007) | 1 line
  
  Detect and report missing boost-test lines in input log file
........
  r39648 | bemandawes | 2007-10-01 18:33:00 -0700 (Mon, 01 Oct 2007) | 1 line
  
  Add --compile-time and --run-time options
........
  r39649 | eric_niebler | 2007-10-01 23:47:58 -0700 (Mon, 01 Oct 2007) | 1 line
  
  attempt to fix xpressive formatting bug on tru64
........
  r39651 | hkaiser | 2007-10-02 08:10:05 -0700 (Tue, 02 Oct 2007) | 1 line
  
  [Wave] Unterminated C++/C comment diagnostics are now a warning and not an error anymore.
........
  r39652 | bemandawes | 2007-10-02 09:30:04 -0700 (Tue, 02 Oct 2007) | 1 line
  
  Remove dependency on boost::bind so that tests will still work on broken compilers where bind fails.
........
  r39654 | hkaiser | 2007-10-02 10:24:17 -0700 (Tue, 02 Oct 2007) | 1 line
  
  Wave: Fixed the waveidl example
........
  r39655 | johnmaddock | 2007-10-02 10:28:01 -0700 (Tue, 02 Oct 2007) | 1 line
  
  Update for Borland compilers: new Borland versions, and new tests, but otherwise the same failures as before.
........
  r39657 | johnmaddock | 2007-10-02 10:41:35 -0700 (Tue, 02 Oct 2007) | 1 line
  
  Fix for Borland compilers.
........
  r39658 | eric_niebler | 2007-10-02 10:58:33 -0700 (Tue, 02 Oct 2007) | 1 line
  
  work around msvc-7.1 bugs
........
  r39660 | bgubenko | 2007-10-02 12:07:37 -0700 (Tue, 02 Oct 2007) | 1 line
  
  mark lambda library test control_structures for gcc 4.2 series
........
  r39663 | nmusatti | 2007-10-02 13:32:05 -0700 (Tue, 02 Oct 2007) | 1 line
  
  Updated to support C++Builder 2007 Update 3 (bcc32 5.9.2)
........
  r39664 | chris_kohlhoff | 2007-10-02 18:40:55 -0700 (Tue, 02 Oct 2007) | 2 lines
  
  Add missing #include needed for MinGW.
........
  r39665 | chris_kohlhoff | 2007-10-02 18:43:08 -0700 (Tue, 02 Oct 2007) | 3 lines
  
  Try using an unsigned char for the multicast::enable_loopback socket option
  when compiling for Tru64.
........
  r39673 | hkaiser | 2007-10-03 06:18:23 -0700 (Wed, 03 Oct 2007) | 1 line
  
  Wave: Fixed a regex definition problem in the Slex lexer.
........
  r39674 | hkaiser | 2007-10-03 06:44:42 -0700 (Wed, 03 Oct 2007) | 1 line
  
  Wave: Fixed a minor problem in the predefined macros code.
........
  r39675 | hkaiser | 2007-10-03 06:51:32 -0700 (Wed, 03 Oct 2007) | 1 line
  
  Wave: Updated test to reflect recent error text changes.
........
  r39676 | bemandawes | 2007-10-03 10:30:23 -0700 (Wed, 03 Oct 2007) | 1 line
  
  Add revision number to heading if boost-root is subversion working copy. Use BOOST_PLATFORM for platform description. Fix problem if test type was run_pyd. Make Boost build v2 the default. Link to www.boost.org for boost.png.
........
  r39677 | burbelgruff | 2007-10-03 11:45:56 -0700 (Wed, 03 Oct 2007) | 1 line
  
  Mark borland 5.6.4 as unusable
........
  r39678 | noel_belcourt | 2007-10-03 12:00:18 -0700 (Wed, 03 Oct 2007) | 3 lines
  
  Fix problem with -rpath for pathscale compiler.
........
  r39680 | vladimir_prus | 2007-10-04 01:15:13 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Redo homepage
........
  r39681 | vladimir_prus | 2007-10-04 01:18:40 -0700 (Thu, 04 Oct 2007) | 3 lines
  
  When building docs, use the same Boost.Build that
  we're rolling.
........
  r39682 | johnmaddock | 2007-10-04 02:18:16 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Added tip to function_traits.qbk, rebuilt docs.
........
  r39683 | schoepflin | 2007-10-04 04:51:51 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Added missing boost namespace reference to as_literal.
........
  r39684 | hkaiser | 2007-10-04 08:01:23 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Wave: Changed an error text.
........
  r39685 | igaztanaga | 2007-10-04 09:41:15 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Marked acc as n/a for Interprocess.
........
  r39686 | hkaiser | 2007-10-04 10:49:20 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Trying to work around a SUN 5.8 compiler error.
........
  r39687 | hkaiser | 2007-10-04 10:55:20 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Wave: Silenced a SUN compiler warning.
........
  r39688 | hkaiser | 2007-10-04 16:37:25 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Wave: Trying to fix MSVC regressions.
........
  r39689 | grafik | 2007-10-04 20:09:03 -0700 (Thu, 04 Oct 2007) | 1 line
  
  Fix mislabeled argument to collect_logs().
........
  r39690 | eric_niebler | 2007-10-04 23:50:00 -0700 (Thu, 04 Oct 2007) | 1 line
  
  one more try at getting tru64 tests to pass
........
  r39691 | burbelgruff | 2007-10-05 00:06:13 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Update typeof emulation to support Borland 5.9.2
........
  r39692 | danieljames | 2007-10-05 02:43:01 -0700 (Fri, 05 Oct 2007) | 2 lines
  
  Fix an if statement.
........
  r39693 | anthonyw | 2007-10-05 02:46:00 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Updated in line with RC 1.34
........
  r39694 | danieljames | 2007-10-05 02:46:22 -0700 (Fri, 05 Oct 2007) | 3 lines
  
  On Cygwin use a binary based hash function for floating point numbers, as
  Cygwin doesn't have decent floating point functions for long doubles.
........
  r39701 | anthonyw | 2007-10-05 05:10:06 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Changed call_once to header-only template that takes arbitrary function objects; this changes parameter order
........
  r39702 | anthonyw | 2007-10-05 05:20:50 -0700 (Fri, 05 Oct 2007) | 1 line
  
  added platform-specific call_once implementations
........
  r39703 | anthonyw | 2007-10-05 05:21:55 -0700 (Fri, 05 Oct 2007) | 1 line
  
  added platform dispatcher
........
  r39704 | burbelgruff | 2007-10-05 05:39:15 -0700 (Fri, 05 Oct 2007) | 1 line
  
  typeof support for template template arguments for Borland 5.9.2 (also used for Borland 5.8.2) (reverted to old scheme for other compilers)
........
  r39705 | anthonyw | 2007-10-05 05:50:29 -0700 (Fri, 05 Oct 2007) | 1 line
  
  include config header from right place for pthread/once.hpp
........
  r39707 | burbelgruff | 2007-10-05 07:32:04 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Better support for BOOST_TYPEOF_NESTED_TYPEDEF for Borland
........
  r39708 | johnmaddock | 2007-10-05 08:00:40 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Disable PP-logic for __DECCXX compiler: WCAHR_MAX is defined but doesn't work in PP-logic on that platform.
........
  r39709 | johnmaddock | 2007-10-05 08:07:44 -0700 (Fri, 05 Oct 2007) | 1 line
  
  run_random was failing in the last release with Borland but wasn't marked up for some reason.
........
  r39710 | johnmaddock | 2007-10-05 08:47:02 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Markup for common_factor_test and Borland along with explanation of the issue (a code generation bug apparently).
........
  r39711 | danieljames | 2007-10-05 09:57:38 -0700 (Fri, 05 Oct 2007) | 2 lines
  
  Generate documentation for typedef members of classes. Fixes #1218.
........
  r39714 | johnmaddock | 2007-10-05 10:49:12 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Update Jamfiles to make PDF generation easier.
........
  r39715 | igaztanaga | 2007-10-05 10:54:39 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Marked hpp_cxx* as broken for Interprocess/Intrusive, and acc for Interprocess.
........
  r39716 | hkaiser | 2007-10-05 11:48:56 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Pool: Added detection of availability of pthreads using the BOOST_HAS_PTHREADS constant.
........
  r39717 | eric_niebler | 2007-10-05 12:00:43 -0700 (Fri, 05 Oct 2007) | 1 line
  
  put format string argument in non-deduced context
........
  r39718 | hkaiser | 2007-10-05 15:04:04 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Added a compiler workaround for IntelV9.1/linux.
........
  r39719 | hkaiser | 2007-10-05 16:25:09 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Wave: Fixed missing test case in regression status pages.
........
  r39720 | hkaiser | 2007-10-05 16:27:43 -0700 (Fri, 05 Oct 2007) | 1 line
  
  ProgramOptions: Silenced VC++ warnings.
........
  r39721 | hkaiser | 2007-10-05 17:26:30 -0700 (Fri, 05 Oct 2007) | 1 line
  
  Wave: Fixed typos in comments.
........
  r39722 | pdimov | 2007-10-06 01:59:01 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Marked up bind_placeholder_test
........
  r39723 | johnmaddock | 2007-10-06 04:12:33 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Fix Borland infinite looping issue.
........
  r39724 | djowel | 2007-10-06 07:10:30 -0700 (Sat, 06 Oct 2007) | 1 line
  
  fix for incomplete type is not allowed when tuple is forward declared. fixed the other as_xxx files as well.
........
  r39725 | johnmaddock | 2007-10-06 10:40:20 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Fix typo.
........
  r39726 | hkaiser | 2007-10-06 10:43:08 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Wave: Fixed Jamfile for regression tests.
........
  r39727 | johnmaddock | 2007-10-06 10:46:25 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Update docs to match quickbook.
........
  r39728 | hkaiser | 2007-10-06 10:54:28 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Wave: added a missing header.
........
  r39729 | vladimir_prus | 2007-10-06 11:24:04 -0700 (Sat, 06 Oct 2007) | 3 lines
  
  When we skip build of a target, say about that
  in --debug-building output.
........
  r39731 | grafik | 2007-10-06 12:46:39 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Remove BPL build conditional as it prevents normal build failures.
........
  r39751 | nmusatti | 2007-10-06 14:32:05 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Updated to support C++Builder 2007 Update 3 (bcc32 5.9.2)
........
  r39752 | chris_kohlhoff | 2007-10-06 17:11:25 -0700 (Sat, 06 Oct 2007) | 5 lines
  
  The epoll_wait function can produce EPOLLHUP events for a descriptor even
  if not specifically requested, resulting in a tight loop of calls to
  epoll_wait. Delete a descriptor from epoll if an EPOLLHUP event is
  received and there are no registered operations for the descriptor.
........
  r39753 | troyer | 2007-10-06 23:57:36 -0700 (Sat, 06 Oct 2007) | 1 line
  
  Fix for Borland
........
  r39755 | johnmaddock | 2007-10-07 04:08:51 -0700 (Sun, 07 Oct 2007) | 1 line
  
  math_info doesn't link with Borland unless built against the static runtime.
........
  r39756 | johnmaddock | 2007-10-07 04:09:45 -0700 (Sun, 07 Oct 2007) | 1 line
  
  math_info doesn't link with Borland unless built against the static runtime.
........
  r39757 | johnmaddock | 2007-10-07 04:10:24 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Added expm1 and lop1p support.
........
  r39759 | hkaiser | 2007-10-07 07:46:52 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Spirit: Fixed a couple of pedantic gcc warnings.
........
  r39760 | hkaiser | 2007-10-07 07:51:46 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Wave: Silenced a couple of pedantic gcc warnings.
........
  r39761 | hkaiser | 2007-10-07 08:55:00 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Spirit: Fixed a failing unit test.
........
  r39762 | hkaiser | 2007-10-07 08:57:37 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Spirit: Silenced some warnings.
........
  r39763 | aaron_windsor | 2007-10-07 09:52:39 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Fixing some errors and warnings on the planar graph tests coming from Sun compilers.
........
  r39766 | danieljames | 2007-10-07 11:08:35 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Include the size of function pointers, void* and std::size_t in the output of the function pointer hash test, to give me a clue why it's failling on a platform.
........
  r39767 | aaron_windsor | 2007-10-07 11:43:16 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Fix config issue for cycle ratio tests - the path to the input file used in the test should be relative to the graph test subdirectory.
........
  r39772 | bemandawes | 2007-10-07 14:59:46 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Appy Godegear patches from Nicola Musatti. Ticket #1304
........
  r39773 | aaron_windsor | 2007-10-07 16:49:07 -0700 (Sun, 07 Oct 2007) | 1 line
  
  Adding some missing typenames
........
  r39774 | eric_niebler | 2007-10-07 17:44:52 -0700 (Sun, 07 Oct 2007) | 1 line
  
  add awesome number parser from Dave Jenkins
........
  r39776 | eric_niebler | 2007-10-07 18:15:01 -0700 (Sun, 07 Oct 2007) | 1 line
  
  fix warnings under msvc
........
  r39777 | anthonyw | 2007-10-08 00:18:27 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Use InterlockedCompareExchange when _ReadWriteBarrier not available
........
  r39778 | agurtovoy | 2007-10-08 01:06:15 -0700 (Mon, 08 Oct 2007) | 1 line
  
  MPL: more inclusive markup for the gcc 4.1 regression
........
  r39780 | anthonyw | 2007-10-08 02:48:57 -0700 (Mon, 08 Oct 2007) | 1 line
  
  added extended test for new call_once
........
  r39781 | anthonyw | 2007-10-08 02:55:56 -0700 (Mon, 08 Oct 2007) | 1 line
  
  call_once passes exceptions to caller and leaves flag unset
........
  r39784 | anthonyw | 2007-10-08 08:41:05 -0700 (Mon, 08 Oct 2007) | 1 line
  
  New mutex implementations, more akin to C++0x
........
  r39785 | anthonyw | 2007-10-08 08:44:13 -0700 (Mon, 08 Oct 2007) | 1 line
  
  added backwards-compatibility overload for call_once
........
  r39786 | eric_niebler | 2007-10-08 08:49:09 -0700 (Mon, 08 Oct 2007) | 1 line
  
  fix postinc/assign problem with case_converting_iterator
........
  r39787 | eric_niebler | 2007-10-08 08:57:04 -0700 (Mon, 08 Oct 2007) | 1 line
  
  doc tweaks
........
  r39788 | burbelgruff | 2007-10-08 09:35:06 -0700 (Mon, 08 Oct 2007) | 1 line
  
  [typeof] Updated failures list to include failing borland tests and some failing native tests
........
  r39789 | burbelgruff | 2007-10-08 09:37:01 -0700 (Mon, 08 Oct 2007) | 1 line
  
  [typeof] native typeof support added for the Digital Mars compiler (same as the typeof hack used for Visual C++)
........
  r39790 | eric_niebler | 2007-10-08 09:49:00 -0700 (Mon, 08 Oct 2007) | 1 line
  
  work around msvc-7.1 bug
........
  r39792 | johnmaddock | 2007-10-08 09:58:15 -0700 (Mon, 08 Oct 2007) | 2 lines
  
  Initial math-toolkit commit.
  Includes all code and tests, but no docs yet.
........
  r39793 | eric_niebler | 2007-10-08 10:12:56 -0700 (Mon, 08 Oct 2007) | 1 line
  
  better fix for case_converting_iterator as suggested by Steven Watanabe
........
  r39794 | eric_niebler | 2007-10-08 10:13:29 -0700 (Mon, 08 Oct 2007) | 1 line
  
  clean up gcc unused parameter warnings
........
  r39796 | burbelgruff | 2007-10-08 10:46:23 -0700 (Mon, 08 Oct 2007) | 1 line
  
  [typeof] testing for typeof hacks on all compilers
........
  r39805 | vladimir_prus | 2007-10-08 10:54:17 -0700 (Mon, 08 Oct 2007) | 1 line
  
  New changes
........
  r39812 | johnmaddock | 2007-10-08 11:03:19 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Initial commit of math-toolkit docs.
........
  r39817 | vladimir_prus | 2007-10-08 14:10:41 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Windows fix
........
  r39818 | vladimir_prus | 2007-10-08 14:13:05 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Windows fix
........
  r39819 | eric_niebler | 2007-10-08 14:14:14 -0700 (Mon, 08 Oct 2007) | 1 line
  
  escape accented character
........
  r39820 | vladimir_prus | 2007-10-08 14:28:09 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Windows fix
........
  r39821 | vladimir_prus | 2007-10-08 14:47:05 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Windows fix
........
  r39823 | eric_niebler | 2007-10-08 15:41:00 -0700 (Mon, 08 Oct 2007) | 1 line
  
  symbols docs, acknowledgement for dave j., doxygen tweaks
........
  r39826 | eric_niebler | 2007-10-08 16:48:25 -0700 (Mon, 08 Oct 2007) | 1 line
  
  fix warning
........
  r39828 | vladimir_prus | 2007-10-08 22:33:45 -0700 (Mon, 08 Oct 2007) | 2 lines
  
  Make NORMALIZE_PATH convert \ to /.
........
  r39829 | vladimir_prus | 2007-10-08 22:35:48 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Make it compile, even
........
  r39830 | vladimir_prus | 2007-10-08 22:38:31 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Make it work, for extra benefit ('=' vs '==' bug)
........
  r39831 | vladimir_prus | 2007-10-08 23:37:00 -0700 (Mon, 08 Oct 2007) | 1 line
  
  Attemp to fix searched_lib on windows
........
  r39832 | anthonyw | 2007-10-08 23:59:14 -0700 (Mon, 08 Oct 2007) | 1 line
  
  added missing move.hpp header
........
  r39833 | danieljames | 2007-10-09 00:19:30 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Output some info about a test failure when hashing function pointers.
........
  r39834 | johnmaddock | 2007-10-09 04:15:11 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Fix problem with GCC on Linux not finding std_real_concept overload for fmod.
........
  r39835 | johnmaddock | 2007-10-09 04:30:19 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Added HTML docs, changed some section names to shorten the file names produced.
........
  r39836 | anthonyw | 2007-10-09 05:23:09 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fixed direction of conditional
........
  r39837 | johnmaddock | 2007-10-09 05:26:27 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Disabled long double support on some platforms.
........
  r39838 | anthonyw | 2007-10-09 05:45:46 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fixed typo in pthread_cond_timedwait and ETIMEDOUT
........
  r39839 | anthonyw | 2007-10-09 07:08:22 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fixed typo in pthread_cond_timedwait and ETIMEDOUT
........
  r39840 | garcia | 2007-10-09 07:28:42 -0700 (Tue, 09 Oct 2007) | 2 lines
  
  Exception review period has ended.
........
  r39841 | anthonyw | 2007-10-09 07:44:37 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fixed more has-timed-lock backwards conditions
........
  r39842 | johnmaddock | 2007-10-09 07:49:04 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Changed call signatures to keep Borland happy.
........
  r39843 | johnmaddock | 2007-10-09 07:49:37 -0700 (Tue, 09 Oct 2007) | 1 line
  
  A few fixes to keep Borland happy.
........
  r39848 | bemandawes | 2007-10-09 09:39:13 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Apply dll fixes from David Deakins
........
  r39849 | igaztanaga | 2007-10-09 09:49:47 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Marked acc as n/a for Interprocess.
........
  r39850 | johnmaddock | 2007-10-09 10:16:58 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Added refactored docs for existing Boost.Math libraries.
........
  r39851 | johnmaddock | 2007-10-09 10:17:50 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Added refactored docs for existing Boost.Math libraries.
........
  r39852 | johnmaddock | 2007-10-09 10:25:30 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Added refactored docs for existing Boost.Math libraries.
........
  r39853 | eric_niebler | 2007-10-09 10:56:18 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fix broken link to OASIS DocBook DTD
........
  r39854 | johnmaddock | 2007-10-09 11:11:17 -0700 (Tue, 09 Oct 2007) | 1 line
  
  More Borland workarounds.
........
  r39855 | johnmaddock | 2007-10-09 11:12:06 -0700 (Tue, 09 Oct 2007) | 1 line
  
  More Borland workarounds.
........
  r39863 | chris_kohlhoff | 2007-10-09 14:47:07 -0700 (Tue, 09 Oct 2007) | 2 lines
  
  Assume that HP-UX and AIX both need to have SIGPIPE blocked.
........
  r39864 | chris_kohlhoff | 2007-10-09 14:47:40 -0700 (Tue, 09 Oct 2007) | 3 lines
  
  HP-UX with aCC uses a variant of select() that takes int* arguments rather
  than fd_set*.
........
  r39865 | chris_kohlhoff | 2007-10-09 14:59:38 -0700 (Tue, 09 Oct 2007) | 3 lines
  
  Try changing the default target to Windows XP rather than Windows 2000 to see
  effect on borland-5.9.2.
........
  r39867 | eric_niebler | 2007-10-09 15:25:18 -0700 (Tue, 09 Oct 2007) | 1 line
  
  more user docs for semantic actions
........
  r39868 | eric_niebler | 2007-10-09 15:26:59 -0700 (Tue, 09 Oct 2007) | 1 line
  
  add xpressive::function<> for defining function objects for use in semantic actions
........
  r39869 | djowel | 2007-10-09 16:15:12 -0700 (Tue, 09 Oct 2007) | 1 line
  
  adding fusion
........
  r39870 | eric_niebler | 2007-10-09 18:46:53 -0700 (Tue, 09 Oct 2007) | 1 line
  
  fix buggy predicate_matcher and stomp more msvc warnings
........
  r39871 | aaron_windsor | 2007-10-09 19:18:37 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Trying to clear some errors from Sun CC.
........
  r39872 | hkaiser | 2007-10-09 19:25:35 -0700 (Tue, 09 Oct 2007) | 1 line
  
  Boost.Thread now depends on Boost.DateTime.
........
  r39873 | vladimir_prus | 2007-10-10 00:40:05 -0700 (Wed, 10 Oct 2007) | 4 lines
  
  Add values of variables specified with -s to .EVNRION
  module, so that we can override environment on
  command line.
........
  r39874 | schoepflin | 2007-10-10 00:42:19 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Disambiguate the identifier 'exception' and fix vector construction to make the test pass on Tru64/CXX.
........
  r39875 | schoepflin | 2007-10-10 01:21:36 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Blind shot trying to fix error blocking regression runs.
........
  r39876 | vladimir_prus | 2007-10-10 01:25:27 -0700 (Wed, 10 Oct 2007) | 2 lines
  
  New bjam.variable function exposed to Python.
........
  r39881 | johnmaddock | 2007-10-10 02:28:48 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Adjusted limits for Win64 and Sun OS.
........
  r39884 | johnmaddock | 2007-10-10 02:31:44 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Tentative Sunpro workaround.
........
  r39885 | joaquin | 2007-10-10 03:20:43 -0700 (Wed, 10 Oct 2007) | 1 line
  
  reverted 36306 for CW 8.3
........
  r39886 | vladimir_prus | 2007-10-10 03:23:20 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Add link to PythonPort page
........
  r39887 | vladimir_prus | 2007-10-10 03:35:07 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Fix URL
........
  r39890 | hkaiser | 2007-10-10 05:42:16 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Wave: Updated Jamfiles to include Boost.DateTime.
........
  r39891 | anthonyw | 2007-10-10 08:33:49 -0700 (Wed, 10 Oct 2007) | 1 line
  
  read_write_mutex makes a comeback --- as shared_mutex
........
  r39892 | bemandawes | 2007-10-10 08:49:32 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Fix date_time boo boo that was causing all regression tests to fail
........
  r39893 | johnmaddock | 2007-10-10 09:05:26 -0700 (Wed, 10 Oct 2007) | 7 lines
  
  Added Compaq CXX long long workaround to real_concept.hpp.
  Added missing forward declaration to ellint_1.hpp.
  Adjusted native log1p support for aCC.
  Removed bad forward declaration of fpclassify: correct declaration appears later in the file.
  Adjusted compile_test/test_compile_result.hpp to not return a NULL reference.
  Adjusted permitted error-limits for new platforms.
  Split some of the tests into smaller units so we don't get compiler timeouts when building (hopefully!)
........
  r39894 | hkaiser | 2007-10-10 09:44:29 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Wave: Fixed Jamfiles. 
........
  r39897 | eric_niebler | 2007-10-10 11:13:18 -0700 (Wed, 10 Oct 2007) | 1 line
  
  work around gcc bug in proto, add test for custom assertions, fix more gcc warnings
........
  r39898 | vladimir_prus | 2007-10-10 12:07:57 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Add logo, tweak the page
........
  r39899 | vladimir_prus | 2007-10-10 12:10:45 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Revert mistaken commit
........
  r39900 | johnmaddock | 2007-10-10 12:12:46 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Workaround for msvc+stlport.
........
  r39901 | vladimir_prus | 2007-10-10 12:18:25 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Upload logo, too
........
  r39902 | vladimir_prus | 2007-10-10 12:26:30 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Keep the logo
........
  r39903 | vladimir_prus | 2007-10-10 12:39:04 -0700 (Wed, 10 Oct 2007) | 1 line
  
  Doh. Fix link
........
  r39909 | eric_niebler | 2007-10-10 14:20:49 -0700 (Wed, 10 Oct 2007) | 1 line
  
  extra test for custom assertions, fix nasty bug in custom assertion handling
........
  r39913 | chris_kohlhoff | 2007-10-10 16:12:06 -0700 (Wed, 10 Oct 2007) | 2 lines
  
  Add a /dev/poll reactor implementation for Solaris.
........
  r39914 | eric_niebler | 2007-10-10 17:44:57 -0700 (Wed, 10 Oct 2007) | 1 line
  
  document user-defined assertions
........
  r39915 | eric_niebler | 2007-10-10 19:12:07 -0700 (Wed, 10 Oct 2007) | 1 line
  
  document placeholder<> and match_results<>::let()
........
  r39918 | schoepflin | 2007-10-11 00:36:41 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Fixed bug preventing compilation on Tru64/CXX.
........
  r39921 | johnmaddock | 2007-10-11 03:51:10 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Removed math docs from central build
........
  r39922 | joaquin | 2007-10-11 03:57:30 -0700 (Thu, 11 Oct 2007) | 77 lines
  
  Boost 1.35 version of Boost.MultiIndex
  allocator_utilities.hpp: added partial_std_allocator_wrapper::value_type
  composite_key.hpp: used hash_fwd.hpp
  auto_space.hpp: added support for non-standard allocators
  bidir_node_iterator.hpp: moved friend-injected operators out of class
  copy_map.hpp: added support for non-standard allocators
  hash_index_args.hpp: removed deprecated use of <boost/functional/hash/hash.hpp>
  hash_index_iterator.hpp: moved friend-injected operators our of class
  hash_index_node.hpp: added support for non-standard allocators
  header_holder.hpp:added support for non-standard allocators
  index_base.hpp: added support for non-standard allocators, added modify_rollback, added small improvement to modify
  index_loader.hpp: added support for non-standard allocators
  index_matcher.hpp: added support for non-standard allocators
  index_node_base.hpp: added support for non-standard allocators
  iter_adaptor.hpp: added some out-of-class operators to alleviate a MSVC++ 6.0 problem
  modify_key_adaptor.hpp: renamed some vars to accomudate broader usage scope
  node_type.hpp: added support for non-standard allocators
  ord_index_node.hpp: added support for non-standard allocators
  ord_index_ops.hpp: implemented a more efficient equal_range
  rnd_index_loader.hpp: added support for non-standard allocators
  rnd_index_node.hpp: added support for non-standard allocators
  rnd_index_ops.hpp: added support for non-standard allocators
  rnd_index_ptr_array.hpp: added support for non-standard allocators
  rnd_node_iterator.hpp: moved friend-injected operators out of class
  seq_index_node.hpp: added support for non-standard allocators
  seq_index_ops.hpp: added support for non-standard allocators
  uintptr_type.hpp: added support for __int64
  unbounded.hpp: fixed ODR problem
  value_compare.hpp: fixed a small unefficiency
  global_fun: initial commit
  hashed_index.hpp: added support for non-standard allocators, added c[r]{begin|end}, [local_]iterator_to, rollback modify
  identity_fwd.hpp: fixed wrong include guard name
  key_extractors.hpp: added global_fun
  mem_fun.hpp: removed superfluous =0's
  ordered_index.hpp: added support for non-standard allocators, added c[r]{begin|end}, iterator_to, rollback modify, improved equal_range and range, added conformance to DR 233
  random_access_index.hpp: added support for non-standard allocators, added c[r]{begin|end}, iterator_to, rollback modify, added conformance to 23.1.1/9
  sequenced_index.hpp: added support for non-standard allocators, added c[r]{begin|end}, iterator_to, rollback modify, added conformance to 23.1.1/9, improved resize
  multi_index_container.hpp: added support for non-standard allocators, improved ctor_args_list, rollback modify
  acknowledgements.html: added entry for Boost 1.35
  examples.html: renamed example 2, added B.IP example/composite_keys.cpp
  future_work.html: removed entry on bimap
  hash_indices.html: added c[r]{begin|end}, [local_]iterator_to, rollback modify
  reference/index.html: added global_fun
  reference/key_extraction.html: added global_fun, added technical correction
  multi_index_container.html: added support for non-standard allocators
  ord_indices.html: added c[r]{begin|end}, iterator_to, rollback modify
  rnd_indices.html: added c[r]{begin|end}, iterator_to, rollback modify
  seq_indices.html: added c[r]{begin|end}, iterator_to, rollback modify
  release_notes.html: added entry for Boost 1.35
  tests.html: added new serialization test file
  basics.html: added rollback modify
  creation.html: added support for non-standard allocators
  tutorial/indices.html: added iterator_to
  tutorial/key_extraction.html: added global_fun
  composite_keys.cpp: fixed technicality
  fun_key.cpp: was memfun_key.cpp, added global_fun
  ip_allocator.cpp: initial commit
  example/Jamfile.v2: renamed memfun_key, added ip_allocator
  test_perf.cpp: fixed technicality
  employee.hpp: used a non-standard allocator
  test/Jamfile.v2: added new test file
  non_std_allocator.hpp: initial commit
  pair_of_ints.hpp: added decrement facilities
  test_capacity.cpp: added extra check on resize
  test_copy_assignment.cpp: added test for 23.1.1/9
  test_iterators.cpp: added tests for c[r]{begin|end} and [local_]iterator_to, fixed technicality
  test_key_extractors.cpp: added tests for global_fun
  test_modifiers.cpp: added tests dor DR 233, fixed technicality
  test_range.cpp: added extra checks to secure range refactoring
  test_rearrange.cpp: fixed technicality
  test_serialization.cpp: added new test file
  test_serialization1.cpp: corrected include, used a non-standard allocator
  test_serialization2.cpp: corrected include, used a non-standard allocator, split some stuff ro test_serialization3.cpp
  test_serialization3.cpp: initial commit
  test_serialization3.hpp: initial commit
  test_serialization_template.hpp: removed some reliance on ADL
  test_update.cpp: addes tests for rollback modify, fixed technicality
........
  r39923 | joaquin | 2007-10-11 04:23:47 -0700 (Thu, 11 Oct 2007) | 2 lines
  
  def_ctor_tuple_cons.hpp: no longer used
  memfun_key.cpp: is now fun_key.cpp
........
  r39924 | johnmaddock | 2007-10-11 04:47:11 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Added Boost.Math overview.
........
  r39925 | johnmaddock | 2007-10-11 04:51:19 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Redirect to new index.
........
  r39926 | johnmaddock | 2007-10-11 05:05:29 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Updated Math library entries.
........
  r39927 | garcia | 2007-10-11 07:51:48 -0700 (Thu, 11 Oct 2007) | 2 lines
  
  math toolkit has been added to the trunk.
........
  r39928 | johnmaddock | 2007-10-11 08:59:48 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Fixed some typos, and rebuilt docs.
........
  r39933 | eric_niebler | 2007-10-11 10:02:13 -0700 (Thu, 11 Oct 2007) | 1 line
  
  new number parser example from dave jenkins
........
  r39934 | eric_niebler | 2007-10-11 10:05:35 -0700 (Thu, 11 Oct 2007) | 1 line
  
  remove self-adjusting TST optimization for thread-safety reasons
........
  r39935 | danieljames | 2007-10-11 10:12:24 -0700 (Thu, 11 Oct 2007) | 3 lines
  
  Try to fix function pointer hashing for the sun compiler. A bit of a stab in
  the dark.
........
  r39939 | danielw | 2007-10-11 13:37:37 -0700 (Thu, 11 Oct 2007) | 2 lines
  
  Added missing Py_INCREF(Py_None).
........
  r39941 | eric_niebler | 2007-10-11 13:50:59 -0700 (Thu, 11 Oct 2007) | 1 line
  
  add let() so regexes with late-bound action args can be used with regex_(token_)iterator
........
  r39944 | nmusatti | 2007-10-11 14:07:17 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Updated to support C++Builder 2007 Update 3 (bcc32 5.9.2)
........
  r39945 | nmusatti | 2007-10-11 14:09:07 -0700 (Thu, 11 Oct 2007) | 1 line
  
  Updated to support C++Builder 2007 Update 3 (bcc32 5.9.2)
........
  r39946 | eric_niebler | 2007-10-11 14:12:22 -0700 (Thu, 11 Oct 2007) | 1 line
  
  add tests for late-bound action args with regex_(token_)iterator
........
  r39947 | eric_niebler | 2007-10-11 14:29:57 -0700 (Thu, 11 Oct 2007) | 1 line
  
  document use of let() with regex_(token_)iterator
........
  r39948 | eric_niebler | 2007-10-11 14:57:12 -0700 (Thu, 11 Oct 2007) | 1 line
  
  fix gcc warnings
........
  r39955 | eric_niebler | 2007-10-11 21:31:10 -0700 (Thu, 11 Oct 2007) | 1 line
  
  reenable self-adjusting TST if BOOST_DISABLE_THREADS is defined
........
  r39956 | eric_niebler | 2007-10-12 00:04:13 -0700 (Fri, 12 Oct 2007) | 1 line
  
  xpressive works with boost 1.34.1
........
  r39957 | igaztanaga | 2007-10-12 01:58:04 -0700 (Fri, 12 Oct 2007) | 1 line
  
  Corrected bug in atomic_dec32 for PPC
........
  r39958 | johnmaddock | 2007-10-12 03:01:36 -0700 (Fri, 12 Oct 2007) | 1 line
  
  Lots of Borland specific patches: quite a few of the special-function tests do now do actually pass.
........
  r39960 | danieljames | 2007-10-12 04:58:34 -0700 (Fri, 12 Oct 2007) | 5 lines
  
  Fix my botched attempt at supporting function pointers on Sun's compilers.
  Also, now only applies the workaround to function pointers, non-function
  pointers are treated as before. I might need to apply the special case to
  member function pointers as well.
........
  r39962 | igaztanaga | 2007-10-12 08:41:44 -0700 (Fri, 12 Oct 2007) | 1 line
  
  Fixed dispose_and_assign bug in list
........
  r39964 | eric_niebler | 2007-10-12 09:50:13 -0700 (Fri, 12 Oct 2007) | 1 line
  
  updated installation information
........
  r39971 | johnmaddock | 2007-10-13 09:23:18 -0700 (Sat, 13 Oct 2007) | 2 lines
  
  Fixed most of the remaining Borland issues, and removed dependency to Boost.Lambda.
  Added tentative fix for the Sunpro compilers.
........
  r39972 | danieljames | 2007-10-13 09:34:09 -0700 (Sat, 13 Oct 2007) | 11 lines
  
  New attempt at fixing the function pointer hash on the Sun compilers.
  
  I think I was barking up the wrong tree - it could be that when calling
  hash_value with a function pointer the compiler was choosing the
  hash_value(bool) overload over the hash_value(T*) overload, so instead I'm
  trying to call the correct one by giving it a template parameter. Another
  alternative would be to calculate the hash function inside boost::hash.
  
  Unfortunately, if I'm right, this means that other calls to hash_value will go
  wrong for function pointers.
........
  r39973 | johnmaddock | 2007-10-13 09:40:36 -0700 (Sat, 13 Oct 2007) | 2 lines
  
  Fixed image path in complex number docs.
  Suppressed draft mode in PDF generation (stops the FO renderer from grabbing draft.png from sourceforge).
........
  r39976 | grafik | 2007-10-13 10:25:41 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Partial rework of regression scripts for branch independent testing.
........
  r39977 | danieljames | 2007-10-13 10:35:48 -0700 (Sat, 13 Oct 2007) | 3 lines
  
  Remove the pointles separation of the float tests into three functions
  (probably a throwback to when I used Boost.Test)
........
  r39978 | grafik | 2007-10-13 10:41:07 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Partial rework of regression scripts for branch independent testing.
........
  r39979 | danieljames | 2007-10-13 10:47:57 -0700 (Sat, 13 Oct 2007) | 5 lines
  
  Separate the long double hash tests from the test for other float types. On
  some platforms the standard library has poor support for long doubles causing
  long doubles to fail when the others pass. So this makes it clearer that the
  problem is only for long doubles.
........
  r39982 | danieljames | 2007-10-13 10:57:23 -0700 (Sat, 13 Oct 2007) | 2 lines
  
  Oops, I messed the properties when adding files, this should hopefully fix them.
........
  r39983 | danieljames | 2007-10-13 11:34:25 -0700 (Sat, 13 Oct 2007) | 2 lines
  
  Add support for complex numbers to Boost.Hash
........
  r39984 | danieljames | 2007-10-13 11:47:10 -0700 (Sat, 13 Oct 2007) | 2 lines
  
  Fix the copyright line for the hash library.
........
  r39985 | danieljames | 2007-10-13 11:47:41 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Use quickbook v1.4 for the hash library.
........
  r39986 | eric_niebler | 2007-10-13 14:16:23 -0700 (Sat, 13 Oct 2007) | 1 line
  
  update copyright year
........
  r39988 | vladimir_prus | 2007-10-13 14:32:51 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Fix module messup when calling into Python.
........
  r39990 | eric_niebler | 2007-10-13 14:37:02 -0700 (Sat, 13 Oct 2007) | 1 line
  
  update copyright information
........
  r39991 | danieljames | 2007-10-13 14:50:05 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Use a pragma for warnings in Visual C++.
........
  r39993 | danieljames | 2007-10-13 15:30:50 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Clean up the hash tests a little.
........
  r39994 | danieljames | 2007-10-13 15:43:13 -0700 (Sat, 13 Oct 2007) | 1 line
  
  Add a trivial test to see if the deprecated hash headers compile okay when included.
........
  r40004 | danieljames | 2007-10-14 00:38:49 -0700 (Sun, 14 Oct 2007) | 2 lines
  
  Avoid some warnings when compiling the test with Visual C++.
........
  r40005 | vladimir_prus | 2007-10-14 01:03:50 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Remove tools/release/user-config.jam that keeps confusing everybody.
........
  r40006 | vladimir_prus | 2007-10-14 02:09:41 -0700 (Sun, 14 Oct 2007) | 3 lines
  
  Better diagnostics when trying to import non-callable Python
  object to Jam.
........
  r40008 | vladimir_prus | 2007-10-14 02:55:41 -0700 (Sun, 14 Oct 2007) | 7 lines
  
     * common.jam (get-invocation-command): When
     we cannot find a specified tool, return
     tool's name so that the command line looks sane,
     even if it does not work.
     (handle-options): Report which command will
     be used, in debug mode.
........
  r40011 | bemandawes | 2007-10-14 05:40:10 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Change svn info to svn info --xml to cope with non-English locales. Make scan for number insensitive to svn info --xml option.
........
  r40012 | johnmaddock | 2007-10-14 05:54:49 -0700 (Sun, 14 Oct 2007) | 4 lines
  
  Renamed two over-long files
  simplified test_compile_result.hpp so hopefully Sunpro can cope with it.
  Modified Jamfile to static link to regex lib on Sun.
  Adjusted Solaris expected error levels.
........
  r40014 | rogeeff | 2007-10-14 09:47:45 -0700 (Sun, 14 Oct 2007) | 1 line
  
  cleanup log
........
  r40015 | rogeeff | 2007-10-14 09:49:00 -0700 (Sun, 14 Oct 2007) | 1 line
  
  cleanup Tag comment
........
  r40018 | rogeeff | 2007-10-14 10:49:02 -0700 (Sun, 14 Oct 2007) | 1 line
  
  switch from non-portable warning to message
........
  r40019 | nmusatti | 2007-10-14 10:51:32 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Applied patch from Ticket #1319
........
  r40020 | nmusatti | 2007-10-14 10:53:15 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Applied patch from Ticket #1320
........
  r40021 | grafik | 2007-10-14 10:54:28 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Add usage dependency on system library.
........
  r40023 | rogeeff | 2007-10-14 11:33:16 -0700 (Sun, 14 Oct 2007) | 1 line
  
  accessor to the reporter stream provided
........
  r40024 | rogeeff | 2007-10-14 11:56:23 -0700 (Sun, 14 Oct 2007) | 1 line
  
  increase max number of elems in fixed map
........
  r40025 | rogeeff | 2007-10-14 11:58:05 -0700 (Sun, 14 Oct 2007) | 3 lines
  
  2 new command line arguments (yet unused):
  --auto_start_dbg
  --use_alt_stack
........
  r40026 | rogeeff | 2007-10-14 12:23:14 -0700 (Sun, 14 Oct 2007) | 1 line
  
  typo in a comment
........
  r40027 | rogeeff | 2007-10-14 12:24:19 -0700 (Sun, 14 Oct 2007) | 1 line
  
  set init value for result
........
  r40028 | rogeeff | 2007-10-14 12:25:18 -0700 (Sun, 14 Oct 2007) | 1 line
  
  max macro guard
........
  r40029 | rogeeff | 2007-10-14 12:26:23 -0700 (Sun, 14 Oct 2007) | 1 line
  
  bug in output_test_stream constructor error generation fixed
........
  r40030 | rogeeff | 2007-10-14 12:27:32 -0700 (Sun, 14 Oct 2007) | 1 line
  
  avoid start/finish messages if log is disabled completely
........
  r40031 | rogeeff | 2007-10-14 12:28:46 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Test module initialization error message is redirected into result reporter stream
........
  r40032 | rogeeff | 2007-10-14 12:29:59 -0700 (Sun, 14 Oct 2007) | 1 line
  
  typo in a comment
........
  r40033 | rogeeff | 2007-10-14 12:39:33 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Log level enum value renamed
........
  r40035 | rogeeff | 2007-10-14 14:14:29 -0700 (Sun, 14 Oct 2007) | 6 lines
  
  Support for expected failures in test cases with automated registration reworked completely. It now allows to be used within auto-test-stuites. 
  framework API changed to return non const references to the test units to allow post creation modifications
  unit_test_suite.hpp dependency on framework.hpp removed
  inlined version includes all necessary files now
  in test_tools.hpp BOOST_TEST_DECL is added/removed where necessary
  Test suite auto registration modified to allow c++ namespace like behavior 
........
  r40036 | danieljames | 2007-10-14 14:52:12 -0700 (Sun, 14 Oct 2007) | 1 line
  
  Sun C++ didn't like the function call, so just try inlining the implementation for now.
........
  r40040 | joaquin | 2007-10-14 23:54:34 -0700 (Sun, 14 Oct 2007) | 1 line
  
  typo
........
  r40041 | anthonyw | 2007-10-15 02:18:32 -0700 (Mon, 15 Oct 2007) | 1 line
  
  added missing include to basic_timed_mutex.hpp
........
  r40046 | fmhess | 2007-10-15 06:06:26 -0700 (Mon, 15 Oct 2007) | 5 lines
  
  Fixed some invalid docbook (<para> is not allowed to be a child of
  <part>).  This fixes one of the failures when building pdf docs with
  fop 0.94.
........
  r40047 | fmhess | 2007-10-15 06:24:34 -0700 (Mon, 15 Oct 2007) | 4 lines
  
  Prevent the generation of empty <itemizedlist> elements, which is invalid
  docbook and causes apache fop 0.94 to choke and die.
........
  r40048 | fmhess | 2007-10-15 06:27:50 -0700 (Mon, 15 Oct 2007) | 4 lines
  
  Fixed a problem with boostbook printing an extra colon in the class 
  synopsis, when a class inherits from a single base class and it's too 
  long to fit on one line.
........
  r40049 | fmhess | 2007-10-15 06:43:00 -0700 (Mon, 15 Oct 2007) | 9 lines
  
  Updated setup_boostbook scripts to download newer versions of apache fop
  and docbook xsl, since the old versions are no longer posted for download.
  The newer version of apache fop is stricter about its input, 
  and currently fails to validate its input when trying to build boost.pdf, 
  due to various bits on invalid docbook.  I have it working locally
  though, and will create tickets with patches in trac for the remaining
  issues in the library docs and tools.
........
  r40050 | fmhess | 2007-10-15 06:46:23 -0700 (Mon, 15 Oct 2007) | 4 lines
  
  Stop quickbook from generating empty <calloutlist> 
  elements (which is invalid docbook and causes apache fop 0.94 to 
  choke and die).
........
  r40051 | bemandawes | 2007-10-15 07:50:59 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Suppress message tests on Windows unless the language is US English
........
  r40052 | grafik | 2007-10-15 07:53:28 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Rework of regression scripts for branch independent testing -- complete.
........
  r40053 | grafik | 2007-10-15 08:45:25 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Bootstrap from trunk sources of regression scripts.
........
  r40056 | joaquin | 2007-10-15 09:10:39 -0700 (Mon, 15 Oct 2007) | 1 line
  
  added missing #include
........
  r40058 | igaztanaga | 2007-10-15 09:55:23 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Fixed doxygen error in reference
........
  r40059 | igaztanaga | 2007-10-15 09:56:27 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Added missing include
........
  r40060 | igaztanaga | 2007-10-15 09:57:15 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Fixed assignment operator
........
  r40061 | johnmaddock | 2007-10-15 09:57:57 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Disregard ".svn" directories
........
  r40062 | igaztanaga | 2007-10-15 09:58:15 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Changed wrong insert_after_and_dispose() with insert_after
........
  r40063 | danieljames | 2007-10-15 11:47:05 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Mark up the expected hash error for the sun compilers.
........
  r40064 | grafik | 2007-10-15 14:54:01 -0700 (Mon, 15 Oct 2007) | 1 line
  
  Add default to 'regression' when no commands are given.
........
  r40065 | rogeeff | 2007-10-15 19:01:39 -0700 (Mon, 15 Oct 2007) | 1 line
  
  avoid warnings
........
  r40066 | rogeeff | 2007-10-15 19:02:16 -0700 (Mon, 15 Oct 2007) | 1 line
  
  msvc 6.5 port
........
  r40067 | rogeeff | 2007-10-15 19:03:16 -0700 (Mon, 15 Oct 2007) | 1 line
  
  proper report for the exceptions in inti_unit_test_suite function
........
  r40068 | rogeeff | 2007-10-15 20:47:24 -0700 (Mon, 15 Oct 2007) | 1 line
  
  use io_saver directly
........
  r40069 | rogeeff | 2007-10-15 20:51:54 -0700 (Mon, 15 Oct 2007) | 2 lines
  
  unified test runner interface for both original and alternative init API, the same time streamlining error handling for all the cases
  new property p_enabled is added to  the test unit in preparation for the run by name
........
  r40076 | rogeeff | 2007-10-16 00:06:10 -0700 (Tue, 16 Oct 2007) | 1 line
  
  fix A bug in auto TC exp failure support
........
  r40077 | rogeeff | 2007-10-16 00:07:43 -0700 (Tue, 16 Oct 2007) | 1 line
  
  temporary disable debug related features - to be reverted soon
........
  r40078 | rogeeff | 2007-10-16 00:18:10 -0700 (Tue, 16 Oct 2007) | 9 lines
  
  Major rework of execution monitor functionality:
  update to the error reporting on both NT and *nix
  support for signal handling on alternative stack
  execution monitor parameter made public properties
  structured exception handling moved to double __try approach with custom SE filter
  support for floating point errors enhanced on NT based compilers
  Notion of system_error is introduced (to be replaced potentially with boost::system later on)
  Invalid parameter error detected by MSVC runtime properly reported
  report_error implemented using vsnprintf allowing better output
........
  r40079 | johnmaddock | 2007-10-16 02:32:28 -0700 (Tue, 16 Oct 2007) | 2 lines
  
  Fixed lots of "inspect" issues: bad hyperlinks, tabs in source and missing licenses.
  Tweaked some error levels again.
........
  r40080 | anthonyw | 2007-10-16 04:08:17 -0700 (Tue, 16 Oct 2007) | 1 line
  
  removed lock_ops as no longer needed
........
  r40082 | igaztanaga | 2007-10-16 08:25:13 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Tru64 re-enabled for intrusive to try to solve remaining issues
........
  r40083 | johnmaddock | 2007-10-16 08:41:57 -0700 (Tue, 16 Oct 2007) | 2 lines
  
  Fixes for the Sun-5.9 compiler: don't try and encode constants smaller than LDBL_MIN, the compiler chokes on it.
  Fixes for STLport: long double stream operators are broken (streaming in appears not to work at all, streaming out can segfault if the value is too small).
........
  r40084 | grafik | 2007-10-16 08:52:38 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Minor modification to pass in the branch type to generate results for, and to move the boost checkout to the root dir.
........
  r40086 | johnmaddock | 2007-10-16 09:11:30 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Fully qualified use of "extended" flag, to keep gcc on Solaris happy.
........
  r40087 | johnmaddock | 2007-10-16 09:15:38 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Update for Borland 5.8.2 and 5.9.2.
........
  r40088 | niels_dekker | 2007-10-16 10:00:28 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Disabled MSVC warning C4345, in response to Gennadiy Rozental, Boost Developer mailing list, "[utility] value_init warning", October 14, 2007.  Push'n'pop reminder from Paul A Bristow taken into account.
........
  r40089 | niels_dekker | 2007-10-16 10:06:39 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Added value_initialized<T> test, having T as aggregate POD struct. In the past, this would have triggered MSVC warning C4345; this warning is now disabled within value_init.hpp, changeset [40088]
........
  r40090 | rogeeff | 2007-10-16 10:11:00 -0700 (Tue, 16 Oct 2007) | 1 line
  
  cygwin issue fix
........
  r40091 | eric_niebler | 2007-10-16 10:15:44 -0700 (Tue, 16 Oct 2007) | 1 line
  
  cleanup
........
  r40094 | eric_niebler | 2007-10-16 12:07:12 -0700 (Tue, 16 Oct 2007) | 1 line
  
  reverted to r40064
........
  r40095 | grafik | 2007-10-16 12:08:58 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Allow specifying options with quotes, i.e. "--with-python=xyz", to work around the CMD shell using "=" as an argument separator.
........
  r40096 | grafik | 2007-10-16 13:05:35 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Specify user to post results to OSL server.
........
  r40098 | guwi17 | 2007-10-16 14:48:01 -0700 (Tue, 16 Oct 2007) | 2 lines
  
  - added section "nested products"
........
  r40099 | bemandawes | 2007-10-16 15:05:29 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Add failure count for each compiler column.
........
  r40100 | eric_niebler | 2007-10-16 15:13:11 -0700 (Tue, 16 Oct 2007) | 1 line
  
  revert more boost.test changes
........
  r40101 | danieljames | 2007-10-16 16:25:37 -0700 (Tue, 16 Oct 2007) | 1 line
  
  Remove the free-function-groups from the hash reference documentation, they were causing the functions to be listed on the documentation for every specialization of boost::hash<T>, and the functions to be described on the main synopsis page, instead of their own page.
........
  r40103 | eric_niebler | 2007-10-16 21:26:36 -0700 (Tue, 16 Oct 2007) | 1 line
  
  misc cleann-up from Dave Jenkins
........
  r40104 | chris_kohlhoff | 2007-10-16 21:44:38 -0700 (Tue, 16 Oct 2007) | 2 lines
  
  Revert HP-UX/aCC change to select() wrapper as it breaks more than it fixes.
........
  r40106 | chris_kohlhoff | 2007-10-16 22:22:26 -0700 (Tue, 16 Oct 2007) | 2 lines
  
  Borland C++ wants friendship for the task_cleanup nested class.
........
  r40107 | chris_kohlhoff | 2007-10-17 00:25:03 -0700 (Wed, 17 Oct 2007) | 2 lines
  
  Throw an exception if unable to create a pipe for the pipe_select_interrupter.
........
  r40108 | chris_kohlhoff | 2007-10-17 00:58:38 -0700 (Wed, 17 Oct 2007) | 3 lines
  
  Make Windows XP the default target Windows version as the latest Windows
  SDK doesn't support IPv6 for Windows 2000 targets.
........
  r40109 | chris_kohlhoff | 2007-10-17 01:20:30 -0700 (Wed, 17 Oct 2007) | 2 lines
  
  Add define to disable /dev/poll support.
........
  r40110 | johnmaddock | 2007-10-17 02:19:35 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Change #warning to #pragma message: #warning is a gcc-ism and the code in question is msvc-specific (Tested on all msvc variants, plus gcc-minw32).
........
  r40117 | johnmaddock | 2007-10-17 05:58:55 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Disable FOP1 extensions so we can build with xep extensions instead.
........
  r40119 | chris_kohlhoff | 2007-10-17 07:04:42 -0700 (Wed, 17 Oct 2007) | 3 lines
  
  Add dummy enum for ssl errors. Change to static const references to error
  category objects to be consistent with boost.system.
........
  r40124 | igaztanaga | 2007-10-17 08:40:41 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Added <algorithm> include. Erased wrong "non" word in swap members' Throws clause.
........
  r40128 | johnmaddock | 2007-10-17 10:15:53 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Updates to build system: Sun and SGI compilers have a problem doing a shared link, and some platforms don't have an icudata library.
........
  r40129 | eric_niebler | 2007-10-17 10:21:01 -0700 (Wed, 17 Oct 2007) | 1 line
  
  mark up expected xpressive failures on acc toolset
........
  r40130 | danieljames | 2007-10-17 10:27:42 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Include authors that are in authorgroups in the generated chapterinfo.
........
  r40131 | danieljames | 2007-10-17 10:29:46 -0700 (Wed, 17 Oct 2007) | 1 line
  
  Merge some minor changes from the development branch to remove some unnecessary differences.
........
  r40146 | joaquin | 2007-10-17 23:57:25 -0700 (Wed, 17 Oct 2007) | 1 line
  
  applied workaround for MSVC++ 6.5/7.0 problem with static constants inside templates, see http://lists.boost.org/Archives/boost/2007/10/128392.php
........
  r40147 | rogeeff | 2007-10-18 00:13:43 -0700 (Thu, 18 Oct 2007) | 1 line
  
  try run
........
  r40148 | rogeeff | 2007-10-18 00:14:56 -0700 (Thu, 18 Oct 2007) | 3 lines
  
  fixed issue with num of exp failure calculation 
  mwerks port in execution_monitor.ipp
  bug in init function invocation fixed
........
  r40149 | chris_kohlhoff | 2007-10-18 01:34:03 -0700 (Thu, 18 Oct 2007) | 2 lines
  
  Assume that Tru64 also needs SIGPIPE to be blocked.
........
  r40155 | johnmaddock | 2007-10-18 08:37:01 -0700 (Thu, 18 Oct 2007) | 3 lines
  
  Workaround for real_concept when there are no long double math functions.
  Added HP-UX on PA RISC to list of platforms with no long double overloads.
  Added macro expansion suppression code to declarations of sign and to it's usages (an AIX fix).
........
  r40156 | grafik | 2007-10-18 09:11:41 -0700 (Thu, 18 Oct 2007) | 1 line
  
  Fix build system error when Python is not configured, without preventing the BPL target from being declared. Instead the target is now unbuildable, and will be skipped when Python is not configured.
........
  r40159 | igaztanaga | 2007-10-18 09:20:28 -0700 (Thu, 18 Oct 2007) | 1 line
  
  Added atomic operations for alpha processors
........
  r40160 | vladimir_prus | 2007-10-18 09:53:01 -0700 (Thu, 18 Oct 2007) | 1 line
  
  Enable index for Boost.Build standalone docs.
........
  r40162 | johnmaddock | 2007-10-18 11:17:15 -0700 (Thu, 18 Oct 2007) | 1 line
  
  Fixed some links and merged changes in the Sandbox to here.
........
  r40165 | rogeeff | 2007-10-18 14:43:35 -0700 (Thu, 18 Oct 2007) | 2 lines
  
  FP exceptions made optional and disabled by default
  new CLA --detect_fp_exceptions=[yes|no] introduced
........
  r40166 | rogeeff | 2007-10-18 14:53:14 -0700 (Thu, 18 Oct 2007) | 1 line
  
  included alias added
........
  r40167 | aaron_windsor | 2007-10-18 17:16:36 -0700 (Thu, 18 Oct 2007) | 1 line
  
  Un-asserted two function calls - this was causing the function calls to turn into no-ops when the example was compiled with debugging off.
........
  r40172 | rogeeff | 2007-10-18 19:17:52 -0700 (Thu, 18 Oct 2007) | 1 line
  
  msvc 6.5 port fix
........
  r40173 | eric_niebler | 2007-10-18 20:16:51 -0700 (Thu, 18 Oct 2007) | 1 line
  
  don't copy singular iterator in sub_match, misc clean-up
........
  r40174 | vladimir_prus | 2007-10-19 00:00:03 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Add indexterms for glob-tree and install-source-root.
........
  r40176 | chris_kohlhoff | 2007-10-19 01:09:55 -0700 (Fri, 19 Oct 2007) | 2 lines
  
  Add get_io_service() synonym for io_service() to match TR2 proposal.
........
  r40178 | schoepflin | 2007-10-19 02:06:04 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Detailed OSF detection macro to include the compiler used.
........
  r40179 | schoepflin | 2007-10-19 02:52:23 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Added missing include file.
........
  r40180 | danieljames | 2007-10-19 02:55:10 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Fix the deprecated warnings on Borland, should also check before using #warning.
........
  r40181 | johnmaddock | 2007-10-19 05:03:54 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Add needed config options.
........
  r40183 | johnmaddock | 2007-10-19 05:30:46 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Added revision ID.
........
  r40184 | johnmaddock | 2007-10-19 05:46:54 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Update configure files with revision Id and some compiler specific fixes.
........
  r40186 | schoepflin | 2007-10-19 07:45:06 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Added support for Tru64/CXX.
........
  r40187 | anthonyw | 2007-10-19 07:52:52 -0700 (Fri, 19 Oct 2007) | 1 line
  
  small changes to reduce warnings; extracted pthread_mutex_scoped_lock to its own file
........
  r40188 | igaztanaga | 2007-10-19 07:54:18 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Fixed newline issue between two [endsect].
........
  r40189 | anthonyw | 2007-10-19 08:31:35 -0700 (Fri, 19 Oct 2007) | 1 line
  
  more tweaks to remove warnings
........
  r40191 | anthonyw | 2007-10-19 10:40:04 -0700 (Fri, 19 Oct 2007) | 1 line
  
  New condition_variable and condition_variable_any as per proposed C++0x interface
........
  r40192 | bemandawes | 2007-10-19 10:43:44 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Initial commit
........
  r40193 | johnmaddock | 2007-10-19 10:55:44 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Adjust ICU build support: almost works now :-)
........
  r40194 | turkanis | 2007-10-19 11:09:54 -0700 (Fri, 19 Oct 2007) | 1 line
  
  updated turkanis email address (iostreams + rational)
........
  r40196 | vladimir_prus | 2007-10-19 12:16:10 -0700 (Fri, 19 Oct 2007) | 1 line
  
  Remove unused code
........
  r40197 | vladimir_prus | 2007-10-19 12:18:32 -0700 (Fri, 19 Oct 2007) | 2 lines
  
  Remove project-target.intern-constants as unused.
........
  r40203 | rogeeff | 2007-10-19 22:38:57 -0700 (Fri, 19 Oct 2007) | 1 line
  
  borland port
........
  r40204 | rogeeff | 2007-10-19 23:59:27 -0700 (Fri, 19 Oct 2007) | 1 line
  
  intel port
........
  r40205 | johnmaddock | 2007-10-20 02:20:30 -0700 (Sat, 20 Oct 2007) | 1 line
  
  Removed ICU options from main requirements: BBv2 barfs at it.
........
  r40206 | danieljames | 2007-10-20 03:31:58 -0700 (Sat, 20 Oct 2007) | 2 lines
  
  Try to only issue deprecation warnings on compilers that support them.
........
  r40208 | djowel | 2007-10-20 04:01:50 -0700 (Sat, 20 Oct 2007) | 1 line
  
  refactoring for v2.1
........
  r40209 | djowel | 2007-10-20 04:31:03 -0700 (Sat, 20 Oct 2007) | 1 line
  
  phase2: refactoring for v2.1
........
  r40210 | djowel | 2007-10-20 04:49:17 -0700 (Sat, 20 Oct 2007) | 1 line
  
  phase3: refactoring for v2.1
........
  r40211 | djowel | 2007-10-20 04:50:27 -0700 (Sat, 20 Oct 2007) | 1 line
  
  phase3: refactoring for v2.1
........
  r40212 | djowel | 2007-10-20 06:13:46 -0700 (Sat, 20 Oct 2007) | 1 line
  
  phase4: refactoring for v2.1
........
  r40213 | djowel | 2007-10-20 06:13:58 -0700 (Sat, 20 Oct 2007) | 1 line
  
  phase4: refactoring for v2.1
........
  r40214 | johnmaddock | 2007-10-20 09:30:01 -0700 (Sat, 20 Oct 2007) | 1 line
  
  ICU libraries are only available as shared libraries.
........
  r40215 | grafik | 2007-10-20 09:35:58 -0700 (Sat, 20 Oct 2007) | 1 line
  
  Do not refer to nonexistent target when python is not configured.
........
  r40216 | grafik | 2007-10-20 09:36:18 -0700 (Sat, 20 Oct 2007) | 1 line
  
  Do not refer to nonexistent target when python is not configured.
........
  r40219 | djowel | 2007-10-20 15:21:43 -0700 (Sat, 20 Oct 2007) | 1 line
  
  reverting to 2.0
........
  r40220 | djowel | 2007-10-20 15:33:52 -0700 (Sat, 20 Oct 2007) | 1 line
  
  reverting to 2.0
........
  r40233 | danieljames | 2007-10-20 17:41:01 -0700 (Sat, 20 Oct 2007) | 2 lines
  
  Don't test long double in hash_number_test. This is a bit of a cop out, but it's silly to fail this test just because a platform has poor support for long double - hash_long_double_test is thorough enough.
........
  r40236 | danieljames | 2007-10-20 17:51:43 -0700 (Sat, 20 Oct 2007) | 6 lines
  
  Markup test that fail because of poor long double support.
  
  gcc-3.4.3_sunos doesn't seem to be tested any more, but I'll leave it in.
  PA Risc has a software long double which doesn't seem to be very well supported
  by the standard library functions.
........
  r40241 | chris_kohlhoff | 2007-10-20 18:48:03 -0700 (Sat, 20 Oct 2007) | 3 lines
  
  Ensure the buffers and completion condition objects are destroyed before
  the completion handler is invoked.
........
  r40255 | chris_kohlhoff | 2007-10-20 22:46:15 -0700 (Sat, 20 Oct 2007) | 3 lines
  
  HP-UX fails to declare if_nametoindex and if_indextoname as extern "C".
  Added declarations for them with correct linkage to avoid linker errors.
........
  r40256 | chris_kohlhoff | 2007-10-20 22:46:47 -0700 (Sat, 20 Oct 2007) | 2 lines
  
  Documentation fixes.
........
  r40259 | chris_kohlhoff | 2007-10-21 00:09:19 -0700 (Sun, 21 Oct 2007) | 4 lines
  
  On HP-UX use pselect() rather than select() to avoid weirdness where
  different select() prototypes are declared depending on the order the
  system headers are included.
........
  r40261 | chris_kohlhoff | 2007-10-21 00:30:04 -0700 (Sun, 21 Oct 2007) | 2 lines
  
  Use an unsigned char for the enable_loopback socket option on HP-UX.
........
  r40262 | chris_kohlhoff | 2007-10-21 00:59:53 -0700 (Sun, 21 Oct 2007) | 2 lines
  
  Seems that the watermark socket options are supported on HP-UX 11i v3.
........
  r40263 | chris_kohlhoff | 2007-10-21 01:13:21 -0700 (Sun, 21 Oct 2007) | 2 lines
  
  Fix address_v6::operator<.
........
  r40264 | danieljames | 2007-10-21 01:36:47 -0700 (Sun, 21 Oct 2007) | 2 lines
  
  New algorithm for hash floating point numbers.
........
  r40265 | igaztanaga | 2007-10-21 01:49:42 -0700 (Sun, 21 Oct 2007) | 1 line
  
  Solved Doxygen bug
........
  r40267 | igaztanaga | 2007-10-21 02:01:16 -0700 (Sun, 21 Oct 2007) | 1 line
  
  Doxygen bug workaround. Corrected Solaris errors. Experimental grow/shrink_to_fit for managed_shared_memory and managed_mapped_file.
........
  r40268 | igaztanaga | 2007-10-21 02:02:23 -0700 (Sun, 21 Oct 2007) | 1 line
  
  Doxygen bug workaround. Corrected Solaris errors. Experimental grow/shrink_to_fit for managed_shared_memory and managed_mapped_file.
........
  r40269 | johnmaddock | 2007-10-21 09:02:34 -0700 (Sun, 21 Oct 2007) | 1 line
  
  Use __hppa to detect HP-UX on PA-RISC.
........
  r40270 | rogeeff | 2007-10-21 13:53:56 -0700 (Sun, 21 Oct 2007) | 3 lines
  
  Missing header in exception_safety.hpp
  Run by name support
  new tools BOOST_CHECK_NE, BOOST_CHECK_LE, BOOST_CHECK_LT, BOOST_CHECK_GE, BOOST_CHECK_GT implemented
........
  r40271 | rogeeff | 2007-10-21 13:59:15 -0700 (Sun, 21 Oct 2007) | 6 lines
  
  correct run rules in examples
  make example 2 more pronounced
  removed unnecessary ; in example 4 and 5
  new alias test in test directory
  msvc 6.5 should use static lib
  test case for new tools added
........
  r40272 | rogeeff | 2007-10-21 17:36:26 -0700 (Sun, 21 Oct 2007) | 1 line
  
  clean up
........
  r40273 | rogeeff | 2007-10-21 21:02:53 -0700 (Sun, 21 Oct 2007) | 3 lines
  
  added missing export for framework::get
  added line number to the name of the TU registrar, allowing to restart test suites within same module
  test_suite::size() implemented to provide an access to the suite size
........
  r40274 | rogeeff | 2007-10-21 21:09:01 -0700 (Sun, 21 Oct 2007) | 1 line
  
  new unit test: test_tree_management_test.cpp
........
  r40276 | rogeeff | 2007-10-21 23:36:50 -0700 (Sun, 21 Oct 2007) | 4 lines
  
  framework::is_initialized introduced to catch framework misuse errors
  Message report too few failed assertions updated
  New message added to report no assertion occurred in a test case 
  test_suite::remove interface is added to allow remove test units from the test suite if necessary
........
  r40277 | schoepflin | 2007-10-22 00:54:08 -0700 (Mon, 22 Oct 2007) | 1 line
  
  Fix compilation.
........
  r40278 | johnmaddock | 2007-10-22 01:43:52 -0700 (Mon, 22 Oct 2007) | 1 line
  
  Skip some "impossible" vc8 targets.
........
  r40280 | rogeeff | 2007-10-22 04:11:51 -0700 (Mon, 22 Oct 2007) | 1 line
  
  correct patterns
........
  r40281 | johnmaddock | 2007-10-22 04:16:15 -0700 (Mon, 22 Oct 2007) | 2 lines
  
  Added Bjorn Roald's patches to enable scans of svn.
  Updated docs accordingly.
........
  r40282 | fmhess | 2007-10-22 06:17:19 -0700 (Mon, 22 Oct 2007) | 4 lines
  
  Eliminated the possibility of empty <variablelist> elements in enum 
  references (invalid docbook, apache fop doesn't like it).
........
  r40284 | joaquin | 2007-10-22 07:50:08 -0700 (Mon, 22 Oct 2007) | 2 lines
  
  extended MSVC 6.5 fix to Intel
........
  r40285 | igaztanaga | 2007-10-22 08:20:21 -0700 (Mon, 22 Oct 2007) | 1 line
  
  Marked (temporarily) win64 toolsets unusable for Interprocess
........
  r40288 | johnmaddock | 2007-10-22 09:14:02 -0700 (Mon, 22 Oct 2007) | 1 line
  
  Simplified regex usage.
........
  r40289 | vladimir_prus | 2007-10-22 09:45:49 -0700 (Mon, 22 Oct 2007) | 2 lines
  
  Add missing Py_INCREF on Py_None objects.
........
  r40292 | joaquin | 2007-10-22 10:22:46 -0700 (Mon, 22 Oct 2007) | 1 line
  
  guarded some static asserts in project() funs from Sun C++ 5.7
........
  r40293 | johnmaddock | 2007-10-22 10:46:40 -0700 (Mon, 22 Oct 2007) | 1 line
  
  Added support for _WIN32_WCE.
........
  r40294 | johnmaddock | 2007-10-22 10:48:51 -0700 (Mon, 22 Oct 2007) | 3 lines
  
  Disabled intrinsic type traits testing for SGI compiler.
  Disabled one is_convertible test for aCC on PA RISC.
  Disabled some tests in promote_basic_test.cpp for more platforms that have broken WCHAR_MAX macros.
........
  r40295 | johnmaddock | 2007-10-22 10:53:05 -0700 (Mon, 22 Oct 2007) | 1 line
  
  IBM xlc++ has support for TR1 when __IBMCPP_TR1__ is defined.
........
  r40299 | dgregor | 2007-10-22 12:37:05 -0700 (Mon, 22 Oct 2007) | 3 lines
  
  Fix warnings from GCC 4.3. Fixes #1337
........
  r40300 | dgregor | 2007-10-22 12:54:54 -0700 (Mon, 22 Oct 2007) | 4 lines
  
  Suppress a GCC 4.3 warning and fix a couple header-inclusion issues.
  
  Fixes #1338
........
  r40301 | eric_niebler | 2007-10-22 13:14:11 -0700 (Mon, 22 Oct 2007) | 1 line
  
  needed typeof registrations, from David Jenkins
........
  r40302 | nesotto | 2007-10-22 13:26:51 -0700 (Mon, 22 Oct 2007) | 1 line
  
  added copyability to all containers
........
  r40306 | nesotto | 2007-10-22 15:50:52 -0700 (Mon, 22 Oct 2007) | 4 lines
  
  minor refactorings to support copyability etc
........
  r40307 | nesotto | 2007-10-22 15:51:42 -0700 (Mon, 22 Oct 2007) | 1 line
  
  update of test to try copyability
........
  r40310 | eric_niebler | 2007-10-22 17:40:16 -0700 (Mon, 22 Oct 2007) | 1 line
  
  fix problem with ->* rewrite in actions, add x->*y as alias for y(x)
........
  r40322 | rogeeff | 2007-10-22 20:44:01 -0700 (Mon, 22 Oct 2007) | 1 line
  
  streamlined handling of SIGPOLL
........
  r40323 | bgubenko | 2007-10-22 20:44:33 -0700 (Mon, 22 Oct 2007) | 1 line
  
  fix typo in rev. 40321
........
  r40338 | rogeeff | 2007-10-22 22:25:42 -0700 (Mon, 22 Oct 2007) | 1 line
  
  update to tests and example
........
  r40342 | eric_niebler | 2007-10-23 00:01:53 -0700 (Tue, 23 Oct 2007) | 1 line
  
  clean-up, actionable need not be a template
........
  r40344 | chris_kohlhoff | 2007-10-23 01:09:21 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  Only use pselect() when compiling with aCC.
........
  r40345 | chris_kohlhoff | 2007-10-23 01:09:46 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  Documentation fixes.
........
  r40346 | schoepflin | 2007-10-23 01:20:26 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  Now that intrusive is working, enable the interprocess library for Tru64/CXX.
........
  r40347 | schoepflin | 2007-10-23 01:26:51 -0700 (Tue, 23 Oct 2007) | 3 lines
  
  Toolsets tru64cxx* have long been renamed to hp_cxx-*_tru64; removed markup
  obsoleted by the rename.
........
  r40348 | anthonyw | 2007-10-23 01:57:17 -0700 (Tue, 23 Oct 2007) | 1 line
  
  platform split for pthread and win32 builds so can use pthread-win32 library on Windows with <thrd-api>pthread feature; new C++0x-alike thread class interface on win32.
........
  r40349 | johnmaddock | 2007-10-23 02:34:40 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Ooops, put preprocessor logic in the right place!
........
  r40352 | bemandawes | 2007-10-23 06:00:18 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Rename posix, windows, Linux, and cygwin namespaces to conform with C++ std.
........
  r40353 | johnmaddock | 2007-10-23 06:10:32 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Removed redundant #define.
........
  r40354 | t_schwinger | 2007-10-23 06:25:57 -0700 (Tue, 23 Oct 2007) | 3 lines
  
  removes dependencies to MPL intrinsics (removes top-level cv-qualifiers from element types, now)
........
  r40355 | t_schwinger | 2007-10-23 06:26:56 -0700 (Tue, 23 Oct 2007) | 3 lines
  
  adjusts test: deduce_sequence removes top-level cv-qualifiers from element types, now
........
  r40356 | chris_kohlhoff | 2007-10-23 06:31:12 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  Clean up documentation.
........
  r40359 | djowel | 2007-10-23 06:39:15 -0700 (Tue, 23 Oct 2007) | 1 line
  
  remove superfluous include
........
  r40360 | bemandawes | 2007-10-23 08:04:43 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fix linux_errno misspelling
........
  r40361 | igaztanaga | 2007-10-23 08:48:08 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Marked win64 toolsets again for testing in Interprocess
........
  r40363 | igaztanaga | 2007-10-23 10:46:36 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Temporary hack to avoid compilation errors in operator->()
........
  r40364 | igaztanaga | 2007-10-23 10:47:49 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Corrected error in create_from_istream
........
  r40365 | dgregor | 2007-10-23 11:16:57 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fix SIGPOLL and sigemptyset handling on Darwin
........
  r40367 | nesotto | 2007-10-23 11:36:03 -0700 (Tue, 23 Oct 2007) | 1 line
  
  added test for char array with nested null in response to Ticket #471
........
  r40370 | nesotto | 2007-10-23 11:59:11 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  applied patch from Ticket #1302 (new Patches) to handle char arrays correctly
........
  r40371 | nesotto | 2007-10-23 12:06:39 -0700 (Tue, 23 Oct 2007) | 1 line
  
  change names of ADL functions back to 1.34 names ... the old names have been in use for too long so let's not break code that depends on them
........
  r40372 | nesotto | 2007-10-23 12:07:38 -0700 (Tue, 23 Oct 2007) | 1 line
  
  changed ADL functions back the names of 1.34 ... these names have been in use for too long ... let's not break code that depends on them
........
  r40373 | nesotto | 2007-10-23 12:12:19 -0700 (Tue, 23 Oct 2007) | 1 line
  
  new fancy quickbook documentaion
........
  r40374 | nesotto | 2007-10-23 12:34:06 -0700 (Tue, 23 Oct 2007) | 1 line
  
  added test for operator()
........
  r40375 | nesotto | 2007-10-23 12:34:38 -0700 (Tue, 23 Oct 2007) | 1 line
  
  added operator() to allow random access index with transform iterators 
........
  r40376 | nesotto | 2007-10-23 12:50:59 -0700 (Tue, 23 Oct 2007) | 1 line
  
  displabed some warnings and applied Ticket #1284: sub_range_copy.patch
........
  r40377 | nesotto | 2007-10-23 12:56:39 -0700 (Tue, 23 Oct 2007) | 1 line
  
  applied Ticket #1309 (new Patches)
........
  r40378 | nesotto | 2007-10-23 13:08:35 -0700 (Tue, 23 Oct 2007) | 1 line
  
  cleanup
........
  r40379 | nesotto | 2007-10-23 13:23:05 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Adding Shunsuke Sogame fantastic MFC/ATL mappings
........
  r40381 | nesotto | 2007-10-23 13:28:52 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Shunsuke Sogame's MFC/ATL docs and tests
........
  r40382 | chris_kohlhoff | 2007-10-23 15:32:11 -0700 (Tue, 23 Oct 2007) | 2 lines
  
  Mark borland 5.6.* and 5.8.* as unusable for asio.
........
  r40389 | djowel | 2007-10-23 19:30:52 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40390 | djowel | 2007-10-23 19:32:28 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40391 | djowel | 2007-10-23 19:33:38 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40392 | djowel | 2007-10-23 19:36:29 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40393 | djowel | 2007-10-23 19:37:23 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40394 | djowel | 2007-10-23 19:38:02 -0700 (Tue, 23 Oct 2007) | 1 line
  
  Fusion 2.1 one more time with care
........
  r40396 | rogeeff | 2007-10-23 21:48:16 -0700 (Tue, 23 Oct 2007) | 1 line
  
  win CE and solaris workarounds
........
  r40397 | djowel | 2007-10-23 21:58:50 -0700 (Tue, 23 Oct 2007) | 1 line
  
  merging tobias changes
........
  r40399 | schoepflin | 2007-10-24 01:21:15 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Added missing include file.
........
  r40401 | johnmaddock | 2007-10-24 01:49:06 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fix HPUX error levels: reordered expected failure rates so that they still work when largest_real == double.
........
  r40403 | schoepflin | 2007-10-24 02:02:32 -0700 (Wed, 24 Oct 2007) | 3 lines
  
  Fixed code which incorrectly assumed that an iterator returned by begin() is
  always a modifiable lvalue.
........
  r40404 | schoepflin | 2007-10-24 02:04:47 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Clarify lookup for destroy_n().
........
  r40405 | johnmaddock | 2007-10-24 02:15:20 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Update makefiles and the script that creates them: was generating dependencies that weren't required.
........
  r40406 | anthonyw | 2007-10-24 02:32:29 -0700 (Wed, 24 Oct 2007) | 1 line
  
  added real default constructor to condition::list_entry
........
  r40407 | anthonyw | 2007-10-24 02:36:51 -0700 (Wed, 24 Oct 2007) | 1 line
  
  thrd-api is no longer a symmetric feature
........
  r40408 | schoepflin | 2007-10-24 04:17:05 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Added missing include file.
........
  r40409 | vladimir_prus | 2007-10-24 04:34:53 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Improve comments
........
  r40410 | vladimir_prus | 2007-10-24 04:38:49 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fix typo
........
  r40411 | schoepflin | 2007-10-24 04:41:21 -0700 (Wed, 24 Oct 2007) | 3 lines
  
  Use external linkage for function templates, otherwise they are not considered
  as candidate functions during name loopkup.
........
  r40412 | anthonyw | 2007-10-24 05:00:14 -0700 (Wed, 24 Oct 2007) | 1 line
  
  updated thread move semantics to work with Borland
........
  r40413 | chris_kohlhoff | 2007-10-24 06:23:59 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Fixes for HP-UX test failures.
........
  r40414 | nesotto | 2007-10-24 06:35:04 -0700 (Wed, 24 Oct 2007) | 1 line
  
  changed example with prime numbers according to Ticket #807 (new Bugs: None)
........
  r40415 | nesotto | 2007-10-24 06:54:11 -0700 (Wed, 24 Oct 2007) | 1 line
  
  conversion operator was not in 1.34, so removed here also
........
  r40416 | nesotto | 2007-10-24 06:54:52 -0700 (Wed, 24 Oct 2007) | 1 line
  
  cleanup
........
  r40417 | nesotto | 2007-10-24 07:46:42 -0700 (Wed, 24 Oct 2007) | 1 line
  
  some updates from 1,34 branch
........
  r40418 | eric_niebler | 2007-10-24 08:00:20 -0700 (Wed, 24 Oct 2007) | 1 line
  
  s/boost_range_begin/range_begin/
........
  r40419 | nesotto | 2007-10-24 08:02:01 -0700 (Wed, 24 Oct 2007) | 1 line
  
  newer docs from 1.34
........
  r40420 | eric_niebler | 2007-10-24 08:04:41 -0700 (Wed, 24 Oct 2007) | 1 line
  
  more typeof registrations from Dave Jankins
........
  r40422 | nesotto | 2007-10-24 08:18:22 -0700 (Wed, 24 Oct 2007) | 1 line
  
  roll back of ADL names
........
  r40423 | nesotto | 2007-10-24 08:19:16 -0700 (Wed, 24 Oct 2007) | 1 line
  
  roll-back of ADL names
........
  r40424 | anthonyw | 2007-10-24 08:39:14 -0700 (Wed, 24 Oct 2007) | 1 line
  
  updated pthreads code to support move and multiple joins
........
  r40425 | nesotto | 2007-10-24 08:53:54 -0700 (Wed, 24 Oct 2007) | 1 line
  
  removed deprecated mfc stuff
........
  r40426 | nesotto | 2007-10-24 09:26:54 -0700 (Wed, 24 Oct 2007) | 1 line
  
  minor updates from 1.34
........
  r40427 | johnmaddock | 2007-10-24 10:57:45 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Removed files that are no longer used and regenerated the Makefiles so they are no longer dependent on the removed files.
  Hidden some seldom-used dependencies in static_mutex.hpp to reduce library footprint when extracted with bcp.
........
  r40428 | igaztanaga | 2007-10-24 11:59:26 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fixed Solaris-gcc errors and added splay trees
........
  r40429 | igaztanaga | 2007-10-24 12:00:30 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fixed Solaris-gcc errors and added splay trees
........
  r40430 | igaztanaga | 2007-10-24 12:25:40 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Corrected operator >> bug
........
  r40433 | grafik | 2007-10-24 12:56:54 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Obsolete in new web site. (fixes #1373)
........
  r40435 | burbelgruff | 2007-10-24 13:30:31 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Deleted regression tests.
........
  r40437 | grafik | 2007-10-24 14:01:44 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Obsolete files, as they are now moved to the new web site structure. (fixes #1248)
........
  r40438 | eric_niebler | 2007-10-24 14:37:09 -0700 (Wed, 24 Oct 2007) | 1 line
  
  remove unneeded msvc-7.1 work-around
........
  r40440 | danieljames | 2007-10-24 15:56:42 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Delete background.html as it's now in the new web site.
........
  r40442 | djowel | 2007-10-24 16:29:54 -0700 (Wed, 24 Oct 2007) | 1 line
  
  fix remaining includes
........
  r40444 | danieljames | 2007-10-24 16:36:57 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  Delete bibliography, now that it's updated in the site. Fixes #1254.
........
  r40445 | eric_niebler | 2007-10-24 16:37:40 -0700 (Wed, 24 Oct 2007) | 1 line
  
  replace all throw statements with boost::throw_exception
........
  r40447 | rogeeff | 2007-10-24 17:01:38 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  avoid msvc 8.0 warning 
  more win CE workaround
........
  r40448 | rogeeff | 2007-10-24 17:02:14 -0700 (Wed, 24 Oct 2007) | 1 line
  
  avoid some msvc warning
........
  r40449 | rogeeff | 2007-10-24 17:17:25 -0700 (Wed, 24 Oct 2007) | 1 line
  
  missed sunpro workaround
........
  r40451 | rogeeff | 2007-10-24 22:38:19 -0700 (Wed, 24 Oct 2007) | 2 lines
  
  minor cleanup
  final major piece of this update: debug services (almost complete: without stack dump)
........
  r40453 | igaztanaga | 2007-10-24 23:33:50 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fixed Solaris and Linux bugs
........
  r40454 | igaztanaga | 2007-10-24 23:34:41 -0700 (Wed, 24 Oct 2007) | 1 line
  
  Fixed intrusive_ptr and named condition test and added documentation.
........
  r40455 | rogeeff | 2007-10-24 23:35:14 -0700 (Wed, 24 Oct 2007) | 1 line
  
  missing file included
........
  r40456 | anthonyw | 2007-10-25 00:17:20 -0700 (Thu, 25 Oct 2007) | 1 line
  
  thread move constructor is not explicit, so self() compiles for MSVC8 and Intel; thread_exit_callback_node constructor added to remove warnings on MSVC8; thread destructor no longer calls cancel
........
  r40457 | rogeeff | 2007-10-25 00:29:07 -0700 (Thu, 25 Oct 2007) | 1 line
  
  missed debug in another included component
........
  r40458 | speedsnail | 2007-10-25 00:52:25 -0700 (Thu, 25 Oct 2007) | 1 line
  
  More verbose "Skipping" message, telling what it is beeing skipped.
........
  r40459 | speedsnail | 2007-10-25 00:57:12 -0700 (Thu, 25 Oct 2007) | 1 line
  
  Corrected typo
........
  r40460 | schoepflin | 2007-10-25 03:21:10 -0700 (Thu, 25 Oct 2007) | 1 line
  
  Removed extra semicolons to silence warnings.
........
  r40461 | igaztanaga | 2007-10-25 08:53:19 -0700 (Thu, 25 Oct 2007) | 1 line
  
  Corrected error when checking file size against maximum address range for 64 bit platforms
........
  r40462 | vladimir_prus | 2007-10-25 09:48:24 -0700 (Thu, 25 Oct 2007) | 3 lines
  
  Report underfined paths before trying to replace
  spaces in them (and crash on emptry paths).
........
  r40463 | vladimir_prus | 2007-10-25 10:08:27 -0700 (Thu, 25 Oct 2007) | 1 line
  
  Don't use boost.test for testing.
........
  r40464 | nesotto | 2007-10-25 13:47:59 -0700 (Thu, 25 Oct 2007) | 1 line
  
  major update of copy-operations and various pending fixes
........
  r40465 | nesotto | 2007-10-25 13:49:02 -0700 (Thu, 25 Oct 2007) | 1 line
  
  major update of test to handle new functionality and better test of old functionality
........
  r40466 | nesotto | 2007-10-25 13:50:51 -0700 (Thu, 25 Oct 2007) | 1 line
  
  update of test for ptr_list_of which can now actually works because of copyability of the ptr_contaners
........
  r40467 | nesotto | 2007-10-25 13:51:16 -0700 (Thu, 25 Oct 2007) | 1 line
  
  proper definition of the conversion operator
........
  r40468 | dave | 2007-10-25 16:19:48 -0700 (Thu, 25 Oct 2007) | 3 lines
  
  Closes #1379.  It would be good to have a much more principled approach; 
  see comments in the diffs for details.
........
  r40469 | grafik | 2007-10-25 18:02:48 -0700 (Thu, 25 Oct 2007) | 1 line
  
  Merge search path for include & import from backend branch. And add corresponding support for <include> to BBv2 quickbook tool. Remove obsolete quickbook.xml file. (fixes #1263)
........
  r40471 | rogeeff | 2007-10-25 23:47:29 -0700 (Thu, 25 Oct 2007) | 2 lines
  
  made it to compile if unicode is defined
  avoid assertion for negative chars
........
  r40472 | anthonyw | 2007-10-26 00:33:22 -0700 (Fri, 26 Oct 2007) | 1 line
  
  added tests for cancellation
........
  r40473 | vladimir_prus | 2007-10-26 01:41:34 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Fix typo
........
  r40474 | vladimir_prus | 2007-10-26 01:45:26 -0700 (Fri, 26 Oct 2007) | 2 lines
  
  Make 'install' for individual lib explicit.
........
  r40475 | vladimir_prus | 2007-10-26 02:04:25 -0700 (Fri, 26 Oct 2007) | 6 lines
  
  Make sure every library can be installed by using
  
       bjam stage|install
  
  in libs/<library>/build.
........
  r40476 | anthonyw | 2007-10-26 02:45:46 -0700 (Fri, 26 Oct 2007) | 1 line
  
  disable_cancellation and restore_cancellation need to be declared BOOST_THREAD_DECL to work with DLLs
........
  r40477 | anthonyw | 2007-10-26 02:53:10 -0700 (Fri, 26 Oct 2007) | 1 line
  
  disable_cancellation and restore_cancellation need to be declared BOOST_THREAD_DECL to work with DLLs with pthread-win32
........
  r40478 | anthonyw | 2007-10-26 03:46:01 -0700 (Fri, 26 Oct 2007) | 1 line
  
  improved lifetime management of thread data
........
  r40479 | t_schwinger | 2007-10-26 05:16:37 -0700 (Fri, 26 Oct 2007) | 3 lines
  
  reverts clobbered changes before merge
........
  r40480 | igaztanaga | 2007-10-26 07:24:58 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Added missing include
........
  r40483 | schoepflin | 2007-10-26 08:36:56 -0700 (Fri, 26 Oct 2007) | 3 lines
  
  Use external linkage for function templates, otherwise they are not considered
  as candidate functions during name loopkup.
........
  r40484 | johnmaddock | 2007-10-26 11:12:28 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Try and work around a Tru64 overload resolution bug.
........
  r40485 | rogeeff | 2007-10-26 11:31:55 -0700 (Fri, 26 Oct 2007) | 1 line
  
  removed install target for now
........
  r40487 | vladimir_prus | 2007-10-26 12:37:56 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Fix winmain test
........
  r40488 | nesotto | 2007-10-26 16:03:11 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Added test of xml-archives.
........
  r40489 | nesotto | 2007-10-26 16:16:15 -0700 (Fri, 26 Oct 2007) | 1 line
  
  Ticket #1027 (new Patches)
........
  r40494 | igaztanaga | 2007-10-27 02:17:14 -0700 (Sat, 27 Oct 2007) | 1 line
  
  updated new acc toolsets as unusable for Interprocess
........
  r40497 | vladimir_prus | 2007-10-27 02:55:58 -0700 (Sat, 27 Oct 2007) | 2 lines
  
  New Python rule -- 'backtrace'.
........
  r40498 | johnmaddock | 2007-10-27 04:25:05 -0700 (Sat, 27 Oct 2007) | 1 line
  
  Added first lot of markup for the new Boost.Math additions.
........
  r40499 | johnmaddock | 2007-10-27 04:27:19 -0700 (Sat, 27 Oct 2007) | 1 line
  
  Changed concept code so there are no null-references any more (the code breaks on EDG based compilers otherwise).
........
  r40500 | johnmaddock | 2007-10-27 04:32:30 -0700 (Sat, 27 Oct 2007) | 2 lines
  
  Set expected error limits for HP Tru64.
  Prevent very extreme-value round-trip tests from being run.
........
  r40506 | nesotto | 2007-10-27 08:57:20 -0700 (Sat, 27 Oct 2007) | 1 line
  
  cleaned up deprecated headers
........
  r40507 | nesotto | 2007-10-27 08:57:56 -0700 (Sat, 27 Oct 2007) | 1 line
  
  updated example to new syntax
........
  r40508 | nesotto | 2007-10-27 08:58:22 -0700 (Sat, 27 Oct 2007) | 1 line
  
  first update ... more to come
........
  r40509 | nesotto | 2007-10-27 11:20:45 -0700 (Sat, 27 Oct 2007) | 1 line
  
  small renaming
........
  r40510 | nesotto | 2007-10-27 11:21:17 -0700 (Sat, 27 Oct 2007) | 1 line
  
  better test of bilk headers
........
  r40511 | nesotto | 2007-10-27 14:50:14 -0700 (Sat, 27 Oct 2007) | 1 line
  
  update of all new functionality
........
  r40512 | nesotto | 2007-10-27 14:52:13 -0700 (Sat, 27 Oct 2007) | 1 line
  
  minor change to scoped_deleter, some cleanup of explicit, and fixed a bug in assignment of ptr_maps
........
  r40513 | nesotto | 2007-10-27 14:52:51 -0700 (Sat, 27 Oct 2007) | 1 line
  
  minor update of copying of maps
........
  r40514 | nesotto | 2007-10-27 15:00:47 -0700 (Sat, 27 Oct 2007) | 1 line
  
  added mfc/atl link
........
  r40515 | danmarsden | 2007-10-27 15:16:35 -0700 (Sat, 27 Oct 2007) | 1 line
  
  fixing performance tests, mainly result of issues, and arity issues with unfused typed
........
  r40516 | danmarsden | 2007-10-27 15:18:13 -0700 (Sat, 27 Oct 2007) | 1 line
  
  fixing missing traversal category on binary transform view, by reusing zip_view algorithm
........
  r40517 | nesotto | 2007-10-27 15:35:20 -0700 (Sat, 27 Oct 2007) | 1 line
  
  update that hopefully will help eg the sun compiler
........
  r40518 | nesotto | 2007-10-27 15:52:29 -0700 (Sat, 27 Oct 2007) | 1 line
  
  changed range_result_iterator to range_iterator
........
  r40520 | nesotto | 2007-10-28 03:11:10 -0700 (Sun, 28 Oct 2007) | 1 line
  
  fixes broken one from trunk ... still not finished
........
  r40521 | nesotto | 2007-10-28 03:11:54 -0700 (Sun, 28 Oct 2007) | 1 line
  
  adds test for inclusion of concept header
........
  r40522 | johnmaddock | 2007-10-28 04:07:14 -0700 (Sun, 28 Oct 2007) | 2 lines
  
  split test_policy into 2 to reduce compile times.
  Added expected error rates for Mac OS X on Intel.
........
  r40524 | andreas_huber69 | 2007-10-28 06:26:00 -0700 (Sun, 28 Oct 2007) | 2 lines
  
  - Added to-do
  - Update for 1.35
........
  r40527 | hkaiser | 2007-10-28 07:29:40 -0700 (Sun, 28 Oct 2007) | 1 line
  
  Changed the code to allow ADL to find the correct pow() function, not relying on an existing overload in the std namespace anymore.
........
  r40530 | martin_wille | 2007-10-28 09:02:15 -0700 (Sun, 28 Oct 2007) | 5 lines
  
  -- compensated for changes to Boost.Thread:
     o Boost.Thread no longer accepts boost::reference_wrapper instances as callable arguments
     o created a new callable_reference_wrapper type that gets used instead of the no longer
       accepted type.
........
  r40531 | hkaiser | 2007-10-28 09:16:52 -0700 (Sun, 28 Oct 2007) | 1 line
  
  Added test of real_parser specialized for a custom data type.
........
  r40534 | danmarsden | 2007-10-28 10:40:45 -0700 (Sun, 28 Oct 2007) | 1 line
  
  Documentation for the struct extension macros
........
  r40535 | dave | 2007-10-28 12:22:21 -0700 (Sun, 28 Oct 2007) | 2 lines
  
  Closes #1379, really this time.  The old code would sandwich argv[1] between quotes and interpret it as a string, so backslashes in windows paths were interpreted as escape sequences.
........
  r40536 | dave | 2007-10-28 12:24:02 -0700 (Sun, 28 Oct 2007) | 2 lines
  
  Take out print statement I added for debugging purposes.
........
  r40537 | grafik | 2007-10-28 12:53:09 -0700 (Sun, 28 Oct 2007) | 1 line
  
  Fix misspelled test file name.
........
  r40539 | djowel | 2007-10-28 18:19:31 -0700 (Sun, 28 Oct 2007) | 1 line
  
  added Tobias to fusion authors list
........
  r40540 | burbelgruff | 2007-10-29 01:05:17 -0700 (Mon, 29 Oct 2007) | 1 line
  
  Fixed duplicate definition of boost::type_of::push_back when BOOST_TYPEOF_LIMIT_SIZE>50 and not a multiple of 50. (From Dave Jenkins)
........
  r40541 | joaquin | 2007-10-29 01:12:58 -0700 (Mon, 29 Oct 2007) | 1 line
  
  updated according to latest regression tests results
........
  r40542 | joaquin | 2007-10-29 01:16:56 -0700 (Mon, 29 Oct 2007) | 1 line
  
  fixed some struct/class discordances between decls and defs
........
  r40543 | nesotto | 2007-10-29 05:29:57 -0700 (Mon, 29 Oct 2007) | 1 line
  
  change use of range_result_iterator to range_iterator
........
  r40546 | chris_kohlhoff | 2007-10-29 06:06:12 -0700 (Mon, 29 Oct 2007) | 3 lines
  
  Mac OS X 10.5 (Leopard) gives a compile error if you try to perform an
  operation on a const fd_set pointer.
........
  r40547 | chris_kohlhoff | 2007-10-29 06:06:39 -0700 (Mon, 29 Oct 2007) | 2 lines
  
  Ensure the task handler is put back on the queue after polling.
........
  r40548 | chris_kohlhoff | 2007-10-29 06:07:08 -0700 (Mon, 29 Oct 2007) | 3 lines
  
  Use GetModuleHandleA rather than GetModuleHandle to avoid being broken by
  UNICODE #defines.
........
  r40549 | chris_kohlhoff | 2007-10-29 06:08:32 -0700 (Mon, 29 Oct 2007) | 3 lines
  
  HP-UX fails to declare if_nametoindex as extern "C". Added a declaration
  for it with correct linkage to avoid a linker error.
........
  r40551 | dgregor | 2007-10-29 07:43:19 -0700 (Mon, 29 Oct 2007) | 1 line
  
  sigemptyset is a macro on Darwin, so don't precede it by ::
........
  r40553 | eric_niebler | 2007-10-29 08:04:11 -0700 (Mon, 29 Oct 2007) | 1 line
  
  better solution for deprecated range_result_iterator
........
  r40554 | fmhess | 2007-10-29 08:08:46 -0700 (Mon, 29 Oct 2007) | 3 lines
  
  Extended the hack in docbook.xsl for dealing with nested <part> elements.  
  It now handles the case of <appendix> children of <part>.
........
  r40555 | fmhess | 2007-10-29 08:18:49 -0700 (Mon, 29 Oct 2007) | 16 lines
  
  Added support for new boostbook <access> element for documenting non-public
  class members.
  
  function.xsl, type.xsl, utility.xsl: Added support for <access> elements to
  allow nonpublic access specifiers for class member documentation.
  
  boostbook.dtd: Updated to reflect new <access> element.  Updated Peter Simons
  email address.  Added mention of boost license.
  
  reference.dtdxml: Added reference documentation for new <access> element.
  Removed some obsolete remarks from the description of inherit element.
  
  reference.xml: The changes to this file were generated by applying
  dtd2boostbook.xsl to the updated reference.dtdxml file.
........
  r40556 | grafik | 2007-10-29 09:12:14 -0700 (Mon, 29 Oct 2007) | 1 line
  
  Fix force-update and have-source options to be correct boolean options. And bring back the rmtree code to work around Python rmtree deficiencies.
........
  r40557 | grafik | 2007-10-29 12:12:07 -0700 (Mon, 29 Oct 2007) | 1 line
  
  Now that tarballs are working again... Implement getting the tools source from tarballs, and fix getting boost sources from tarball.
........
  r40558 | rwgk | 2007-10-29 12:12:56 -0700 (Mon, 29 Oct 2007) | 1 line
  
  gcc 4.3.0 compatibility (resolves new "changes meaning" error)
........
  r40595 | grafik | 2007-10-29 18:50:42 -0700 (Mon, 29 Oct 2007) | 1 line
  
  Add support for using a proxy as some firewalls are restrictive even to HTTP/GET access.
........
  r40597 | igaztanaga | 2007-10-30 00:00:51 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Added avl trees
........
  r40598 | igaztanaga | 2007-10-30 00:02:10 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Added avl trees
........
  r40599 | agurtovoy | 2007-10-30 00:25:27 -0700 (Tue, 30 Oct 2007) | 1 line
  
  xsl_reports: display the corresponding run's revision/timestamp on the test output page
........
  r40603 | bgubenko | 2007-10-30 05:43:47 -0700 (Tue, 30 Oct 2007) | 1 line
  
  add support for aC++ on HP-UX ia64
........
  r40604 | bgubenko | 2007-10-30 05:48:44 -0700 (Tue, 30 Oct 2007) | 1 line
  
  add support for aC++ on HP-UX ia64
........
  r40605 | bgubenko | 2007-10-30 05:58:36 -0700 (Tue, 30 Oct 2007) | 1 line
  
  fix typo in comment
........
  r40609 | anthonyw | 2007-10-30 10:16:24 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Added specialization for reference_wrapper to allow use of boost::ref with boost::thread (again)
........
  r40611 | hkaiser | 2007-10-30 11:17:59 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Merged a change from 1.34.1.
........
  r40612 | nesotto | 2007-10-30 12:47:40 -0700 (Tue, 30 Oct 2007) | 1 line
  
  current version gave problem in regression ... to be updated later
........
  r40614 | andreas_huber69 | 2007-10-30 14:27:34 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Marked up new failures for 1.35
........
  r40615 | andreas_huber69 | 2007-10-30 15:01:41 -0700 (Tue, 30 Oct 2007) | 1 line
  
  Updated link to test results.
........
  r40617 | danieljames | 2007-10-30 15:33:35 -0700 (Tue, 30 Oct 2007) | 3 lines
  
  Remove regression/.htaccess as it has been merged with the beta website's
  .htaccess. Fixes #1249.
........
  r40623 | johnmaddock | 2007-10-31 05:43:10 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Try and get better error messages to debug Tru64 failures.
........
  r40625 | bemandawes | 2007-10-31 08:09:35 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Remove some older compilers from required list
........
  r40627 | bemandawes | 2007-10-31 11:28:39 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Add missing BOOST_SYSTEM_NO_DEPRECATED #ifndef
........
  r40628 | grafik | 2007-10-31 13:20:07 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Remove dependence on boost.test for PJL. It causes too many dependence problems on the testing platforms.
........
  r40629 | nesotto | 2007-10-31 14:48:11 -0700 (Wed, 31 Oct 2007) | 1 line
  
  added deprecated headers again for backward compatibility sake
........
  r40630 | bemandawes | 2007-10-31 15:01:58 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Treat Windows ERROR_SHARING_VIOLATION as an existing file of unknown type. Fixes ticket #897
........
  r40631 | agurtovoy | 2007-10-31 15:25:46 -0700 (Wed, 31 Oct 2007) | 1 line
  
  xsl_report: fix timestamp/revision age highlighting
........
  r40632 | hkaiser | 2007-10-31 16:13:34 -0700 (Wed, 31 Oct 2007) | 1 line
  
  Applied patch from #1208.
........
  r40633 | bgubenko | 2007-10-31 18:05:07 -0700 (Wed, 31 Oct 2007) | 1 line
  
  mark parameter library tests affected by GCC Bugzilla Bug 33580
........
  r40634 | rogeeff | 2007-10-31 19:46:57 -0700 (Wed, 31 Oct 2007) | 1 line
  
  disable on CE
........
  r40635 | rogeeff | 2007-10-31 19:54:15 -0700 (Wed, 31 Oct 2007) | 1 line
  
  debug was missing in PEM
........
  r40636 | johnmaddock | 2007-11-01 03:17:49 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Still more tweaks to try and figure out why this fails on Tru64.
........
  r40637 | igaztanaga | 2007-11-01 04:47:00 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Uncommented pointer conversion utilities
........
  r40638 | bgubenko | 2007-11-01 04:47:20 -0700 (Thu, 01 Nov 2007) | 1 line
  
  fix typo
........
  r40639 | johnmaddock | 2007-11-01 07:01:44 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Added <stdio.h> and <sys/time.h> to the list of Unix-specific includes: these are needed by Sun's compiler, and for that matter, by Boost.Test to be std conforming.
........
  r40640 | bemandawes | 2007-11-01 08:23:06 -0700 (Thu, 01 Nov 2007) | 2 lines
  
  Enable the XPG-compliant version of readdir_r() on AIX. Merged from 1.34.1.
........
  r40642 | gmelquio | 2007-11-01 09:01:30 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Ported patch from 1.34.1 about conflicting math.h functions on PPC. Commented use of old control function for MSVC.
........
  r40645 | dgregor | 2007-11-01 09:16:30 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Use unsigned long long for the path count to avoid overflows. Fixes #1398
........
  r40646 | bemandawes | 2007-11-01 09:35:45 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Mingw doesn't support GetUserDefaultUILanguage so set it to US English.
........
  r40647 | anthonyw | 2007-11-01 10:07:47 -0700 (Thu, 01 Nov 2007) | 1 line
  
  condition wait and sleep are now cancellation points
........
  r40649 | johnmaddock | 2007-11-01 10:16:41 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Fix for http://svn.boost.org/trac/boost/ticket/1381.
........
  r40650 | anthonyw | 2007-11-01 10:18:54 -0700 (Thu, 01 Nov 2007) | 1 line
  
  shared_mutex lock functions are not cancellation points
........
  r40651 | danieljames | 2007-11-01 10:58:13 -0700 (Thu, 01 Nov 2007) | 2 lines
  
  Merge version history from 1.34.1.
........
  r40652 | johnmaddock | 2007-11-01 11:02:37 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Ticket #583.
........
  r40653 | anthonyw | 2007-11-01 11:04:55 -0700 (Thu, 01 Nov 2007) | 1 line
  
  added timed_join to thread
........
  r40654 | johnmaddock | 2007-11-01 11:05:33 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Patches from Trac #583.
........
  r40655 | danieljames | 2007-11-01 11:22:33 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Fix the previous merge commit, it didn't include all the changes.
........
  r40656 | johnmaddock | 2007-11-01 11:26:07 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Strengthened admonishment and rebuilt docs.
........
  r40657 | bemandawes | 2007-11-01 11:39:32 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Add Boost.System
........
  r40669 | danieljames | 2007-11-01 14:57:03 -0700 (Thu, 01 Nov 2007) | 2 lines
  
  Delete people from main repository, now that the beta website has been updated.
........
  r40670 | chris_kohlhoff | 2007-11-01 15:42:26 -0700 (Thu, 01 Nov 2007) | 3 lines
  
  Fix memory leak when an io_service is allowed to destruct with unfinished
  async_wait operations.
........
  r40671 | dave | 2007-11-01 16:39:02 -0700 (Thu, 01 Nov 2007) | 3 lines
  
  Initialized merge tracking via "svnmerge" with revisions "1-40670" from 
  https://svn.boost.org/svn/boost/branches/RC_1_34_0/boost
........
  r40672 | dave | 2007-11-01 16:44:39 -0700 (Thu, 01 Nov 2007) | 3 lines
  
  Initialized merge tracking via "svnmerge" with revisions "1-33417" from 
  https://svn.boost.org/svn/boost/branches/RC_1_34_0/boost
........
  r40673 | dgregor | 2007-11-01 20:07:24 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Fix for Borland/CodeGear, from JongSoo Park
........
  r40674 | matias | 2007-11-01 20:51:40 -0700 (Thu, 01 Nov 2007) | 1 line
  
  Add not supported compilers for Bimap
........
  r40675 | eric_niebler | 2007-11-01 21:35:01 -0700 (Thu, 01 Nov 2007) | 1 line
  
  merge Changeset  37947
........
  r40676 | speedsnail | 2007-11-02 00:42:49 -0700 (Fri, 02 Nov 2007) | 1 line
  
  changed translate-indirect to skip rules, that are already in indirect format. This allows e.g. to make use of the -<tag> to remove already set tag feature.
........
  r40677 | speedsnail | 2007-11-02 01:40:11 -0700 (Fri, 02 Nov 2007) | 2 lines
  
  New thread Jamfile. Requirement <threading>multi now correctly handled, even when requested with <threading>single. New project specific feature <threadapi> with values win32 and pthread available.
........
  r40678 | johnmaddock | 2007-11-02 01:59:24 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Some minor tweaks to support Sun's compiler on Linux.
........
  r40679 | anthonyw | 2007-11-02 02:17:02 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Added changes from David Deakins to enable compilation on Windows CE
........
  r40680 | anthonyw | 2007-11-02 04:47:56 -0700 (Fri, 02 Nov 2007) | 1 line
  
  rewrite xtime_get in terms of get_system_time to ensure clock consistency, and fix Borland test failures
........
  r40682 | bemandawes | 2007-11-02 05:43:47 -0700 (Fri, 02 Nov 2007) | 1 line
  
  WinCE workaround for lack of FormatMessageA
........
  r40683 | johnmaddock | 2007-11-02 06:01:39 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Added a couple of boost:: qualifiers that were present in 1.34.1 but got lost from the Trunk.
........
  r40684 | johnmaddock | 2007-11-02 06:02:41 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Fixes for Mac OS X on PowerPC Darwin.
........
  r40685 | anthonyw | 2007-11-02 07:58:48 -0700 (Fri, 02 Nov 2007) | 1 line
  
  renamed cancellation to interruption
........
  r40687 | rogeeff | 2007-11-02 09:08:47 -0700 (Fri, 02 Nov 2007) | 1 line
  
  allow tests to be run by regression testing facilities
........
  r40688 | johnmaddock | 2007-11-02 10:40:10 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Added one more needed #include (stdlib.h for mkstemp).
........
  r40692 | anthonyw | 2007-11-02 11:19:49 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Fixed typo with interruption change
........
  r40693 | johnmaddock | 2007-11-02 11:26:47 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Added needed #include and using declaration.
........
  r40697 | pavol_droba | 2007-11-02 13:55:26 -0700 (Fri, 02 Nov 2007) | 2 lines
  
  merging changes from 1.34
........
  r40698 | pavol_droba | 2007-11-02 14:00:08 -0700 (Fri, 02 Nov 2007) | 3 lines
  
  merging changes from 1.34
........
  r40702 | fmhess | 2007-11-02 15:37:52 -0700 (Fri, 02 Nov 2007) | 4 lines
  
  Fixed spurious paragraph in html output for overloaded
  methods.
........
  r40703 | fmhess | 2007-11-02 15:40:25 -0700 (Fri, 02 Nov 2007) | 4 lines
  
  Added descriptions of class member typedefs to class documentation.  This
  replaces Daniel James' previous one-line patch from changeset 39711.
........
  r40704 | fcacciola | 2007-11-02 15:55:49 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Merged changests from RC_1_34_0 - base rev 33417
........
  r40705 | fcacciola | 2007-11-02 15:56:23 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Merged changests from RC_1_34_0 - base rev 33417
........
  r40706 | fcacciola | 2007-11-02 16:06:42 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Fixed error reported by Edward Diener
........
  r40707 | fcacciola | 2007-11-02 16:41:37 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Added test to ensure proper binding of optional references (in reference to Ticket 1301)
........
  r40708 | pdimov | 2007-11-02 16:46:04 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Port unspecified_bool fix for Sun 5.8 from RC_1_34
........
  r40709 | hkaiser | 2007-11-02 17:30:33 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Bumped Spirit version to 1.8.6.
........
  r40710 | bemandawes | 2007-11-02 17:49:07 -0700 (Fri, 02 Nov 2007) | 1 line
  
  Detect Windows FormatMessage errors, standardize message() return on message-not-found errors
........
  r40712 | djowel | 2007-11-02 20:05:26 -0700 (Fri, 02 Nov 2007) | 1 line
  
  replacing reinterpret_cast with static_cast<PySliceObject*>(static_cast<void*>(i))
........
  r40714 | dave | 2007-11-02 20:25:13 -0700 (Fri, 02 Nov 2007) | 3 lines
  
  
  Merging some of the more obvious changes from RC_1_34_0
........
  r40715 | noel_belcourt | 2007-11-02 21:08:23 -0700 (Fri, 02 Nov 2007) | 3 lines
  
  Have intel on darwin use intel-linux.jam toolset.
........
  r40716 | danieljames | 2007-11-03 03:10:11 -0700 (Sat, 03 Nov 2007) | 2 lines
  
  Merge in changes to forwarding html files in doc/html.
........
  r40717 | danieljames | 2007-11-03 03:18:52 -0700 (Sat, 03 Nov 2007) | 2 lines
  
  Add titles to redirect pages so that they will validate.
........
  r40718 | danieljames | 2007-11-03 03:32:35 -0700 (Sat, 03 Nov 2007) | 9 lines
  
  Attribute copyright to Douglas Gregor.
  
  The copyright in these files was attributed to William Kempf, but the revision
  history shows that he has never touched them and the original file that they
  were based on (threads.html) was created by Douglas Gregor.
  
  The copyright was actually added by Hartmut Kaiser, who was adding the
  copyright to all the Boost.Thread files and included this one.
........
  r40719 | johnmaddock | 2007-11-03 05:36:55 -0700 (Sat, 03 Nov 2007) | 1 line
  
  Hopefully, take care of the remaining Tru64 failures: adjust >= test to > in some of the tests, and fix one expected error level for the incomplete beta function.
........
  r40720 | johnmaddock | 2007-11-03 05:43:41 -0700 (Sat, 03 Nov 2007) | 1 line
  
  Try again to fix Darwin failure: the wrong error limit is currently being found.
........
  r40725 | johnmaddock | 2007-11-03 10:05:11 -0700 (Sat, 03 Nov 2007) | 1 line
  
  Need stdarg.h to use vsnprintf as well as stdio.h
........
  r40726 | johnmaddock | 2007-11-03 11:30:07 -0700 (Sat, 03 Nov 2007) | 1 line
  
  Beginning to add Math Library markup.
........
  r40727 | johnmaddock | 2007-11-03 11:32:54 -0700 (Sat, 03 Nov 2007) | 3 lines
  
  Added workaround for Sunpro not compiling the traits classes.
  Added workaround for platforms where numeric_limits<>::denorm_min() does not return a denorm!
  Updated Solaris error rates.
........
  r40728 | pdimov | 2007-11-03 13:55:22 -0700 (Sat, 03 Nov 2007) | 1 line
  
  BOOST_VERIFY added.
........
  r40730 | anthonyw | 2007-11-03 15:00:12 -0700 (Sat, 03 Nov 2007) | 1 line
  
  added missing include
........
  r40731 | pdimov | 2007-11-03 15:47:17 -0700 (Sat, 03 Nov 2007) | 1 line
  
  Added a sentence with a brief explanation of the intended uses of BOOST_VERIFY.
........
  r40733 | djowel | 2007-11-03 16:42:06 -0700 (Sat, 03 Nov 2007) | 1 line
  
  fixed [cpp] to [c++]
........
  r40734 | djowel | 2007-11-03 17:12:29 -0700 (Sat, 03 Nov 2007) | 1 line
  
  tutorial update
........
  r40735 | agurtovoy | 2007-11-03 18:34:39 -0700 (Sat, 03 Nov 2007) | 1 line
  
  explicit-failures-markup.xml: partially reverting change #39788 (see http://article.gmane.org/gmane.comp.lib.boost.testing/5254)
........
  r40736 | johnmaddock | 2007-11-04 04:01:16 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Fix path to test case.
........
  r40737 | danmarsden | 2007-11-04 07:26:51 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Basic sequence and iterator fascade docs
........
  r40738 | bemandawes | 2007-11-04 07:32:03 -0800 (Sun, 04 Nov 2007) | 1 line
  
  glibc++ may append unknown error value, so only test first part of string
........
  r40739 | bemandawes | 2007-11-04 07:48:31 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Try to bring the required toolsets more in sync with what testers are actually running. Sort required toolsets.
........
  r40742 | speedsnail | 2007-11-04 09:17:01 -0800 (Sun, 04 Nov 2007) | 3 lines
  
  Get rid of "unsused variable" warnings by making use of BOOST_VERIFY.
  This changeset is for pthread only.
........
  r40744 | bemandawes | 2007-11-04 09:18:53 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Workaround MingW doesn't supply GetUserDefaultUILanguage
........
  r40749 | rwgk | 2007-11-04 10:08:28 -0800 (Sun, 04 Nov 2007) | 1 line
  
  reinterpret_cast -> const_cast; commented out dead code removed
........
  r40751 | danieljames | 2007-11-04 11:09:56 -0800 (Sun, 04 Nov 2007) | 2 lines
  
  Remove borland_cpp.html as it has been added to the new site.
........
  r40753 | danieljames | 2007-11-04 11:29:41 -0800 (Sun, 04 Nov 2007) | 2 lines
  
  Remove the submission process documentation as it's up to date in the new site.
........
  r40758 | danieljames | 2007-11-04 13:07:02 -0800 (Sun, 04 Nov 2007) | 3 lines
  
  Delete int_const_guidlines from trunk, as it's been added to the beta site.
  Fixes: #1356.
........
  r40759 | chris_kohlhoff | 2007-11-04 13:25:49 -0800 (Sun, 04 Nov 2007) | 2 lines
  
  Some changes to enable support for WinCE.
........
  r40762 | eric_niebler | 2007-11-04 14:53:27 -0800 (Sun, 04 Nov 2007) | 1 line
  
  remove dead proto v1 code
........
  r40763 | eric_niebler | 2007-11-04 15:53:13 -0800 (Sun, 04 Nov 2007) | 1 line
  
  various fixes and missing includes, from Jens Seidel
........
  r40764 | eric_niebler | 2007-11-04 15:58:44 -0800 (Sun, 04 Nov 2007) | 1 line
  
  change header include order
........
  r40765 | djowel | 2007-11-04 17:13:11 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Fixed Ticket #1328 (http://svn.boost.org/trac/boost/ticket/1328)
........
  r40766 | djowel | 2007-11-04 18:10:42 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Workarounds for Fusion on IBM xlc
........
  r40767 | bemandawes | 2007-11-04 18:34:04 -0800 (Sun, 04 Nov 2007) | 1 line
  
  Add copyright and license
........
  r40768 | garcia | 2007-11-04 19:13:15 -0800 (Sun, 04 Nov 2007) | 2 lines
  
  multi_array doesn't work under Borland 5.9.
........
  r40769 | dave | 2007-11-04 19:54:19 -0800 (Sun, 04 Nov 2007) | 9 lines
  
  
  Updated Concept Check library documentation.
  
  Changed BOOST_CONCEPT_WHERE to BOOST_CONCEPT_REQUIRES to be more
  consistent with the current C++0x proposal, which now uses a
  "requires" keyword in lieu of "where."
  
  Factored GCC workarounds into the BOOST_CONCEPT_USAGE macro.
........
  r40770 | dave | 2007-11-04 20:43:31 -0800 (Sun, 04 Nov 2007) | 7 lines
  
  
  Moved boost/concept/where.hpp to boost/concept/requires.hpp
  
  Updated reference.htm to include BOOST_CONCEPT_REQUIRES
  
  Fixed a copyright notice.
........
  r40771 | johnmaddock | 2007-11-05 01:33:31 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Still trying to get Mac OS error rates correct...
........
  r40774 | anthonyw | 2007-11-05 02:15:24 -0800 (Mon, 05 Nov 2007) | 1 line
  
  threadapi is a composite feature again
........
  r40779 | chris_kohlhoff | 2007-11-05 03:52:52 -0800 (Mon, 05 Nov 2007) | 2 lines
  
  Don't set errno when building for Windows targets. Should fix WinCE build.
........
  r40780 | johnmaddock | 2007-11-05 04:07:47 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Disabled long double support for Intel on Linux prior to version 10.
........
  r40781 | johnmaddock | 2007-11-05 04:08:39 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Changed test so that input values are exact binary values to fix failure at float precision.
........
  r40782 | bemandawes | 2007-11-05 04:36:41 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Add message display to illuminate why aCC fails Unknown error test
........
  r40783 | chris_kohlhoff | 2007-11-05 04:38:39 -0800 (Mon, 05 Nov 2007) | 2 lines
  
  Add checks for expected failures on Windows CE.
........
  r40785 | nesotto | 2007-11-05 05:54:23 -0800 (Mon, 05 Nov 2007) | 1 line
  
  added lost changes from 1.34 branch
........
  r40787 | anthonyw | 2007-11-05 06:16:21 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Use pthread_equal for comparing pthread_t IDs; use BOOST_VERIFY instead of BOOST_ASSERT in many places in order to avoid unused variable warnings
........
  r40789 | djowel | 2007-11-05 07:13:58 -0800 (Mon, 05 Nov 2007) | 1 line
  
  fusion markups
........
  r40790 | speedsnail | 2007-11-05 08:12:49 -0800 (Mon, 05 Nov 2007) | 2 lines
  
  Usage requirements added.
........
  r40791 | speedsnail | 2007-11-05 08:22:17 -0800 (Mon, 05 Nov 2007) | 2 lines
  
  Cosmetic change to please gcc.
........
  r40792 | anthonyw | 2007-11-05 08:47:25 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Use BOOST_VERIFY instead of BOOST_ASSERT in many places in order to avoid unused variable warnings
........
  r40793 | eric_niebler | 2007-11-05 09:12:50 -0800 (Mon, 05 Nov 2007) | 1 line
  
  markup foreach failures on sun-5.9
........
  r40794 | t_schwinger | 2007-11-05 09:15:04 -0800 (Mon, 05 Nov 2007) | 4 lines
  
  - nonstandard calling conventions disabled by default
  - automatic fallback configuration
........
  r40795 | t_schwinger | 2007-11-05 09:16:30 -0800 (Mon, 05 Nov 2007) | 2 lines
  
  removes unportable 'chdir'
........
  r40796 | t_schwinger | 2007-11-05 09:17:57 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  just a touch
........
  r40797 | t_schwinger | 2007-11-05 09:19:23 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  adds test case for pointer to data member type
........
  r40798 | t_schwinger | 2007-11-05 09:20:44 -0800 (Mon, 05 Nov 2007) | 4 lines
  
  - nonstandard calling conventions need to be enabled now
  - using #ifdef ... #error to detect whether test makes sense for a particular compiler
........
  r40799 | t_schwinger | 2007-11-05 09:23:57 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  adds navigation icons
........
  r40800 | t_schwinger | 2007-11-05 09:24:58 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  integrates forgotten changes
........
  r40801 | t_schwinger | 2007-11-05 09:25:26 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  updates html
........
  r40802 | hljin | 2007-11-05 10:33:19 -0800 (Mon, 05 Nov 2007) | 1 line
  
  GIL: added documentation links and maintainer info into libs/libraries.htm and libs/maintainers.txt
........
  r40803 | igaztanaga | 2007-11-05 10:46:38 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Marked sun5.9 and Borland 5.9 for Interprocess and Intrusive as unusable
........
  r40804 | hljin | 2007-11-05 11:04:08 -0800 (Mon, 05 Nov 2007) | 1 line
  
  GIL: minor cumulative fixes
........
  r40805 | t_schwinger | 2007-11-05 12:00:43 -0800 (Mon, 05 Nov 2007) | 3 lines
  
  adds redirect to documentation
........
  r40806 | t_schwinger | 2007-11-05 12:01:33 -0800 (Mon, 05 Nov 2007) | 4 lines
  
  - adds FunctionTypes
  - adds myself to all occurences of the Fusion authors
........
  r40807 | eric_niebler | 2007-11-05 12:28:51 -0800 (Mon, 05 Nov 2007) | 1 line
  
  doc tweaks
........
  r40808 | dgregor | 2007-11-05 13:16:26 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Add MPI library
........
  r40809 | dgregor | 2007-11-05 13:20:23 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Add copyright, 1.34.1 history
........
  r40810 | nasonov | 2007-11-05 13:20:35 -0800 (Mon, 05 Nov 2007) | 1 line
  
  lexical_cast_loopback_test
........
  r40811 | dgregor | 2007-11-05 13:22:29 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Merge lots of copyrights
........
  r40812 | dgregor | 2007-11-05 13:25:10 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Removed ancient BGL-Python code
........
  r40813 | dgregor | 2007-11-05 13:43:24 -0800 (Mon, 05 Nov 2007) | 1 line
  
  Merge in Boost.Graph changes from RC_1_34_0 branch
........


[SVN r40849]
2007-11-06 19:12:30 +00:00
Ralf W. Grosse-Kunstleve
65114d8637 reinterpret_cast -> const_cast; commented out dead code removed
[SVN r40749]
2007-11-04 18:08:28 +00:00
Joel de Guzman
597dfc586b tutorial update
[SVN r40734]
2007-11-04 00:12:29 +00:00
Dave Abrahams
6a3085ad5d Merging some of the more obvious changes from RC_1_34_0
[SVN r40714]
2007-11-03 03:25:13 +00:00
Joel de Guzman
190d0d7ea6 replacing reinterpret_cast with static_cast<PySliceObject*>(static_cast<void*>(i))
[SVN r40712]
2007-11-03 03:05:26 +00:00
Eric Niebler
8b915a15ff merge Changeset 37947
[SVN r40675]
2007-11-02 04:35:01 +00:00
Dave Abrahams
90c5c19220 Take out print statement I added for debugging purposes.
[SVN r40536]
2007-10-28 19:24:02 +00:00
Dave Abrahams
cfe6f96f69 Closes #1379, really this time. The old code would sandwich argv[1] between quotes and interpret it as a string, so backslashes in windows paths were interpreted as escape sequences.
[SVN r40535]
2007-10-28 19:22:21 +00:00
Vladimir Prus
77907c5369 Make sure every library can be installed by using
bjam stage|install

in libs/<library>/build.


[SVN r40475]
2007-10-26 09:04:25 +00:00
Rene Rivera
512b30c971 Do not refer to nonexistent target when python is not configured.
[SVN r40216]
2007-10-20 16:36:18 +00:00
Rene Rivera
f005518686 Fix build system error when Python is not configured, without preventing the BPL target from being declared. Instead the target is now unbuildable, and will be skipped when Python is not configured.
[SVN r40156]
2007-10-18 16:11:41 +00:00
Rene Rivera
274a219965 Remove BPL build conditional as it prevents normal build failures.
[SVN r39731]
2007-10-06 19:46:39 +00:00
Ralf W. Grosse-Kunstleve
abc4abf84a gcc 4.3.0 compatibility (resolves new "changes meaning" error)
[SVN r39434]
2007-09-20 23:20:45 +00:00
Nikolay Mladenov
94a3ced83a fixed cpp signature related test failure
[SVN r39372]
2007-09-18 17:51:47 +00:00
Nikolay Mladenov
7eb0c678ee epydoc friendlier formatting
[SVN r39371]
2007-09-18 17:32:06 +00:00
Nikolay Mladenov
92460adce6 tabs removes, code reformatting
[SVN r39370]
2007-09-18 17:28:23 +00:00
Nikolay Mladenov
8cfd3fb2ef epydoc friendlier formatting
[SVN r39368]
2007-09-18 17:16:31 +00:00
Nikolay Mladenov
62ef542eaf fixed problem reported by Neal Becker; added a test case
[SVN r39223]
2007-09-12 21:31:39 +00:00
Ralf W. Grosse-Kunstleve
5809078ba9 Patches by Nikolay Mladenov (nickm at sitius com): new pythonic signatures; docstring support for enums; fix unrelated Visual C++ 6 problem
[SVN r39191]
2007-09-11 16:53:50 +00:00
Eric Niebler
640f006f37 development version of proto for new-style transforms
[SVN r38539]
2007-08-08 21:34:10 +00:00
Vladimir Prus
04e54d670c Remove V1 Jamfiles
[SVN r38516]
2007-08-08 19:02:26 +00:00
Stefan Seefeld
dd7c0a7f3d Fix ticket #1115.
[SVN r38289]
2007-07-26 16:11:18 +00:00
Stefan Seefeld
71f54cc920 Fix ticket #1115.
[SVN r38288]
2007-07-26 14:41:41 +00:00
Thomas Witt
2851325748 Doc and build fixes by Dave Abrahams.
[SVN r38154]
2007-07-06 19:47:17 +00:00
Thomas Witt
bd606e5017 Fix #583.
[SVN r37947]
2007-06-08 18:30:46 +00:00
Thomas Witt
a5706ec3b0 Fixes for #583.
[SVN r37929]
2007-06-07 18:08:54 +00:00
Ralf W. Grosse-Kunstleve
9de994c0d1 Hans Meine's extra new-line for epydoc with reST compatibility
[SVN r37906]
2007-06-06 00:00:57 +00:00
Rene Rivera
a346c577cf Fix the abolute reference to the Boost sources inserted by Dave.
[SVN r37837]
2007-05-31 22:03:06 +00:00
Dave Abrahams
217e4ca8f8 Repair auto-configuration and allow this project to work with --build-dir
[SVN r37829]
2007-05-31 13:49:45 +00:00
Stefan Seefeld
f2f47f85c0 Enhance embedding python docs.
[SVN r37710]
2007-05-18 15:54:25 +00:00
Stefan Seefeld
e9caacc428 More fixes for embedding python docs.
[SVN r37709]
2007-05-18 15:52:55 +00:00
Stefan Seefeld
5070e84f70 Enhance documentation for embedding python.
[SVN r37708]
2007-05-18 15:22:43 +00:00
Stefan Seefeld
b130c93af6 Backport new eval() function from HEAD.
[SVN r37693]
2007-05-15 13:43:52 +00:00
Dave Abrahams
13432b504f Jamfile had extra bogus tst executable target
Build/test instructions were outdated somehow; a checkin must've failed.


[SVN r37620]
2007-05-07 19:00:01 +00:00
Dave Abrahams
0739bb7df8 Added reference to Py++
[SVN r37586]
2007-05-04 01:08:54 +00:00
Dave Abrahams
c253c5cc9c Updated build-and-test howto
[SVN r37585]
2007-05-04 00:56:22 +00:00
Stefan Seefeld
fe23d9885f Add new eval() function.
[SVN r37560]
2007-05-02 13:11:20 +00:00
Dave Abrahams
8f263e1fdb Progress on the build docs
[SVN r37551]
2007-05-01 16:14:39 +00:00
Ralf W. Grosse-Kunstleve
a6125a3632 merged from trunk
[SVN r37520]
2007-04-27 22:16:47 +00:00
Ralf W. Grosse-Kunstleve
e7ee17b71b MIPSpro: undo Python 2.5.1 define (the define leads to many warnings)
[SVN r37502]
2007-04-25 04:45:17 +00:00
nobody
a784bfc0f8 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r37419]
2007-04-11 23:35:09 +00:00
Dave Abrahams
5edb63d01c Some progress on Python build guide. Minor fixes to getting started guide.
[SVN r37418]
2007-04-11 23:35:08 +00:00
Dave Abrahams
b8937d0bae Relieve need to explicitly configure Python
[SVN r37382]
2007-04-06 18:17:43 +00:00
Dave Abrahams
f4b3aab7d4 Checkpoint before reorg
[SVN r37370]
2007-04-05 20:13:13 +00:00
Dave Abrahams
6af67d1a4c kill off BBv1 project archive
[SVN r37367]
2007-04-05 17:19:20 +00:00
Dave Abrahams
16d975ba5c Bringing forward BBv2/Python support and a few other things that were
obviously more up-to-date on the RC branch.

Removed the Boost.Python v1 zip archive.


[SVN r37346]
2007-04-03 17:10:53 +00:00
Dave Abrahams
4fc5cafd40 Some progress on new build/test guide.
[SVN r37333]
2007-04-02 05:24:25 +00:00
Dave Abrahams
4827ae73d5 Trivial change to force a rebuild on incremental testers' machines.
[SVN r37327]
2007-04-02 00:54:48 +00:00
Dave Abrahams
8eddc7aa37 Support for --with-pydebug builds.
python.jam:

  Support for the specification of "_d" extension suffix.

  In compute-default-paths, fixed the check for residence in
  a "PCBuild.*" directory so we can build against Windows Python built
  in a source distribution.

common.jam:

  Fixed generation of the "y" tag to look for <python-debugging>on
  rather than the whole debug-python build variant.

  Fixed some grammar and spelling.

virtual-target.jam:

  Added the ability to forego the prepending of "." to a
  generated-target-suffix by specifying the suffix enclosed in <...>

libs/python/build/Jamfile.v2:

  #define BOOST_DEBUG_PYTHON when <python-debugging>on


[SVN r37326]
2007-04-02 00:51:15 +00:00
Stefan Seefeld
1b5cd10f7c Fix reference counting error.
[SVN r37312]
2007-03-28 18:12:08 +00:00
Stefan Seefeld
98a468dadc Fix reference counting error.
[SVN r37312]
2007-03-28 18:12:08 +00:00
Dave Abrahams
ea4e6c0a4c Trivial change to force a rebuild on incremental testers' machines.
[SVN r37311]
2007-03-28 12:44:57 +00:00
Dave Abrahams
7cd7f6d8ee Trivial change to force a rebuild on incremental testers' machines.
[SVN r37287]
2007-03-26 15:47:05 +00:00
Dave Abrahams
4c39e8c990 Making a trivial change to trigger a test run from incremental testers
[SVN r37278]
2007-03-24 18:57:19 +00:00
Dave Abrahams
6c6f654fbe Add commented-out test for import_ so it's easy to reinstate
[SVN r37256]
2007-03-21 17:44:57 +00:00
Dave Abrahams
b7eaea096e Eliminate import_ test, as it doesn't work consistently on Windows and Linux.
[SVN r37250]
2007-03-21 05:09:21 +00:00
Dave Abrahams
904ae8604c fix builtin_converters test so it can work (BBv1 allowed the
duplication of main target names; BBv2 does not)


[SVN r37216]
2007-03-17 20:26:21 +00:00
Dave Abrahams
44d53c448b libs/python/build/Jamfile.v2: remove needless <define> property.
libs/python/test/Jamfile.v2:
  * add dynamically-linked embedding test

  * fix builtin_converters test so it can work (BBv1 allowed the
    duplication of main target names; BBv2 does not)


libs/python/test/import_.cpp: move some more of the Python code within
  a handle_exception callback so at least we can better diagnose
  failures.


[SVN r37214]
2007-03-17 20:17:56 +00:00
Stefan Seefeld
0f91872518 Fix import_ failure.
[SVN r37142]
2007-03-05 18:51:04 +00:00
Stefan Seefeld
e61401d27e Fix import_ failure.
[SVN r37141]
2007-03-05 18:44:45 +00:00
Stefan Seefeld
dc6b2979e4 Add copyright notice.
[SVN r37132]
2007-03-02 17:16:51 +00:00
Stefan Seefeld
be7ca7d269 Add copyright notice.
[SVN r37132]
2007-03-02 17:16:51 +00:00
Stefan Seefeld
47b4b4efbb Fix boost::python::import.
[SVN r37123]
2007-03-01 18:31:10 +00:00
nobody
4fa07f2b3d This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r37121]
2007-03-01 15:17:30 +00:00
Stefan Seefeld
50034140c4 Fix boost::python::import.
[SVN r37120]
2007-03-01 15:17:29 +00:00
Dave Abrahams
c880e7d69d Correct testing bugs:
either changing assert(...) or BOOST_ASSERT(...) to BOOST_TEST
    (in my code only)

    or adding "return boost::report_errors();" where it was clearly
    missing (and a pure bug, in anyone's code).

    or changing BOOST_TEST to BOOST_CHECK where the integer library
    was clearly using Boost.Test and not returning report_errors().


[SVN r37063]
2007-02-25 15:28:02 +00:00
Dave Abrahams
08a6f35ec2 Correct testing bugs:
either changing assert(...) or BOOST_ASSERT(...) to BOOST_TEST
    (in my code only)

    or adding "return boost::report_errors();" where it was clearly
    missing (and a pure bug, in anyone's code).


[SVN r37057]
2007-02-24 22:40:59 +00:00
Dave Abrahams
67236ffbad New build instructions in progress
[SVN r36879]
2007-02-03 16:55:07 +00:00
Dave Abrahams
c73ad50286 Roll back improved error message because it causes problems for vc6/7
[SVN r36435]
2006-12-16 22:00:35 +00:00
Dave Abrahams
0910710ac4 Correct class/function mismatches for MSVC and bring across
documentation tweaks from HEAD.


[SVN r36355]
2006-12-13 15:08:26 +00:00
Dave Abrahams
04c528138b Fully switch to BBv2
[SVN r36327]
2006-12-11 05:22:04 +00:00
nobody
1b66cd9643 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r36324]
2006-12-11 05:02:35 +00:00
Dave Abrahams
96ab7a80a4 Remove BBv1 for good
[SVN r36323]
2006-12-11 05:02:34 +00:00
Dave Abrahams
d8c3ff199e Remove BBv1 for good
[SVN r36321]
2006-12-11 03:35:10 +00:00
Dave Abrahams
c2dd9fa833 Fix auto-link to look at the right variable.
[SVN r36319]
2006-12-11 03:00:26 +00:00
Dave Abrahams
0c4ebef579 Fix auto-link to look at the right variable.
Make boost-build.jam point at the v2 Boost.


[SVN r36318]
2006-12-11 02:54:48 +00:00
Dave Abrahams
8fe9d41b58 Cleaned out flotsam and improved comments
[SVN r36317]
2006-12-11 02:50:55 +00:00
Dave Abrahams
b085121369 merged from trunk
[SVN r36292]
2006-12-07 17:45:17 +00:00
Dave Abrahams
8a4590b2ef Enable auto-linking
[SVN r36291]
2006-12-07 17:44:05 +00:00
Ralf W. Grosse-Kunstleve
d67b040683 fixes to support pickling of enums (by Shashank Bapat)
[SVN r36256]
2006-12-03 20:43:48 +00:00
Beman Dawes
fa219bce9b Merged copyright and license addition
[SVN r35907]
2006-11-07 19:27:00 +00:00
Beman Dawes
2db61657f2 Add copyright, license
[SVN r35905]
2006-11-07 19:11:57 +00:00
Rene Rivera
10b85d67e7 Remove obsolete Boost.Build v1 files.
[SVN r35880]
2006-11-06 17:10:46 +00:00
Dave Abrahams
6d2ee96ba3 improve error message
[SVN r35822]
2006-11-03 16:34:53 +00:00
Stefan Seefeld
ca91dc828e Fix symbol visibility.
[SVN r35754]
2006-10-27 21:19:47 +00:00
Stefan Seefeld
a74c8e3da3 Fix symbol visibility.
[SVN r35754]
2006-10-27 21:19:47 +00:00
Dave Abrahams
3a53c1dec0 Add fixes somehow missed for darwin
[SVN r35612]
2006-10-14 19:10:30 +00:00
Ralf W. Grosse-Kunstleve
9f4d39d9fe correct trivial, obvious accident: stray line removed
[SVN r35599]
2006-10-13 22:06:17 +00:00
nobody
da8e309957 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r35598]
2006-10-13 21:34:27 +00:00
Dave Abrahams
31c19644ed make numpy tests portable to Darwin with older docutils
[SVN r35597]
2006-10-13 21:34:26 +00:00
Dave Abrahams
2bd9141d4a make numpy tests portable to Darwin with older docutils
[SVN r35597]
2006-10-13 21:34:26 +00:00
Dave Abrahams
600d444136 Fix some problems with testing on old docutils installations
[SVN r35594]
2006-10-13 19:35:28 +00:00
Dave Abrahams
c3bda6a903 Fix some problems with testing on old docutils installations
[SVN r35594]
2006-10-13 19:35:28 +00:00
Dave Abrahams
c3bd0fcbad Make object comparison operators return object instead of bool, to
accomodate strange beasts like numarray arrays that return arrays that
can't be used as truth values from their comparison ops.

Fix numpy test for portability with old doctest (again!)


[SVN r35572]
2006-10-12 09:07:07 +00:00
Dave Abrahams
d61909d3ea Make object comparison operators return object instead of bool, to
accomodate strange beasts like numarray arrays that return arrays that
can't be used as truth values from their comparison ops.

Fix numpy test for portability with old doctest (again!)


[SVN r35572]
2006-10-12 09:07:07 +00:00
Dave Abrahams
1755dad7e6 merged from trunk
[SVN r35569]
2006-10-12 06:42:20 +00:00
Dave Abrahams
991a7c198a Workaround vc6 bugs
[SVN r35568]
2006-10-12 06:41:55 +00:00
Dave Abrahams
9b67f0447d Suppress a couple of msvc class/struct warnings
[SVN r35567]
2006-10-12 06:41:18 +00:00
Dave Abrahams
3b392c99be Adjust tests to account for numarray behavior differences
[SVN r35539]
2006-10-10 22:44:09 +00:00
Dave Abrahams
b714f6cc23 Adjust tests to account for numarray behavior differences
[SVN r35539]
2006-10-10 22:44:09 +00:00
Dave Abrahams
24ba93607b Try for backward compatibility with older versions of doctest
[SVN r35535]
2006-10-10 18:12:43 +00:00
Dave Abrahams
479a6ba4fc Try for backward compatibility with older versions of doctest
[SVN r35535]
2006-10-10 18:12:43 +00:00
Dave Abrahams
49d4aac8ec Fix lots of bugs in the numeric interface and tests.
Tests:
* Coerce a result to bool to deal with Python's new Bool type
* Better reporting of mismatches in expected and received results
* Remove bogus nullary y.astype() call
* Fix all uses of trace and diagonal so they don't cause errors
* Use appropriate typecodes
* Use doctest detailed API to run just the relevant tests
* Factor out error handling from macro

API:
* Added get_module_name() function to get current numeric module
* new_(x) now returns an array instead of object
* Fixed the signatures of the factory() family of functions
* Updated docs accordingly.


[SVN r35528]
2006-10-09 04:05:25 +00:00
Dave Abrahams
d78836b828 Fix lots of bugs in the numeric interface and tests.
Tests:
* Coerce a result to bool to deal with Python's new Bool type
* Better reporting of mismatches in expected and received results
* Remove bogus nullary y.astype() call
* Fix all uses of trace and diagonal so they don't cause errors
* Use appropriate typecodes
* Use doctest detailed API to run just the relevant tests
* Factor out error handling from macro

API:
* Added get_module_name() function to get current numeric module
* new_(x) now returns an array instead of object
* Fixed the signatures of the factory() family of functions
* Updated docs accordingly.


[SVN r35528]
2006-10-09 04:05:25 +00:00
Dave Abrahams
7a59131d37 Fix missing #include
[SVN r35524]
2006-10-08 05:17:20 +00:00
Dave Abrahams
545be29ad3 (hopefully) grab the last bit of logic from HEAD for a bugfix I've been trying to apply to the branch for days(!)
[SVN r35436]
2006-10-01 18:25:44 +00:00
Dave Abrahams
8553c109c7 merged from HEAD
[SVN r35429]
2006-09-29 22:27:57 +00:00
Dave Abrahams
5ab00bc9c8 Fix long-standing misnaming of "factory" method as "array"
[SVN r35428]
2006-09-29 22:24:12 +00:00
Dave Abrahams
315c3d50ee Apply missing elements of previously-"applied" bug fix.
[SVN r35421]
2006-09-29 15:45:29 +00:00
Dave Abrahams
d5219979a4 Fix bugs uncovered by Roman Yakovenko
[SVN r35410]
2006-09-29 02:09:13 +00:00
Dave Abrahams
d42054f3a0 Cleans up license/copyright warnings
[SVN r35409]
2006-09-29 02:08:32 +00:00
nobody
72b06e70ee This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r35366]
2006-09-28 14:41:02 +00:00
Dave Abrahams
94500ae36d Tests and fixes for a bad interaction between wrapper<> and operators
support.  "self" arguments weren't getting unwrapped properly.


[SVN r35365]
2006-09-28 14:41:01 +00:00
Dave Abrahams
375cc3aa93 Fix broken links
[SVN r35330]
2006-09-26 04:25:49 +00:00
Dave Abrahams
5e5d34cc36 Fixed broken links
[SVN r35329]
2006-09-26 04:23:32 +00:00
Ralf W. Grosse-Kunstleve
4eb286a034 ssize_t patches merged from HEAD
[SVN r35327]
2006-09-26 00:48:44 +00:00
nobody
a824230155 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r35326]
2006-09-26 00:25:08 +00:00
Ralf W. Grosse-Kunstleve
c6f2aa4ef2 new boost/python/ssize_t.hpp; avoids potential clash of Py_ssize_t typedef and PY_SSIZE_T_MIN/MAX macros with definitions from other libraries
[SVN r35325]
2006-09-26 00:25:07 +00:00
Gottfried Ganßauge
1bc3750ab3 repaired broken links
[SVN r35315]
2006-09-25 07:35:57 +00:00
Dave Abrahams
36abcee847 merged from HEAD
[SVN r35277]
2006-09-22 15:13:30 +00:00
Dave Abrahams
c7fb2f7047 Attempt GCC-3.4.4 and 4.0.1 workarounds
[SVN r35276]
2006-09-22 15:12:04 +00:00
Gottfried Ganßauge
b8b7768eb7 Test for cross module support of opaque
[SVN r35256]
2006-09-21 16:47:49 +00:00
Gottfried Ganßauge
7ad9dc6c64 Changed references to opaque_pointer_converter.html to point to opaque.html instead
[SVN r35255]
2006-09-21 16:47:31 +00:00
Gottfried Ganßauge
decc34551a Renamed to opaque.html because class name changed
[SVN r35254]
2006-09-21 16:47:00 +00:00
Gottfried Ganßauge
5acb44ede0 Renamed from opaque_pointer_converter.html because class name changed
[SVN r35253]
2006-09-21 16:46:42 +00:00
Gottfried Ganßauge
ef62f87963 type object gets initialized. Cross module support works
[SVN r35252]
2006-09-21 16:46:21 +00:00
Joel de Guzman
b5c893381f merge from head
[SVN r35246]
2006-09-21 10:52:01 +00:00
Vladimir Prus
815969bf8b Merge: Add tests
[SVN r35245]
2006-09-21 07:27:11 +00:00
Vladimir Prus
afedc1cd9a Add tests
[SVN r35244]
2006-09-21 07:26:35 +00:00
nobody
0d57e9e808 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r35243]
2006-09-21 07:07:15 +00:00
Gottfried Ganßauge
070e02d7d5 Renamed from opaque_pointer_converter.html
[SVN r35242]
2006-09-21 07:07:14 +00:00
Dave Abrahams
7ba6a00617 Apply Boost license, with permission from Prabhu Ramachandran.
[SVN r35240]
2006-09-21 03:43:59 +00:00
Dave Abrahams
ccc56c2a4c Apply Boost license, with permission from Prabhu Ramachandran.
[SVN r35240]
2006-09-21 03:43:59 +00:00
Dave Abrahams
e00a88ff49 Fix inspection issues
[SVN r35239]
2006-09-21 02:40:19 +00:00
Dave Abrahams
e70bbe4791 Fix license/copyright.
Also port some "glaringly obvious" bugfixes from HEAD.  Hope it
doesn't cause problems.


[SVN r35237]
2006-09-20 22:49:18 +00:00
Stefan Seefeld
e527bc860f Fix copyright issues.
[SVN r35236]
2006-09-20 22:30:39 +00:00
Stefan Seefeld
7ff0f62729 Fix copyright issues.
[SVN r35236]
2006-09-20 22:30:39 +00:00
Dave Abrahams
921e306b9a Fix license/copyright
[SVN r35234]
2006-09-20 21:59:03 +00:00
Dave Abrahams
95f0b39c90 merged from HEAD
[SVN r35185]
2006-09-18 22:22:31 +00:00
Dave Abrahams
bed1d26904 Return an int, not a string, on success from
check_numeric_array_rich_slice, since that's what the tests expect.


[SVN r35184]
2006-09-18 22:21:50 +00:00
nobody
23057688f9 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r35170]
2006-09-18 19:56:20 +00:00
Dave Abrahams
029618f719 merged from HEAD
[SVN r35165]
2006-09-18 18:25:57 +00:00
Dave Abrahams
41a342f026 vc6/7 workaround
[SVN r35164]
2006-09-18 18:25:12 +00:00
Dave Abrahams
cee8e07046 Checkin missing op_repr definition
[SVN r35153]
2006-09-18 02:59:31 +00:00
Dave Abrahams
38f7a4e9b6 merge from HEAD
[SVN r35141]
2006-09-17 02:42:51 +00:00
Dave Abrahams
0806e89964 More informative error messages
Better autoconfiguration


[SVN r35140]
2006-09-17 02:41:20 +00:00
Dave Abrahams
f5421ca6b2 Default to Python 2.4 in Unix builds
Applied contributed patches http://tinyurl.com/ndljr and
http://tinyurl.com/18r


[SVN r35138]
2006-09-16 18:43:53 +00:00
Ralf W. Grosse-Kunstleve
eea7697175 if __name__ == '__main__'
[SVN r35114]
2006-09-14 21:57:56 +00:00
Ralf W. Grosse-Kunstleve
777ce7b561 magic coding: iso-latin1 comment added to avoid Python SyntaxError
[SVN r35113]
2006-09-14 21:53:00 +00:00
Gottfried Ganßauge
864ece5539 cross module compatibility test for opaque
[SVN r35111]
2006-09-14 19:06:33 +00:00
Gottfried Ganßauge
2610eb9acb Type object for opaque initialized with PyType_Clear.
opaque is registered only if not another module has already registered
a conversion for that pointer type.
Doc update.


[SVN r35104]
2006-09-14 05:59:29 +00:00
Dave Abrahams
326c871224 attempt unverified workaround for http://tinyurl.com/gvrgd
[SVN r35103]
2006-09-13 22:47:11 +00:00
Dave Abrahams
567a2c7b89 attempt unverified workaround for http://tinyurl.com/gvrgd
[SVN r35103]
2006-09-13 22:47:11 +00:00
Dave Abrahams
924eeccd53 merged from trunk
[SVN r35080]
2006-09-13 00:02:56 +00:00
Dave Abrahams
05070faf12 Attempt to capture better debugging info in output
[SVN r35079]
2006-09-12 23:58:40 +00:00
Dave Abrahams
4a63cf4843 Move definition of BOOST_PYTHON_SUPPRESS_REGISTRY_INITIALIZATION back
where it belongs.


[SVN r35076]
2006-09-12 22:37:09 +00:00
Dave Abrahams
ad8069314d Move definition of BOOST_PYTHON_SUPPRESS_REGISTRY_INITIALIZATION back
where it belongs.


[SVN r35076]
2006-09-12 22:37:09 +00:00
Dave Abrahams
1d65b74273 Add missing license/copyright
[SVN r35070]
2006-09-11 22:27:29 +00:00
Dave Abrahams
9366c48351 add missing license/copyright info
[SVN r35068]
2006-09-11 22:08:18 +00:00
Dave Abrahams
5a14319753 SunPro workarounds
[SVN r35067]
2006-09-11 10:38:14 +00:00
Joel de Guzman
279a4f7888 Update
[SVN r35006]
2006-08-31 06:01:57 +00:00
Dave Abrahams
3c1ae689a7 merged from trunk
[SVN r34943]
2006-08-24 19:04:23 +00:00
Dave Abrahams
d3418d494c Restort BOOST_PYTHON_STATIC_LIB. We don't want to create exported symbols.
[SVN r34942]
2006-08-24 19:03:35 +00:00
Dave Abrahams
a99bd50e52 merged from trunk
[SVN r34940]
2006-08-24 13:05:30 +00:00
Dave Abrahams
c839427246 Sun workaround
[SVN r34939]
2006-08-24 13:04:59 +00:00
Dave Abrahams
8b178594ff merged from trunk
[SVN r34915]
2006-08-22 11:51:18 +00:00
Dave Abrahams
dd3a136b18 Attempted Sun workaround
[SVN r34914]
2006-08-22 11:50:35 +00:00
Dave Abrahams
786aeef998 merged from trunk
[SVN r34872]
2006-08-11 15:51:09 +00:00
Dave Abrahams
48696918de Try not specifying static link, to see if it makes Darwin happy
[SVN r34871]
2006-08-11 15:50:21 +00:00
Dave Abrahams
45e4cf506f merged from trunk
[SVN r34865]
2006-08-11 00:48:19 +00:00
Dave Abrahams
88be35ddc2 Attempt Sun-5.8 workaround
[SVN r34864]
2006-08-11 00:47:48 +00:00
Gennaro Prota
8fb6e1f48d (merge from head)
removed tabs (inspect tool)


[SVN r34723]
2006-07-24 22:28:41 +00:00
Gennaro Prota
9ee0d36a1d removed tabs (inspect tool)
[SVN r34722]
2006-07-24 22:25:35 +00:00
Gennaro Prota
ecf70b05f2 (merge from head)
removed tabs (inspect tool)


[SVN r34721]
2006-07-24 22:21:39 +00:00
Gennaro Prota
f240e0bab6 removed tabs (inspect tool)
[SVN r34720]
2006-07-24 22:20:25 +00:00
Gennaro Prota
4081605e4b removed tabs (inspect tool)
[SVN r34719]
2006-07-24 22:14:15 +00:00
Gennaro Prota
c54acdb9db (merge from head)
minor fix: violation of min/max guidelines


[SVN r34718]
2006-07-24 22:06:09 +00:00
Gennaro Prota
f332ff2d89 minor fix: violation of min/max guidelines
[SVN r34717]
2006-07-24 22:04:05 +00:00
Vladimir Prus
489dae2b58 Clarify comment
[SVN r34668]
2006-07-22 12:53:49 +00:00
Vladimir Prus
ec77608840 Clarify comment
[SVN r34668]
2006-07-22 12:53:49 +00:00
Vladimir Prus
f852ce6f7b Windows
[SVN r34667]
2006-07-22 12:28:43 +00:00
Vladimir Prus
f5a69a1dab Windows fix: use <library>/pytho/python_for_extensions, not <use>, so that
we actually link to Python import lib on windows.


[SVN r34666]
2006-07-22 12:28:00 +00:00
Vladimir Prus
e500919d25 Merge: Don't link Boost.Python to python library
[SVN r34663]
2006-07-22 07:16:18 +00:00
Vladimir Prus
a1e865061c Don't link Boost.Python to python library, and don't require
<threading>multi for embedding applications.

* libs/python/build/Jamfile.v2: (boost_python): Don't link
  to /python//python. Use /python//python_for_extensions.

* libs/python/test/Jamfile.v2: Remove <threading>multi project
  requirements.
  (py-run): Link to /python//python.
  (exec): Likewise.

* tools/build/v2/tools/python.jam: (pthread): Declare.
  (init-unix): Add 'pthread' to extra-libs.
  (


[SVN r34662]
2006-07-22 07:12:10 +00:00
Ralf W. Grosse-Kunstleve
596e92404a old misunderstanding corrected (L-BFGS)
[SVN r34504]
2006-07-11 04:09:41 +00:00
Joel de Guzman
2640f5af94 new css
[SVN r34426]
2006-06-29 09:35:52 +00:00
Joel de Guzman
0605e9fdcf minor tweak
[SVN r34375]
2006-06-22 13:43:09 +00:00
Joel de Guzman
cf68da0b19 added test for vector<string>
[SVN r34374]
2006-06-22 13:33:46 +00:00
Joel de Guzman
d3c474b295 terminology tweak
[SVN r34360]
2006-06-20 14:01:12 +00:00
Joel de Guzman
c9300e07c2 added custom converter test for map indexing suite
[SVN r34359]
2006-06-20 00:33:22 +00:00
Markus Schöpflin
7a645a6d8a Merged header inclusion order fix from trunk to release branch.
[SVN r34195]
2006-06-06 09:44:35 +00:00
Markus Schöpflin
fa2185e5ab Merged header inclusion order fix from trunk to release branch.
[SVN r34194]
2006-06-06 09:39:16 +00:00
Ralf W. Grosse-Kunstleve
cab94a7bba adjustments for new MIPSpro 7.4.4
[SVN r34132]
2006-06-02 05:39:50 +00:00
Ralf W. Grosse-Kunstleve
caa9cb8268 Python 2.5 compatibility
[SVN r34017]
2006-05-18 22:41:14 +00:00
Ralf W. Grosse-Kunstleve
66ac61450e avoid Visual C++ 7.1 "resolved overload was found by argument-dependent lookup" warning
[SVN r34016]
2006-05-18 22:09:20 +00:00
Ralf W. Grosse-Kunstleve
59f81def56 Python include must appear before any system include
[SVN r34010]
2006-05-18 18:47:12 +00:00
Ralf W. Grosse-Kunstleve
92862028b7 MIPSpro 7.3.1 compatibility
[SVN r34009]
2006-05-18 18:46:26 +00:00
Ralf W. Grosse-Kunstleve
b0ba7dfc50 also exercise OVERLOADS with docstring
[SVN r34006]
2006-05-18 16:15:59 +00:00
Ralf W. Grosse-Kunstleve
fe3abeda9f much more informative pickle error messages if pickling is not enabled
[SVN r34004]
2006-05-18 15:49:41 +00:00
Vladimir Prus
5cc33461dd Merge from trunk
[SVN r33626]
2006-04-10 09:02:57 +00:00
Markus Schöpflin
7b93f2fdc5 Merged fix from HEAD for Tru64/CXX compilation error.
[SVN r33455]
2006-03-23 09:40:38 +00:00
Markus Schöpflin
3fdfb30e33 Include python first, fixes error on Tru64/CXX.
[SVN r33454]
2006-03-23 09:38:03 +00:00
Vladimir Prus
cdcf8633bb Force multithreading for Python test.
Workaround for problem described in
http://thread.gmane.org/gmane.comp.lib.boost.devel/139601


[SVN r33434]
2006-03-22 09:53:34 +00:00
nobody
219743964d This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r33417]
2006-03-21 02:26:31 +00:00
Ralf W. Grosse-Kunstleve
e7927ef4ea HP-UX aCC support
[SVN r33399]
2006-03-20 00:00:39 +00:00
Dave Abrahams
8c1f04bd4c Fix bug in example.
[SVN r33328]
2006-03-13 06:39:41 +00:00
Vladimir Prus
136587c96f Make select_from_python_test have Python includes when compiling.
[SVN r33281]
2006-03-09 15:27:01 +00:00
Vladimir Prus
23664ec448 Specify <define>BOOST_PYTHON_STATIC_LIB for the select_from_python_test,
just like V1 does.


[SVN r33246]
2006-03-07 07:37:45 +00:00
Vladimir Prus
6b1a3c4489 Change Jamfile.v2 to use static linking to Boost.Python for 'exec' test.
V1 uses static linking, so let's do the same.


[SVN r33226]
2006-03-06 08:10:38 +00:00
Markus Schöpflin
fa4ebe5c53 Disabled pointer_vector test on Tru64/CXX as it runs forever and keeps hanging
the regression tests.


[SVN r33207]
2006-03-03 09:08:39 +00:00
Markus Schöpflin
28ef4a9e38 Reorder includes to make sure that python headers are included first, this
makes the test pass on hp_cxx_71_006_tru64.


[SVN r33202]
2006-03-02 17:12:18 +00:00
Ralf W. Grosse-Kunstleve
5d1053552c missing const added (MIPSpro 7.3 warning)
[SVN r33165]
2006-02-28 01:32:33 +00:00
Markus Schöpflin
0a38ca1660 Disable pointer_vector test on HP-CXX for now.
[SVN r33147]
2006-02-27 15:26:45 +00:00
Dave Abrahams
5791e3b58e Added VPython
[SVN r33102]
2006-02-25 12:35:48 +00:00
Dave Abrahams
2bfd2fa0fd Add missing exception specification.
[SVN r33090]
2006-02-23 17:14:59 +00:00
Vladimir Prus
0793267bf0 Add BOOST_PYTHON_STATIC_LIB and BOOST_PYTHON_DYNAMIC_LIB to usage
requirements, as appropriate.


[SVN r33053]
2006-02-21 07:38:14 +00:00
Vladimir Prus
eca25c0b7d Extra project-level requirements.
[SVN r33052]
2006-02-21 07:36:46 +00:00
Dave Abrahams
a8bad65556 Fix mistaken dependency on lightweight_test.hpp
[SVN r33032]
2006-02-20 19:21:59 +00:00
Dave Abrahams
6ef31ba33a Stop using assert() in tests so we can test with NDEBUG defined.
[SVN r33026]
2006-02-20 15:45:40 +00:00
Jim Douglas
c15216b385 Changes to ensure QNX/QCC compatability
[SVN r32943]
2006-02-15 19:57:56 +00:00
Joel de Guzman
a1ff35769b Doc Tweaks
[SVN r32910]
2006-02-14 02:24:32 +00:00
Dave Abrahams
22e82ae30f void pointer conversion support, from Niall Douglas, then heavily
edited by DWA.  Merged from python-voidptr


[SVN r32857]
2006-02-12 16:09:08 +00:00
Dave Abrahams
2d117bc4ad void pointer conversion support, from Niall Douglas, then heavily
edited by DWA.


[SVN r32836]
2006-02-11 22:29:33 +00:00
Dave Abrahams
6347ca8065 vc7 workaround
[SVN r32835]
2006-02-11 22:26:45 +00:00
Dave Abrahams
c39836ddc8 Tests for bool conversions
[SVN r32814]
2006-02-10 17:26:06 +00:00
Dave Abrahams
fb35a82bf1 Tests for bool members
[SVN r32813]
2006-02-10 17:25:25 +00:00
Vladimir Prus
44c5c18f45 Update Jamfile.v2
[SVN r32761]
2006-02-09 09:50:56 +00:00
Vladimir Prus
e0cceeb88c Update.
[SVN r32722]
2006-02-08 08:37:05 +00:00
Vladimir Prus
4a5f6f2e24 Update Jamfile.v2
[SVN r32702]
2006-02-07 11:49:00 +00:00
Dave Abrahams
8b1748fea0 add tuple conversion
[SVN r32473]
2006-01-31 03:26:46 +00:00
Ralf W. Grosse-Kunstleve
82919f0d5c another attempt to fix Code Warrior 9.4 link problem
[SVN r32404]
2006-01-24 17:55:56 +00:00
Ralf W. Grosse-Kunstleve
1f6ded7b4e Boost.Python docstring_options.hpp news
[SVN r32390]
2006-01-24 00:41:25 +00:00
Ralf W. Grosse-Kunstleve
a0d2873156 attempt to fix Code Warrior 9.4 link problem
[SVN r32380]
2006-01-23 19:01:17 +00:00
Ralf W. Grosse-Kunstleve
0519d54229 avoid g++ -Wall -W "unused parameter" warnings
[SVN r32373]
2006-01-22 19:29:32 +00:00
Ralf W. Grosse-Kunstleve
c181874335 initialize all slots of PyTypeObject to avoid g++ -Wall -W warnings
[SVN r32372]
2006-01-22 19:26:50 +00:00
Ralf W. Grosse-Kunstleve
203a42c35f avoid g++ -Wall -W "unused parameter" warnings
[SVN r32371]
2006-01-22 19:21:22 +00:00
Ralf W. Grosse-Kunstleve
8eba0eb25b initialize all slots of PyTypeObject to avoid g++ -Wall -W warnings
[SVN r32370]
2006-01-22 19:21:08 +00:00
Dave Abrahams
152e76220a GCC warning suppression from Jody Hagins
[SVN r32363]
2006-01-20 15:55:55 +00:00
Ralf W. Grosse-Kunstleve
8897cc9ce6 selected_doc() helper function modified to increase readability
[SVN r32339]
2006-01-16 20:54:53 +00:00
Ralf W. Grosse-Kunstleve
335cd02c2d new documentation for docstring_options.hpp
[SVN r32338]
2006-01-16 20:37:23 +00:00
Ralf W. Grosse-Kunstleve
758d92b33e seq.attr("__len__")() replaced by len(seq); obsolete len() example removed
[SVN r32337]
2006-01-16 20:36:42 +00:00
Ralf W. Grosse-Kunstleve
28eef45d28 enum_print() removed; it was not reachable anyway since enum inherits
from Python's built-in int type. However, the appearance of FILE*
raised questions about using extensions compiled with Visual C++ 8
with a Python compiled with Visual C++ 7.1.


[SVN r32301]
2006-01-12 23:25:23 +00:00
Ralf W. Grosse-Kunstleve
d8790a34d3 boost::python::len() moved to object.hpp
[SVN r32299]
2006-01-12 21:33:19 +00:00
Ralf W. Grosse-Kunstleve
3b058185c6 new docstring_options to support customization of __doc__ attributes of Boost.Python functions
[SVN r32298]
2006-01-12 19:28:53 +00:00
Ralf W. Grosse-Kunstleve
2261e7eedc new docstring_options to support customization of __doc__ attributes of Boost.Python functions
[SVN r32297]
2006-01-12 19:15:38 +00:00
Ralf W. Grosse-Kunstleve
19a196493f Runtime detection of broken cxxabi::__cxa_demangle versions; based on code contributed by Ult Mundane
[SVN r32296]
2006-01-12 19:12:27 +00:00
Ralf W. Grosse-Kunstleve
d10b5e8d1a Python 2.2 compatibility
[SVN r32295]
2006-01-12 17:49:48 +00:00
Ralf W. Grosse-Kunstleve
1cacefc226 automatic addition of C++ signatures to doc strings
[SVN r32290]
2006-01-12 00:32:29 +00:00
Ralf W. Grosse-Kunstleve
efcd2833f1 Visual C++ 6 compatibility
[SVN r32288]
2006-01-11 19:58:55 +00:00
Ralf W. Grosse-Kunstleve
2f9323d9e9 resolve gcc warnings (based on patches by Scott Howlett)
[SVN r32284]
2006-01-11 03:31:48 +00:00
Eric Niebler
8b2f4b4ce0 make test work on vc6
[SVN r31960]
2005-12-08 22:15:31 +00:00
Douglas Gregor
ab046dc634 Merged from Version_1_33_1
[SVN r31953]
2005-12-08 04:11:36 +00:00
Dave Abrahams
ef3f9b15f0 vc-8 workaround
[SVN r31943]
2005-12-07 05:00:02 +00:00
Dave Abrahams
68463e2fd2 Fixed missing semicolon
[SVN r31852]
2005-12-01 13:06:57 +00:00
Dave Abrahams
f75eca94e0 Fix typo
[SVN r31831]
2005-11-30 11:57:33 +00:00
Dave Abrahams
a23030b83e use symbol visibility for GCC 4.x
[SVN r31828]
2005-11-29 22:26:48 +00:00
Dave Abrahams
321cf2502a use symbol visibility for GCC 4.x
[SVN r31827]
2005-11-29 22:26:05 +00:00
Dave Abrahams
4996f912b4 Workaround for GCC bug described in http://lists.debian.org/debian-gcc/2003/09/msg00055.html
Thanks to Graham Bennett.


[SVN r31809]
2005-11-28 21:16:12 +00:00
Joel de Guzman
09e24cb17d map bug fix when data type is a shared_ptr and NoProxy is true
[SVN r31787]
2005-11-26 16:23:21 +00:00
Joel de Guzman
ac32d13e10 added more tests
[SVN r31786]
2005-11-26 15:13:20 +00:00
Joel de Guzman
b0496d1207 update: map indexing suite
[SVN r31723]
2005-11-21 15:25:47 +00:00
Joel de Guzman
a076239fc8 std::string and std::complex as no-proxy types.
[SVN r31717]
2005-11-21 04:54:23 +00:00
Dave Abrahams
7cf0f9090f Restore map_indexing_suite test that was mistakenly commented out.
[SVN r31621]
2005-11-10 21:58:20 +00:00
Dave Abrahams
479f068673 Attempt Bronek's change to suppress VC++8.0 complaints about redefined
_DEBUG.


[SVN r31557]
2005-11-04 21:38:29 +00:00
Eric Niebler
9b326f15fa qualify friend declaration to make EDG happy
[SVN r31538]
2005-11-02 22:43:05 +00:00
Ralf W. Grosse-Kunstleve
f094a5b9eb boost/python header must be included first due to a Python requirement
[SVN r31535]
2005-11-01 22:12:53 +00:00
Stefan Seefeld
4367850e5d Add examples.
[SVN r31530]
2005-11-01 15:18:02 +00:00
Dave Abrahams
f44a4d6468 Clarified HeldType
[SVN r31528]
2005-11-01 15:08:30 +00:00
Eric Niebler
5206dd55d2 s/Python sequences/Python iterables/ and other assorted feedback from Dave
[SVN r31517]
2005-10-31 19:46:41 +00:00
Dave Abrahams
988bf849a1 Account for Intel 9.0 picking up vc7.1 bug compatibility.
[SVN r31515]
2005-10-31 19:24:48 +00:00
Eric Niebler
6fee43fc6f tests and docs for stl_input_iterator
[SVN r31514]
2005-10-31 18:50:18 +00:00
Eric Niebler
6ec4387ea1 add stl_input_iterator for wrapping a Python iterator in a STL input iterator
[SVN r31513]
2005-10-31 18:49:54 +00:00
Dave Abrahams
e2f59ef548 More restrictions on the need for libpython.a
[SVN r31494]
2005-10-27 12:21:55 +00:00
Dave Abrahams
92a6fafd20 Note that the libpython.a creation instructions are not needed for Python 2.4.1+
[SVN r31466]
2005-10-25 19:08:24 +00:00
Dave Abrahams
4721f5f9af Fix CYGWIN_PYTHON_DEBUG_ROOT to be consistent with docs
Set *nix PYTHON_ROOT to /usr, to be consistent with real installations.
Use *nix rather than Unix everywhere for generality


[SVN r31463]
2005-10-25 15:47:27 +00:00
Dave Abrahams
3864838da2 Fixed for vc6
[SVN r31398]
2005-10-19 22:02:51 +00:00
Dave Abrahams
8e77df69d5 Update
[SVN r31396]
2005-10-19 18:28:02 +00:00
Dave Abrahams
12770b03e8 Add the ability to easily use new-style polymorphism wrappers with
smart pointer held_type.


[SVN r31392]
2005-10-19 18:17:13 +00:00
Dave Abrahams
c8a692b4b4 Bug fix
[SVN r31385]
2005-10-19 13:17:27 +00:00
Dave Abrahams
2571ebb0c2 Added Stefan's new files.
[SVN r31371]
2005-10-18 12:09:36 +00:00
Dave Abrahams
283dbfb593 Updated news
[SVN r31329]
2005-10-14 19:30:01 +00:00
Dave Abrahams
83f227034f Updated news
[SVN r31328]
2005-10-14 19:25:41 +00:00
Dave Abrahams
c5f514a4e6 Build with Python 2.4 by default; also deduce the default PYTHON_ROOT properly on Windows.
[SVN r31325]
2005-10-14 16:19:14 +00:00
Dave Abrahams
9fb15f631e Make it work when Python is compiled with Unicode disabled.
[SVN r31322]
2005-10-14 15:54:12 +00:00
Dave Abrahams
3d8f4c90ba Make it work when Python is compiled with Unicode disabled.
[SVN r31321]
2005-10-14 15:35:06 +00:00
Dave Abrahams
5597dcb321 Disable ADL from addressof uses :(
[SVN r31319]
2005-10-14 15:05:17 +00:00
Joel de Guzman
ab2912e3c2 minor fix
[SVN r31308]
2005-10-13 12:02:25 +00:00
Joel de Guzman
b705931ff0 tweak: wrong c++ code written in python
[SVN r31307]
2005-10-13 11:58:53 +00:00
Eric Niebler
2974286209 fix bugs in example code
[SVN r31305]
2005-10-12 20:17:28 +00:00
Dave Abrahams
1cec514b39 Martin Wille pointed out some missing header dependencies; fixed.
Also moved boost/python/detail/is_xxx.hpp functionality into
boost/detail/is_xxx.hpp to decouple library dependencies between
python and parameter.


[SVN r31290]
2005-10-11 21:20:06 +00:00
Dave Abrahams
8ecd49cbf0 Use "addressof(x)" instead of "&x" to deal with classes that have a
private operator& !!


[SVN r31279]
2005-10-11 13:19:05 +00:00
Ralf W. Grosse-Kunstleve
67a7669ff4 work around Visual C++ 6 problem
[SVN r31075]
2005-09-22 06:20:25 +00:00
Stefan Seefeld
e80545a7d3 Use BOOST_ASSERT instead of std::runtime_error to indicate errors.
[SVN r30954]
2005-09-13 14:42:03 +00:00
Stefan Seefeld
6afe0d4732 Enhance and clean up tests.
[SVN r30907]
2005-09-11 14:50:37 +00:00
Ralf W. Grosse-Kunstleve
f8280b0e1a David Abrahams, Jul 2005: according to 8.5/9 the __GNUC__ workaround at line 69 of data_members.cpp should be made universal.
[SVN r30893]
2005-09-10 05:53:28 +00:00
John Maddock
aa20ce7d2c Large patch from Ulrich Eckhardt to fix support for EVC++ 4.
[SVN r30670]
2005-08-25 16:27:28 +00:00
Stefan Seefeld
6074a23242 Fix exec test.
[SVN r30669]
2005-08-25 15:03:19 +00:00
Dave Abrahams
9ceac3ff8f Fix bug in example thanks to Roman Yakovenko.
[SVN r30616]
2005-08-21 15:19:51 +00:00
Stefan Seefeld
126a3efb92 Add basic embedding support.
[SVN r30601]
2005-08-17 13:04:42 +00:00
Victor A. Wagner Jr.
9205f507b0 Added - #define _CRT_NOFORCE_MANIFEST if we also have to #undef _DEBUG
this isn't really an elegant solution, perhaps people trying to
          debug python (BOOST_DEBUG_PYTHON defined) will really have to
          use the debug version of the CRT with the latest .NET

          There is also a collision if the user happens to have
          #define _CRT_FORCE_MANIFEST which I didn't address


[SVN r30570]
2005-08-13 16:19:19 +00:00
Ralf W. Grosse-Kunstleve
bff975f08c bug fix: friend class def_visitor_access; -> friend class python::def_visitor_access; This fix enables us to remove an EDG specific workaround.
[SVN r30471]
2005-08-04 20:15:35 +00:00
Dave Abrahams
262bcee750 Fix broken links
[SVN r30401]
2005-08-03 12:25:30 +00:00
Dave Abrahams
a3f12b18b1 Fix broken links
[SVN r30398]
2005-08-03 11:39:39 +00:00
Ralf W. Grosse-Kunstleve
ad635ec2d1 include order according to Python's rules
[SVN r30242]
2005-07-26 01:19:18 +00:00
Dave Abrahams
affd36e857 Fix up problem report issues (tabs, broken links, unlinked)
[SVN r30241]
2005-07-25 21:20:10 +00:00
Dave Abrahams
332a45f333 untabify
[SVN r30239]
2005-07-25 20:57:30 +00:00
Joel de Guzman
6cc48f7e5d adjusting link to libraries.html
[SVN r29999]
2005-07-12 07:53:00 +00:00
Joel de Guzman
5b6192d738 Tutorial bug fix (__init__ gets interpreted as underlined _init_ by quickbook)
[SVN r29970]
2005-07-10 20:06:21 +00:00
Joel de Guzman
980733a96d fixed bug where a vector<T*> is being wrapped by the indexing suite.
[SVN r29930]
2005-07-07 14:00:31 +00:00
Dave Abrahams
331209d8b5 Fix link in news
Improve assertions in indirect_traits_test by making them compile-time
and using MPL assert primitives


[SVN r29782]
2005-06-24 15:42:22 +00:00
Dave Abrahams
9116cf382b Fix reference search URL
[SVN r29635]
2005-06-17 02:55:31 +00:00
Dave Abrahams
8cc2b7a5df Add search box
[SVN r29626]
2005-06-16 17:49:38 +00:00
Joel de Guzman
dab01ad668 Typo fix (objecto)
[SVN r29625]
2005-06-16 17:26:00 +00:00
Ralf W. Grosse-Kunstleve
1fca114f6a work around RedHat 7.3 gcc 2.96 code generation errors: use previously checked in VC6, VC7.0 workaround only for exactly these compilers
[SVN r29267]
2005-05-29 17:05:25 +00:00
Dave Abrahams
70ee460a14 Py_Initialize outside the first test routine
[SVN r29167]
2005-05-24 12:20:03 +00:00
Douglas Gregor
07c95aea4e gcc-3_3-darwin also needs -bind_at_load
[SVN r29102]
2005-05-20 20:12:29 +00:00
Dave Abrahams
a3d8a384fa Workaround for compilers that have trouble with lexical_cast.
[SVN r29033]
2005-05-18 14:11:20 +00:00
Dave Abrahams
432d4782a5 Take typeid(T&) rather than typeid(T). For some some compilers won't
let you get away with typeid(T) when T is an incomplete class
type (that's conforming behavior), but GCC at least will allow
typeid(T&) -- also disallowed by the standard when T is incomplete.
If it turns out that EDGs also barf on typeid(T&), we may have more
work to do.

Some warning suppression for MSVC.


[SVN r29020]
2005-05-18 01:34:35 +00:00
Dave Abrahams
424f5bdf31 Workarounds for vc6 and 7.
[SVN r28973]
2005-05-16 17:34:46 +00:00
Dave Abrahams
13b16f9729 Workarounds for vc6 and 7.
[SVN r28958]
2005-05-16 14:54:12 +00:00
Dave Abrahams
82563df3bf Better support for rvalue from-python conversions of shared_ptr:
always return a pointer that holds the owning python object *unless*
the python object contains a NULL shared_ptr holder of the right type.


[SVN r28947]
2005-05-16 03:31:13 +00:00
Dave Abrahams
adb7b62a62 gcc workarounds
[SVN r28946]
2005-05-16 02:49:14 +00:00
Dave Abrahams
02c0b2b486 Improve MPL idiomatic usage
[SVN r28945]
2005-05-16 02:01:35 +00:00
Dave Abrahams
c876db8cae VC8 beta workaround
[SVN r28944]
2005-05-16 01:57:30 +00:00
Joel de Guzman
3ce88daa8b Tutorial Updates for Building BPL Projects
[SVN r28889]
2005-05-14 02:50:34 +00:00
Dave Abrahams
4cec6c4f2f Added copyright
[SVN r28780]
2005-05-10 11:53:17 +00:00
Brett Calcott
e38bf06257 updated visual studio project build file to include two new files (slice.cpp and wrapper.cpp)
updated email address for maintainer of visual studio files.


[SVN r28732]
2005-05-08 09:55:43 +00:00
Joel de Guzman
0deed1ff9b removing unnecessary file
[SVN r28584]
2005-05-02 15:57:42 +00:00
Joel de Guzman
a05a0ae46b Python now correctly syntax colorized + some minor tweaks
[SVN r28581]
2005-05-02 15:51:26 +00:00
Dave Abrahams
fe3906a7cb Fix broken vc6 compatibility
[SVN r28515]
2005-04-28 14:15:19 +00:00
Bruno da Silva de Oliveira
e5ed3a1c6c Fixed bug where the code for wrappers of member functions were defined outside
the pyste namespace. Reported by Dan Haffey.


[SVN r28479]
2005-04-25 23:49:21 +00:00
Bruno da Silva de Oliveira
2bbff71109 *** empty log message ***
[SVN r28478]
2005-04-25 23:49:04 +00:00
Victor A. Wagner Jr.
c492551111 Deleted - an extraneous \r at the end of lines which causes vc8.0 to mistake the
files for some created on the Mac (apparently a HENIOUS crime which is intolerable
          to those at Microsoft and which must be considered an error)
Changed - the version of python mentioned specifically from 2.3 to 2.4


[SVN r28471]
2005-04-25 10:01:07 +00:00
Vladimir Prus
b217c4ffa8 Replace 'run-pyd' with 'bpl-test' in a couple of places. The former does
not produce the .test files that regression tools want.


[SVN r28213]
2005-04-13 11:42:50 +00:00
Ralf W. Grosse-Kunstleve
96e9d6a872 std_pair jam rules and test
[SVN r27876]
2005-03-30 00:36:02 +00:00
Ralf W. Grosse-Kunstleve
fef288fed2 new std::pair to_python_converter example
[SVN r27875]
2005-03-29 23:02:45 +00:00
Stefan Slapeta
2fdb98079d Intel workaround extended to 9.0
[SVN r27861]
2005-03-29 07:41:34 +00:00
Dave Abrahams
bbabf21abf pydoc note
[SVN r27615]
2005-03-12 03:05:04 +00:00
Dave Abrahams
6d24977dd2 Comments for hacks to make PyDoc work. Eliminate reinterpret_cast.
[SVN r27614]
2005-03-12 02:58:42 +00:00
Dave Abrahams
c2b5925600 Hacks to make PyDoc work, from Nick Rasmussen <nick-at-ilm.com>
[SVN r27613]
2005-03-12 02:49:10 +00:00
Dave Abrahams
91e76a296f Added Civilization IV
[SVN r27599]
2005-03-10 14:53:39 +00:00
Dave Abrahams
e4eee902d4 Add missing #include
[SVN r27598]
2005-03-10 14:40:12 +00:00
Ralf W. Grosse-Kunstleve
db71f17dba typo fixed
[SVN r27577]
2005-03-08 15:17:44 +00:00
Ralf W. Grosse-Kunstleve
b754037949 account for changes in newer versions of Python's doctest module
[SVN r27576]
2005-03-08 14:31:12 +00:00
Stefan Slapeta
7bd76d869b Intel 9 workaround
[SVN r27517]
2005-02-28 12:14:13 +00:00
Rene Rivera
c25967a094 Apply typo fixes from Julio M. Merino Vidal
[SVN r27513]
2005-02-27 17:28:24 +00:00
Ralf W. Grosse-Kunstleve
bcb6370b0e fix for obviously broken class Rational example
[SVN r27457]
2005-02-20 23:05:14 +00:00
Jonathan Brandmeyer
17faf4504c Export the client-provided docstrings for init<optional<> > and
_FUNCTION_OVERLOADS() for only the last overload.


[SVN r27415]
2005-02-18 02:42:42 +00:00
Vladimir Prus
53c335f106 Remove unused references to Boost.Test.
[SVN r27390]
2005-02-15 14:43:25 +00:00
Vladimir Prus
cd8951439e More work on Boost.Python. Most tests now pass on Linux.
[SVN r27387]
2005-02-15 12:10:09 +00:00
Ralf W. Grosse-Kunstleve
0e5e2dc92e includes moved to satisfy the "Python.h first" requirement
[SVN r27386]
2005-02-15 10:41:03 +00:00
Jonathan Brandmeyer
4d50bf0ad9 Concatentation subsequent function docstrings rather than replace the original.
[SVN r27332]
2005-02-11 20:03:13 +00:00
Ralf W. Grosse-Kunstleve
1cfa79554d work around gcc problems (gcc 3.2.2 and higher); thanks to John Maddock for the patch!
[SVN r27142]
2005-02-05 07:36:14 +00:00
Jonathan Brandmeyer
567e620565 Match signatures with their mpl::true variants
[SVN r26829]
2005-01-24 02:37:37 +00:00
Jonathan Brandmeyer
5933fdbf39 Add docstring support for non-static properties.
[SVN r26814]
2005-01-22 21:41:37 +00:00
Dave Abrahams
4c21a29a9f Fix typos
[SVN r26644]
2005-01-08 02:13:13 +00:00
Dave Abrahams
7c21f3b48d Add fusion
[SVN r26628]
2005-01-04 23:50:07 +00:00
Dave Abrahams
6f4167700c tests for raw constructors
[SVN r26493]
2004-12-14 03:33:30 +00:00
Dave Abrahams
efae35bbd8 Add tests for raw constructors
[SVN r26407]
2004-12-03 08:00:11 +00:00
Ralf W. Grosse-Kunstleve
8dbd926d9e __DECCXX_VER test: use BOOST_WORKAROUND, BOOST_TESTED_AT instead of raw '#if defined'
[SVN r26363]
2004-11-29 21:32:14 +00:00
Aleksey Gurtovoy
c6e658cfca merge RC_1_32_0 fixes
[SVN r26333]
2004-11-28 04:44:21 +00:00
Aleksey Gurtovoy
b77dcf4bea merge RC_1_32_0 fixes
[SVN r26330]
2004-11-28 03:54:58 +00:00
Joel de Guzman
1e3cfbca03 fixes for the warnings.
[SVN r26290]
2004-11-25 09:17:04 +00:00
Dave Abrahams
1ed231747b update
[SVN r26254]
2004-11-19 14:17:02 +00:00
Joel de Guzman
a926eaa86d Merged from RC 1.32
[SVN r26224]
2004-11-16 07:29:41 +00:00
Ralf W. Grosse-Kunstleve
acd8ec2c31 adjustment for latest Tru64/cxx release (V6.5-042)
[SVN r26222]
2004-11-15 23:50:57 +00:00
Dave Abrahams
441a9dbea0 Stop reserving rights
[SVN r26089]
2004-11-02 20:07:50 +00:00
Dave Abrahams
63e92c49df Stop reserving rights.
[SVN r26088]
2004-11-02 19:46:47 +00:00
Dave Abrahams
49dd8bcf51 Stop reserving rights.
[SVN r26067]
2004-11-01 21:23:47 +00:00
Dave Abrahams
942f4c4ffd Fix bug in example.
[SVN r26049]
2004-11-01 14:17:00 +00:00
Dave Abrahams
43791f3a71 Remove qualification from member function name in overloads invocation.
[SVN r26047]
2004-11-01 14:15:08 +00:00
Dave Abrahams
321bea59fb tidy
[SVN r26026]
2004-11-01 00:21:27 +00:00
Dave Abrahams
601fd16cba add wrapper<T>
[SVN r26025]
2004-11-01 00:14:18 +00:00
Aleksey Gurtovoy
a9cddc10a9 refactor const_argument test to pass if there is a known workaround
[SVN r25924]
2004-10-29 03:19:27 +00:00
Bruno da Silva de Oliveira
03fc159aec no message
[SVN r25886]
2004-10-27 10:47:03 +00:00
Joel de Guzman
59b596e1ee license
[SVN r25867]
2004-10-26 00:13:19 +00:00
John Maddock
1fe6626edb BSL update based on permissions granted in blanket-permission.txt
[SVN r25863]
2004-10-25 11:58:45 +00:00
Aleksey Gurtovoy
fa8cffb3a2 taking care of const_argument test failures (see http://thread.gmane.org/gmane.comp.python.c++/7221)
[SVN r25848]
2004-10-24 07:28:34 +00:00
Joel de Guzman
11daf8dde8 fixed some links
[SVN r25772]
2004-10-18 11:58:55 +00:00
Joel de Guzman
0d6ac67c04 update to quickibook 1.0
[SVN r25771]
2004-10-18 11:29:52 +00:00
Joel de Guzman
978dc88499 Making space for update to quickbook 1.0
[SVN r25769]
2004-10-18 10:39:05 +00:00
Dave Abrahams
655868d803 Eliminate return from void function.
[SVN r25742]
2004-10-15 16:53:40 +00:00
Bruno da Silva de Oliveira
92ff4ab76f Applied patch by Christian Hudon
[SVN r25636]
2004-10-09 19:49:09 +00:00
Joel de Guzman
48a6db6598 redirect
[SVN r25582]
2004-10-06 23:56:05 +00:00
Dave Abrahams
a97d050016 Fixes from Christoph Ludwig <cludwig-at-cdc.informatik.tu-darmstadt.de>
[SVN r25577]
2004-10-05 20:41:12 +00:00
Dave Abrahams
e888d8aa88 Another fix.
[SVN r25576]
2004-10-05 20:40:28 +00:00
Aleksey Gurtovoy
59ca82128a c++boost.gif -> boost.png replacement
[SVN r25573]
2004-10-05 15:45:52 +00:00
Dave Abrahams
0620462efb Fixes from Christoph Ludwig <cludwig-at-cdc.informatik.tu-darmstadt.de>
[SVN r25571]
2004-10-05 14:35:31 +00:00
Stefan Slapeta
f99f1e187c Intel 8.1 workaround
[SVN r25529]
2004-10-02 19:14:52 +00:00
Dave Abrahams
937a851baa warning suppression for GCC
[SVN r25446]
2004-09-28 11:57:06 +00:00
Jonathan Brandmeyer
8e396f8e91 Add new test.
[SVN r25438]
2004-09-27 20:05:52 +00:00
Dave Abrahams
bd74676685 Work around the stupid VC++/Intel bug that retains argument constness in function signatures.
[SVN r25437]
2004-09-27 14:49:27 +00:00
Jonathan Brandmeyer
70e012bc45 Be more correct about testing for Intel 7.1 on MS Windows.
[SVN r25386]
2004-09-24 02:47:14 +00:00
Aleksey Gurtovoy
3bb3434a8d fix MSVC 6.x ICE in 'vector_indexing_suite.cpp'
[SVN r25343]
2004-09-22 16:54:04 +00:00
Dave Abrahams
2121039a2b Use proper configuration macros.
[SVN r25312]
2004-09-21 14:39:50 +00:00
Dave Abrahams
5bab5a2398 Fix GCC export limiting patch from Niall Douglas s_sourceforge-at-nedprod.com
[SVN r25279]
2004-09-20 13:59:59 +00:00
Dave Abrahams
2ca8be0bb2 vc6 workaround
[SVN r25278]
2004-09-20 13:45:52 +00:00
Dave Abrahams
227448f061 Fix #include
[SVN r25274]
2004-09-20 13:39:37 +00:00
Dave Abrahams
0b026dc5a2 Apply GCC export limiting patch from Niall Douglas s_sourceforge-at-nedprod.com
[SVN r25271]
2004-09-20 12:47:31 +00:00
Dave Abrahams
3ba268ed9c moved indirect_traits to boost/detail
[SVN r25237]
2004-09-20 02:50:29 +00:00
Joel de Guzman
c4b09c7526 move to quickbook (WIP)
[SVN r25137]
2004-09-16 05:51:33 +00:00
Joel de Guzman
164e517a54 move to quickbook (WIP)
[SVN r25136]
2004-09-16 05:47:55 +00:00
Dave Abrahams
fd75e791a7 moved indirect_traits to boost/detail
[SVN r25128]
2004-09-16 01:00:30 +00:00
Dave Abrahams
7eb9f910ba moved indirect_traits to boost/detail
[SVN r25127]
2004-09-16 00:47:59 +00:00
Dave Abrahams
78cd3298aa Move indirect_traits to boost/detail
[SVN r25124]
2004-09-15 19:35:10 +00:00
Dave Abrahams
2f5dfbb728 Move indirect_traits to boost/detail
[SVN r25117]
2004-09-15 15:00:12 +00:00
Dave Abrahams
3750668aad Add IPLT, alphabetized.
[SVN r25025]
2004-09-13 01:25:37 +00:00
Dave Abrahams
dc2acc5bf5 add proper default handling
[SVN r25017]
2004-09-11 14:53:05 +00:00
Douglas Gregor
f7db275bc4 License update
[SVN r24990]
2004-09-09 13:59:01 +00:00
Dave Abrahams
7171a34364 Daniel Holth's PyBool mods (dholth-at-fastmail.fm)
[SVN r24980]
2004-09-08 19:18:57 +00:00
Dave Abrahams
f1260e6869 cw ICE workaround
[SVN r24979]
2004-09-08 18:57:14 +00:00
Jonathan Brandmeyer
0b4f2bafe6 Take a shot at enabling the workaround for ICC 7.1 on Windows.
[SVN r24965]
2004-09-08 02:40:52 +00:00
Ralf W. Grosse-Kunstleve
c5cf576deb _DEBUG/BOOST_DEBUG_PYTHON/DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H must appear before #include <pyconfig.h>
[SVN r24942]
2004-09-06 18:42:41 +00:00
Aleksey Gurtovoy
bfd7f71601 merge new MPL version from 'mplbook' branch
[SVN r24874]
2004-09-02 15:41:37 +00:00
Dave Abrahams
87718f91ab Bug fix from Francois Ostiguy <ostiguy-at-fnal.gov>, more similar ones from Dave.
[SVN r24855]
2004-09-01 20:27:47 +00:00
Ralf W. Grosse-Kunstleve
3918395715 always include <pyconfig.h> first
[SVN r24852]
2004-09-01 15:43:52 +00:00
Dave Abrahams
dec9c6d96e removed as defunct
[SVN r24841]
2004-08-31 22:11:37 +00:00
Jonathan Brandmeyer
0c651a890c Use the non-const prototype for all currently known versions of MSVC.
[SVN r24771]
2004-08-26 21:28:28 +00:00
Dave Abrahams
e00462992c Added default args
[SVN r24757]
2004-08-26 14:07:17 +00:00
Ralf W. Grosse-Kunstleve
951c65e5a1 Compaq C++ V6.5-041 still needs the offsetof workaround
[SVN r24732]
2004-08-25 21:50:52 +00:00
John Maddock
0f19b148f6 Converted files to the BSL.
[SVN r24614]
2004-08-20 11:10:24 +00:00
Joel de Guzman
c750be6fc6 fixed link to doc/quickstart.html
[SVN r24573]
2004-08-18 23:53:26 +00:00
Stefan Slapeta
d1003f08de Intel-win32 workaround
[SVN r24560]
2004-08-18 14:29:00 +00:00
Bruno da Silva de Oliveira
386c45fd4d - added copyright notice
[SVN r24521]
2004-08-17 01:51:29 +00:00
Dave Abrahams
725d203c32 Added missing license/copyright
[SVN r24484]
2004-08-15 12:34:39 +00:00
Dave Abrahams
07a14ce350 Clarify/don't abuse extract<>
[SVN r24436]
2004-08-12 14:27:40 +00:00
Joel de Guzman
77c2c8d77c Copyright and License
[SVN r24395]
2004-08-11 02:21:27 +00:00
Ralf W. Grosse-Kunstleve
9ea7f100cc Add license, copyright.
[SVN r24392]
2004-08-10 17:17:52 +00:00
Ralf W. Grosse-Kunstleve
51487a75e9 exercise keyword argument support
[SVN r24389]
2004-08-10 17:05:24 +00:00
Ralf W. Grosse-Kunstleve
500b8e190d support gcc 2.96 workaround (typedef arg arg_;)
[SVN r24388]
2004-08-10 17:04:14 +00:00
Ralf W. Grosse-Kunstleve
9102c12c6d bug fix: make use of kw in make_constructor_aux
[SVN r24387]
2004-08-10 17:03:23 +00:00
Dave Abrahams
cb45ee8879 Add license, copyright.
[SVN r24386]
2004-08-10 16:14:51 +00:00
Dave Abrahams
ecae47236e Add license, copyright.
[SVN r24380]
2004-08-10 14:59:58 +00:00
Jonathan Brandmeyer
d0ca0886bb Add missing copyright notice using the Boost Software License.
[SVN r24377]
2004-08-10 14:41:06 +00:00
Dave Abrahams
18411f4b5f Optimization bug fix from Stefan Seefeld (sseefeld-at-art.ca)
[SVN r24357]
2004-08-09 17:43:02 +00:00
Dave Abrahams
2c383e7216 Workaround bogus GCC warning.
[SVN r24306]
2004-08-05 16:57:10 +00:00
Dave Abrahams
cac6d3e5ac Made Python testing more verbose by default
Avoid using the Boost.Test library wherever possible.


[SVN r24249]
2004-08-02 19:31:59 +00:00
Dave Abrahams
bd985d67d8 Made Python testing more verbose by default
Avoid using the Boost.Test library wherever possible.


[SVN r24248]
2004-08-02 18:47:50 +00:00
Joel de Guzman
6f0a70fa66 minor updates
[SVN r24135]
2004-07-28 02:36:18 +00:00
Ralf W. Grosse-Kunstleve
cbe6de2a2d fixes to avoid EDG 245 warnings (by Jonathan Brandmeyer)
[SVN r24130]
2004-07-28 01:45:50 +00:00
Ralf W. Grosse-Kunstleve
4885d65ec9 redundant else commented out to avoid EDG 245 warnings
[SVN r24106]
2004-07-27 07:11:10 +00:00
Ralf W. Grosse-Kunstleve
047896ac16 fix for char* -> const char* conversion (g++ diagnostic)
[SVN r24105]
2004-07-27 07:10:16 +00:00
Ralf W. Grosse-Kunstleve
fbe3a563c3 avoid "incomplete type" error (EDG 245 diagnostic)
[SVN r24104]
2004-07-27 07:08:53 +00:00
Ralf W. Grosse-Kunstleve
0c453fda0b MIPSpro 7.3.1.x workaround
[SVN r24103]
2004-07-27 07:08:08 +00:00
Ralf W. Grosse-Kunstleve
a1f74e9c63 guard non-const prototype with BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
[SVN r24102]
2004-07-27 07:06:40 +00:00
Jonathan Brandmeyer
763fa1cf0c Silence warning from EDG 245 (Tru64 cxx 6.5)
[SVN r24092]
2004-07-26 23:29:49 +00:00
Dave Abrahams
c8e8ccfa22 New-style polymorphism
[SVN r24083]
2004-07-26 15:34:36 +00:00
Dave Abrahams
597342bf15 Suppress warnings for intel 8
[SVN r24082]
2004-07-26 15:13:05 +00:00
Dave Abrahams
8338b2fb49 Stop using "not"
[SVN r24081]
2004-07-26 14:27:17 +00:00
Douglas Gregor
fed0b09c4e Converted to Boost Software License, Version 1.0
[SVN r24055]
2004-07-26 00:32:12 +00:00
Rene Rivera
3e76482713 Remove tabs in file.
[SVN r24043]
2004-07-25 17:12:17 +00:00
Ralf W. Grosse-Kunstleve
d6325d902e workaround for MIPSpro 7.3.1.3 name lookup problem
[SVN r23825]
2004-07-20 05:12:33 +00:00
Dave Abrahams
615adc5fe6 Make slice work on vc6
Revamp/simplify class registration


[SVN r23823]
2004-07-20 03:16:49 +00:00
Dave Abrahams
2bdb728e87 A few corrections
[SVN r23735]
2004-07-18 21:54:58 +00:00
Jonathan Brandmeyer
5e82d653a1 Correct the documentation to specify that has_back_reference<> must be a
metafunction rather than a traits class.
Correct typos in the example.


[SVN r23730]
2004-07-18 17:53:28 +00:00
Bruno da Silva de Oliveira
27653b7fbf - Applied a patch by Paul Bridger that solves some problems for wrapper
methods.
- Applied a patch by Baptiste Lepilleur that allows the user to inject
code inside the class definition.
- Applied another patch by Baptiste Lepilleur that inserts two new command-line
options that helps with writing makefiles.


[SVN r23725]
2004-07-18 15:50:10 +00:00
Rene Rivera
af1530953e Move dllexport declaration from methods to slice class as mingw can't handle it. Resolves bug #952335.
[SVN r23464]
2004-07-12 13:07:17 +00:00
Ralf W. Grosse-Kunstleve
87290af774 workaround for broken gcc that ships with SuSE 9.0 and SuSE 9.1
[SVN r23411]
2004-07-09 04:53:39 +00:00
Jonathan Brandmeyer
8469d7727d Add a small set of test cases for slice::get_indicies().
Promote slice::start(), slice::stop(), slice::step, and
slice::get_indicies() to const.
Fix typos in the documentation.


[SVN r23408]
2004-07-08 17:29:51 +00:00
Ralf W. Grosse-Kunstleve
44e9ffc5ca correction as per Niall
[SVN r23386]
2004-07-06 22:44:33 +00:00
Vladimir Prus
2e86d1f9bb Remove debug print
[SVN r23368]
2004-07-06 11:27:54 +00:00
Ralf W. Grosse-Kunstleve
112c999818 obtain correct class name via cl.attr("__name__")
[SVN r23359]
2004-07-06 04:36:50 +00:00
Ralf W. Grosse-Kunstleve
858e5e9720 boost/python/detail/prefix.hpp must be included first to satisfy Python requirements; this fixes compilation errors under Tru64 Unix and IRIX using Python 2.3.4
[SVN r23334]
2004-07-04 07:08:54 +00:00
Jonathan Brandmeyer
f2f7b10d15 Revert last change since it was the documentation that was in error.
[SVN r23326]
2004-07-03 17:19:51 +00:00
Jonathan Brandmeyer
4e3c2f237c Correct the documentation with regard to the default backend for the
numeric::array class.


[SVN r23325]
2004-07-03 17:17:56 +00:00
Jonathan Brandmeyer
c246e918f4 Use Numeric.ArrayType in preference to numarray.NDArray, in accordance
with the documentation.


[SVN r23320]
2004-07-03 03:54:35 +00:00
Eric Niebler
b76f185cb6 move BOOST_USING_STD_MIN and _MAX and BOOST_PREVENT_MACRO_SUBSTITUTION to the config headers, remove boost/minmax.hpp, update coding guidelines
[SVN r23313]
2004-07-02 01:21:32 +00:00
Eric Niebler
9d7097177d remove std_min and std_max, update minmax coding guidelines
[SVN r23162]
2004-06-23 04:49:48 +00:00
Ralf W. Grosse-Kunstleve
c6587596b1 unused variable names removed to avoid warning messages (Giulio Eulisse)
[SVN r23080]
2004-06-11 00:11:11 +00:00
Ralf W. Grosse-Kunstleve
b661aad9ac work around MIPSpro 7.41 problems
[SVN r23079]
2004-06-11 00:07:55 +00:00
Joel de Guzman
ca0a0a4a3d [bug fix] added boost::noncopyable to class_ Base
[SVN r23049]
2004-06-08 01:47:30 +00:00
Bruno da Silva de Oliveira
a9cd67873c - fixes module name if run from another directory where the .pyste file is located
[SVN r22977]
2004-05-30 23:14:10 +00:00
Bruno da Silva de Oliveira
b58812e7f1 Applied a patch by Roman Yakovenko that makes the export of unnamed enums
better.


[SVN r22852]
2004-05-17 22:46:43 +00:00
Joel de Guzman
9e2b4380d5 ADL bug-fix
[SVN r22730]
2004-05-04 10:19:33 +00:00
Joel de Guzman
8ae8430e7c ADL bug-fix
[SVN r22729]
2004-05-04 09:41:01 +00:00
Dave Abrahams
2ee25fda61 Added missing const to prevent spurious static asserts
[SVN r22719]
2004-05-01 17:37:15 +00:00
Ralf W. Grosse-Kunstleve
e766286d92 use BOOST_WORKAROUND
[SVN r22640]
2004-04-15 16:24:03 +00:00
Ralf W. Grosse-Kunstleve
4df59a752a make the test work under 64-bit operating systems
[SVN r22639]
2004-04-15 16:15:41 +00:00
Ralf W. Grosse-Kunstleve
e0bf57ae36 workaround for MIPSpro
[SVN r22638]
2004-04-15 15:16:15 +00:00
Ralf W. Grosse-Kunstleve
5df66bb179 adjusted #ifdef's for Compaq C++ V6.5-040 for Compaq Tru64 UNIX
[SVN r22637]
2004-04-15 14:59:31 +00:00
Ralf W. Grosse-Kunstleve
b5256ef70b adjusted #ifdef's for Compaq C++ V6.5-040 for Compaq Tru64 UNIX
[SVN r22636]
2004-04-15 14:17:09 +00:00
Dave Abrahams
6c8fec96b6 Tweaks prompted by Faheem Mitha
[SVN r22632]
2004-04-13 12:19:15 +00:00
Dave Abrahams
cd139bd4ec Fixes prompted by Faheem Mitha
[SVN r22631]
2004-04-13 12:14:10 +00:00
Dave Abrahams
17b0c819e4 improved comments in-line
[SVN r22628]
2004-04-11 12:07:18 +00:00
Joel de Guzman
79c7d736f0 embedding tutorial updates
[SVN r22618]
2004-04-07 07:33:57 +00:00
Joel de Guzman
b627f93cf1 embedding tutorial updates
[SVN r22616]
2004-04-07 02:26:36 +00:00
Joel de Guzman
7d632ab3dd added test for embedding tutorial
[SVN r22614]
2004-04-07 01:32:53 +00:00
Bruno da Silva de Oliveira
bdf80a683c - removed exporters.importing mechanism, because this was causing a serious bug that was preventing the bases code to be generated
[SVN r22613]
2004-04-06 22:53:38 +00:00
Joel de Guzman
ed7292abd3 added test for embedding tutorial
[SVN r22609]
2004-04-06 11:50:20 +00:00
Joel de Guzman
e92f042677 additional constructor in BaseWrap
[SVN r22604]
2004-04-05 09:34:32 +00:00
Joel de Guzman
53cf9e7422 Typo
[SVN r22603]
2004-04-05 09:21:45 +00:00
Dave Abrahams
954afd78b2 Added Vega Strike
[SVN r22583]
2004-04-02 20:04:22 +00:00
Dave Abrahams
957ad2b4b1 Adjust to make the tutorial work
[SVN r22568]
2004-03-30 23:14:47 +00:00
Jonathan Brandmeyer
7187c6132a Throw an IndexError when given an extended slice;
Clip bounds of slices in a mannar consistant with builtin containers;
Prevent undefined behavior within the STL when given certain kinds of
empty slices.


[SVN r22507]
2004-03-17 03:15:35 +00:00
Dave Abrahams
b3f0d7c756 Fix bad "fix".
[SVN r22495]
2004-03-13 01:47:35 +00:00
Dave Abrahams
0cdfdee18f *** empty log message ***
[SVN r22492]
2004-03-12 22:34:43 +00:00
Ralf W. Grosse-Kunstleve
a283f56d05 define BOOST_PYTHON_TYPE_ID_NAME for Linux Intel C++
[SVN r22491]
2004-03-12 18:43:08 +00:00
Dave Abrahams
e6fd78ce93 Fixes for auto_ptr handling
[SVN r22490]
2004-03-12 15:22:16 +00:00
Dave Abrahams
aeed5f029e Use mpl::next to prepare for the next release of MPL
[SVN r22485]
2004-03-12 13:10:40 +00:00
Bruno da Silva de Oliveira
04484d55de - Fixed bug with exception declarations
[SVN r22459]
2004-03-09 01:01:29 +00:00
Jonathan Brandmeyer
476cba228d Changes to support MSVC 6.0.
[SVN r22430]
2004-03-04 16:42:56 +00:00
Eric Niebler
115f9f0644 remove minmax hack from win32.hpp and fix all places that could be affected by the minmax macros
[SVN r22394]
2004-02-26 18:27:02 +00:00
Daniel Wallin
a9c2a95366 boost logo css class
[SVN r22352]
2004-02-21 18:42:52 +00:00
Bruno da Silva de Oliveira
29f3891a68 - Generates the unique number for UniqueInt using the hash of the filename
[SVN r22329]
2004-02-19 22:26:54 +00:00
Bruno da Silva de Oliveira
7b602ef607 - now warns that AllFromHeader is not working in all cases
[SVN r22316]
2004-02-18 22:32:58 +00:00
Bruno da Silva de Oliveira
15e555c7f1 - Fixed UniqueInt bug across different compilation units.
[SVN r22315]
2004-02-18 22:28:28 +00:00
Bruno da Silva de Oliveira
f4fb49d32f - reverted previous commit
[SVN r22313]
2004-02-18 15:33:34 +00:00
Bruno da Silva de Oliveira
89be2fb736 - no_init is now generated for abstract classes
[SVN r22312]
2004-02-18 15:27:59 +00:00
Ralf W. Grosse-Kunstleve
62f0885852 Requires: n/a removed
[SVN r22257]
2004-02-13 18:20:43 +00:00
Ralf W. Grosse-Kunstleve
355e155e69 gcc 3.4 from gcc.gnu.org still suffers from the old static initialization bug under Mac OS 10: workaround adjusted accordingly
[SVN r22255]
2004-02-13 07:10:59 +00:00
Ralf W. Grosse-Kunstleve
ae1584ff3c class_::enable_pickling() in publicized interface; tested with everything incl. VC6 and 7.0
[SVN r22254]
2004-02-13 05:32:38 +00:00
Jonathan Brandmeyer
4a7686cd33 Check rich slicing of Numeric arrays only if Numeric or numarray is
installed.


[SVN r22252]
2004-02-13 02:07:21 +00:00
Jonathan Brandmeyer
799eeb0cb8 Fix a build error on Tru64. Thanks to Ralf W. Grosse-Kunstleve for this
fix.


[SVN r22250]
2004-02-12 23:09:10 +00:00
Jonathan Brandmeyer
8452e275d0 New implementation, tests, and documentation for a PySliceObject
objectmanager.


[SVN r22192]
2004-02-07 21:38:24 +00:00
Joel de Guzman
53268000e7 small typo
[SVN r22067]
2004-01-30 06:15:32 +00:00
Dave Abrahams
52febfe3fc Improved and alphabetized news format, added Python news, updated
iterator news.

Corrections in the Python documentation


[SVN r22039]
2004-01-29 03:34:23 +00:00
Dave Abrahams
8fcfed495a Fixes for intel-linux
added <default> feature handling for specifying build defaults in requirement sets.


[SVN r22027]
2004-01-28 22:50:18 +00:00
Joel de Guzman
2dfe76b082 small typo
[SVN r22026]
2004-01-28 22:45:35 +00:00
Ralf W. Grosse-Kunstleve
11d8751d29 workaround for gcc 3.4 bug when using precompiled header support
[SVN r21715]
2004-01-14 01:37:54 +00:00
Ralf W. Grosse-Kunstleve
b03c3a29e0 previous revision (1.10) of this file restored because http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13530 is fixed
[SVN r21633]
2004-01-12 18:02:28 +00:00
Joel de Guzman
53e8982e05 fix typo
[SVN r21571]
2004-01-10 02:53:06 +00:00
Ralf W. Grosse-Kunstleve
4a30841ad8 fix for Tru64 cxx problems incl. workaround for gcc 2.96 problems; patch by David Abrahams; thanks Dave!
[SVN r21558]
2004-01-09 07:25:17 +00:00
Dave Abrahams
234ebadb8d pro9 workarounds; some ADL protection for is_xxx
[SVN r21529]
2004-01-07 14:07:21 +00:00
Dave Abrahams
11ee20fa36 Test full slicing.
[SVN r21497]
2004-01-05 12:34:25 +00:00
Dave Abrahams
440599545f Workaround for gcc-3.4 quirks
[SVN r21493]
2004-01-05 11:46:30 +00:00
Dave Abrahams
44ba088cb4 Fix problem with [:] slices on python::objects
[SVN r21472]
2004-01-04 13:41:00 +00:00
Dave Abrahams
08d3798722 .
[SVN r21449]
2004-01-02 18:34:17 +00:00
Ralf W. Grosse-Kunstleve
56ff8e438e fix use of incomplete type (Tru64 cxx diagnostic)
[SVN r21444]
2004-01-02 08:31:21 +00:00
Dave Abrahams
3590a3589d Fix 2-phase lookup bug
[SVN r21442]
2004-01-01 12:46:04 +00:00
Dave Abrahams
7674c82e1f Fix bug with (arg("x"), "y") construct.
[SVN r21437]
2003-12-31 19:20:31 +00:00
Ralf W. Grosse-Kunstleve
b93b21a7f2 work around Visual C++ 6 internal compiler errors
[SVN r21435]
2003-12-31 17:18:03 +00:00
Ralf W. Grosse-Kunstleve
f53925848c work around g++ (GCC) 3.4.0 20031230 (experimental) internal compiler error
[SVN r21432]
2003-12-31 09:37:31 +00:00
Dave Abrahams
eedc88b56a Bug fixes in property handling
[SVN r21429]
2003-12-31 00:23:52 +00:00
Ralf W. Grosse-Kunstleve
1102fec2a0 links to pickle and indexing suites
[SVN r21423]
2003-12-30 03:54:21 +00:00
Ralf W. Grosse-Kunstleve
589fefe4b9 tabs -> spaces
[SVN r21405]
2003-12-27 06:22:29 +00:00
Rene Rivera
cfc867bd18 Fix broken links.
[SVN r21404]
2003-12-27 02:37:02 +00:00
Rene Rivera
5bc28e3016 Fix broken links.
[SVN r21403]
2003-12-27 01:46:04 +00:00
Rene Rivera
23b7ccca7f Fix broken links. And some minor consistency changes.
[SVN r21402]
2003-12-27 01:31:00 +00:00
Dave Abrahams
e9d6286a1d Fix Dereferenceable concept to require pointee, and
register_ptr_to_python to require Dereferenceable.


[SVN r21327]
2003-12-18 19:25:14 +00:00
Dave Abrahams
48321857e4 consistent use of get_pointer
[SVN r21326]
2003-12-18 19:23:38 +00:00
Ralf W. Grosse-Kunstleve
156da15715 unused member function removed (to avoid Linux Intel C++ 8.0 warning)
[SVN r21278]
2003-12-16 04:14:28 +00:00
Ralf W. Grosse-Kunstleve
4a0d7965cb consolidation of workarounds for missing "not" keyword
[SVN r21276]
2003-12-15 17:55:38 +00:00
Dave Abrahams
1f522823ff gcc2 workaround
[SVN r21274]
2003-12-15 14:45:07 +00:00
Beman Dawes
6795a280fd tabs to spaces
[SVN r21080]
2003-12-02 13:32:47 +00:00
Dave Abrahams
f369e22638 Cleaner code using object instead of handle
[SVN r21018]
2003-11-30 21:12:30 +00:00
Dave Abrahams
a278da2eba correct get_pointer usage
[SVN r21017]
2003-11-30 21:10:15 +00:00
Dave Abrahams
37b2bdba79 Workaround gcc-2.x ICE
[SVN r21016]
2003-11-30 21:08:19 +00:00
Dave Abrahams
e9519db974 Make Dereferenceable use get_pointer
Re-enable map_indexing_suite iteration for vc6.


[SVN r21008]
2003-11-29 22:12:18 +00:00
Ralf W. Grosse-Kunstleve
dd7a24ebce links to newly generated tutorial sections
[SVN r20934]
2003-11-24 05:53:13 +00:00
Bruno da Silva de Oliveira
bc92a7d155 - added new "General Techniques" section
[SVN r20927]
2003-11-23 21:24:54 +00:00
Dave Abrahams
a68db84df6 * Fixed Boost.Thread jamfile to add the missing #include paths
* Modified Python testing code to use the facilities of testing.jam,
  so that it can be processed with process_jam_log

* Updated Python library tests to use a test suite

* Added Python test suite to status/Jamfile

* Added --run-all-tests option to force tests to run even when up-to-date.


Also,
boost-base.jam:

    Added some missing rule signatures

    RUN_LD_LIBRARY_PATH became LINK_LIBPATH because it was only really
    used during linking.

    Reformed the movement of path variables up the dependency graph

    Removed the defunct Run rule

    Set up generalized constants for path manipulation

darwin-tools.jam, gcc-tools.jam:

   use LINK_LIBPATH

python.jam:

   Reformed the choice of Python executable

testing.jam:

   Refactored testing code so it could be used for Python

   Now building all environment variable setup code ahead of time

   RUN_TEST became TEST_EXE


[SVN r20815]
2003-11-15 15:41:41 +00:00
Dave Abrahams
7b9bba3190 vc6 workaround
[SVN r20814]
2003-11-15 15:16:27 +00:00
Ralf W. Grosse-Kunstleve
bcec0af232 minor fix for otherwise confusing debug output
[SVN r20796]
2003-11-12 19:55:22 +00:00
Ralf W. Grosse-Kunstleve
0d437c4102 MIPSpro 7.41 workaround
[SVN r20795]
2003-11-12 19:49:18 +00:00
Raoul Gough
feff7bccd3 Fix MSVC6 duplicate comdat (LNK1179) with multiple python::range instances
[SVN r20794]
2003-11-12 16:50:17 +00:00
Ralf W. Grosse-Kunstleve
b12de3f01b additions by Niall Douglas with heavy edits by Ralf
[SVN r20780]
2003-11-10 20:39:13 +00:00
Dave Abrahams
0d108f12e4 Better error reporting for overload resolution failures, ideas thanks
to Nikolay Mladenov.


[SVN r20770]
2003-11-10 01:02:45 +00:00
Dave Abrahams
4aca2ca33b change to binary
[SVN r20689]
2003-11-06 01:14:50 +00:00
Dave Abrahams
9a967ae514 change to binary
[SVN r20688]
2003-11-06 01:13:26 +00:00
Ralf W. Grosse-Kunstleve
9481c39874 explain workaround for a bug in Apple's compiler
[SVN r20684]
2003-11-05 19:19:50 +00:00
Dave Abrahams
1e02065982 Fix Mike Rovner's warning suppression.
[SVN r20673]
2003-11-05 00:43:13 +00:00
Ralf W. Grosse-Kunstleve
1fee0da689 patch by Mike Rovner: work around gcc 3.3.1 bug (http://gcc.gnu.org/PR12163)
[SVN r20672]
2003-11-05 00:30:46 +00:00
Ralf W. Grosse-Kunstleve
c760cf8418 workaround for MIPSpro 7.3.1; old workaround for VC7.1 visible only to that particular compiler
[SVN r20668]
2003-11-04 20:20:07 +00:00
Ralf W. Grosse-Kunstleve
cdee5997af obsolete MIPSpro workaround removed
[SVN r20667]
2003-11-04 20:17:48 +00:00
Ralf W. Grosse-Kunstleve
4289280cdc Mac OS 10 answer updated
[SVN r20666]
2003-11-04 20:05:09 +00:00
Rene Rivera
962dfa17c5 Add -bind_at_load option for MacOSX Darwin build, this prevents semaphore_wait_trap erros when loaded by extensions.
[SVN r20665]
2003-11-04 18:30:37 +00:00
Ralf W. Grosse-Kunstleve
0a21aef601 fix expected output; tested with Python 2.2.1 (Redhat8) and Python 2.3 (Mac OS 10.2.8)
[SVN r20658]
2003-11-04 17:38:13 +00:00
Rene Rivera
8cbbd504cf Point to the new location for Boost.Build v1; tools/build/v1.
[SVN r20654]
2003-11-04 17:07:15 +00:00
Dave Abrahams
91b23c8367 Warning suppression thanks to Mike Rovner <mike-at-bindkey.com>
[SVN r20617]
2003-11-03 20:45:21 +00:00
Dave Abrahams
3729be263f Bug fix
[SVN r20566]
2003-10-30 18:40:37 +00:00
Dave Abrahams
ea91f4217a suppress a warning
[SVN r20555]
2003-10-29 23:16:36 +00:00
Raoul Gough
7fab3ce0b1 Add info on using gdb under Windows
[SVN r20554]
2003-10-29 21:38:06 +00:00
Dave Abrahams
ef7d675d67 bug fix for a single use of arg with no comma operator
[SVN r20533]
2003-10-29 00:46:08 +00:00
Rene Rivera
2b9d29a0fc Improve unused variable warning supperssion with multi-compiler friendly code.
[SVN r20466]
2003-10-24 01:19:16 +00:00
Bruno da Silva de Oliveira
95b95d012c - Fixed bug where a class would appear more than one in the generated code.
[SVN r20464]
2003-10-23 22:56:33 +00:00
Rene Rivera
4af7d5bca7 Remove unused var warning on non-debug compilation.
[SVN r20463]
2003-10-23 20:15:50 +00:00
Rene Rivera
d879eb235f Add install definitions for new common install configuration.
[SVN r20409]
2003-10-19 19:52:56 +00:00
Dave Abrahams
4f129d035b Bug fix, thanks to Nicolas LELONG, nlelong-at-mgdesign.org for the report.
[SVN r20401]
2003-10-17 14:13:48 +00:00
Dave Abrahams
7a354c4ff4 Warning suppression for GCC.
[SVN r20396]
2003-10-15 23:19:48 +00:00
Dave Abrahams
364826b3b3 Include @group directives for Synopsis
[SVN r20364]
2003-10-13 21:04:11 +00:00
Raoul Gough
e9b308da46 Use msvc_typeid only if _MSV_VER is set, to avoid problems with Intel compiler on Linux
[SVN r20340]
2003-10-10 14:55:13 +00:00
Dave Abrahams
94cfa2602f Fix typo
[SVN r20324]
2003-10-09 14:15:20 +00:00
Bruno da Silva de Oliveira
3533bd0504 no message
[SVN r20266]
2003-10-06 19:10:50 +00:00
Bruno da Silva de Oliveira
1a51a7df9e - added missing <boost/python/return_arg.hpp>
[SVN r20257]
2003-10-04 21:44:24 +00:00
Dave Abrahams
615be89951 Support for logical negation operator via __nonzero__
[SVN r20256]
2003-10-04 15:40:09 +00:00
Dave Abrahams
912ca36a1f fixed broken link
[SVN r20255]
2003-10-04 12:06:19 +00:00
Dave Abrahams
fba93805dc Work with gcc2
[SVN r20168]
2003-09-23 23:57:23 +00:00
Dave Abrahams
96d66f4624 Correct integral constant overflow
[SVN r20136]
2003-09-21 18:49:04 +00:00
Dave Abrahams
c3bae63e41 Fix const-correctness problem
[SVN r20135]
2003-09-21 17:24:37 +00:00
Bruno da Silva de Oliveira
6c22aceabc - added return_by_value
[SVN r20127]
2003-09-21 02:07:07 +00:00
Dave Abrahams
92a77dfe7f Implemented injected constructors.
Eliminated _DEBUG redefinition warning for CWPro8.


[SVN r20126]
2003-09-21 01:35:19 +00:00
Bruno da Silva de Oliveira
4f2dbeda28 bugs in Enum and export_values option
[SVN r20121]
2003-09-19 23:07:14 +00:00
Dave Abrahams
bec2de08fe Use make_function uniformly to build callable objects.
Fix wstring support so it doesn't break gcc2.95.x, which has no wstring.

Modify CallPolicies protocol so it can safely adjust the argument tuple.


[SVN r20090]
2003-09-17 21:36:53 +00:00
Raoul Gough
db192e1e01 Remove incref of Py_None in make_nurse_and_patient - inc already done in detail::none()
[SVN r20079]
2003-09-16 17:31:06 +00:00
Dave Abrahams
454654a9cc Try to ward off personal emails
[SVN r20041]
2003-09-12 20:08:05 +00:00
Dave Abrahams
1018bc56eb put newlines in the list of links
[SVN r20037]
2003-09-12 14:54:34 +00:00
Dave Abrahams
f920dc87d0 Added std::wstring conversion support
Added std::out_of_range => Python IndexError exception conversion,
thanks to Raoul Gough


[SVN r20027]
2003-09-11 19:19:55 +00:00
Dave Abrahams
8b97caae46 Warn about duplicate to-python converters and show the name of the
offending type.


[SVN r20023]
2003-09-11 15:09:11 +00:00
Dave Abrahams
3b74aab818 add pyfinalize safety
[SVN r20022]
2003-09-11 11:07:05 +00:00
Dave Abrahams
e78b4939b3 Added new str constructors which take a range of characters, allowing
strings containing nul ('\0') characters.


[SVN r20006]
2003-09-11 02:57:24 +00:00
Bruno da Silva de Oliveira
621b5fc2db - added INTERFACE_FILE
[SVN r20005]
2003-09-10 21:55:50 +00:00
Dave Abrahams
6ada069d5a Update for cross-project capability
[SVN r20002]
2003-09-10 16:08:41 +00:00
Joel de Guzman
50db384be1 Used BOOST_WORKAROUND
[SVN r19980]
2003-09-09 13:13:44 +00:00
Dave Abrahams
ae7225ae83 Updates for cross-project dependencies
[SVN r19977]
2003-09-09 03:14:01 +00:00
Dave Abrahams
911ba333a2 restored python test drivers
[SVN r19976]
2003-09-09 02:55:39 +00:00
Dave Abrahams
5cd8cce531 Set up BOOST_ROOT before import python has a chance to use it.
[SVN r19974]
2003-09-09 02:42:17 +00:00
Dave Abrahams
6a2a76cea9 Use new cross-project feature
[SVN r19969]
2003-09-08 19:36:06 +00:00
Dave Abrahams
7a9a3d30c9 Use the import rule
[SVN r19968]
2003-09-08 17:38:49 +00:00
Joel de Guzman
034ca4d5eb mscv workaround
[SVN r19962]
2003-09-08 12:56:33 +00:00
Dave Abrahams
00e3fa32fb Fix typo
[SVN r19949]
2003-09-07 19:45:21 +00:00
Dave Abrahams
0133bdfbe3 Removed unused ConverterGenerators arguments.
Updated arg_from_python<T> so that its operator() is nullary -- it
already gets everything it needs in its constructor.


[SVN r19948]
2003-09-07 19:44:44 +00:00
Dave Abrahams
e563def5ba Update documentation for the use of function objects.
[SVN r19947]
2003-09-07 18:03:20 +00:00
Dave Abrahams
b3910f4e4d Support for wrapping function objects and classes which use virtual
inheritance.  Completely killed off member_function_cast!


[SVN r19945]
2003-09-07 16:56:05 +00:00
Bruno da Silva de Oliveira
4a7b8fe839 - Wrapper for protected and private pure virtual functions are now generated
[SVN r19922]
2003-09-04 22:47:04 +00:00
Joel de Guzman
fc56544da4 added note to use bjam as the preferred build tool
[SVN r19889]
2003-09-01 03:12:34 +00:00
Dave Abrahams
c839d25722 Add module_tail for JIT debugging
[SVN r19863]
2003-08-29 19:42:39 +00:00
Dave Abrahams
c6b5ecbbdb Update for select_holder changes
[SVN r19862]
2003-08-29 19:03:14 +00:00
Joel de Guzman
d3473afa23 Take 2
[SVN r19805]
2003-08-27 12:10:49 +00:00
Joel de Guzman
379b28eb85 Some more tweaks
[SVN r19803]
2003-08-27 10:18:37 +00:00
Joel de Guzman
7f5bd33ead Tweaks
[SVN r19802]
2003-08-27 10:14:14 +00:00
Joel de Guzman
eef6fb9891 def_visitor linked in the reference
[SVN r19801]
2003-08-27 10:09:08 +00:00
Joel de Guzman
4a7f52ab2c Initial commit of def_visitor doc
[SVN r19800]
2003-08-27 10:00:23 +00:00
Bruno da Silva de Oliveira
10b249a162 - Using the new Boost.Python facility for wrapping pure virtual functions
[SVN r19792]
2003-08-26 23:24:02 +00:00
Dave Abrahams
5fc5fce663 removed intro text
[SVN r19790]
2003-08-26 15:49:50 +00:00
Dave Abrahams
f00fe3c0b1 Added reference to TODO list
[SVN r19789]
2003-08-26 15:48:36 +00:00
Dave Abrahams
3047d51613 revised, ReST-ized HTML-ized
[SVN r19788]
2003-08-26 15:47:41 +00:00
Dave Abrahams
f9f7146960 revised, ReST-ized HTML-ized
[SVN r19787]
2003-08-26 15:42:51 +00:00
Ralf W. Grosse-Kunstleve
ca9dc3103a print running... Done.
[SVN r19785]
2003-08-26 13:19:51 +00:00
Ralf W. Grosse-Kunstleve
c03afa379c print Done before sys.exit; this allows us to detect fatal crashes like segmentation faults on import
[SVN r19784]
2003-08-26 13:11:51 +00:00
Ralf W. Grosse-Kunstleve
cbacc98e3f MIPSpro workaround
[SVN r19783]
2003-08-26 12:52:21 +00:00
Dave Abrahams
84daf14f1b Added missing #includes
[SVN r19782]
2003-08-26 11:45:47 +00:00
Dave Abrahams
4af28b2a46 Added missing #includes
[SVN r19778]
2003-08-26 02:25:33 +00:00
Bruno da Silva de Oliveira
acbc01933c - Fixed a bug where the code for a virtual method wrapper defined inside a Pyste file was not being declared in the generated code
[SVN r19776]
2003-08-26 00:43:09 +00:00
Dave Abrahams
7ec78eecbd Implemented pure_virtual(...)
[SVN r19774]
2003-08-25 18:44:26 +00:00
Dave Abrahams
87c5e37f5e vc6 workaround for nested enums
[SVN r19773]
2003-08-25 18:41:26 +00:00
Dave Abrahams
d02959e3ed Remove cwpro7 workarounds; simplified select_holder
[SVN r19772]
2003-08-25 18:41:02 +00:00
Dave Abrahams
b844d8b750 Refactoring and cleanups
[SVN r19770]
2003-08-25 18:38:39 +00:00
Bruno da Silva de Oliveira
0a3010b29f no message
[SVN r19761]
2003-08-23 20:53:33 +00:00
Bruno da Silva de Oliveira
2b380d03c9 - Make the cache files be rebuilt only when the declarations' version changes, instead o pyste's version
[SVN r19759]
2003-08-23 19:18:52 +00:00
Bruno da Silva de Oliveira
3f70253a3f - Fixed bug where Include was not writing the #include in some situations
- Rebuild cache files if pyste version changes


[SVN r19757]
2003-08-23 17:06:37 +00:00
Dave Abrahams
165e294298 Fix #ifdef
[SVN r19745]
2003-08-23 11:41:00 +00:00
Ralf W. Grosse-Kunstleve
f7c9f45508 simple fix for MIPSpro after a long struggle; thanks to Stephen Adamczyk and John Spicer at EDG!
[SVN r19724]
2003-08-21 21:27:38 +00:00
Joel de Guzman
af2a924301 more workaround fixes for VC6 linker bug
[SVN r19714]
2003-08-20 13:15:41 +00:00
Joel de Guzman
3981e83de5 workaround MSVC linker bug
[SVN r19713]
2003-08-20 12:07:48 +00:00
Bruno da Silva de Oliveira
88b9721e3f - Fixed bug related to bases<> template generation in the new system
[SVN r19700]
2003-08-20 01:40:43 +00:00
Joel de Guzman
4946af1448 Map indexing fix for VC6.5
[SVN r19699]
2003-08-19 20:32:56 +00:00
Dave Abrahams
9959dcfa49 Always #include prefix.h first of all.
[SVN r19694]
2003-08-19 15:44:30 +00:00
Joel de Guzman
cfb13fad22 fix for wrapping vector<bool>
[SVN r19692]
2003-08-19 03:28:53 +00:00
Joel de Guzman
4e3f3a052d chaned struct def_visitor; to class def_visitor;
[SVN r19691]
2003-08-19 02:23:16 +00:00
Bruno da Silva de Oliveira
dc7ae9ed20 - removed "header_code", since we already have Include().
[SVN r19670]
2003-08-17 21:11:07 +00:00
Bruno da Silva de Oliveira
929badf4c6 Added support for insertion of user code in the generated code
[SVN r19664]
2003-08-17 19:35:00 +00:00
Bruno da Silva de Oliveira
c4a3f2c04f no message
[SVN r19652]
2003-08-16 21:11:50 +00:00
Bruno da Silva de Oliveira
a933e458b3 - Fixed a bug in the pure virtual functions
[SVN r19648]
2003-08-16 19:13:45 +00:00
Bruno da Silva de Oliveira
06b8320815 - Added exception specifiers (patch by Gottfried).
[SVN r19645]
2003-08-16 18:21:44 +00:00
Dave Abrahams
7f3aceafd2 Fix public/private error.
[SVN r19636]
2003-08-16 13:56:52 +00:00
Dave Abrahams
da5979931c class.hpp, object/select_holder.hpp, object/pointer_holder.hpp -
fix a problem which was causing value_holder<T> to be instantiated
   on abstract classes.  Now we compute the held_type at an outer
   level thereby avoiding the inner instantiation.

object_core.hpp -

   workarounds for GCC 2.x bugs

suite/indexing/detail/indexing_suite_detail.hpp -

   workaround for a CWPro8 bug


[SVN r19635]
2003-08-16 13:48:34 +00:00
Dave Abrahams
d8c7e75095 Fix the fix... again!
[SVN r19617]
2003-08-15 03:45:34 +00:00
Joel de Guzman
187506c97f added map value type (std::pair) wrapper to map_indexing_suite.hpp
[SVN r19616]
2003-08-15 03:03:27 +00:00
Joel de Guzman
145c6d1e4f moved map value type (std::pair) wrapper to map_indexing_suite.hpp
[SVN r19615]
2003-08-15 03:01:32 +00:00
Dave Abrahams
e2973f27f9 Fix the fix ;-)
[SVN r19613]
2003-08-14 22:53:30 +00:00
Dave Abrahams
976b8180ae Workaround a VC7 bug with nested enums
[SVN r19611]
2003-08-14 22:48:01 +00:00
Joel de Guzman
37acf41d43 Added map_indexing_suite test
[SVN r19600]
2003-08-14 15:05:02 +00:00
Joel de Guzman
6f26778491 Initial commit map_indexing_suite tests
[SVN r19599]
2003-08-14 15:04:25 +00:00
Joel de Guzman
834d815c87 mapping suite update
[SVN r19598]
2003-08-14 15:03:14 +00:00
Joel de Guzman
57e58c445b Tweaks to accomodate map_indexing_suite
[SVN r19588]
2003-08-14 12:14:25 +00:00
Joel de Guzman
8a1a8342d6 Initial commit map_indexing_suite
[SVN r19587]
2003-08-14 12:13:15 +00:00
Joel de Guzman
fa70ddc2c5 Preparing for std::map suite
[SVN r19566]
2003-08-12 21:21:47 +00:00
Joel de Guzman
8ca32bb494 Minor tweak in preparation for map_indexing_suite.hpp
[SVN r19565]
2003-08-12 18:36:55 +00:00
Joel de Guzman
f6c82eba0c changed def_arg to def_visitor
[SVN r19564]
2003-08-12 18:35:00 +00:00
Joel de Guzman
344044a315 updated the include path to vector_indexing_suite.hpp
[SVN r19563]
2003-08-12 18:13:19 +00:00
Joel de Guzman
b10805dc4c moved to new "suite" directory
[SVN r19562]
2003-08-12 18:09:21 +00:00
Joel de Guzman
07f397e2ed Moved to new "suite" directory
[SVN r19561]
2003-08-12 18:07:11 +00:00
Dave Abrahams
054dc439d2 Workaround msvc bug
[SVN r19553]
2003-08-12 14:17:52 +00:00
Dave Abrahams
5008dcbdd4 Make sure the class object and cast relationships are registered for
virtual function dispatch classes.


[SVN r19543]
2003-08-12 04:36:42 +00:00
Dave Abrahams
9c6650963f Use def_visitor to simplify class def(...) handling.
Workarounds for intel6 and vc6.


[SVN r19533]
2003-08-11 14:56:30 +00:00
Dave Abrahams
d482d57689 added properties tests
[SVN r19532]
2003-08-11 14:30:04 +00:00
Dave Abrahams
edf6516085 Python 2.3 compatibility.
[SVN r19530]
2003-08-11 11:07:28 +00:00
Dave Abrahams
957ac66e14 Added missing #include
Use BOOST_EXPLICIT_TEMPLATE_TYPE


[SVN r19529]
2003-08-11 02:21:34 +00:00
Dave Abrahams
07ce84c4e7 Repair bugs introduced during previous workaround
[SVN r19526]
2003-08-11 02:01:15 +00:00
Bruno da Silva de Oliveira
918636ff03 - Fixed a bug where in some classes the virtual methods were being definied incorrectly
[SVN r19525]
2003-08-10 23:21:25 +00:00
Dave Abrahams
83a6adbfa9 Added properties news item
changed the name of the static property class to
Boost.Python.StaticProperty (was Boost.Python.Class).


[SVN r19521]
2003-08-10 22:56:58 +00:00
Dave Abrahams
fcbc1d562f Added properties unit test from Roman Yakovenko
<romany-at-actimize.com>.


[SVN r19520]
2003-08-10 22:51:51 +00:00
Dave Abrahams
c3b4b58075 Extended CWPro8 overload ambiguity workaround to cover make_setter as
well as make_getter.


[SVN r19519]
2003-08-10 22:50:38 +00:00
Bruno da Silva de Oliveira
568b62a8a4 - Little bug where the memory cache was not being used
[SVN r19517]
2003-08-10 21:51:28 +00:00
Bruno da Silva de Oliveira
da34e7f507 - Abstract methods fix
- converts \ to / on windows


[SVN r19516]
2003-08-10 21:47:50 +00:00
Joel de Guzman
a0c31b47e5 refactored code + cleanup
[SVN r19508]
2003-08-10 15:20:10 +00:00
Joel de Guzman
5fb677c0c5 initial commit of container utils
[SVN r19507]
2003-08-10 15:19:23 +00:00
Bruno da Silva de Oliveira
168476382a - incremental code and some fixes
[SVN r19499]
2003-08-09 21:18:12 +00:00
Bruno da Silva de Oliveira
7fa6a29814 no message
[SVN r19498]
2003-08-09 20:57:04 +00:00
Bruno da Silva de Oliveira
f2b51da0ab - Fix a bug where a declaration was appearing more than once in an intermediate class in an hierarchy not fully-exported
[SVN r19489]
2003-08-08 02:56:04 +00:00
Joel de Guzman
53726746b8 Clean-up, refactored and added NoSlice option.
[SVN r19488]
2003-08-07 17:16:07 +00:00
Joel de Guzman
fe0b59f559 some trivial fixes.
[SVN r19485]
2003-08-07 12:29:54 +00:00
Joel de Guzman
c014dee6dc Fixed no proxy handling for containers of primitive types.
[SVN r19484]
2003-08-07 08:45:57 +00:00
Joel de Guzman
90c69d961e Added named visitor .def facility.
[SVN r19483]
2003-08-07 03:07:20 +00:00
Dave Abrahams
342f7db678 Workaround vc7.1 typeid problem with cv-qualified arrays.
[SVN r19474]
2003-08-06 13:51:03 +00:00
Joel de Guzman
9eb704f85a fixed iteration scheme and added append and extend methods
[SVN r19469]
2003-08-06 08:06:09 +00:00
Dave Abrahams
7754a91929 Update docs for static data support.
[SVN r19462]
2003-08-05 13:41:21 +00:00
Dave Abrahams
e4dc639e54 Allow mutating operations on self for all operators
[SVN r19454]
2003-08-05 03:15:37 +00:00
Ralf W. Grosse-Kunstleve
5d90101671 workaround for MIPSpro, thanks to John Spicer
[SVN r19453]
2003-08-05 03:03:49 +00:00
Ralf W. Grosse-Kunstleve
437fb70852 Tru64 cxx requires X::operator!=
[SVN r19450]
2003-08-05 00:49:33 +00:00
Dave Abrahams
d598404c48 initial commit
[SVN r19449]
2003-08-04 23:52:01 +00:00
Joel de Guzman
32c7088600 added missing typename and include file
[SVN r19448]
2003-08-04 23:34:52 +00:00
Joel de Guzman
ccede29816 added missing line feed at end of source
[SVN r19447]
2003-08-04 23:34:02 +00:00
Ralf W. Grosse-Kunstleve
b55b7e2f7b workaround for Mac OS 10 gcc 3.3 static initialization bug
[SVN r19446]
2003-08-04 22:09:16 +00:00
Ralf W. Grosse-Kunstleve
9217a6a253 avoid (incorrect) Tru64 cxx 6.5.1 warning
[SVN r19445]
2003-08-04 20:54:07 +00:00
Dave Abrahams
07c1319b99 Added the new arg class from
"nickm-at-sitius.com" (Nikolay Mladenov) which supplies the
ability to wrap functions that can be called with ommitted
arguments in the middle.


[SVN r19441]
2003-08-04 17:46:48 +00:00
Dave Abrahams
714b5dc26e missing checkin
[SVN r19439]
2003-08-04 17:36:49 +00:00
Joel de Guzman
1f715958f9 Fixed get_slice
[SVN r19421]
2003-08-04 05:09:23 +00:00
Joel de Guzman
0922aca873 Better usage of handle<>.
[SVN r19420]
2003-08-04 03:24:41 +00:00
Joel de Guzman
30ec6181b5 Fixed negative ref count bug
[SVN r19419]
2003-08-04 02:36:47 +00:00
Dave Abrahams
b28d586612 Move assignment operator inline as a workaround for a vc7 bug.
[SVN r19416]
2003-08-03 14:19:09 +00:00
Dave Abrahams
f48aacf477 added internals
[SVN r19390]
2003-07-31 18:03:17 +00:00
Dave Abrahams
bfa868a440 Workarounds for VC6 bugs
[SVN r19389]
2003-07-31 15:56:10 +00:00
Dave Abrahams
f01ff3a277 Prune #includes
[SVN r19382]
2003-07-31 01:04:51 +00:00
Dave Abrahams
d88e6bf688 object_core.hpp - use detail/is_xxx to generate template identifiers
object_operators.hpp - use SFINAE to prevent ADL from finding
        generalized operators inappropriately


[SVN r19377]
2003-07-30 23:48:06 +00:00
Dave Abrahams
a3cdacd088 Bug fix -- we weren't handling NULL keywords dictionaries in raw_function
[SVN r19359]
2003-07-30 11:34:50 +00:00
Joel de Guzman
81d99c855f Minor tweaks
[SVN r19335]
2003-07-29 04:47:34 +00:00
Joel de Guzman
5cd110f625 Comments from Dave + Editing + Proof reading and stuff
[SVN r19334]
2003-07-29 04:30:37 +00:00
Joel de Guzman
416895ff30 linked in the indexing suite documentation
[SVN r19315]
2003-07-26 05:49:57 +00:00
Joel de Guzman
e41abb6e92 Initial commit of indexing suite documentation
[SVN r19314]
2003-07-26 05:48:59 +00:00
Joel de Guzman
a6440a3fa6 Minor tweaks
[SVN r19313]
2003-07-26 05:47:11 +00:00
Joel de Guzman
2dece7ecaf added __iter__ and __contains__
[SVN r19311]
2003-07-26 01:50:35 +00:00
Dave Abrahams
7aae525587 Added RationalDiscovery
[SVN r19300]
2003-07-24 16:38:23 +00:00
Ralf W. Grosse-Kunstleve
ac5314093b fixing some trivial bugs (missing or misplaced typename); work around gcc 3.2 bug
[SVN r19299]
2003-07-24 15:07:05 +00:00
Ralf W. Grosse-Kunstleve
1524fb9fa9 flotsam removed
[SVN r19297]
2003-07-24 13:51:06 +00:00
Joel de Guzman
957549460b Initial Commit of Indexing Suite
[SVN r19296]
2003-07-24 12:02:57 +00:00
Joel de Guzman
3b33f54fb8 Added generic visitation mechanism.
[SVN r19288]
2003-07-24 01:44:18 +00:00
Ralf W. Grosse-Kunstleve
42ab6b6b66 unused variable removed (to avoid MIPSpro warning)
[SVN r19287]
2003-07-23 19:00:55 +00:00
Dave Abrahams
f59a5bbabc Stop printing return types in error messages.
[SVN r19286]
2003-07-23 17:04:05 +00:00
Dave Abrahams
0be371d747 Added cross-module exception test
[SVN r19282]
2003-07-23 15:17:03 +00:00
Dave Abrahams
2b52210291 remove (again!) extra diagnostic info
[SVN r19281]
2003-07-23 14:14:00 +00:00
Dave Abrahams
96a7bce78e Give feedback about the name and namespace of functions in error messages.
[SVN r19280]
2003-07-23 13:08:59 +00:00
Dave Abrahams
c1e1ea697c Added Metafaq link
[SVN r19278]
2003-07-23 11:43:06 +00:00
Dave Abrahams
874d6ebf2c Kill off nasty diagnostic printing.
[SVN r19277]
2003-07-23 11:11:56 +00:00
Dave Abrahams
77f5eb703c Attempt to work around a GCC EH problem by sticking a virtual function
in error_already_set and defining it in the library.

Removed some flotsam


[SVN r19274]
2003-07-23 03:00:48 +00:00
Dave Abrahams
af53ae8329 Implemented better error reporting for argument match errors.
[SVN r19271]
2003-07-23 01:31:34 +00:00
Dave Abrahams
8f76b8880e Remove bad #includes
[SVN r19269]
2003-07-22 23:55:09 +00:00
Dave Abrahams
fa398734be initial commit
[SVN r19267]
2003-07-22 23:53:06 +00:00
Dave Abrahams
362d20a8c7 Fixed editing error
[SVN r19265]
2003-07-22 20:12:39 +00:00
Dave Abrahams
6a33b8aeeb Implemented better error reporting for argument match errors.
[SVN r19264]
2003-07-22 20:12:07 +00:00
Dave Abrahams
d4e06ac436 Preparation for delivering nicely-formatted error messages in
Boost.Python.  The major change is that, instead of being
boost::function2<PyObject*,PyObject*,PyObject*>, 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<T>* 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]
2003-07-22 00:06:41 +00:00
Dave Abrahams
817dcd37e0 Get Cygwin linking again
User-readable type name printing for GCC


[SVN r19236]
2003-07-21 02:14:58 +00:00
Dave Abrahams
25bfd3c50f Suppress a GCC 2.x ICE
[SVN r19235]
2003-07-21 02:12:04 +00:00
Dave Abrahams
b13c902fb0 * added return_arg policy from Nikolay Mladenov
* removed duplication from reference.html

* improved automatic redirection messages


[SVN r19226]
2003-07-19 23:49:06 +00:00
Dave Abrahams
c95ef44b02 Added Kig
[SVN r19154]
2003-07-16 15:40:27 +00:00
Bruno da Silva de Oliveira
162727590c - moved register_ptr_to_python up one level.
[SVN r19123]
2003-07-15 01:05:07 +00:00
Vladimir Prus
7e159844fb Update for current Boost.Build V2.
[SVN r19037]
2003-07-11 06:04:35 +00:00
Dave Abrahams
787b79cc2c Added NeuraLab
[SVN r18979]
2003-07-08 13:10:59 +00:00
Bruno da Silva de Oliveira
b77652b499 - fixed staticmethod bug
- fixed hierarchies bug when using AllFromHeader


[SVN r18971]
2003-07-07 20:00:40 +00:00
Bruno da Silva de Oliveira
0c8444b8ed - fixed bug of --multiple
- new function: hold_with_shared_ptr
- SPECIALIZE_TYPE_ID bug


[SVN r18969]
2003-07-07 19:00:52 +00:00
Bruno da Silva de Oliveira
3e6ee799ba - --multiple now generates one cpp per pyste file.
[SVN r18945]
2003-07-06 01:16:27 +00:00
Bruno da Silva de Oliveira
dd14ccb115 - --multiple now generates one cpp per pyste file.
[SVN r18944]
2003-07-06 01:12:26 +00:00
Bruno da Silva de Oliveira
ba0fcd27c3 - Various bug fixes
- Changed the internal code to the way it was


[SVN r18941]
2003-07-04 22:47:27 +00:00
Bruno da Silva de Oliveira
d476e67067 - Fixed "char**" bug
- Lots of internal changes: phase 1 of Meta-Programming complete.


[SVN r18919]
2003-07-03 00:00:23 +00:00
Bruno da Silva de Oliveira
4588f5e9ab no message
[SVN r18884]
2003-06-29 17:47:45 +00:00
Bruno da Silva de Oliveira
68f54d364b - register_ptr_to_python addition
[SVN r18880]
2003-06-27 18:34:25 +00:00
Dave Abrahams
7dba18e7b9 Test that shared_ptr<Derived> can be converted to shared_ptr<Base>
[SVN r18851]
2003-06-20 22:57:37 +00:00
Dave Abrahams
67b265fe96 Remove duplicated sections
[SVN r18835]
2003-06-18 12:22:28 +00:00
Bruno da Silva de Oliveira
8289269a86 *** empty log message ***
[SVN r18828]
2003-06-18 00:05:01 +00:00
Bruno da Silva de Oliveira
9f711ed821 - Changed "no_override" to "final"
[SVN r18826]
2003-06-17 23:25:16 +00:00
Bruno da Silva de Oliveira
73e2ab5125 - Added a new test exercising the new automatic inheritation
[SVN r18815]
2003-06-17 01:56:45 +00:00
Bruno da Silva de Oliveira
7ea2ab1672 - If you export a derived class without exporting its base classes, the derived class will explicitly export the bases's methods and attributes. Before, if you were interested in the bases's methods, you had to export the base classes too.
- Added a new function, no_override. When a member function is specified as "no_override", no virtual wrappers are generated for it, improving performance and letting the code more clean.

- There was a bug in which the policy of virtual member functions was being ignored (patch by Roman Sulzhyk).


[SVN r18814]
2003-06-17 01:34:26 +00:00
Bruno da Silva de Oliveira
c821e903f8 Added tests for linux.
[SVN r18809]
2003-06-16 20:36:36 +00:00
Ralf W. Grosse-Kunstleve
54db04521a MIPSpro workaround
[SVN r18744]
2003-06-09 13:10:34 +00:00
Bruno da Silva de Oliveira
91fdecd76f - Changed the filename of one of the doc files to limit it to 32 chars.
[SVN r18709]
2003-06-08 22:51:37 +00:00
Dave Abrahams
f140a74a13 Added MinGW tips
[SVN r18695]
2003-06-06 11:18:34 +00:00
Bruno da Silva de Oliveira
4854a2a81b - Added another entry, about ESSS.
[SVN r18685]
2003-06-06 00:04:51 +00:00
Bruno da Silva de Oliveira
d94bb65006 - Major improvements in memory usage.
[SVN r18681]
2003-06-05 15:14:52 +00:00
Bruno da Silva de Oliveira
6ca5280b2c - Fixed bug in GCCXMLParser
[SVN r18672]
2003-06-04 22:07:27 +00:00
Dave Abrahams
5da3e1deea Leak bug fixed thanks to gideon may <gideon-at-computer.org> for
reporting it.


[SVN r18671]
2003-06-04 20:47:39 +00:00
Dave Abrahams
1ae85d0e39 Added Jayacard
[SVN r18660]
2003-06-04 02:23:13 +00:00
Bruno da Silva de Oliveira
256e3a467c - Appliced a patch from Giulio Eulisse that allows unnamed enumerations to be
exported with an AllFromHeader construct


[SVN r18657]
2003-06-03 20:58:22 +00:00
Ralf W. Grosse-Kunstleve
4477fe4dd6 Python 2.3 Tru64 cxx compatibility & a little cleanup
[SVN r18652]
2003-06-03 02:58:43 +00:00
Bruno da Silva de Oliveira
5d1e245858 - New construct, add_method.
[SVN r18650]
2003-06-03 01:48:51 +00:00
Ralf W. Grosse-Kunstleve
ec750a44c9 missing include added (to avoid gcc 3.2 and tru64_cxx errors)
[SVN r18646]
2003-06-02 13:17:11 +00:00
Dave Abrahams
006f1d9802 Tests for to-python conversion of NULL shared_ptrs that didn't
originate as Python objects.


[SVN r18637]
2003-06-01 14:49:51 +00:00
Dave Abrahams
638b3d4ee1 added a small comment
[SVN r18636]
2003-06-01 14:48:53 +00:00
Dave Abrahams
a1cc1651fa clarified cygwin instructions
[SVN r18632]
2003-05-31 22:03:29 +00:00
Bruno da Silva de Oliveira
9fe141f5ad - Fixed bug related to --multiple and Vars
[SVN r18630]
2003-05-31 21:20:23 +00:00
Bruno da Silva de Oliveira
d52f0c7d40 - New tests
[SVN r18629]
2003-05-31 21:18:09 +00:00
Bruno da Silva de Oliveira
bb55c4a855 no message
[SVN r18628]
2003-05-31 20:57:03 +00:00
Dave Abrahams
f1a06b14de Handle null shared_ptrs
[SVN r18627]
2003-05-31 16:40:42 +00:00
Dave Abrahams
286f3dc093 Added #include <boost/python/detail/prefix.hpp> to ensure that all public Boost.Python headers begin by #including Python.h before as many system headers as possible.
[SVN r18626]
2003-05-31 14:53:02 +00:00
Dave Abrahams
a731322782 Test linking with the static library also.
[SVN r18624]
2003-05-31 13:44:16 +00:00
Dave Abrahams
0db07ec25e Added missing #include thanks to Ben Hutchings <ben.hutchings-at-businesswebsoftware.com>
[SVN r18623]
2003-05-31 13:43:29 +00:00
Bruno da Silva de Oliveira
bc112ba65f - Fixed bug in the generation of virtual methods.
[SVN r18619]
2003-05-30 21:52:33 +00:00
Dave Abrahams
62ba322658 updated ImageMagick info.
[SVN r18597]
2003-05-29 14:00:00 +00:00
Dave Abrahams
02135b550d OpenSceneGraph has a web page
[SVN r18596]
2003-05-29 13:14:48 +00:00
Ralf W. Grosse-Kunstleve
ee4b06bb50 static keyword removed (Aye, Aye Sir David Abrahams!)
[SVN r18570]
2003-05-27 21:07:40 +00:00
Ralf W. Grosse-Kunstleve
16c5435ca8 fix typo
[SVN r18554]
2003-05-26 22:03:46 +00:00
Bruno da Silva de Oliveira
2595049748 - Added the Techniques section
[SVN r18552]
2003-05-26 21:10:41 +00:00
Ralf W. Grosse-Kunstleve
5911691c0d workaround for silly MIPSpro compiler
[SVN r18550]
2003-05-26 19:46:05 +00:00
Ralf W. Grosse-Kunstleve
e369bddc84 avoid use of sizeof to enable compilation with buggy gcc 3.3; change as per David Abrahams' instructions
[SVN r18549]
2003-05-26 19:06:00 +00:00
Ralf W. Grosse-Kunstleve
dccf2bbb4a Tru64 cxx compatibility
[SVN r18548]
2003-05-26 19:03:24 +00:00
Bruno da Silva de Oliveira
eaab3fc038 - Fixed link to the tutorial
[SVN r18519]
2003-05-23 21:06:22 +00:00
Bruno da Silva de Oliveira
858e1aba67 - Support for global variables
- Bug fixes in ClassExporter


[SVN r18518]
2003-05-23 20:37:35 +00:00
Bruno da Silva de Oliveira
19eff7791d - HeaderExporter now doesn't export names that begin with "_"
- Bug in ClassExporter, was adding an attribute to the members of base classes in GenerateVirtualMethods


[SVN r18516]
2003-05-23 19:13:52 +00:00
Bruno da Silva de Oliveira
c81af4ffe0 - Two new questions, about compiling time and creating packages.
[SVN r18515]
2003-05-23 18:01:39 +00:00
Dave Abrahams
9675e4233b Fix a bug in dangling reference/pointer detection. Thanks to Daniel
Paull <dlp-at-fractaltechnologies.com> for reporting it.


[SVN r18498]
2003-05-22 15:13:22 +00:00
Dave Abrahams
e6a176bb1e Add initializer list for silly GCC
[SVN r18491]
2003-05-22 01:35:53 +00:00
Dave Abrahams
ff0980914b reinstate workarounds for vc7
[SVN r18490]
2003-05-22 01:34:04 +00:00
Dave Abrahams
43e5ccd0a7 object_core.hpp - allow wrapping of objects which take object managers in their constructors.
forward.hpp
pointer_holder.hpp
value_holder.hpp
test/long.[py/cpp]

pointee.hpp,    - begin making borland work.
cv_category.hpp,
referent_storage.hpp
instance.hpp

self.hpp        - removed flotsam

signature.hpp   - use vector instead of list

destroy.hpp     - removed needless complication

make_keyword_range_fn.hpp - support for simpler init using vectors

class_converters.hpp - workaround for pro7

inheritance.hpp - simplified; took out pro7 workarounds; factored out
                  inheritance_query.hpp to reduce recompilation
                  dependencies

make_ptr_instance.hpp - add missing typename

registry.cpp    - add a little invariant checking for metrowerks

class.cpp       - stopped relying on class_id typedef

test/data_members.cpp - added a few more tests to make sure things compile at least.
test/destroy_test.cpp - removed cheating has_trivial_destructor tests
test/enum.cpp         - added some pro7 workarounds
test/virtual_functions.[py/cpp] - added _some_ tests for callbacks which return by reference.


[SVN r18489]
2003-05-21 22:17:23 +00:00
Dave Abrahams
66d6272942 Use mpl::vector and simplify constructor generation so we don't have
to constantly reverse lists.


[SVN r18487]
2003-05-21 21:53:30 +00:00
Dave Abrahams
2f1b828967 Getter setter bugfixes for attribute access
[SVN r18486]
2003-05-21 21:52:26 +00:00
Dave Abrahams
622636dcf1 Killed unneeded #include
[SVN r18485]
2003-05-21 21:51:03 +00:00
Dave Abrahams
0c22c276bf Workaround CW bug
[SVN r18472]
2003-05-20 19:01:44 +00:00
Bruno da Silva de Oliveira
7a4a79c74e no message
[SVN r18461]
2003-05-20 03:17:19 +00:00
Bruno da Silva de Oliveira
06f454e1d3 - Some small memory improvements
[SVN r18459]
2003-05-20 01:35:13 +00:00
Bruno da Silva de Oliveira
c1dbd52de1 - Fixed bug where functions with the same name where not being exported correctly
[SVN r18458]
2003-05-19 23:58:35 +00:00
Dave Abrahams
c3f5679188 Bug fix
[SVN r18372]
2003-05-08 20:18:14 +00:00
Bruno da Silva de Oliveira
97e2628f95 - Fixed bug where GCCXML was generating more than one declaration of a given class
[SVN r18359]
2003-05-08 10:38:51 +00:00
Dave Abrahams
6cecfcb704 restore from disk crash
[SVN r18353]
2003-05-08 02:19:10 +00:00
Ralf W. Grosse-Kunstleve
022a5a16f5 Python 2.3b1 compatibility: LONG_LONG -> PY_LONG_LONG
[SVN r18337]
2003-05-01 05:19:47 +00:00
Bruno da Silva de Oliveira
a39a834e75 - Now trying to export forward declared classes gives a warning.
- Forward-declared classes are ignored with AllFromHeader
- Bug: now it's possible to exclude classes, functions and enums from AllFromHeader


[SVN r18289]
2003-04-23 00:42:34 +00:00
Dave Abrahams
2a1210384a Warning suppression from Dominique Devriese <dominique.devriese-at-student.kuleuven.ac.be>
[SVN r18288]
2003-04-22 14:21:37 +00:00
Bruno da Silva de Oliveira
d497611069 - New code (more generic) for declaring the smart pointer converters
[SVN r18269]
2003-04-16 22:35:09 +00:00
Dave Abrahams
46d8786f5a Tweak citations, etc.
[SVN r18265]
2003-04-16 16:12:34 +00:00
Dave Abrahams
b8028729eb NULL shared_ptr conversions, more tests for custom to-python shared_ptr registrations
[SVN r18263]
2003-04-16 14:32:14 +00:00
Dave Abrahams
30e7768a87 warning suppression
[SVN r18261]
2003-04-16 14:29:27 +00:00
Dave Abrahams
10dc663e07 *** empty log message ***
[SVN r18259]
2003-04-16 13:39:28 +00:00
Joel de Guzman
42fc57d761 tweaks
[SVN r18255]
2003-04-15 12:48:27 +00:00
Dave Abrahams
74cd2f4844 Fix bug report from Jacek Generowicz <jacek.generowicz-at-cern.ch>
[SVN r18254]
2003-04-15 11:10:53 +00:00
Bruno da Silva de Oliveira
a15135f1c1 - Fixed a inheritance bug, and added a test for it.
[SVN r18251]
2003-04-14 23:34:33 +00:00
Dave Abrahams
ccd84c0be6 Small changes to support new iterator adaptors in sandbox
[SVN r18212]
2003-04-09 11:57:59 +00:00
Joel de Guzman
510215f284 typo fixes
[SVN r18201]
2003-04-08 01:20:58 +00:00
Bruno da Silva de Oliveira
c7ea0aacd6 - Lots of fixes in the documentation
- Fixed support for return_opaque_pointer policy


[SVN r18199]
2003-04-08 01:01:32 +00:00
Bruno da Silva de Oliveira
f7f089d2d4 - Fixed bug where the order of instantiations in the --multiple mode could end up wrong
[SVN r18198]
2003-04-07 18:15:50 +00:00
Bruno da Silva de Oliveira
82721c77a1 - now includes documentation in the distribution
[SVN r18197]
2003-04-07 12:13:02 +00:00
Bruno da Silva de Oliveira
1c9bf7d91c - Generating code for the improved support of static data members of Boost.Python
[SVN r18193]
2003-04-06 20:47:10 +00:00
Bruno da Silva de Oliveira
9bf78396cb - fixed bug where return_opaque_pointer was not being added to the user context
[SVN r18192]
2003-04-06 13:43:19 +00:00
Bruno da Silva de Oliveira
d994e4719c - New unittests for linux, now testing single and multi modes
[SVN r18189]
2003-04-05 18:14:52 +00:00
Bruno da Silva de Oliveira
44b886bb76 - Added a new line after the end of the "_main.cpp" files in multiple mode
[SVN r18188]
2003-04-05 18:11:44 +00:00
Bruno da Silva de Oliveira
8d2f012bcf - added new option for generating bindings: --multiple
- some refactoring of the code
- now detects forward declarations and prints a warning about them


[SVN r18187]
2003-04-05 17:05:12 +00:00
Dave Abrahams
a86deed5f6 dummy
[SVN r18158]
2003-04-02 12:57:33 +00:00
Dave Abrahams
3fd9ad7a60 implement static data members
[SVN r18157]
2003-04-02 12:56:37 +00:00
Bruno da Silva de Oliveira
319a5cf97c - Added the experimental command line option -R, which is a workaround a gccxml's preprocessor bug
[SVN r18138]
2003-03-30 21:06:10 +00:00
Bruno da Silva de Oliveira
0fd503d6af - Bug where the full name of the operator wasn't used in the declaration
- Now converter operators that return char* or string are automatically named __str__ in Python
- Update documentation with info about Psyco


[SVN r18127]
2003-03-28 21:02:24 +00:00
Bruno da Silva de Oliveira
bf696026bd - Performance improvements (better psyco support, cache in CppParser)
[SVN r18123]
2003-03-28 12:47:15 +00:00
Bruno da Silva de Oliveira
734657244b - Changed the error message about missing policies.
[SVN r18118]
2003-03-27 23:40:59 +00:00
Bruno da Silva de Oliveira
d2470e4f9c - Fixed bug where virtual methods could end exported twice in the wrapper.
[SVN r18116]
2003-03-27 23:24:40 +00:00
Bruno da Silva de Oliveira
28a2792280 no message
[SVN r18107]
2003-03-27 17:23:52 +00:00
Bruno da Silva de Oliveira
cd985a33d8 - Added files to create a binary distribution
[SVN r18106]
2003-03-27 17:14:41 +00:00
Bruno da Silva de Oliveira
726d2beffd - Doc fix, about accessing the operators in the interface file
[SVN r18097]
2003-03-26 18:35:53 +00:00
Bruno da Silva de Oliveira
f04be3fc1b - No more "needs policy" warnings for functions that return PyObject*
[SVN r18096]
2003-03-26 15:25:38 +00:00
Bruno da Silva de Oliveira
b6927410d9 - Fixed stupid bug in HandlePolicy
[SVN r18095]
2003-03-26 15:06:14 +00:00
Bruno da Silva de Oliveira
44b2e1ef8b - Default policy for functions/methods that return const T& is now
return_value_policy<copy_const_reference>().


[SVN r18077]
2003-03-24 23:25:14 +00:00
Bruno da Silva de Oliveira
3d01e6af89 no message
[SVN r18067]
2003-03-23 18:29:11 +00:00
Bruno da Silva de Oliveira
00387b2076 - Documentation for smart-pointers
[SVN r18066]
2003-03-23 18:27:18 +00:00
Bruno da Silva de Oliveira
f9bf514801 - Added unittests for linux
[SVN r18065]
2003-03-23 18:23:09 +00:00
Bruno da Silva de Oliveira
fa27bddfab - added a case: wrapper for a virtual method
[SVN r18062]
2003-03-22 19:35:55 +00:00
Bruno da Silva de Oliveira
f27e8f8ddc no message
[SVN r18061]
2003-03-22 19:34:49 +00:00
Bruno da Silva de Oliveira
5b2623ff2e - bumped version number
[SVN r18060]
2003-03-22 19:33:33 +00:00
Bruno da Silva de Oliveira
a83a726b6e - Fixed bug where wrappers for virtual methods were ignored.
[SVN r18059]
2003-03-22 19:31:19 +00:00
Bruno da Silva de Oliveira
93df7e00a7 - Added new flags: -h, --help, -v, --version
[SVN r18058]
2003-03-22 18:20:16 +00:00
Bruno da Silva de Oliveira
6b7748a88d - Now exporting virtual methods from base classes too
[SVN r18057]
2003-03-22 18:19:25 +00:00
Bruno da Silva de Oliveira
f102c77fa2 no message
[SVN r18056]
2003-03-22 18:18:25 +00:00
Bruno da Silva de Oliveira
a4fa261b77 - New page about smart pointers, and misc fixes
[SVN r18055]
2003-03-22 18:16:01 +00:00
Dave Abrahams
8a15fefc6c update HippoDraw site
[SVN r18053]
2003-03-22 17:29:01 +00:00
Bruno da Silva de Oliveira
12a4cc16be - Added MANUAL support for shared_ptr and auto_ptrs. In the future, support should be automatic.
[SVN r18041]
2003-03-21 14:24:20 +00:00
Dave Abrahams
6335716342 fixed binary-ness
[SVN r18038]
2003-03-20 20:33:48 +00:00
Dave Abrahams
db0602ac2a *** empty log message ***
[SVN r18037]
2003-03-20 20:31:57 +00:00
Bruno da Silva de Oliveira
390ad530f1 - Bug: GenerateName in infos.py doesn't cover all possible cases.
[SVN r18028]
2003-03-20 04:55:38 +00:00
Dave Abrahams
6eb2e8d68a paper updates
[SVN r18027]
2003-03-20 02:56:22 +00:00
Dave Abrahams
b804b3b221 fix typo
[SVN r18025]
2003-03-20 02:53:47 +00:00
Joel de Guzman
936c1118bd Bump to v1.6.0
[SVN r18021]
2003-03-19 23:33:19 +00:00
Bruno da Silva de Oliveira
4ba7b8a8ff - Updated to reflect changes in declarations.py
[SVN r17997]
2003-03-19 05:55:28 +00:00
Bruno da Silva de Oliveira
70601e9da0 no message
[SVN r17995]
2003-03-19 05:54:26 +00:00
Bruno da Silva de Oliveira
c32d1f9614 - Fixed bug where the PointerDeclaration of functions and methods didn't have the & operator
[SVN r17994]
2003-03-19 05:03:49 +00:00
Dave Abrahams
e031f78ad4 news updates; added links to paper
[SVN r17993]
2003-03-19 03:57:59 +00:00
Bruno da Silva de Oliveira
7d0273051a - Fixed bug where an union that was a class member crashed pyste (unions are still not exported)
- Added support for int, double, float and long operators


[SVN r17989]
2003-03-19 02:49:18 +00:00
Bruno da Silva de Oliveira
29d537571b - Unit tests for the examples
[SVN r17987]
2003-03-19 02:47:29 +00:00
Dave Abrahams
39f243f76b Check in html and pdf versions
[SVN r17985]
2003-03-19 01:47:30 +00:00
Dave Abrahams
0712360cc9 Add funcptr FAQ
[SVN r17975]
2003-03-18 14:41:04 +00:00
Dave Abrahams
02c125cbb4 Add funcptr FAQ
[SVN r17974]
2003-03-18 14:40:09 +00:00
Bruno da Silva de Oliveira
13256fb7e9 - Fixed bugs in Linux
[SVN r17969]
2003-03-18 05:16:01 +00:00
Bruno da Silva de Oliveira
f11d757807 - Fixed bug where the permission bits were being copied to the tmp file
[SVN r17934]
2003-03-15 02:51:51 +00:00
Bruno da Silva de Oliveira
2e123849fb no message
[SVN r17931]
2003-03-14 23:39:04 +00:00
Bruno da Silva de Oliveira
2f6cfaf0e9 - Fixed definition of private default implementations
[SVN r17928]
2003-03-14 22:27:32 +00:00
Bruno da Silva de Oliveira
f9b216d6f9 - Now generating wrappers for protected and private virtual methods
[SVN r17924]
2003-03-14 21:12:55 +00:00
Dave Abrahams
5fdd10d77e respond to Ralf's suggestions
[SVN r17900]
2003-03-13 22:58:03 +00:00
Dave Abrahams
41de02d528 Added development history
[SVN r17899]
2003-03-13 22:05:50 +00:00
Ralf W. Grosse-Kunstleve
1c3d08f23a adjustment for MIPSpro
[SVN r17865]
2003-03-12 23:18:16 +00:00
Bruno da Silva de Oliveira
0f1dc1fd50 - fixed bug where non-public virtual methods where being exported
- fixed " call_method<%s>"  to " call_method< %s >"


[SVN r17860]
2003-03-12 21:26:45 +00:00
Dave Abrahams
cd06018820 opaque pointer conversions from Gottfried.Ganssauge@haufe.de
[SVN r17859]
2003-03-12 17:56:41 +00:00
Dave Abrahams
7816eb6344 fix copyrights
[SVN r17841]
2003-03-12 13:51:17 +00:00
Dave Abrahams
9813f4b55f Fix copyrights
[SVN r17840]
2003-03-12 13:50:18 +00:00
Dave Abrahams
f81ca21b22 opaque pointer conversions from Gottfried.Ganssauge@haufe.de
Acknowledgements for all


[SVN r17834]
2003-03-12 12:47:44 +00:00
Bruno da Silva de Oliveira
f1b7620c9e no message
[SVN r17828]
2003-03-12 03:42:37 +00:00
Bruno da Silva de Oliveira
7d5c453f59 no message
[SVN r17825]
2003-03-12 01:39:28 +00:00
Bruno da Silva de Oliveira
bc4feb42b5 - fixed "deepcopy" of infos bug
[SVN r17824]
2003-03-12 01:32:48 +00:00
Bruno da Silva de Oliveira
ca9920874f - fixed default arguments in virtual methods
[SVN r17823]
2003-03-12 01:32:00 +00:00
Bruno da Silva de Oliveira
415991f6fc - added a link to the Pyste documentation
[SVN r17806]
2003-03-11 03:34:28 +00:00
Bruno da Silva de Oliveira
20c52def19 - first version
[SVN r17805]
2003-03-11 03:29:22 +00:00
Bruno da Silva de Oliveira
7dcacbcfc4 - first version
[SVN r17804]
2003-03-11 03:20:24 +00:00
Ralf W. Grosse-Kunstleve
34bf1560a9 non-template function make_function1 must be inline
[SVN r17791]
2003-03-09 17:26:06 +00:00
Dave Abrahams
39195ac97a Fix for older EDGs
[SVN r17786]
2003-03-08 12:36:18 +00:00
Dave Abrahams
6aa71e1f72 Remove flotsam
[SVN r17783]
2003-03-08 08:53:19 +00:00
Dave Abrahams
257a6c45f8 Remove flotsam
[SVN r17782]
2003-03-08 08:51:45 +00:00
Dave Abrahams
d34a11b584 Fix for Python 2.3 long->int conversion behavior change
[SVN r17779]
2003-03-08 05:28:54 +00:00
Dave Abrahams
ca64c96133 Added dangling_reference FAQ
Various idiomatic MPL cleanups in indirect_traits.hpp
raw_function support
Patches for CWPro7.2
Patches to pass tests under Python 2.3 with the new bool type.
Tests for member operators returning const objects
Fixes for testing Boost.Python under Cygwin


[SVN r17777]
2003-03-08 03:53:19 +00:00
Ralf W. Grosse-Kunstleve
ff734e3269 MIPSpro compatibility
[SVN r17772]
2003-03-08 00:25:47 +00:00
Dave Abrahams
d028a60cc2 Workaround for vc7 bug (and regression test)
[SVN r17708]
2003-03-03 17:21:30 +00:00
Dave Abrahams
577f58149c tests for operators returning const objects
[SVN r17700]
2003-03-02 22:11:20 +00:00
Dave Abrahams
4b97e191b8 Fix formatting errors
[SVN r17697]
2003-03-02 15:25:35 +00:00
Ralf W. Grosse-Kunstleve
15a148ab10 minor polishing, corrections
[SVN r17696]
2003-03-02 02:50:49 +00:00
Dave Abrahams
5ac7741ca9 Updates for ACCU
[SVN r17695]
2003-03-02 00:55:07 +00:00
Dave Abrahams
4c7cff6e8e fix bad link
[SVN r17691]
2003-03-01 18:25:41 +00:00
Dave Abrahams
c6ca85b525 Added embedding tutorial from Dirk Gerrits. Thanks, Dirk!
[SVN r17690]
2003-03-01 18:19:38 +00:00
Dave Abrahams
99f45b474e Fix broken links
[SVN r17671]
2003-02-27 13:07:41 +00:00
Dave Abrahams
ee44c90e85 Fixes for Python and Cygwin testing
[SVN r17667]
2003-02-27 02:20:01 +00:00
Dave Abrahams
2c4fa48f46 Fixes for Intel5
[SVN r17658]
2003-02-26 13:48:16 +00:00
Aleksey Gurtovoy
90fcd9369d MPL names/directory structure refactoring
[SVN r17651]
2003-02-25 23:11:41 +00:00
Dave Abrahams
923feda9f7 update
[SVN r17627]
2003-02-25 03:54:38 +00:00
Dave Abrahams
6d7d2ea5fe initial checkin
[SVN r17626]
2003-02-25 03:31:36 +00:00
Dave Abrahams
4874a1801b Improved Boost.Python build reliability and documentation.
[SVN r17623]
2003-02-25 02:15:55 +00:00
Dave Abrahams
479d8fc0f6 shared_ptr deleter introspection support
miscellaneous cleanups and MPL idiom-izing


[SVN r17622]
2003-02-25 01:03:40 +00:00
Dave Abrahams
1c346b2531 fix metafunctions for MPL
[SVN r17621]
2003-02-25 00:57:33 +00:00
Dave Abrahams
5cdebaf896 gcc-2.95 workaround
[SVN r17620]
2003-02-25 00:56:55 +00:00
Joel de Guzman
600602f9dc Tutorial updates
[SVN r17598]
2003-02-23 03:53:36 +00:00
Joel de Guzman
2a530bb9d2 Tutorial updates. Added virtual functions with default implementations and reshufled the overloading topics to discuss manual overloading first.
[SVN r17597]
2003-02-23 02:23:15 +00:00
Dave Abrahams
acdad5caf3 better auto_ptr support
[SVN r17592]
2003-02-22 18:11:08 +00:00
Dave Abrahams
b42b243287 vc++7.1 bug workarounds
[SVN r17591]
2003-02-22 18:07:05 +00:00
Dave Abrahams
a76f5f3db7 mpl-ish cleanup
[SVN r17585]
2003-02-22 01:02:31 +00:00
Dave Abrahams
4e9f745d4a Fixups for cygwin
[SVN r17570]
2003-02-21 08:10:55 +00:00
Aleksey Gurtovoy
101961a7c6 remove old MSVC 6.5 workaround
[SVN r17564]
2003-02-20 21:31:46 +00:00
Aleksey Gurtovoy
29d1f860c1 ETI fixes
[SVN r17563]
2003-02-20 21:29:39 +00:00
Dave Abrahams
2663e73f1c Automatically add library-path values to RUN_PATH/RUN_LD_LIBRARY_PATH
[SVN r17562]
2003-02-20 20:28:05 +00:00
Aleksey Gurtovoy
1f9d0bb196 MSVC 7.0 ETI workaround
[SVN r17556]
2003-02-20 13:35:16 +00:00
Joel de Guzman
ff9f262fac tutorial update
[SVN r17512]
2003-02-18 18:44:16 +00:00
Dave Abrahams
472dc3bd41 made binary
[SVN r17320]
2003-02-11 17:30:23 +00:00
Dave Abrahams
6f91b93519 removed to make binary
[SVN r17319]
2003-02-11 17:29:27 +00:00
Joel de Guzman
47291f68b2 removed unnecessary file
[SVN r17318]
2003-02-11 12:18:47 +00:00
Ralf W. Grosse-Kunstleve
2b5ef3c572 Python 2.3 compatibility
[SVN r17271]
2003-02-07 18:56:16 +00:00
Ralf W. Grosse-Kunstleve
9c50496d93 second half of introduction rewritten; SWIG, SIP, CXX acknowledged as suggested by the PyConDC reviewers; technical points moved to Library Overview section
[SVN r17259]
2003-02-07 01:07:39 +00:00
Ralf W. Grosse-Kunstleve
80488e2f23 improved serialization and object interface sections; some sentences added to the end of the conclusion
[SVN r17258]
2003-02-06 22:42:36 +00:00
Dave Abrahams
ad8da7166b edits
[SVN r17257]
2003-02-06 20:56:26 +00:00
Dave Abrahams
55cb918c51 Add ownership question
[SVN r17250]
2003-02-06 13:50:53 +00:00
Dave Abrahams
ac55c5ccf7 Add FAQ reference
[SVN r17249]
2003-02-06 13:50:31 +00:00
Ralf W. Grosse-Kunstleve
5bcf90766f draft thinking hybrid section added
[SVN r17242]
2003-02-05 19:58:43 +00:00
Dave Abrahams
8f12fdea4a Remove workaround patches
[SVN r17128]
2003-01-31 18:37:11 +00:00
Dave Abrahams
6f687ee402 Added a FAQ
[SVN r17010]
2003-01-23 17:38:57 +00:00
Dave Abrahams
9dfe98abb0 bug fix + regression test
[SVN r17002]
2003-01-23 04:32:10 +00:00
Dave Abrahams
399cf70b92 Add staticmethod support from Nikolay Mladenov <nickm-at-sitius.com>
[SVN r16946]
2003-01-19 19:12:30 +00:00
Joel de Guzman
571790097a minor error fixed PodBayDoorException const& x
[SVN r16926]
2003-01-18 01:44:48 +00:00
Ralf W. Grosse-Kunstleve
21f3c7c8c2 Mac OS X status
[SVN r16904]
2003-01-15 06:19:23 +00:00
Vladimir Prus
9d26167ec1 Change use-requirements to usage-requirements in some library Jamfiles.
[SVN r16884]
2003-01-13 12:31:12 +00:00
Vladimir Prus
ba4906d05c Update V2 Jamfile for Boost.
[SVN r16882]
2003-01-13 10:05:01 +00:00
Dave Abrahams
e13a11eb7f Fix dict bug
[SVN r16866]
2003-01-11 00:18:59 +00:00
Ralf W. Grosse-Kunstleve
72b214b8db details from the introduction moved to design goals section
[SVN r16864]
2003-01-10 19:22:13 +00:00
Ralf W. Grosse-Kunstleve
84a8fb71b8 meager result after a real hard try
[SVN r16863]
2003-01-10 19:00:05 +00:00
Dave Abrahams
4f5272cab9 Folded in Ralf's first set of edits
[SVN r16856]
2003-01-10 15:17:46 +00:00
Dave Abrahams
5895047e23 Initial Checkin
[SVN r16855]
2003-01-10 15:11:05 +00:00
Dave Abrahams
50bcf8db34 Apply workarounds for msvc-stlport
[SVN r16854]
2003-01-10 15:04:05 +00:00
Dave Abrahams
7defd3bbed support for BOOST_PYTHON_STATIC_MODULE
clarification


[SVN r16788]
2003-01-07 18:03:17 +00:00
Dave Abrahams
b9ecc931b0 support for BOOST_PYTHON_STATIC_MODULE
[SVN r16787]
2003-01-07 17:44:06 +00:00
Dave Abrahams
b84a8fd737 support for BOOST_PYTHON_STATIC_MODULE
[SVN r16786]
2003-01-07 17:38:08 +00:00
Dave Abrahams
2b1a2ce09c Build static versions of the library too.
[SVN r16785]
2003-01-07 17:30:51 +00:00
Dave Abrahams
bcf36610e1 Check in VisualStudio support from Brett Calcott
[SVN r16717]
2002-12-29 17:27:52 +00:00
Dave Abrahams
1bb3254d4d Check in changes from Brett Calcott
[SVN r16716]
2002-12-29 16:53:48 +00:00
Beman Dawes
0f95d507c4 add or update See www.boost.org comments
[SVN r16708]
2002-12-27 16:51:53 +00:00
Dave Abrahams
aa58e21bda Bug fix, thanks to "Daniel Paull" <dlp@fractaltechnologies.com> for
reporting it.


[SVN r16698]
2002-12-24 04:49:33 +00:00
Dave Abrahams
eac0412d18 Fixed comment
[SVN r16676]
2002-12-21 22:12:31 +00:00
Dave Abrahams
0c8aa84f2f Enable automatic downcasting to registered classes for pointers, references, and smart pointers
[SVN r16673]
2002-12-20 18:19:18 +00:00
Dave Abrahams
3d874d1618 Major simplification of from_python conversion avoids registering
converters for every class.


[SVN r16669]
2002-12-20 00:04:40 +00:00
Dave Abrahams
b8edd99dbd Fix typo thanks to "William Trenker" <wtrenker@hotmail.com>
[SVN r16657]
2002-12-18 21:12:02 +00:00
Dave Abrahams
0df5ebf0fa Fix to allow accessing enums as data members
[SVN r16656]
2002-12-18 21:11:16 +00:00
Dave Abrahams
809535b934 clarifications
[SVN r16655]
2002-12-18 21:09:15 +00:00
Dave Abrahams
854e957b78 Workaround for MacOS GCC problem:
#define B0 0


[SVN r16654]
2002-12-18 19:09:34 +00:00
Dave Abrahams
df24f29232 nonconformance workaround from Gottfried.Ganssauge@HAUFE.DE
[SVN r16653]
2002-12-18 17:56:42 +00:00
Joel de Guzman
14c7d9ab14 typo error __rsub__ to __sub__
[SVN r16641]
2002-12-18 01:23:21 +00:00
Dave Abrahams
0e36ac6b72 Bug fix with construction of std::exception
[SVN r16625]
2002-12-16 21:14:30 +00:00
Dave Abrahams
0d2cdbbdfe GCC-2.95.2 workarounds
[SVN r16620]
2002-12-16 04:01:50 +00:00
Dave Abrahams
48f9bee21e Fix typo due to "William Trenker" <wtrenker@hotmail.com>
[SVN r16619]
2002-12-16 03:30:34 +00:00
Dave Abrahams
dd8fc049ff update news
[SVN r16607]
2002-12-14 00:17:22 +00:00
Dave Abrahams
abd22f1273 Handle unsigned long values that don't fit in a long.
[SVN r16606]
2002-12-14 00:10:52 +00:00
Dave Abrahams
4a5817d8ba enum export
[SVN r16604]
2002-12-13 20:04:34 +00:00
Dave Abrahams
eab084c9a2 enum export
[SVN r16603]
2002-12-13 19:58:24 +00:00
Dave Abrahams
80ea2383a7 Fix references to test library
[SVN r16585]
2002-12-10 23:05:38 +00:00
Dave Abrahams
ec76fbe027 Apply fixes from Dirk Gerrits <dirk@gerrits.homeip.net>
[SVN r16517]
2002-12-04 17:10:55 +00:00
Dave Abrahams
c772038e77 Apply fixes from Dirk Gerrits <dirk@gerrits.homeip.net>
[SVN r16506]
2002-12-04 13:36:03 +00:00
Dave Abrahams
59b1a8e71c Apply fixes from Dirk Gerrits <dirk@gerrits.homeip.net>
[SVN r16491]
2002-12-03 18:08:12 +00:00
Dave Abrahams
83c38876fe Simplify, simplify!!
[SVN r16483]
2002-12-02 22:57:47 +00:00
Dave Abrahams
9163c40a1a Further suppressed internal structure overflow problems which were cropping up with msvc6/7.
[SVN r16482]
2002-12-02 19:41:45 +00:00
Dave Abrahams
8b79380977 Less-taxing version of MPL lambda support for msvc6/7
[SVN r16480]
2002-12-02 16:18:35 +00:00
Dave Abrahams
34c9d895c8 Relaxed rules for using scope()
[SVN r16476]
2002-12-02 14:29:11 +00:00
Dave Abrahams
bf8bb83ec5 initial commit
[SVN r16473]
2002-12-02 12:40:18 +00:00
Dave Abrahams
328697952f automatic shared_ptr from_python conversions
[SVN r16467]
2002-12-02 01:37:39 +00:00
Dave Abrahams
3c19b89d9a Added reset()
[SVN r16466]
2002-12-01 16:14:44 +00:00
Dave Abrahams
ae9f394906 Added reset()
[SVN r16465]
2002-12-01 16:07:54 +00:00
Dave Abrahams
8467f36b80 Kill errant `typename'
[SVN r16464]
2002-12-01 04:40:05 +00:00
Dave Abrahams
43a9571b2c Fixed some technical problems with smart pointer support uncovered by
STLPort's debug mode. Unfortunately, had to expand Dereferenceable
requirements.


[SVN r16459]
2002-11-29 22:43:27 +00:00
Dave Abrahams
bbef71dc7d Progress on embedding example for unix.
[SVN r16458]
2002-11-29 20:23:54 +00:00
Dave Abrahams
c4df3c6562 Bug fix
[SVN r16442]
2002-11-27 14:23:07 +00:00
Dave Abrahams
0ad3bfd0ab Finally fixed polymorphism issues
[SVN r16435]
2002-11-27 07:04:32 +00:00
Dave Abrahams
fb7c450b76 Added is_reference_to_member_function_pointer
[SVN r16434]
2002-11-27 06:19:45 +00:00
Dave Abrahams
3fc70519cf Use boost is_polymorphic trait
[SVN r16433]
2002-11-27 06:19:13 +00:00
Dave Abrahams
98c2bf8ff2 Restored some missing v1 acknowledgements
[SVN r16432]
2002-11-27 02:18:52 +00:00
Dave Abrahams
f9c8bf15bb Restore CWPro7.2 to health. Also improve source organization slightly
[SVN r16416]
2002-11-26 02:47:17 +00:00
Dave Abrahams
a7e19ffb0b Refactored def() logic; moved assert_default_constructible into the
holder selectorbecause it was getting the wrong answer in some cases.


[SVN r16415]
2002-11-26 01:06:41 +00:00
Dave Abrahams
7609a1c7c6 Refactored; added static assertions against the specification of a default implementation
[SVN r16414]
2002-11-25 22:03:42 +00:00
Dave Abrahams
087e2d6e35 Add additional argument for default implementation of virtual functions
Fully commented


[SVN r16413]
2002-11-25 21:57:23 +00:00
Dave Abrahams
bb7710a5a2 Suppress GCC warning
[SVN r16412]
2002-11-25 21:19:35 +00:00
Dave Abrahams
0d582e0e79 Suppress GCC warning
[SVN r16411]
2002-11-25 20:54:37 +00:00
Dave Abrahams
3d0579cc08 Fix for VC7. For some reason lexical_cast doesn't seem to work out too
well. We'll need to be careful how we do type_info decoding once we
get the G++ fixes in.


[SVN r16410]
2002-11-25 20:52:49 +00:00
Dave Abrahams
352e390c7b Added tests for embedding demonstration
[SVN r16409]
2002-11-25 18:32:14 +00:00
Dave Abrahams
394037a127 updated
[SVN r16408]
2002-11-25 16:12:27 +00:00
Dave Abrahams
9d4e235cf6 add imul notes
[SVN r16397]
2002-11-25 03:41:34 +00:00
Dave Abrahams
cfbc1a6b48 Fully removed convertible() test from to_python converter protocol
Added tests for detecting unregistered classes when converting
indirectly to python.


[SVN r16396]
2002-11-25 01:57:57 +00:00
Dave Abrahams
31b8b58de9 CW workaround
[SVN r16393]
2002-11-24 21:45:09 +00:00
Dave Abrahams
a77a835694 New function invocation mechanism. This is the major groundwork for handling virtual functions with default implementations properly
[SVN r16390]
2002-11-24 03:26:28 +00:00
Dave Abrahams
dca5c5108b update
[SVN r16389]
2002-11-24 03:25:13 +00:00
Dave Abrahams
e14e4e156c New function invocation mechanism. This is the major groundwork for handling virtual functions with default implementations properly
[SVN r16388]
2002-11-24 02:43:24 +00:00
Dave Abrahams
05ce65d9d2 cleanup
[SVN r16387]
2002-11-23 22:31:13 +00:00
Dave Abrahams
b952e45036 Clip unneeded bind.hpp #include
[SVN r16386]
2002-11-23 22:30:48 +00:00
Dave Abrahams
4c630512fe Add missing add_const #include
[SVN r16385]
2002-11-23 22:18:23 +00:00
Dave Abrahams
0461d25de6 Add some qualification
[SVN r16384]
2002-11-23 22:16:55 +00:00
Dave Abrahams
2df120af72 Suppress a VC6 ICE
[SVN r16383]
2002-11-23 22:16:00 +00:00
Dave Abrahams
791b7e1a1b Tidy
[SVN r16381]
2002-11-23 20:03:49 +00:00
Dave Abrahams
f6f4e59473 Add notes about targeting Cygwin GCC
[SVN r16380]
2002-11-23 20:03:24 +00:00
Dave Abrahams
60924e82e2 On our way to polymorphism
[SVN r16374]
2002-11-23 02:59:45 +00:00
Dave Abrahams
75bd427b8e Bugfix
[SVN r16354]
2002-11-21 00:21:23 +00:00
Dave Abrahams
715118ce39 Bugfix
[SVN r16353]
2002-11-21 00:19:27 +00:00
Dave Abrahams
e3deb8275d update
[SVN r16351]
2002-11-20 23:07:32 +00:00
Dave Abrahams
c30e12f956 Make scope constructor explicit
[SVN r16350]
2002-11-20 22:58:57 +00:00
Ralf W. Grosse-Kunstleve
983b23db92 some missing html markup added
[SVN r16349]
2002-11-20 18:09:17 +00:00
Ralf W. Grosse-Kunstleve
ed2da9bedb list cctbx
[SVN r16348]
2002-11-20 18:01:44 +00:00
Dave Abrahams
409ff3c179 Added missing test
[SVN r16337]
2002-11-20 03:04:51 +00:00
Dave Abrahams
39eab72293 bugfixes
add_property now uses member_function_cast


[SVN r16335]
2002-11-20 01:14:16 +00:00
Dave Abrahams
71ea2bec86 more notes
[SVN r16330]
2002-11-19 17:39:40 +00:00
Dave Abrahams
c9af6ca94b Add missing copyright notices
[SVN r16329]
2002-11-19 17:39:17 +00:00
Dave Abrahams
72d5bac69f Add PSF copyright and change summary
[SVN r16327]
2002-11-19 16:56:55 +00:00
Dave Abrahams
6e0733afa2 Remove Tom's email address
[SVN r16315]
2002-11-19 01:33:07 +00:00
Dave Abrahams
e660cc50c6 Added Support link
[SVN r16299]
2002-11-17 05:59:12 +00:00
Dave Abrahams
e6b40f54cd initial commit
[SVN r16298]
2002-11-17 05:58:45 +00:00
Dave Abrahams
c2af21169d More notes
[SVN r16297]
2002-11-16 23:48:09 +00:00
Dave Abrahams
4f7af97f8c Bug fix thanks to Mark Russell <mrussell8081@pacbell.net>
[SVN r16296]
2002-11-16 23:23:45 +00:00
Dave Abrahams
57f54952c3 Bug fix thanks to Mark Russell <mrussell8081@pacbell.net>
[SVN r16295]
2002-11-16 23:22:30 +00:00
Dave Abrahams
b321b6d9db Tweaks, pseudocode
[SVN r16294]
2002-11-16 22:45:46 +00:00
Dave Abrahams
56c5227cf7 added note
[SVN r16293]
2002-11-16 22:28:28 +00:00
Dave Abrahams
ae2931ba1b initial commit
[SVN r16292]
2002-11-16 22:12:46 +00:00
Dave Abrahams
9e3589ec4d Added projects page link
[SVN r16290]
2002-11-16 20:50:21 +00:00
Dave Abrahams
61b7094dbd Added EMSolve entry
[SVN r16289]
2002-11-16 20:48:43 +00:00
Dave Abrahams
50ecc751d1 Added Fortress entry
[SVN r16288]
2002-11-16 20:39:56 +00:00
Dave Abrahams
bb536a0eaa One more step towards handling polymorphism: now we can sort out a 4th parameter
[SVN r16287]
2002-11-16 20:03:59 +00:00
Dave Abrahams
8b7527318d vc6/7 workaround
[SVN r16286]
2002-11-16 20:01:44 +00:00
Dave Abrahams
f2ac0145da is_reference_to_function_pointer implementation
[SVN r16278]
2002-11-16 06:55:04 +00:00
Dave Abrahams
06fe0f1bcc is_reference_to_function implementation
[SVN r16276]
2002-11-16 06:00:52 +00:00
Dave Abrahams
7ea2447246 Bug fix
[SVN r16273]
2002-11-16 03:38:24 +00:00
Dave Abrahams
0adf4477a3 vc7.1 workaround
[SVN r16267]
2002-11-16 00:45:26 +00:00
Dave Abrahams
b3311fd59d *** empty log message ***
[SVN r16266]
2002-11-15 22:19:40 +00:00
Dave Abrahams
ae109f13a2 *** empty log message ***
[SVN r16260]
2002-11-15 17:29:15 +00:00
Dave Abrahams
cb1901e111 initial commit
[SVN r16259]
2002-11-15 17:02:31 +00:00
Dave Abrahams
bbc052bedc Fix example
[SVN r16256]
2002-11-15 12:25:29 +00:00
Dave Abrahams
f2797ec262 Auto-detection of class memebers wrapped with make_getter()
[SVN r16241]
2002-11-14 17:41:13 +00:00
Dave Abrahams
a21727741f c1204 workaround documented
[SVN r16235]
2002-11-14 12:16:40 +00:00
Dave Abrahams
5f022269b1 Added News page, links back to top of docs
[SVN r16229]
2002-11-14 02:09:43 +00:00
Dave Abrahams
0e76fcf706 auto_ptr support
[SVN r16228]
2002-11-14 01:40:16 +00:00
Dave Abrahams
6b4dc2901d Fix broken link
[SVN r16227]
2002-11-13 22:56:41 +00:00
Dave Abrahams
bcf864fce3 Attempt to handle derived target types
[SVN r16224]
2002-11-13 17:22:48 +00:00
Dave Abrahams
0168d8fbc8 Be more explicit about the Cygwin stuff
[SVN r16215]
2002-11-12 19:36:19 +00:00
Dave Abrahams
88b1c1b926 Allow member pointers from base classes in def_readonly and
def_readwrite.


[SVN r16214]
2002-11-12 17:48:56 +00:00
Dave Abrahams
1f93827b63 Squash bogus warnings
[SVN r16196]
2002-11-11 13:49:09 +00:00
Dave Abrahams
8e3ba0bba3 Improve error messages
[SVN r16147]
2002-11-07 14:41:40 +00:00
Dave Abrahams
42a0441cb8 Doc fix from "Brett Calcott" <brett.calcott@paradise.net.nz>
[SVN r16145]
2002-11-07 13:12:05 +00:00
Joel de Guzman
7b091b86d2 tutorial tweaks
[SVN r16004]
2002-10-28 08:30:31 +00:00
Dave Abrahams
f346eaf693 grammar fix
[SVN r16001]
2002-10-28 07:33:01 +00:00
Dave Abrahams
038be89766 Build with Cygwin
[SVN r16000]
2002-10-28 04:22:14 +00:00
Dave Abrahams
a682dd9362 Fix a doc bug
[SVN r15981]
2002-10-25 04:47:39 +00:00
Joel de Guzman
387e8aadc6 changes to no_init and deriving classes
[SVN r15979]
2002-10-24 21:33:40 +00:00
Joel de Guzman
da273519fd added non_copyable to second version of class_<Base, BaseWrap...
[SVN r15978]
2002-10-24 21:12:37 +00:00
Joel de Guzman
8c2d6bb31b correction Var-->Num
[SVN r15977]
2002-10-24 20:50:04 +00:00
Vladimir Prus
3cb4a029e0 Improve Boost.Python building.
* libs/python/build/Jamfile.v2: Sense the location of python headers. Export
  include paths.

* libs/python/example/Jamfile.v2: New file.

* new/targets.jam: Use refined properties for constructed
    dependency properties

* new/gcc.jam: Handle 'find-library'. Set soname for dynamic libraries.

* new/builtin.jam: New feature 'find-library'.


[SVN r15966]
2002-10-23 12:12:00 +00:00
Dave Abrahams
037f952136 Added funding credit
[SVN r15948]
2002-10-16 22:47:44 +00:00
Dave Abrahams
7fc441801d Allow embedded nulls in std::string <-> Python string conversions,
patch from greg Landrum <greglandrum@mindspring.com>.

Tests by Dave A.


[SVN r15945]
2002-10-16 20:24:38 +00:00
Dave Abrahams
c389e057b4 Added return_by_value, enhanced data member support to handle constant members
[SVN r15935]
2002-10-15 15:46:34 +00:00
Dave Abrahams
2c7829f50e initial checkin
[SVN r15930]
2002-10-15 11:59:39 +00:00
Dave Abrahams
0593074196 Patches to support Synopsis
[SVN r15906]
2002-10-12 15:37:34 +00:00
Dave Abrahams
c7626150fc Move final RC_1_29_0 changes back to trunk
[SVN r15877]
2002-10-10 18:11:14 +00:00
Dave Abrahams
f6990fedc7 Move final RC_1_29_0 changes back to trunk
[SVN r15875]
2002-10-10 18:09:46 +00:00
Dave Abrahams
adb02376eb Move final RC_1_29_0 changes back to trunk
[SVN r15872]
2002-10-10 18:05:51 +00:00
Dave Abrahams
65b6eb0c27 Move final RC_1_29_0 changes back to trunk
[SVN r15871]
2002-10-10 18:01:58 +00:00
Dave Abrahams
654354e681 GCC 2.96 bug workaround
[SVN r15864]
2002-10-10 15:59:12 +00:00
Joel de Guzman
f1a709e074 final tweaks
[SVN r15846]
2002-10-10 08:59:19 +00:00
Joel de Guzman
87b011e7e8 Python V1 Archive (tested)
[SVN r15845]
2002-10-10 07:31:08 +00:00
Joel de Guzman
6bb7c2d7b3 minor tweaks
[SVN r15844]
2002-10-10 07:28:03 +00:00
Joel de Guzman
7d9770762c more minor tweaks
[SVN r15843]
2002-10-10 07:27:10 +00:00
Joel de Guzman
df8c8f025c tweak
[SVN r15842]
2002-10-10 07:21:33 +00:00
Joel de Guzman
51264c30cc Typo...
[SVN r15841]
2002-10-10 07:18:22 +00:00
Joel de Guzman
1d5fb97981 Tutorial updates
[SVN r15840]
2002-10-10 07:13:17 +00:00
Joel de Guzman
a06540e471 grammar correction
[SVN r15835]
2002-10-10 00:08:37 +00:00
Dave Abrahams
f79dc1c2e7 Bug fix (thanks to Leonardo Rochael Almeida <leo@hiper.com.br>).
[SVN r15828]
2002-10-09 16:14:19 +00:00
Joel de Guzman
8a94c597a0 More tweaks (tutorial)
[SVN r15826]
2002-10-09 14:31:39 +00:00
Dave Abrahams
8a9a3a00bd Fix a major problem of path specification
[SVN r15825]
2002-10-09 13:18:26 +00:00
Dave Abrahams
8c8b4ee332 Fix up a small build specification problem
[SVN r15822]
2002-10-09 11:57:17 +00:00
Joel de Guzman
a295ac6590 Tutorials...
[SVN r15818]
2002-10-09 07:44:34 +00:00
Joel de Guzman
e49e0d2705 tutorial added
[SVN r15817]
2002-10-09 05:03:22 +00:00
Dave Abrahams
4fd20185e9 Clean up Boost.Python v1 flotsam, update documentation
[SVN r15815]
2002-10-09 02:52:47 +00:00
Dave Abrahams
920125794a Workaround GCC 3.x problem
[SVN r15790]
2002-10-07 19:23:08 +00:00
Dave Abrahams
ca6c28ed93 merge Joel's copyrights
[SVN r15772]
2002-10-07 13:42:55 +00:00
Dave Abrahams
e9757c46e3 *** empty log message ***
[SVN r15741]
2002-10-05 19:46:26 +00:00
Dave Abrahams
7e840acd19 Repair AIX build
[SVN r15740]
2002-10-05 19:31:43 +00:00
Dave Abrahams
6f76db9c6c quick bug fix
[SVN r15738]
2002-10-05 17:42:34 +00:00
Dave Abrahams
86489dd5a7 Make AIX work again
[SVN r15737]
2002-10-05 17:29:32 +00:00
Dave Abrahams
33f139e516 Patches for CWPro8.3
[SVN r15735]
2002-10-05 16:45:37 +00:00
Dave Abrahams
30d9331079 Remove Boost.Python v1 from main trunk
[SVN r15723]
2002-10-05 04:37:49 +00:00
Dave Abrahams
8207dc756a Workaround for IRIX CC
[SVN r15722]
2002-10-05 00:23:10 +00:00
Dave Abrahams
1887594d8a Bug fix
[SVN r15721]
2002-10-04 23:27:35 +00:00
Dave Abrahams
ee17b41e62 Clean up module flotsam
[SVN r15720]
2002-10-04 21:58:21 +00:00
Dave Abrahams
5e8d775b87 Support for MinGW-2.0
[SVN r15719]
2002-10-04 21:34:32 +00:00
Dave Abrahams
f4d457998f doc update
[SVN r15709]
2002-10-04 14:24:25 +00:00
Dave Abrahams
bd0175c167 Backport to Python 2.2
[SVN r15706]
2002-10-04 13:05:57 +00:00
Dave Abrahams
81ffe96c76 Update Tru64 workarounds
[SVN r15705]
2002-10-04 05:14:45 +00:00
Dave Abrahams
e5fbe651d8 Tru64 CXX updates
[SVN r15704]
2002-10-04 03:46:43 +00:00
Dave Abrahams
a91112e5d9 doc update
[SVN r15702]
2002-10-04 00:45:29 +00:00
Dave Abrahams
2b5f421501 Remove needless specialization
[SVN r15701]
2002-10-03 23:59:08 +00:00
Dave Abrahams
ecd7905e8f doc update
[SVN r15697]
2002-10-03 23:21:48 +00:00
Dave Abrahams
8f989f318b doc update
[SVN r15684]
2002-10-03 20:59:43 +00:00
Dave Abrahams
7b9dad44d1 doc update
[SVN r15683]
2002-10-03 20:18:53 +00:00
Dave Abrahams
f5eab48017 doc update
[SVN r15682]
2002-10-03 18:54:19 +00:00
Dave Abrahams
66ff762fbb doc update
[SVN r15681]
2002-10-03 18:40:58 +00:00
Dave Abrahams
2bdd01d084 doc update
[SVN r15680]
2002-10-03 18:20:06 +00:00
Dave Abrahams
2bdc4cdffa doc update
[SVN r15679]
2002-10-03 16:49:55 +00:00
Dave Abrahams
90a6d484b7 doc update
[SVN r15675]
2002-10-03 14:53:32 +00:00
Dave Abrahams
021aa51707 doc update
[SVN r15674]
2002-10-03 14:07:13 +00:00
Dave Abrahams
48fffd7a7b doc update
[SVN r15667]
2002-10-03 13:09:24 +00:00
Ralf W. Grosse-Kunstleve
17033037eb explains that enable_pickling() is an implementation detail
[SVN r15666]
2002-10-03 12:41:22 +00:00
Ralf W. Grosse-Kunstleve
f43b913302 reference doc for .def_pickle()
[SVN r15665]
2002-10-03 12:41:12 +00:00
Aleksey Gurtovoy
f7b087ed8f get rid of leftover MPL includes
[SVN r15664]
2002-10-03 09:28:47 +00:00
Aleksey Gurtovoy
8cecbe31a7 fix for empty type_list problem
[SVN r15663]
2002-10-03 09:23:27 +00:00
Dave Abrahams
f2055b0d80 doc update
[SVN r15654]
2002-10-02 20:33:14 +00:00
Dave Abrahams
28e5bedf49 doc update
[SVN r15647]
2002-10-02 12:00:22 +00:00
Dave Abrahams
f8a9b922be *** empty log message ***
[SVN r15645]
2002-10-02 11:20:56 +00:00
Dave Abrahams
2a199af8f7 doc update
[SVN r15641]
2002-10-01 23:03:09 +00:00
Dave Abrahams
2373020225 doc update
[SVN r15639]
2002-10-01 22:48:24 +00:00
Dave Abrahams
e13d09242c doc update
[SVN r15621]
2002-10-01 17:22:26 +00:00
Dave Abrahams
09eba4c38f Separate init.hpp docs from class.hpp
[SVN r15616]
2002-10-01 15:12:46 +00:00
Dave Abrahams
2aa23a317d separate overloads.hpp
BOOST_PYTHON_MODULE_INIT -> BOOST_PYTHON_MODULE


[SVN r15615]
2002-10-01 15:08:08 +00:00
Dave Abrahams
5cd513859d separate overloads.hpp
BOOST_PYTHON_MODULE_INIT -> BOOST_PYTHON_MODULE


[SVN r15609]
2002-10-01 14:40:41 +00:00
Joel de Guzman
c6cba55667 Placed the non-void and void stub structs inside the main stub struct.
[SVN r15597]
2002-10-01 03:55:54 +00:00
Dave Abrahams
65ce6ddf1d doc update
[SVN r15596]
2002-10-01 03:45:33 +00:00
Dave Abrahams
fa7b1404c1 Bugfix
[SVN r15595]
2002-10-01 03:44:51 +00:00
Dave Abrahams
61b528c85d doc update
[SVN r15593]
2002-10-01 01:16:25 +00:00
Dave Abrahams
77b1b247c4 doc updates
[SVN r15577]
2002-09-30 22:05:20 +00:00
Dave Abrahams
a06430c5fa doc updates
[SVN r15573]
2002-09-30 17:40:47 +00:00
Dave Abrahams
0e38aa7f37 doc updates
[SVN r15571]
2002-09-30 16:52:57 +00:00
Dave Abrahams
707ce53c16 Bugfix
[SVN r15563]
2002-09-30 03:35:53 +00:00
Dave Abrahams
19982e5551 doc update
[SVN r15562]
2002-09-29 20:40:33 +00:00
Dave Abrahams
170bbea166 doc update
[SVN r15561]
2002-09-29 20:30:17 +00:00
Dave Abrahams
6b5ea675c3 doc update
[SVN r15559]
2002-09-29 20:18:04 +00:00
Dave Abrahams
d873aec9e6 doc update
[SVN r15557]
2002-09-29 19:15:53 +00:00
Dave Abrahams
0d1efb61e2 doc update
[SVN r15556]
2002-09-29 19:06:13 +00:00
Dave Abrahams
a27c2f7a80 doc update
[SVN r15555]
2002-09-29 18:47:48 +00:00
Dave Abrahams
36d85eb02e doc update
[SVN r15552]
2002-09-29 17:51:31 +00:00
Dave Abrahams
9ae0940e99 doc update
[SVN r15551]
2002-09-29 17:41:39 +00:00
Dave Abrahams
2f4e12916d doc update
[SVN r15550]
2002-09-29 16:26:04 +00:00
Dave Abrahams
c860d74cba doc update
[SVN r15549]
2002-09-29 16:17:52 +00:00
Dave Abrahams
8cd3e16e26 Documentation update
[SVN r15548]
2002-09-29 16:06:02 +00:00
Dave Abrahams
94063f7862 Keyword argument support tweak
[SVN r15544]
2002-09-29 03:25:04 +00:00
Dave Abrahams
a0ff708d29 Fixes for AIX
[SVN r15541]
2002-09-28 13:27:00 +00:00
Dave Abrahams
6bfbeb3dfa make minimal a more-useful test
[SVN r15540]
2002-09-28 13:26:12 +00:00
Dave Abrahams
3158d28264 Keyword argument support
[SVN r15534]
2002-09-28 07:48:27 +00:00
Dave Abrahams
997e84f117 Keyword argument support
[SVN r15533]
2002-09-28 07:35:15 +00:00
Dave Abrahams
bc91db64d7 PP optimization
[SVN r15528]
2002-09-26 13:21:19 +00:00
Dave Abrahams
82ef6ec659 more .IRIX workarounds
[SVN r15527]
2002-09-26 13:09:57 +00:00
Dave Abrahams
374b55be8a IRIX workarounds, eliminate dead header
[SVN r15526]
2002-09-26 12:13:47 +00:00
Dave Abrahams
72e1c1a7f6 bugfix
[SVN r15525]
2002-09-26 12:00:04 +00:00
Dave Abrahams
173021377e Restore msvc-stlport workaround
[SVN r15522]
2002-09-26 03:29:59 +00:00
Dave Abrahams
17879958ca NumPy (Numeric and numarray) support
[SVN r15521]
2002-09-26 00:16:16 +00:00
Dave Abrahams
31a8be0434 Patches for Intel C++ 7.0 beta
[SVN r15520]
2002-09-26 00:15:36 +00:00
Dave Abrahams
87d619e02a fixup comments
[SVN r15519]
2002-09-26 00:15:09 +00:00
Dave Abrahams
f4aa72373b Serious bugfix
[SVN r15518]
2002-09-26 00:11:30 +00:00
Ralf W. Grosse-Kunstleve
3cb9ecae78 workaround for MIPSpro compiler bug is now in boost/function/function_base.hpp
[SVN r15517]
2002-09-25 20:04:34 +00:00
Joel de Guzman
88caf4f5b6 added missing typename
[SVN r15471]
2002-09-21 08:01:24 +00:00
Joel de Guzman
a75ee50533 Removed def_init(...) from class_
[SVN r15468]
2002-09-21 02:50:29 +00:00
Dave Abrahams
8e941417a5 Workaround slow Windows Intel C++ debug symbol generation
[SVN r15452]
2002-09-19 16:11:34 +00:00
Dave Abrahams
e8d2bbd2c9 VC6 fixes
[SVN r15438]
2002-09-18 13:24:15 +00:00
Dave Abrahams
065a53b997 Apply more preprocessor optimizations
[SVN r15435]
2002-09-18 04:54:31 +00:00
Dave Abrahams
ca5a222aec quickie bugfix
[SVN r15433]
2002-09-18 04:07:20 +00:00
Dave Abrahams
4320c73336 Apply more preprocessor optimizations
[SVN r15432]
2002-09-18 04:05:32 +00:00
Dave Abrahams
7f98265272 Merge Joel's changes to trunk!
[SVN r15430]
2002-09-18 02:20:39 +00:00
Dave Abrahams
0b75a8e94e Adjust version number for old EDG workaround
[SVN r15421]
2002-09-17 20:43:46 +00:00
Dave Abrahams
eb3e237e47 Added a compile-only test for functions returning non-const references
[SVN r15420]
2002-09-17 20:36:17 +00:00
Dave Abrahams
b1796c0acb Work around recent changes to bind which cause bound data members to be returned by const&
[SVN r15417]
2002-09-17 19:32:50 +00:00
Dave Abrahams
bff10e5711 Suppress warnings for old EDGs
[SVN r15415]
2002-09-17 17:37:59 +00:00
Dave Abrahams
0f559f3f97 Older EDG workaround
[SVN r15397]
2002-09-17 03:55:29 +00:00
Dave Abrahams
34aead4d49 Older EDG workaround
[SVN r15396]
2002-09-17 03:47:10 +00:00
Dave Abrahams
7cc01e155c Kill extra ;
[SVN r15395]
2002-09-17 02:05:11 +00:00
Dave Abrahams
7fe5fb92b4 Patch for KCC bug
[SVN r15381]
2002-09-16 15:26:20 +00:00
Dave Abrahams
b084f8a616 Restore main trunk to health
[SVN r15378]
2002-09-16 12:46:26 +00:00
Dave Abrahams
802a2f3fdb Restore main trunk to health
[SVN r15362]
2002-09-16 04:15:53 +00:00
Dave Abrahams
06f6f2ff21 Restore main trunk to health
[SVN r15359]
2002-09-16 04:03:39 +00:00
Joel de Guzman
b37198106d Changed args<...> to init<...> and changed class_(no_init) to class_("name", no_init)
[SVN r15345]
2002-09-15 21:42:49 +00:00
Joel de Guzman
604928adc4 new API changes
[SVN r15344]
2002-09-15 21:13:12 +00:00
Dave Abrahams
4a6762540d bugfix
[SVN r15324]
2002-09-14 16:19:22 +00:00
Dave Abrahams
af5176be70 msvc6 (with STLPort) workaround
[SVN r15316]
2002-09-14 02:04:17 +00:00
Dave Abrahams
482006ed1a Roll workaround forward to CWPro8.2 release
[SVN r15314]
2002-09-13 23:55:46 +00:00
Dave Abrahams
5923e20b7e Roll back MinGW 2.0 "fix" that still doesn't work, and breaks MSVC6.
[SVN r15313]
2002-09-13 22:57:04 +00:00
Ralf W. Grosse-Kunstleve
14cca4610b workaround for older EDG compilers (IRIX CC)
[SVN r15292]
2002-09-13 05:46:46 +00:00
Dave Abrahams
2dbb0093c1 PP usage speedups (mostly for EDG)
[SVN r15286]
2002-09-13 01:48:50 +00:00
Dave Abrahams
d91b6e9a1b Compile (but still can't link) with MinGW-2.0 (GCC-3.2)
[SVN r15285]
2002-09-12 23:58:15 +00:00
Dave Abrahams
ada55bd9e2 mpl_v2 branch checkin
[SVN r15258]
2002-09-11 05:35:41 +00:00
Ralf W. Grosse-Kunstleve
5113de875e work around broken Python 2.2 include files
[SVN r15246]
2002-09-09 21:58:15 +00:00
Ralf W. Grosse-Kunstleve
e079006a4b work around broken Tru64/cxx offsetof macro
[SVN r15245]
2002-09-09 21:55:14 +00:00
uid30600
07561794e9 Fix missing declaration problem
[SVN r15243]
2002-09-09 20:31:51 +00:00
uid30600
75a0da31fb Reduce header interdependencies
[SVN r15242]
2002-09-09 20:05:17 +00:00
Dave Abrahams
33ee2a43c5 initial commit
[SVN r15238]
2002-09-09 17:17:59 +00:00
Dave Abrahams
dcb6a88c63 *** empty log message ***
[SVN r15233]
2002-09-09 11:37:30 +00:00
Dave Abrahams
eeda822196 Workaround broken BOOST_PP_ENUM on GCC
[SVN r15228]
2002-09-09 04:14:31 +00:00
Dave Abrahams
060f59daa8 Fix declaration bug
Workaround broken MSVC6 stdlib


[SVN r15227]
2002-09-09 03:35:05 +00:00
Dave Abrahams
4117614861 Workaround MSVC6 bug
[SVN r15226]
2002-09-09 03:34:01 +00:00
Dave Abrahams
e76440e940 Work around PP lib bug with GCC
[SVN r15225]
2002-09-09 03:03:39 +00:00
Joel de Guzman
f8490a8850 Fixed init<...> bug where there are no default arguments. Added a test case for this.
[SVN r15224]
2002-09-09 02:36:54 +00:00
Dave Abrahams
ee1cc99c65 Added support for enums
[SVN r15223]
2002-09-09 02:24:41 +00:00
Dave Abrahams
dcf7e7cf0c Added support for enums
[SVN r15222]
2002-09-09 02:00:53 +00:00
Dave Abrahams
4c8bcd918b cope with recent PP lib changes
[SVN r15221]
2002-09-09 01:59:45 +00:00
Paul Mensonides
a26bb0390d BOOST_PP_LINE inclusion
[SVN r15218]
2002-09-08 23:20:16 +00:00
Paul Mensonides
26a0df8253 pp-lib update
[SVN r15214]
2002-09-08 22:03:22 +00:00
Dave Abrahams
526d99f832 Embed C++ objects directly in Python objects
[SVN r15192]
2002-09-07 04:44:17 +00:00
Joel de Guzman
acbb5be6ab Added call policies to def(init<...>) and added tests to see that the call policies is working in default.cpp
[SVN r15191]
2002-09-07 01:35:42 +00:00
Joel de Guzman
522a29241b added call policies to the default stubs.
[SVN r15190]
2002-09-06 23:11:09 +00:00
Ralf W. Grosse-Kunstleve
b8d3c84d3c macro names changed to be more self-documenting
[SVN r15172]
2002-09-05 23:31:30 +00:00
Ralf W. Grosse-Kunstleve
9d520877d1 adjustment for IRIX CC; also tested with gcc 3.0.4, VC7, cxx 6.5
[SVN r15168]
2002-09-05 14:00:57 +00:00
Ralf W. Grosse-Kunstleve
5cda0581cd bug fix (IRIX CC diagnostics)
[SVN r15167]
2002-09-05 13:59:46 +00:00
Joel de Guzman
ce2e9de6fb fixed case where function has all default arguments, also added a test in defaults.cpp
[SVN r15165]
2002-09-04 23:51:24 +00:00
Joel de Guzman
4d53fb97b6 update to defaults gen that fixes member functions with zero arguments (added a test in defaults.cpp)
[SVN r15162]
2002-09-04 22:36:05 +00:00
Joel de Guzman
d274a8395b pardon, wrong commit. one more try. sorry.
[SVN r15161]
2002-09-04 22:10:37 +00:00
Joel de Guzman
ba86f516d8 Fixed case where member function has no arguments.
[SVN r15160]
2002-09-04 21:58:21 +00:00
Joel de Guzman
ac02c763c7 Fixed to workaround init<...> only for intel compilers
[SVN r15157]
2002-09-04 16:28:24 +00:00
Ralf W. Grosse-Kunstleve
7407a6b144 use def_init() for compilers that don't support init<... optional<...> >; with this all tru64_cxx test pass; (I know this is not testing the default argument support, but a failing test isn't very inspiring for others, and the addition shows people what the alternative is.)
[SVN r15154]
2002-09-04 07:33:35 +00:00
Dave Abrahams
0453e05bb2 Suppress private inheritance warning
[SVN r15148]
2002-09-03 18:30:18 +00:00
Dave Abrahams
946a93164a Remove colliding "MAX" macro
[SVN r15147]
2002-09-03 18:23:13 +00:00
Dave Abrahams
fe02cae4f7 Add missing #include
[SVN r15146]
2002-09-03 18:20:59 +00:00
Dave Abrahams
5762eb9b33 Add missing #include
[SVN r15145]
2002-09-03 16:57:17 +00:00
Dave Abrahams
73ffc4a13f Support for free-function def() invocation (no module object)
Fix bugs relying on initialization of objects in the Python DLL


[SVN r15142]
2002-09-03 13:20:08 +00:00
Dave Abrahams
865ef2ab7f Support for free-function def() invocation (no module object)
Fix bugs relying on initialization of objects in the Python DLL


[SVN r15139]
2002-09-03 05:51:15 +00:00
Dave Abrahams
7d35ed4eda Move converter registration from body of individual Holder classes to
select_holder implementation, which prevents Holder instantiation in
case the class being wrapped is abstract.


[SVN r15138]
2002-09-03 05:48:20 +00:00
Dave Abrahams
ec3cc6abe8 Implemented less-liberal conversion rules
[SVN r15136]
2002-09-02 23:23:27 +00:00
Joel de Guzman
6f7957fd40 Fixed G++ bug that complains of specialization provided after instantiation.
[SVN r15112]
2002-08-30 09:05:00 +00:00
Ralf W. Grosse-Kunstleve
ec4de3326e bug fix: return type of __getstate__ may be any type
[SVN r15106]
2002-08-28 05:42:38 +00:00
Joel de Guzman
f030618d19 Initial speedup for EDG for the stub functions. The init<...> stuff is more involved...
[SVN r15097]
2002-08-26 15:09:33 +00:00
Ralf W. Grosse-Kunstleve
5bcb9010f6 mention cPickle
[SVN r15085]
2002-08-25 03:04:20 +00:00
Dave Abrahams
780fff70c4 Removed unused bool_type
[SVN r15084]
2002-08-24 18:19:35 +00:00
Dave Abrahams
1d94d7e604 Added missing typename
[SVN r15082]
2002-08-24 16:52:19 +00:00
Dave Abrahams
a6cac2886b Work around a CWPro7.2 bug with ?:
[SVN r15076]
2002-08-24 02:48:53 +00:00
Dave Abrahams
2566b8732e Remove extra semicolon
[SVN r15074]
2002-08-23 23:54:35 +00:00
Joel de Guzman
d4c50383af Got init<..> working
[SVN r15073]
2002-08-23 23:30:29 +00:00
Ralf W. Grosse-Kunstleve
1ee7bd2a60 a few refinements
[SVN r15072]
2002-08-23 22:34:05 +00:00
Joel de Guzman
0bbfa9b483 removed signature<...> and updated defaults.cpp test
[SVN r15071]
2002-08-23 21:00:31 +00:00
Ralf W. Grosse-Kunstleve
2cad1b3d93 revised pickle tutorial
[SVN r15070]
2002-08-23 19:27:38 +00:00
Dave Abrahams
bcaa1043ea More smart pointer handling
[SVN r15069]
2002-08-23 18:07:27 +00:00
Dave Abrahams
0b33d1800d automatic conversion to object for add_property()
[SVN r15065]
2002-08-23 04:15:37 +00:00
Dave Abrahams
946942214f Some simplifications
[SVN r15064]
2002-08-22 20:23:27 +00:00
Dave Abrahams
cd6476e487 Allow different arguments to setstate
[SVN r15063]
2002-08-22 20:22:05 +00:00
Dave Abrahams
0b02fd4e99 Use make_tuple()
[SVN r15062]
2002-08-22 19:08:16 +00:00
Dave Abrahams
d779a94cfb obsoleted
[SVN r15060]
2002-08-22 18:22:35 +00:00
Ralf W. Grosse-Kunstleve
2f89a8eb58 additional tests for X::foo
[SVN r15056]
2002-08-22 15:23:25 +00:00
Dave Abrahams
26d3375900 Added make_tuple() tests
[SVN r15055]
2002-08-22 13:57:12 +00:00
Dave Abrahams
b06e8c3022 Qualified boost::make_tuple to avoid conflicts
[SVN r15054]
2002-08-22 13:51:10 +00:00
Dave Abrahams
8a20f8b2da Simplify code by taking advantage of high-level object() facilities
[SVN r15053]
2002-08-22 13:50:28 +00:00
Dave Abrahams
e1099e9370 Added make_tuple
[SVN r15052]
2002-08-22 13:20:58 +00:00
Dave Abrahams
68c8901c2a Metrowerks workaround
[SVN r15051]
2002-08-22 13:18:36 +00:00
Joel de Guzman
cfb1aebf66 + Added Ralf's test code
+ Fixed defaults_gen MACRO generation
+ Fixed signature for const member functions


[SVN r15047]
2002-08-22 05:23:45 +00:00
Dave Abrahams
e4f54bd53a Strip out overstrike junk
[SVN r15040]
2002-08-21 18:46:14 +00:00
Dave Abrahams
30ea4dd46e idiomatic cleanup
[SVN r15032]
2002-08-21 15:19:06 +00:00
Dave Abrahams
d5c33a203d simplify
[SVN r15030]
2002-08-21 15:15:13 +00:00
Joel de Guzman
087c09cc65 VC6 Workaronds (cleanup)
[SVN r15027]
2002-08-21 13:47:02 +00:00
Joel de Guzman
a9bb2a017e VC6 workarounds
[SVN r15026]
2002-08-21 13:46:16 +00:00
Dave Abrahams
8a049b8ee7 Added missing &
[SVN r15023]
2002-08-21 12:20:26 +00:00
Dave Abrahams
37efd93725 Bug fix
[SVN r15021]
2002-08-21 05:42:21 +00:00
Dave Abrahams
3e61803e89 simplification
[SVN r15020]
2002-08-21 01:48:03 +00:00
Dave Abrahams
3173d88f3f dump help without prompting
[SVN r15019]
2002-08-21 01:47:48 +00:00
Dave Abrahams
f96a898c51 VC6 fixups
[SVN r15018]
2002-08-21 01:46:03 +00:00
Joel de Guzman
d66b79f468 added defaults test from v2-dev branch
[SVN r15017]
2002-08-21 00:04:06 +00:00
Joel de Guzman
b7e300d155 latest signature
[SVN r15010]
2002-08-20 21:35:37 +00:00
Dave Abrahams
4bd680cec8 VC6 workaround
[SVN r15009]
2002-08-20 21:15:54 +00:00
Joel de Guzman
78ae892db6 Committed the defaults stuff
(integrated from v2-dev branch)


[SVN r15008]
2002-08-20 21:09:59 +00:00
Dave Abrahams
d748e371e5 CWPro7 workaround
[SVN r15006]
2002-08-20 20:56:42 +00:00
Joel de Guzman
6bdc89252e Update (added init.hpp)
[SVN r15005]
2002-08-20 20:36:25 +00:00
Dave Abrahams
c104f0167f VC7.1 alpha adjustments
[SVN r15003]
2002-08-20 19:22:14 +00:00
Dave Abrahams
6e3c6d1ba8 CWPro8.1 patch
[SVN r15000]
2002-08-20 16:58:48 +00:00
Dave Abrahams
b77262ba13 Added nested class test
[SVN r14980]
2002-08-20 00:41:17 +00:00
Beman Dawes
960ebb13db init commit
[SVN r14977]
2002-08-19 23:29:18 +00:00
Dave Abrahams
1a7b331a4b Take advantage of independent class_<> definitions everywhere.
[SVN r14976]
2002-08-19 22:21:03 +00:00
Dave Abrahams
3092e07281 Workaround VC6 bug
[SVN r14975]
2002-08-19 22:19:50 +00:00
Dave Abrahams
a5d53d1ac8 new class_<> objects are always added to the current scope
[SVN r14964]
2002-08-19 20:14:33 +00:00
Dave Abrahams
3c5df28101 Bug fix for NULL pointers with return_internal_reference<>.
[SVN r14952]
2002-08-19 15:19:08 +00:00
Dave Abrahams
49e071d363 Bug fix from Martin Casado (casado2@llnl.gov)
[SVN r14857]
2002-08-14 21:09:26 +00:00
Dave Abrahams
6e06ff048d Automatic class def_init(), abstract class __init__ errors
Fixed line endings
Suppressed warnings


[SVN r14828]
2002-08-14 06:26:33 +00:00
Dave Abrahams
c5ee39f54b Bug fix
[SVN r14803]
2002-08-13 05:07:50 +00:00
Dave Abrahams
f7b1e4ec09 Unit test adjustments
[SVN r14802]
2002-08-13 04:25:23 +00:00
Dave Abrahams
e6830b2c19 Add dependency on test_exec_monitor
[SVN r14801]
2002-08-13 03:06:00 +00:00
Dave Abrahams
fe3cf386c3 Python->C++ exception translation
[SVN r14800]
2002-08-13 00:45:09 +00:00
Dave Abrahams
0a6a213891 Added a test for add_property
[SVN r14799]
2002-08-13 00:43:51 +00:00
817 changed files with 57319 additions and 39730 deletions

42
Jamfile
View File

@@ -1,42 +0,0 @@
subproject libs/python ;
# bring in the rules for python
SEARCH on <module@>python.jam = $(BOOST_BUILD_PATH) ;
include <module@>python.jam ;
local bpl-ldflags ;
if $(UNIX) && ( $(OS) = AIX )
{
bpl-linkflags = <linkflags>"-e initlibbpl" ;
}
dll bpl
:
src/list.cpp
src/long.cpp
src/dict.cpp
src/tuple.cpp
src/str.cpp
src/aix_init_module.cpp
src/converter/from_python.cpp
src/converter/registry.cpp
src/converter/type_id.cpp
src/object/class.cpp
src/object/function.cpp
src/object/inheritance.cpp
src/object/life_support.cpp
src/object/pickle_support.cpp
src/errors.cpp
src/module.cpp
src/converter/builtin_converters.cpp
src/converter/arg_to_python_base.cpp
src/object/iterator.cpp
src/object_protocol.cpp
src/object_operators.cpp
:
$(BOOST_PYTHON_V2_PROPERTIES)
<define>BOOST_PYTHON_SOURCE
$(bpl-linkflags)
;

View File

@@ -1,173 +0,0 @@
# (C) Copyright David Abrahams 2001. Permission to copy, use, modify, sell and
# distribute this software is granted provided this copyright notice appears
# in all copies. This software is provided "as is" without express or implied
# warranty, and with no claim as to its suitability for any purpose.
#
# Boost.Python build and test Jamfile
#
# To run all tests quietly: jam test
# To run all tests with verbose output: jam -sPYTHON_TEST_ARGS=-v test
#
# Declares the following targets:
# 1. libboost_python.dll/.so, a dynamic library to be linked with all
# Boost.Python modules
#
# 2. pairs of test targets of the form <name>.test and <name>.run
# <name>.test runs the test when it is out-of-date, and the "test"
# pseudotarget depends on it. <name>.run runs
# a test unconditionally, and can be used to force a test to run.. Each
# test target builds one or more Boost.Python modules and runs a Python
# script to test them. The test names are:
#
# from ../test
#
# comprehensive - a comprehensive test of Boost.Python features
#
# from ../example:
# abstract -
# getting_started1 -
# getting_started2 -
# simple_vector -
# do_it_yourself_convts -
# pickle1 -
# pickle2 -
# pickle3 -
#
# dvect1 -
# dvect2 -
# ivect1 -
# ivect2 -
# noncopyable -
#
# subproject-specific environment/command-line variables:
#
# PYTHON - How to invoke the Python interpreter. Defaults to "python"
#
# PYTHON_ROOT - Windows only: where Python is installed. Defaults to "c:/tools/python"
#
# PYTHON_VERSION - Version of Python. Defaults to "2.1" on Windows, "1.5" on Unix
#
# PYTHON_TEST_ARGS - specifies arguments to be passed to test scripts on
# the command line. "-v" can be useful if you want to
# see the output of successful tests.
#
# PYTHON_VECT_ITERATIONS - specifies the number of test iterations to use for
# the dvect and ivect tests above.
# declare the location of this subproject relative to the root
subproject libs/python/build ;
# bring in the rules for python
SEARCH on <module@>python.jam = $(BOOST_BUILD_PATH) ;
include <module@>python.jam ;
# This nasty hack works with versions of Python 1.5.2 -> 2.2 to avoid
# building any Python stuff if there's no installation.
SEARCH on <find-python-install>__init__.py = $(PYTHON_STDLIB_PATH)/test $(SUBDIR) ;
include <find-python-install>__init__.py ;
if ! $(gNO_PYTHON_INSTALL)
{
local PYTHON_PROPERTIES = $(PYTHON_PROPERTIES) <define>BOOST_PYTHON_DYNAMIC_LIB ;
#######################
rule bpl-test ( test-name : sources + )
{
boost-python-test $(test-name) : $(sources) <dll>boost_python ;
}
#######################
#
# Declare the boost python static link library
#
# Base names of the source files for libboost_python
local CPP_SOURCES =
types classes conversions extension_class functions
init_function module_builder objects cross_module errors
;
lib boost_python_static : ../src/$(CPP_SOURCES).cpp
# requirements
: $(BOOST_PYTHON_INCLUDES)
<shared-linkable>true
<define>BOOST_PYTHON_STATIC_LIB=1
[ difference $(PYTHON_PROPERTIES) : <define>BOOST_PYTHON_DYNAMIC_LIB ]
: <suppress>true # don't build this unless the user asks for it by name
;
dll boost_python
# $(SUFDLL[1])
: ../src/$(CPP_SOURCES).cpp
# requirements
: $(BOOST_PYTHON_INCLUDES)
<shared-linkable>true
<runtime-link>dynamic
$(PYTHON_PROPERTIES)
;
stage bin-stage : <dll>boost_python
:
<tag><debug>"_debug"
<tag><debug-python>"_pydebug"
:
debug release
;
############# comprehensive module and test ###########
bpl-test boost_python_test
: ../test/comprehensive.cpp ;
boost-python-runtest comprehensive
: ../test/comprehensive.py <pyd>boost_python_test <dll>boost_python ;
############# simple tests from ../example ############
rule boost-python-example-runtest ( name )
{
bpl-test $(name)
: ../example/$(name).cpp ;
boost-python-runtest $(name)
: ../example/test_$(name).py <pyd>$(name) <dll>boost_python ;
}
boost-python-example-runtest abstract ;
boost-python-example-runtest getting_started1 ;
boost-python-example-runtest getting_started2 ;
boost-python-example-runtest simple_vector ;
boost-python-example-runtest do_it_yourself_convts ;
boost-python-example-runtest pickle1 ;
boost-python-example-runtest pickle2 ;
boost-python-example-runtest pickle3 ;
bpl-test ivect : ../example/ivect.cpp ;
bpl-test dvect : ../example/dvect.cpp ;
bpl-test noncopyable_export : ../example/noncopyable_export.cpp ;
bpl-test noncopyable_import : ../example/noncopyable_import.cpp ;
############## cross-module tests from ../example ##########
# A simple rule to build a test which depends on multiple modules in the PYTHONPATH
rule boost-python-multi-example-runtest ( test-name : modules + )
{
boost-python-runtest $(test-name)
: ../example/tst_$(test-name).py <pyd>$(modules) <dll>boost_python
: : : $(PYTHON_VECT_ITERATIONS) ;
}
PYTHON_VECT_ITERATIONS ?= 10 ;
boost-python-multi-example-runtest dvect1 : ivect dvect ;
boost-python-multi-example-runtest dvect2 : ivect dvect ;
boost-python-multi-example-runtest ivect1 : ivect dvect ;
boost-python-multi-example-runtest ivect2 : ivect dvect ;
boost-python-multi-example-runtest
noncopyable : noncopyable_import noncopyable_export ;
}

94
build/Jamfile.v2 Normal file
View File

@@ -0,0 +1,94 @@
# Copyright David Abrahams 2001-2006. Distributed under the Boost
# Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
import os ;
import modules ;
import python ;
if ! [ python.configured ] && ! ( --without-python in [ modules.peek : ARGV ] )
{
# Attempt default configuration of python
import toolset : using ;
using python ;
if ! [ python.configured ]
{
ECHO "WARNING: No python installation configured and autoconfiguration" ;
ECHO " failed. See http://www.boost.org/libs/python/doc/building.html" ;
ECHO " for configuration instructions or pass --without-python to" ;
ECHO " suppress this message and silently skip all Boost.Python targets" ;
}
}
project boost/python
: source-location ../src
;
rule cond ( test ? : yes * : no * ) { if $(test) { return $(yes) ; } else { return $(no) ; } }
rule unless ( test ? : yes * : no * ) { if ! $(test) { return $(yes) ; } else { return $(no) ; } }
lib boost_python
: # sources
numeric.cpp
list.cpp
long.cpp
dict.cpp
tuple.cpp
str.cpp
slice.cpp
converter/from_python.cpp
converter/registry.cpp
converter/type_id.cpp
object/enum.cpp
object/class.cpp
object/function.cpp
object/inheritance.cpp
object/life_support.cpp
object/pickle_support.cpp
errors.cpp
module.cpp
converter/builtin_converters.cpp
converter/arg_to_python_base.cpp
object/iterator.cpp
object/stl_iterator.cpp
object_protocol.cpp
object_operators.cpp
wrapper.cpp
import.cpp
exec.cpp
object/function_doc_signature.cpp
: # requirements
<link>static:<define>BOOST_PYTHON_STATIC_LIB
<define>BOOST_PYTHON_SOURCE
# On Windows, all code using Python has to link to the Python
# import library.
#
# On *nix we never link libboost_python to libpython. When
# extending Python, all Python symbols are provided by the
# Python interpreter executable. When embedding Python, the
# client executable is expected to explicitly link to
# /python//python (the target representing libpython) itself.
#
# python_for_extensions is a target defined by Boost.Build to
# provide the Python include paths, and on Windows, the Python
# import library, as usage requirements.
[ cond [ python.configured ] : <library>/python//python_for_extensions ]
# we prevent building when there is no python available
# as it's not possible anyway, and to cause dependents to
# fail to build
[ unless [ python.configured ] : <build>no ]
<python-debugging>on:<define>BOOST_DEBUG_PYTHON
: # default build
<link>shared
: # usage requirements
<link>static:<define>BOOST_PYTHON_STATIC_LIB
<python-debugging>on:<define>BOOST_DEBUG_PYTHON
;
boost-install boost_python ;

View File

@@ -1,22 +0,0 @@
# Dummy file actually to be included by Jam when the python headers
# can't be found
if ! $(gNO_PYTHON_INSTALL)
{
ECHO "---------------------------------------------------------------------" ;
ECHO skipping Boost.Python library build ;
ECHO You can configure the location of your python installation, by setting: ;
ECHO "PYTHON_ROOT - currently" \"$(PYTHON_ROOT:J=" ")\" ;
ECHO "PYTHON_VERSION - The 2-part python Major.Minor version number (e.g." ;
ECHO " \"2.2\", NOT \"2.2.1\") - currently" \"$(PYTHON_VERSION)\" ;
ECHO ;
ECHO "The following are automatically configured from PYTHON_ROOT if not" ;
ECHO "otherwise set:" ;
ECHO " PYTHON_INCLUDES - path to Python #include directories; currently" \"$(PYTHON_INCLUDES:J=" ")\" ;
ECHO " PYTHON_LIB_PATH - path to Python library; currently" ;
ECHO " " \"$(PYTHON_LIB_PATH:J=" ")\" ;
ECHO " PYTHON_STDLIB_PATH - path to Python standard library modules; currently" ;
ECHO " " \"$(PYTHON_STDLIB_PATH:J=" ")\" ;
ECHO "---------------------------------------------------------------------" ;
}
gNO_PYTHON_INSTALL ?= true ;

View File

@@ -1,59 +0,0 @@
# Revision History:
# 17 Apr 01 include cross-module support, compile getting_started1 (R.W. Grosse-Kunstleve) UNTESTED!
# 06 Mar 01 Fixed typo in use of "PYTHON_LIB" (Dave Abrahams)
# 04 Mar 01 Changed library name to libboost_python.a (David Abrahams)
LIBSRC = \
classes.cpp \
conversions.cpp \
cross_module.cpp \
errors.cpp \
extension_class.cpp \
functions.cpp \
init_function.cpp \
module_builder.cpp \
objects.cpp \
types.cpp
LIBOBJ = $(LIBSRC:.cpp=.o)
OBJ = $(LIBOBJ)
ifeq "$(OS)" "Windows_NT"
PYTHON_LIB=c:/tools/python/libs/python15.lib
INC = -Ic:/cygnus/usr/include/g++-3 -Ic:/cygnus/usr/include -Ic:/boost -Ic:/tools/python/include
MODULE_EXTENSION=dll
else
INC = -I/usr/local/include/python1.5
MODULE_EXTENSION=so
endif
%.o: ../src/%.cpp
como --pic $(INC) -o $*.o -c $<
%.d: ../src/%.cpp
@echo creating $@
@set -e; como -M $(INC) -c $< \
| sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \
[ -s $@ ] || rm -f $@
getting_started1: getting_started1.o libboost_python.a
como-dyn-link -o ../example/getting_started1.$(MODULE_EXTENSION) $(PYTHON_LIB) getting_started1.o -L. -lboost_python
ln -s ../test/doctest.py ../example
python ../example/test_getting_started1.py
getting_started1.o: ../example/getting_started1.cpp
como --pic $(INC) -o $*.o -c $<
clean:
rm -rf *.o *.$(MODULE_EXTENSION) *.a *.d *.pyc *.bak a.out
libboost_python.a: $(LIBOBJ)
rm -f libboost_python.a
ar cq libboost_python.a $(LIBOBJ)
DEP = $(OBJ:.o=.d)
ifneq "$(MAKECMDGOALS)" "clean"
include $(DEP)
endif

View File

@@ -1,146 +0,0 @@
# Revision history:
# 12 Apr 01 use os.path, shutil
# Initial version: R.W. Grosse-Kunstleve
bpl_src = "/libs/python/src"
bpl_tst = "/libs/python/test"
bpl_exa = "/libs/python/example"
files = (
bpl_src + "/classes.cpp",
bpl_src + "/conversions.cpp",
bpl_src + "/errors.cpp",
bpl_src + "/extension_class.cpp",
bpl_src + "/functions.cpp",
bpl_src + "/init_function.cpp",
bpl_src + "/module_builder.cpp",
bpl_src + "/objects.cpp",
bpl_src + "/types.cpp",
bpl_src + "/cross_module.cpp",
bpl_tst + "/comprehensive.cpp",
bpl_tst + "/comprehensive.hpp",
bpl_tst + "/comprehensive.py",
bpl_tst + "/doctest.py",
bpl_exa + "/abstract.cpp",
bpl_exa + "/getting_started1.cpp",
bpl_exa + "/getting_started2.cpp",
bpl_exa + "/simple_vector.cpp",
bpl_exa + "/do_it_yourself_convts.cpp",
bpl_exa + "/nested.cpp",
bpl_exa + "/pickle1.cpp",
bpl_exa + "/pickle2.cpp",
bpl_exa + "/pickle3.cpp",
bpl_exa + "/test_abstract.py",
bpl_exa + "/test_getting_started1.py",
bpl_exa + "/test_getting_started2.py",
bpl_exa + "/test_simple_vector.py",
bpl_exa + "/test_do_it_yourself_convts.py",
bpl_exa + "/test_nested.py",
bpl_exa + "/test_pickle1.py",
bpl_exa + "/test_pickle2.py",
bpl_exa + "/test_pickle3.py",
bpl_exa + "/noncopyable.h",
bpl_exa + "/noncopyable_export.cpp",
bpl_exa + "/noncopyable_import.cpp",
bpl_exa + "/dvect.h",
bpl_exa + "/dvect.cpp",
bpl_exa + "/dvect_conversions.cpp",
bpl_exa + "/dvect_defs.cpp",
bpl_exa + "/ivect.h",
bpl_exa + "/ivect.cpp",
bpl_exa + "/ivect_conversions.cpp",
bpl_exa + "/ivect_defs.cpp",
bpl_exa + "/tst_noncopyable.py",
bpl_exa + "/tst_dvect1.py",
bpl_exa + "/tst_dvect2.py",
bpl_exa + "/tst_ivect1.py",
bpl_exa + "/tst_ivect2.py",
bpl_exa + "/test_cross_module.py",
bpl_exa + "/vector_wrapper.h",
bpl_exa + "/richcmp1.cpp",
bpl_exa + "/richcmp2.cpp",
bpl_exa + "/richcmp3.cpp",
bpl_exa + "/test_richcmp1.py",
bpl_exa + "/test_richcmp2.py",
bpl_exa + "/test_richcmp3.py",
)
defs = (
"boost_python_test",
"abstract",
"getting_started1",
"getting_started2",
"simple_vector",
"do_it_yourself_convts",
"nested",
"pickle1",
"pickle2",
"pickle3",
"noncopyable_export",
"noncopyable_import",
"ivect",
"dvect",
"richcmp1",
"richcmp2",
"richcmp3",
)
if (__name__ == "__main__"):
import sys, os, shutil
path = sys.argv[1]
mode = sys.argv[2]
if (not mode in ("softlinks", "unlink", "cp", "rm", "copy", "del")):
raise RuntimeError, \
"usage: python filemgr.py path <softlinks|unlink|cp|rm|copy|del>"
if (mode in ("cp", "copy")):
for fn in files:
f = os.path.basename(fn)
print "Copying: " + f
shutil.copy(path + fn, ".")
elif (mode == "softlinks"):
for fn in files:
f = os.path.basename(fn)
if (os.path.exists(f)):
print "File exists: " + f
else:
print "Linking: " + f
os.symlink(path + fn, f)
elif (mode in ("rm", "del")):
for fn in files:
f = os.path.basename(fn)
if (os.path.exists(f)):
print "Removing: " + f
try: os.unlink(f)
except: pass
elif (mode == "unlink"):
for fn in files:
f = os.path.basename(fn)
if (os.path.exists(f)):
if (os.path.islink(f)):
print "Unlinking: " + f
try: os.unlink(f)
except: pass
else:
print "Not a softlink: " + f
if (mode in ("softlinks", "cp", "copy")):
for d in defs:
fn = d + ".def"
print "Creating: " + fn
f = open(fn, "w")
f.write("EXPORTS\n")
f.write("\tinit" + d + "\n")
f.close()
if (mode in ("unlink", "rm", "del")):
for d in defs:
fn = d + ".def"
if (os.path.exists(fn)):
print "Removing: " + fn
try: os.unlink(fn)
except: pass

View File

@@ -1,88 +0,0 @@
# Revision History
# 17 Apr 01 include cross-module support, compile getting_started1 (R.W. Grosse-Kunstleve)
# 17 Apr 01 build shared library (patch provided by Dan Nuffer)
# 04 Mar 01 Changed library name to libboost_python.a, various cleanups,
# attempted Cygwin compatibility. Still needs testing on Linux
# (David Abrahams)
LIBSRC = \
classes.cpp \
conversions.cpp \
cross_module.cpp \
errors.cpp \
extension_class.cpp \
functions.cpp \
init_function.cpp \
module_builder.cpp \
objects.cpp \
types.cpp
LIBOBJ = $(LIBSRC:.cpp=.o)
OBJ = $(LIBOBJ)
LIBNAME = libboost_python
# libpython2.0.dll
ifeq "$(OS)" "Windows_NT"
ROOT=c:/cygnus
INC = -Ic:/cygnus/usr/include/g++-3 -Ic:/cygnus/usr/include -Ic:/boost -I$(PYTHON_INC)
MODULE_EXTENSION=dll
PYTHON_LIB=c:/cygnus/usr/local/lib/python2.0/config/libpython2.0.dll.a
SHARED_LIB = $(LIBNAME).dll
else
PYTHON_INC=$(ROOT)/usr/local/Python-2.0/include/python2.0
BOOST_INC=../../..
INC = -I$(BOOST_INC) -I$(PYTHON_INC)
MODULE_EXTENSION=so
VERSION=1
SHARED_LIB = $(LIBNAME).so.$(VERSION)
endif
%.o: ../src/%.cpp
g++ -fPIC -Wall -W $(INC) $(CXXFLAGS) -o $*.o -c $<
%.d: ../src/%.cpp
@echo creating $@
@set -e; g++ -M $(INC) -c $< \
| sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \
[ -s $@ ] || rm -f $@
PYTHON = python
all: test $(SHARED_LIB) getting_started1
test: comprehensive.o $(LIBNAME).a $(SHARED_LIB)
g++ $(CXXFLAGS) -shared -o ../test/boost_python_test.$(MODULE_EXTENSION) comprehensive.o -L. -lboost_python $(PYTHON_LIB)
$(PYTHON) ../test/comprehensive.py
comprehensive.o: ../test/comprehensive.cpp
g++ $(CXXFLAGS) --template-depth-32 -fPIC -Wall -W $(INC) -o $*.o -c $<
getting_started1: getting_started1.o $(LIBNAME).a
g++ $(CXXFLAGS) -shared -o ../example/getting_started1.$(MODULE_EXTENSION) getting_started1.o -L. -lboost_python $(PYTHON_LIB)
ln -s ../test/doctest.py ../example
$(PYTHON) ../example/test_getting_started1.py
getting_started1.o: ../example/getting_started1.cpp
g++ $(CXXFLAGS) --template-depth-32 -fPIC -Wall -W $(INC) -o $*.o -c $<
clean:
rm -rf *.o *.$(MODULE_EXTENSION) *.a *.d *.pyc *.bak a.out
$(LIBNAME).a: $(LIBOBJ)
rm -f $@
ar cqs $@ $(LIBOBJ)
$(SHARED_LIB): $(LIBOBJ)
g++ $(CXXFLAGS) -shared -o $@ -Wl,--soname=$(LIBNAME).$(MODULE_EXTENSION)
DEP = $(OBJ:.o=.d)
ifneq "$(MAKECMDGOALS)" "clean"
include $(DEP)
endif

View File

@@ -1,184 +0,0 @@
# Usage:
#
# Create a new empty directory anywhere (preferably not in the boost tree).
# Copy this Makefile to that new directory and rename it to "Makefile"
# Adjust the pathnames below.
#
# make softlinks Create softlinks to source code and tests
# make Compile all sources
# make test Run doctest tests
# make clean Remove all object files
# make unlink Remove softlinks
#
# Revision history:
# 12 Apr 01 new macro ROOT to simplify configuration (R.W. Grosse-Kunstleve)
# Initial version: R.W. Grosse-Kunstleve
ROOT=$(HOME)
BOOST=$(ROOT)/boost
#PYEXE=PYTHONPATH=. /usr/local/Python-1.5.2/bin/python
#PYINC=-I/usr/local/Python-1.5.2/include/python1.5
PYEXE=PYTHONPATH=. /usr/local_cci/Python-2.1.1/bin/python
PYINC=-I/usr/local_cci/Python-2.1.1/include/python2.1
STLPORTINC=-I$(BOOST)/boost/compatibility/cpp_c_headers
STDOPTS=
WARNOPTS=-woff 1001,1234,1682
OPTOPTS=-g
CPP=CC -LANG:std -n32 -mips4
CPPOPTS=$(STLPORTINC) $(STLPORTOPTS) -I$(BOOST) $(PYINC) \
$(STDOPTS) $(WARNOPTS) $(OPTOPTS)
MAKEDEP=-M
LD=CC -LANG:std -n32 -mips4
LDOPTS=-shared
OBJ=classes.o conversions.o errors.o extension_class.o functions.o \
init_function.o module_builder.o \
objects.o types.o cross_module.o
DEPOBJ=$(OBJ) \
comprehensive.o \
abstract.o \
getting_started1.o getting_started2.o \
simple_vector.o \
do_it_yourself_convts.o \
nested.o \
pickle1.o pickle2.o pickle3.o \
noncopyable_export.o noncopyable_import.o \
ivect.o dvect.o \
richcmp1.o richcmp2.o richcmp3.o
.SUFFIXES: .o .cpp
all: libboost_python.a \
boost_python_test.so \
abstract.so \
getting_started1.so getting_started2.so \
simple_vector.so \
do_it_yourself_convts.so \
nested.so \
pickle1.so pickle2.so pickle3.so \
noncopyable_export.so noncopyable_import.so \
ivect.so dvect.so \
richcmp1.so richcmp2.so richcmp3.so
libboost_python.a: $(OBJ)
rm -f libboost_python.a
$(CPP) -ar -o libboost_python.a $(OBJ)
boost_python_test.so: $(OBJ) comprehensive.o
$(LD) $(LDOPTS) $(OBJ) comprehensive.o -o boost_python_test.so -lm
abstract.so: $(OBJ) abstract.o
$(LD) $(LDOPTS) $(OBJ) abstract.o -o abstract.so
getting_started1.so: $(OBJ) getting_started1.o
$(LD) $(LDOPTS) $(OBJ) getting_started1.o -o getting_started1.so
getting_started2.so: $(OBJ) getting_started2.o
$(LD) $(LDOPTS) $(OBJ) getting_started2.o -o getting_started2.so
simple_vector.so: $(OBJ) simple_vector.o
$(LD) $(LDOPTS) $(OBJ) simple_vector.o -o simple_vector.so
do_it_yourself_convts.so: $(OBJ) do_it_yourself_convts.o
$(LD) $(LDOPTS) $(OBJ) do_it_yourself_convts.o -o do_it_yourself_convts.so
nested.so: $(OBJ) nested.o
$(LD) $(LDOPTS) $(OBJ) nested.o -o nested.so
pickle1.so: $(OBJ) pickle1.o
$(LD) $(LDOPTS) $(OBJ) pickle1.o -o pickle1.so
pickle2.so: $(OBJ) pickle2.o
$(LD) $(LDOPTS) $(OBJ) pickle2.o -o pickle2.so
pickle3.so: $(OBJ) pickle3.o
$(LD) $(LDOPTS) $(OBJ) pickle3.o -o pickle3.so
noncopyable_export.so: $(OBJ) noncopyable_export.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \
noncopyable_export.o -o noncopyable_export.so
noncopyable_import.so: $(OBJ) noncopyable_import.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \
noncopyable_import.o -o noncopyable_import.so
ivect.so: $(OBJ) ivect.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) ivect.o -o ivect.so
dvect.so: $(OBJ) dvect.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) dvect.o -o dvect.so
richcmp1.so: $(OBJ) richcmp1.o
$(LD) $(LDOPTS) $(OBJ) richcmp1.o -o richcmp1.so
richcmp2.so: $(OBJ) richcmp2.o
$(LD) $(LDOPTS) $(OBJ) richcmp2.o -o richcmp2.so
richcmp3.so: $(OBJ) richcmp3.o
$(LD) $(LDOPTS) $(OBJ) richcmp3.o -o richcmp3.so
.cpp.o:
$(CPP) $(CPPOPTS) -c $*.cpp
test:
$(PYEXE) comprehensive.py
$(PYEXE) test_abstract.py
$(PYEXE) test_getting_started1.py
$(PYEXE) test_getting_started2.py
$(PYEXE) test_simple_vector.py
$(PYEXE) test_do_it_yourself_convts.py
$(PYEXE) test_nested.py
$(PYEXE) test_pickle1.py
$(PYEXE) test_pickle2.py
$(PYEXE) test_pickle3.py
$(PYEXE) test_cross_module.py
$(PYEXE) test_richcmp1.py
$(PYEXE) test_richcmp2.py
$(PYEXE) test_richcmp3.py
clean:
rm -f $(OBJ) libboost_python.a libboost_python.a.input
rm -f comprehensive.o boost_python_test.so
rm -f abstract.o abstract.so
rm -f getting_started1.o getting_started1.so
rm -f getting_started2.o getting_started2.so
rm -f simple_vector.o simple_vector.so
rm -f do_it_yourself_convts.o do_it_yourself_convts.so
rm -f nested.o nested.so
rm -f pickle1.o pickle1.so
rm -f pickle2.o pickle2.so
rm -f pickle3.o pickle3.so
rm -f noncopyable_export.o noncopyable_export.so
rm -f noncopyable_import.o noncopyable_import.so
rm -f ivect.o ivect.so
rm -f dvect.o dvect.so
rm -f richcmp1.o richcmp1.so
rm -f richcmp2.o richcmp2.so
rm -f richcmp3.o richcmp3.so
rm -f so_locations *.pyc
rm -rf ii_files
softlinks:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) softlinks
unlink:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) unlink
cp:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) cp
rm:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) rm
depend:
@ cat Makefile.nodepend; \
for obj in $(DEPOBJ); \
do \
bn=`echo "$$obj" | cut -d. -f1`; \
$(CPP) $(CPPOPTS) $(MAKEDEP) "$$bn".cpp; \
done

View File

@@ -1,184 +0,0 @@
# Usage:
#
# Create a new empty directory anywhere (preferably not in the boost tree).
# Copy this Makefile to that new directory and rename it to "Makefile"
# Adjust the pathnames below.
#
# make softlinks Create softlinks to source code and tests
# make Compile all sources
# make test Run doctest tests
# make clean Remove all object files
# make unlink Remove softlinks
#
# Revision history:
# 12 Apr 01 new macro ROOT to simplify configuration (R.W. Grosse-Kunstleve)
# Initial version: R.W. Grosse-Kunstleve
ROOT=$(HOME)
BOOST=$(ROOT)/boost
#PYEXE=PYTHONPATH=. /usr/bin/python
#PYINC=-I/usr/include/python1.5
#PYEXE=PYTHONPATH=. /usr/local/Python-1.5.2/bin/python
#PYINC=-I/usr/local/Python-1.5.2/include/python1.5
PYEXE=PYTHONPATH=. /usr/local_cci/Python-2.1.1/bin/python
PYINC=-I/usr/local_cci/Python-2.1.1/include/python2.1
STDOPTS=-fPIC -ftemplate-depth-21
WARNOPTS=
OPTOPTS=-g
CPP=g++
CPPOPTS=$(STLPORTINC) $(STLPORTOPTS) -I$(BOOST) $(PYINC) \
$(STDOPTS) $(WARNOPTS) $(OPTOPTS)
MAKEDEP=-M
LD=$(CPP)
LDOPTS=-shared
OBJ=classes.o conversions.o errors.o extension_class.o functions.o \
init_function.o module_builder.o \
objects.o types.o cross_module.o
DEPOBJ=$(OBJ) \
comprehensive.o \
abstract.o \
getting_started1.o getting_started2.o \
simple_vector.o \
do_it_yourself_convts.o \
nested.o \
pickle1.o pickle2.o pickle3.o \
noncopyable_export.o noncopyable_import.o \
ivect.o dvect.o \
richcmp1.o richcmp2.o richcmp3.o
.SUFFIXES: .o .cpp
all: libboost_python.a \
boost_python_test.so \
abstract.so \
getting_started1.so getting_started2.so \
simple_vector.so \
do_it_yourself_convts.so \
nested.so \
pickle1.so pickle2.so pickle3.so \
noncopyable_export.so noncopyable_import.so \
ivect.so dvect.so \
richcmp1.so richcmp2.so richcmp3.so
libboost_python.a: $(OBJ)
rm -f libboost_python.a
ar r libboost_python.a $(OBJ)
boost_python_test.so: $(OBJ) comprehensive.o
$(LD) $(LDOPTS) $(OBJ) comprehensive.o -o boost_python_test.so -lm
abstract.so: $(OBJ) abstract.o
$(LD) $(LDOPTS) $(OBJ) abstract.o -o abstract.so
getting_started1.so: $(OBJ) getting_started1.o
$(LD) $(LDOPTS) $(OBJ) getting_started1.o -o getting_started1.so
getting_started2.so: $(OBJ) getting_started2.o
$(LD) $(LDOPTS) $(OBJ) getting_started2.o -o getting_started2.so
simple_vector.so: $(OBJ) simple_vector.o
$(LD) $(LDOPTS) $(OBJ) simple_vector.o -o simple_vector.so
do_it_yourself_convts.so: $(OBJ) do_it_yourself_convts.o
$(LD) $(LDOPTS) $(OBJ) do_it_yourself_convts.o -o do_it_yourself_convts.so
nested.so: $(OBJ) nested.o
$(LD) $(LDOPTS) $(OBJ) nested.o -o nested.so
pickle1.so: $(OBJ) pickle1.o
$(LD) $(LDOPTS) $(OBJ) pickle1.o -o pickle1.so
pickle2.so: $(OBJ) pickle2.o
$(LD) $(LDOPTS) $(OBJ) pickle2.o -o pickle2.so
pickle3.so: $(OBJ) pickle3.o
$(LD) $(LDOPTS) $(OBJ) pickle3.o -o pickle3.so
noncopyable_export.so: $(OBJ) noncopyable_export.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \
noncopyable_export.o -o noncopyable_export.so
noncopyable_import.so: $(OBJ) noncopyable_import.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \
noncopyable_import.o -o noncopyable_import.so
ivect.so: $(OBJ) ivect.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) ivect.o -o ivect.so
dvect.so: $(OBJ) dvect.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) dvect.o -o dvect.so
richcmp1.so: $(OBJ) richcmp1.o
$(LD) $(LDOPTS) $(OBJ) richcmp1.o -o richcmp1.so
richcmp2.so: $(OBJ) richcmp2.o
$(LD) $(LDOPTS) $(OBJ) richcmp2.o -o richcmp2.so
richcmp3.so: $(OBJ) richcmp3.o
$(LD) $(LDOPTS) $(OBJ) richcmp3.o -o richcmp3.so
.cpp.o:
$(CPP) $(CPPOPTS) -c $*.cpp
test:
$(PYEXE) comprehensive.py
$(PYEXE) test_abstract.py
$(PYEXE) test_getting_started1.py
$(PYEXE) test_getting_started2.py
$(PYEXE) test_simple_vector.py
$(PYEXE) test_do_it_yourself_convts.py
$(PYEXE) test_nested.py
$(PYEXE) test_pickle1.py
$(PYEXE) test_pickle2.py
$(PYEXE) test_pickle3.py
$(PYEXE) test_cross_module.py
$(PYEXE) test_richcmp1.py
$(PYEXE) test_richcmp2.py
$(PYEXE) test_richcmp3.py
clean:
rm -f $(OBJ) libboost_python.a libboost_python.a.input
rm -f comprehensive.o boost_python_test.so
rm -f abstract.o abstract.so
rm -f getting_started1.o getting_started1.so
rm -f getting_started2.o getting_started2.so
rm -f simple_vector.o simple_vector.so
rm -f do_it_yourself_convts.o do_it_yourself_convts.so
rm -f nested.o nested.so
rm -f pickle1.o pickle1.so
rm -f pickle2.o pickle2.so
rm -f pickle3.o pickle3.so
rm -f noncopyable_export.o noncopyable_export.so
rm -f noncopyable_import.o noncopyable_import.so
rm -f ivect.o ivect.so
rm -f dvect.o dvect.so
rm -f richcmp1.o richcmp1.so
rm -f richcmp2.o richcmp2.so
rm -f richcmp3.o richcmp3.so
rm -f so_locations *.pyc
softlinks:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) softlinks
unlink:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) unlink
cp:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) cp
rm:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) rm
depend:
@ cat Makefile.nodepend; \
for obj in $(DEPOBJ); \
do \
bn=`echo "$$obj" | cut -d. -f1`; \
$(CPP) $(CPPOPTS) $(MAKEDEP) "$$bn".cpp; \
done

View File

@@ -1,222 +0,0 @@
# Usage:
#
# make copy Copy the sources and tests
# make Compile all sources
# make test Run doctest tests
# make clean Remove all object files
# make del Remove the sources and tests
#
# Revision history:
# 12 Apr 01 new macro ROOT to simplify configuration (R.W. Grosse-Kunstleve)
# Initial version: R.W. Grosse-Kunstleve
# To install mingw32, follow instructions at:
# http://starship.python.net/crew/kernr/mingw32/Notes.html
# In particular, install:
# ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/gcc-2.95.2/gcc-2.95.2-msvcrt.exe
# ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/gcc-2.95.2/fixes/quote-fix-msvcrt.exe
# http://starship.python.net/crew/kernr/mingw32/Python-1.5.2-mingw32.zip
# Unpack the first two archives in the default locations and update your PATH.
# Unpack the third archive in \usr.
# Note: comprehensive.cpp generates compiler errors and later crashes.
# L:\boost\boost\python\detail\extension_class.hpp:643: warning:
# alignment of `vtable for class
# boost::python::detail::held_instance<bpl_test::Derived1>'
# is greater than maximum object file alignment. Using 16.
# Could this be fixed with compiler options?
# -fhuge-objects looks interesting, but requires recompiling the C++ library.
# (what exactly does that mean?)
# -fvtable-thunks eliminates the compiler warning, but
# "import boost_python_test" still causes a crash.
ROOT=R:
BOOST_WIN="$(ROOT)\boost"
BOOST_UNIX=$(HOME)/boost
PYEXE="C:\Program files\Python\python.exe"
PYINC=-I"C:\usr\include\python1.5"
PYLIB="C:\usr\lib\libpython15.a"
#PYEXE="C:\Python21\python.exe"
#PYINC=-I"C:\usr\include\python2.1"
#PYLIB="C:\usr\lib\libpython21.a"
STDOPTS=-ftemplate-depth-21
WARNOPTS=
OPTOPTS=-g
CPP=g++
CPPOPTS=$(STLPORTINC) $(STLPORTOPTS) -I$(BOOST_WIN) $(PYINC) \
$(STDOPTS) $(WARNOPTS) $(OPTOPTS)
LD=g++
LDOPTS=-shared
OBJ=classes.o conversions.o errors.o extension_class.o functions.o \
init_function.o module_builder.o \
objects.o types.o cross_module.o
.SUFFIXES: .o .cpp
all: libboost_python.a \
abstract.pyd \
getting_started1.pyd getting_started2.pyd \
simple_vector.pyd \
do_it_yourself_convts.pyd \
nested.pyd \
pickle1.pyd pickle2.pyd pickle3.pyd \
noncopyable_export.pyd noncopyable_import.pyd \
ivect.pyd dvect.pyd \
richcmp1.pyd richcmp2.pyd richcmp3.pyd
libboost_python.a: $(OBJ)
-del libboost_python.a
ar r libboost_python.a $(OBJ)
DLLWRAPOPTS=-s --driver-name g++ -s \
--entry _DllMainCRTStartup@12 --target=i386-mingw32
boost_python_test.pyd: $(OBJ) comprehensive.o
dllwrap $(DLLWRAPOPTS) \
--dllname boost_python_test.pyd \
--def boost_python_test.def \
$(OBJ) comprehensive.o $(PYLIB)
abstract.pyd: $(OBJ) abstract.o
dllwrap $(DLLWRAPOPTS) \
--dllname abstract.pyd \
--def abstract.def \
$(OBJ) abstract.o $(PYLIB)
getting_started1.pyd: $(OBJ) getting_started1.o
dllwrap $(DLLWRAPOPTS) \
--dllname getting_started1.pyd \
--def getting_started1.def \
$(OBJ) getting_started1.o $(PYLIB)
getting_started2.pyd: $(OBJ) getting_started2.o
dllwrap $(DLLWRAPOPTS) \
--dllname getting_started2.pyd \
--def getting_started2.def \
$(OBJ) getting_started2.o $(PYLIB)
simple_vector.pyd: $(OBJ) simple_vector.o
dllwrap $(DLLWRAPOPTS) \
--dllname simple_vector.pyd \
--def simple_vector.def \
$(OBJ) simple_vector.o $(PYLIB)
do_it_yourself_convts.pyd: $(OBJ) do_it_yourself_convts.o
dllwrap $(DLLWRAPOPTS) \
--dllname do_it_yourself_convts.pyd \
--def do_it_yourself_convts.def \
$(OBJ) do_it_yourself_convts.o $(PYLIB)
nested.pyd: $(OBJ) nested.o
dllwrap $(DLLWRAPOPTS) \
--dllname nested.pyd \
--def nested.def \
$(OBJ) nested.o $(PYLIB)
pickle1.pyd: $(OBJ) pickle1.o
dllwrap $(DLLWRAPOPTS) \
--dllname pickle1.pyd \
--def pickle1.def \
$(OBJ) pickle1.o $(PYLIB)
pickle2.pyd: $(OBJ) pickle2.o
dllwrap $(DLLWRAPOPTS) \
--dllname pickle2.pyd \
--def pickle2.def \
$(OBJ) pickle2.o $(PYLIB)
pickle3.pyd: $(OBJ) pickle3.o
dllwrap $(DLLWRAPOPTS) \
--dllname pickle3.pyd \
--def pickle3.def \
$(OBJ) pickle3.o $(PYLIB)
noncopyable_export.pyd: $(OBJ) noncopyable_export.o
dllwrap $(DLLWRAPOPTS) \
--dllname noncopyable_export.pyd \
--def noncopyable_export.def \
$(OBJ) noncopyable_export.o $(PYLIB)
noncopyable_import.pyd: $(OBJ) noncopyable_import.o
dllwrap $(DLLWRAPOPTS) \
--dllname noncopyable_import.pyd \
--def noncopyable_import.def \
$(OBJ) noncopyable_import.o $(PYLIB)
ivect.pyd: $(OBJ) ivect.o
dllwrap $(DLLWRAPOPTS) \
--dllname ivect.pyd \
--def ivect.def \
$(OBJ) ivect.o $(PYLIB)
dvect.pyd: $(OBJ) dvect.o
dllwrap $(DLLWRAPOPTS) \
--dllname dvect.pyd \
--def dvect.def \
$(OBJ) dvect.o $(PYLIB)
richcmp1.pyd: $(OBJ) richcmp1.o
dllwrap $(DLLWRAPOPTS) \
--dllname richcmp1.pyd \
--def richcmp1.def \
$(OBJ) richcmp1.o $(PYLIB)
richcmp2.pyd: $(OBJ) richcmp2.o
dllwrap $(DLLWRAPOPTS) \
--dllname richcmp2.pyd \
--def richcmp2.def \
$(OBJ) richcmp2.o $(PYLIB)
richcmp3.pyd: $(OBJ) richcmp3.o
dllwrap $(DLLWRAPOPTS) \
--dllname richcmp3.pyd \
--def richcmp3.def \
$(OBJ) richcmp3.o $(PYLIB)
.cpp.o:
$(CPP) $(CPPOPTS) -c $*.cpp
test:
# $(PYEXE) comprehensive.py
$(PYEXE) test_abstract.py
$(PYEXE) test_getting_started1.py
$(PYEXE) test_getting_started2.py
$(PYEXE) test_simple_vector.py
$(PYEXE) test_do_it_yourself_convts.py
$(PYEXE) test_nested.py
$(PYEXE) test_pickle1.py
$(PYEXE) test_pickle2.py
$(PYEXE) test_pickle3.py
$(PYEXE) test_cross_module.py
$(PYEXE) test_richcmp1.py
$(PYEXE) test_richcmp2.py
$(PYEXE) test_richcmp3.py
clean:
-del *.o
-del *.a
-del *.pyd
-del *.pyc
softlinks:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) softlinks
unlink:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) unlink
cp:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) cp
rm:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) rm
copy:
$(PYEXE) $(BOOST_WIN)\libs\python\build\filemgr.py $(BOOST_WIN) copy
del:
$(PYEXE) $(BOOST_WIN)\libs\python\build\filemgr.py $(BOOST_WIN) del

BIN
build/python_v1.zip Normal file

Binary file not shown.

View File

@@ -1,199 +0,0 @@
# Usage:
#
# Create a new empty directory anywhere (preferably not in the boost tree).
# Copy this Makefile to that new directory and rename it to "Makefile"
# Adjust the pathnames below.
#
# make softlinks Create softlinks to source code and tests
# make Compile all sources
# make test Run doctest tests
# make clean Remove all object files
# make unlink Remove softlinks
#
# Revision history:
# 12 Apr 01 new macro ROOT to simplify configuration (R.W. Grosse-Kunstleve)
# Initial version: R.W. Grosse-Kunstleve
ROOT=$(HOME)
BOOST=$(ROOT)/boost
#PYEXE=PYTHONPATH=. /usr/local/Python-1.5.2/bin/python
#PYINC=-I/usr/local/Python-1.5.2/include/python1.5
PYEXE=PYTHONPATH=. /usr/local_cci/Python-2.1.1/bin/python
PYINC=-I/usr/local_cci/Python-2.1.1/include/python2.1
#STLPORTINC=-I/usr/local/STLport-4.1b3/stlport
#STLPORTINC=-I/usr/local/STLport-4.1b4/stlport
#STLPORTOPTS= \
# -D__USE_STD_IOSTREAM \
# -D__STL_NO_SGI_IOSTREAMS \
# -D__STL_USE_NATIVE_STRING \
# -D__STL_NO_NEW_C_HEADERS \
# -D_RWSTD_COMPILE_INSTANTIATE=1
STLPORTINC=-I$(BOOST)/boost/compatibility/cpp_c_headers
STDOPTS=-std strict_ansi
# use -msg_display_number to obtain integer tags for -msg_disable
WARNOPTS=-msg_disable 186,450,1115
OPTOPTS=-g
CPP=cxx
CPPOPTS=$(STLPORTINC) $(STLPORTOPTS) -I$(BOOST) $(PYINC) \
$(STDOPTS) $(WARNOPTS) $(OPTOPTS)
MAKEDEP=-Em
LD=cxx
LDOPTS=-shared -expect_unresolved 'Py*' -expect_unresolved '_Py*'
#HIDDEN=-hidden
OBJ=classes.o conversions.o errors.o extension_class.o functions.o \
init_function.o module_builder.o \
objects.o types.o cross_module.o
DEPOBJ=$(OBJ) \
comprehensive.o \
abstract.o \
getting_started1.o getting_started2.o \
simple_vector.o \
do_it_yourself_convts.o \
nested.o \
pickle1.o pickle2.o pickle3.o \
noncopyable_export.o noncopyable_import.o \
ivect.o dvect.o \
richcmp1.o richcmp2.o richcmp3.o
.SUFFIXES: .o .cpp
all: libboost_python.a \
boost_python_test.so \
abstract.so \
getting_started1.so getting_started2.so \
simple_vector.so \
do_it_yourself_convts.so \
nested.so \
pickle1.so pickle2.so pickle3.so \
noncopyable_export.so noncopyable_import.so \
ivect.so dvect.so \
richcmp1.so richcmp2.so richcmp3.so
libboost_python.a: $(OBJ)
rm -f libboost_python.a
cd cxx_repository; \
ls -1 > ../libboost_python.a.input; \
ar r ../libboost_python.a -input ../libboost_python.a.input
rm -f libboost_python.a.input
ar r libboost_python.a $(OBJ)
boost_python_test.so: $(OBJ) comprehensive.o
$(LD) $(LDOPTS) $(OBJ) comprehensive.o -o boost_python_test.so -lm
abstract.so: $(OBJ) abstract.o
$(LD) $(LDOPTS) $(OBJ) abstract.o -o abstract.so
getting_started1.so: $(OBJ) getting_started1.o
$(LD) $(LDOPTS) $(OBJ) getting_started1.o -o getting_started1.so
getting_started2.so: $(OBJ) getting_started2.o
$(LD) $(LDOPTS) $(OBJ) getting_started2.o -o getting_started2.so
simple_vector.so: $(OBJ) simple_vector.o
$(LD) $(LDOPTS) $(OBJ) simple_vector.o -o simple_vector.so
do_it_yourself_convts.so: $(OBJ) do_it_yourself_convts.o
$(LD) $(LDOPTS) $(OBJ) do_it_yourself_convts.o -o do_it_yourself_convts.so
nested.so: $(OBJ) nested.o
$(LD) $(LDOPTS) $(OBJ) nested.o -o nested.so
pickle1.so: $(OBJ) pickle1.o
$(LD) $(LDOPTS) $(OBJ) pickle1.o -o pickle1.so
pickle2.so: $(OBJ) pickle2.o
$(LD) $(LDOPTS) $(OBJ) pickle2.o -o pickle2.so
pickle3.so: $(OBJ) pickle3.o
$(LD) $(LDOPTS) $(OBJ) pickle3.o -o pickle3.so
noncopyable_export.so: $(OBJ) noncopyable_export.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \
noncopyable_export.o -o noncopyable_export.so
noncopyable_import.so: $(OBJ) noncopyable_import.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) \
noncopyable_import.o -o noncopyable_import.so
ivect.so: $(OBJ) ivect.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) ivect.o -o ivect.so
dvect.so: $(OBJ) dvect.o
$(LD) $(LDOPTS) $(OBJ) $(HIDDEN) dvect.o -o dvect.so
richcmp1.so: $(OBJ) richcmp1.o
$(LD) $(LDOPTS) $(OBJ) richcmp1.o -o richcmp1.so
richcmp2.so: $(OBJ) richcmp2.o
$(LD) $(LDOPTS) $(OBJ) richcmp2.o -o richcmp2.so
richcmp3.so: $(OBJ) richcmp3.o
$(LD) $(LDOPTS) $(OBJ) richcmp3.o -o richcmp3.so
.cpp.o:
$(CPP) $(CPPOPTS) -c $*.cpp
test:
$(PYEXE) comprehensive.py
$(PYEXE) test_abstract.py
$(PYEXE) test_getting_started1.py
$(PYEXE) test_getting_started2.py
$(PYEXE) test_simple_vector.py
$(PYEXE) test_do_it_yourself_convts.py
$(PYEXE) test_nested.py
$(PYEXE) test_pickle1.py
$(PYEXE) test_pickle2.py
$(PYEXE) test_pickle3.py
$(PYEXE) test_cross_module.py
$(PYEXE) test_richcmp1.py
$(PYEXE) test_richcmp2.py
$(PYEXE) test_richcmp3.py
clean:
rm -f $(OBJ) libboost_python.a libboost_python.a.input
rm -f comprehensive.o boost_python_test.so
rm -f abstract.o abstract.so
rm -f getting_started1.o getting_started1.so
rm -f getting_started2.o getting_started2.so
rm -f simple_vector.o simple_vector.so
rm -f do_it_yourself_convts.o do_it_yourself_convts.so
rm -f nested.o nested.so
rm -f pickle1.o pickle1.so
rm -f pickle2.o pickle2.so
rm -f pickle3.o pickle3.so
rm -f noncopyable_export.o noncopyable_export.so
rm -f noncopyable_import.o noncopyable_import.so
rm -f ivect.o ivect.so
rm -f dvect.o dvect.so
rm -f richcmp1.o richcmp1.so
rm -f richcmp2.o richcmp2.so
rm -f richcmp3.o richcmp3.so
rm -f so_locations *.pyc
rm -rf cxx_repository
softlinks:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) softlinks
unlink:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) unlink
cp:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) cp
rm:
$(PYEXE) $(BOOST)/libs/python/build/filemgr.py $(BOOST) rm
depend:
@ cat Makefile.nodepend; \
for obj in $(DEPOBJ); \
do \
bn=`echo "$$obj" | cut -d. -f1`; \
$(CPP) $(CPPOPTS) $(MAKEDEP) "$$bn".cpp; \
done

View File

@@ -1,154 +0,0 @@
# Usage:
#
# Create a new empty directory anywhere (preferably not in the boost tree).
# Copy this Makefile to that new directory and rename it to "Makefile"
# Adjust the pathnames below.
#
# make copy Copy the sources and tests
# make Compile all sources
# make test Run doctest tests
# make clean Remove all object files
# make del Remove the sources and tests
#
# Revision history:
# 12 Apr 01 new macro ROOT to simplify configuration (R.W. Grosse-Kunstleve)
# Initial version: R.W. Grosse-Kunstleve
ROOT=R:
BOOST_WIN="$(ROOT)\boost"
BOOST_UNIX=$(HOME)/boost
#PYEXE="C:\Program files\Python\python.exe"
#PYINC=/I"C:\Program files\Python\include"
#PYLIB="C:\Program files\Python\libs\python15.lib"
PYEXE="C:\Python21\python.exe"
PYINC=/I"C:\Python21\include"
PYLIB="C:\Python21\libs\python21.lib"
STDOPTS=/nologo /MD /GR /GX /Zm300 /DBOOST_PYTHON_STATIC_LIB
WARNOPTS=
OPTOPTS=
CPP=cl.exe
CPPOPTS=$(STLPORTINC) $(STLPORTOPTS) /I$(BOOST_WIN) $(PYINC) \
$(STDOPTS) $(WARNOPTS) $(OPTOPTS)
LD=link.exe
LDOPTS=/nologo /dll /incremental:no
OBJ=classes.obj conversions.obj errors.obj extension_class.obj functions.obj \
init_function.obj module_builder.obj \
objects.obj types.obj cross_module.obj
.SUFFIXES: .obj .cpp
all: boost_python.lib \
boost_python_test.pyd \
abstract.pyd \
getting_started1.pyd getting_started2.pyd \
simple_vector.pyd \
do_it_yourself_convts.pyd \
nested.pyd \
pickle1.pyd pickle2.pyd pickle3.pyd \
noncopyable_export.pyd noncopyable_import.pyd \
ivect.pyd dvect.pyd \
richcmp1.pyd richcmp2.pyd richcmp3.pyd
boost_python.lib: $(OBJ)
$(LD) -lib /nologo /out:boost_python.lib $(OBJ)
boost_python_test.pyd: $(OBJ) comprehensive.obj
$(LD) $(LDOPTS) $(OBJ) comprehensive.obj $(PYLIB) /export:initboost_python_test /out:"boost_python_test.pyd"
abstract.pyd: $(OBJ) abstract.obj
$(LD) $(LDOPTS) $(OBJ) abstract.obj $(PYLIB) /export:initabstract /out:"abstract.pyd"
getting_started1.pyd: $(OBJ) getting_started1.obj
$(LD) $(LDOPTS) $(OBJ) getting_started1.obj $(PYLIB) /export:initgetting_started1 /out:"getting_started1.pyd"
getting_started2.pyd: $(OBJ) getting_started2.obj
$(LD) $(LDOPTS) $(OBJ) getting_started2.obj $(PYLIB) /export:initgetting_started2 /out:"getting_started2.pyd"
simple_vector.pyd: $(OBJ) simple_vector.obj
$(LD) $(LDOPTS) $(OBJ) simple_vector.obj $(PYLIB) /export:initsimple_vector /out:"simple_vector.pyd"
do_it_yourself_convts.pyd: $(OBJ) do_it_yourself_convts.obj
$(LD) $(LDOPTS) $(OBJ) do_it_yourself_convts.obj $(PYLIB) /export:initdo_it_yourself_convts /out:"do_it_yourself_convts.pyd"
nested.pyd: $(OBJ) nested.obj
$(LD) $(LDOPTS) $(OBJ) nested.obj $(PYLIB) /export:initnested /out:"nested.pyd"
pickle1.pyd: $(OBJ) pickle1.obj
$(LD) $(LDOPTS) $(OBJ) pickle1.obj $(PYLIB) /export:initpickle1 /out:"pickle1.pyd"
pickle2.pyd: $(OBJ) pickle2.obj
$(LD) $(LDOPTS) $(OBJ) pickle2.obj $(PYLIB) /export:initpickle2 /out:"pickle2.pyd"
pickle3.pyd: $(OBJ) pickle3.obj
$(LD) $(LDOPTS) $(OBJ) pickle3.obj $(PYLIB) /export:initpickle3 /out:"pickle3.pyd"
noncopyable_export.pyd: $(OBJ) noncopyable_export.obj
$(LD) $(LDOPTS) $(OBJ) noncopyable_export.obj $(PYLIB) /export:initnoncopyable_export /out:"noncopyable_export.pyd"
noncopyable_import.pyd: $(OBJ) noncopyable_import.obj
$(LD) $(LDOPTS) $(OBJ) noncopyable_import.obj $(PYLIB) /export:initnoncopyable_import /out:"noncopyable_import.pyd"
ivect.pyd: $(OBJ) ivect.obj
$(LD) $(LDOPTS) $(OBJ) ivect.obj $(PYLIB) /export:initivect /out:"ivect.pyd"
dvect.pyd: $(OBJ) dvect.obj
$(LD) $(LDOPTS) $(OBJ) dvect.obj $(PYLIB) /export:initdvect /out:"dvect.pyd"
richcmp1.pyd: $(OBJ) richcmp1.obj
$(LD) $(LDOPTS) $(OBJ) richcmp1.obj $(PYLIB) /export:initrichcmp1 /out:"richcmp1.pyd"
richcmp2.pyd: $(OBJ) richcmp2.obj
$(LD) $(LDOPTS) $(OBJ) richcmp2.obj $(PYLIB) /export:initrichcmp2 /out:"richcmp2.pyd"
richcmp3.pyd: $(OBJ) richcmp3.obj
$(LD) $(LDOPTS) $(OBJ) richcmp3.obj $(PYLIB) /export:initrichcmp3 /out:"richcmp3.pyd"
.cpp.obj:
$(CPP) $(CPPOPTS) /c $*.cpp
test:
$(PYEXE) comprehensive.py --broken-auto-ptr
$(PYEXE) test_abstract.py
$(PYEXE) test_getting_started1.py
$(PYEXE) test_getting_started2.py
$(PYEXE) test_simple_vector.py
$(PYEXE) test_do_it_yourself_convts.py
$(PYEXE) test_nested.py
$(PYEXE) test_pickle1.py
$(PYEXE) test_pickle2.py
$(PYEXE) test_pickle3.py
$(PYEXE) test_cross_module.py --broken-auto-ptr
$(PYEXE) test_richcmp1.py
$(PYEXE) test_richcmp2.py
$(PYEXE) test_richcmp3.py
clean:
-del *.obj
-del *.lib
-del *.exp
-del *.idb
-del *.pyd
-del *.pyc
softlinks:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) softlinks
unlink:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) unlink
cp:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) cp
rm:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) rm
copy:
$(PYEXE) $(BOOST_WIN)\libs\python\build\filemgr.py $(BOOST_WIN) copy
del:
$(PYEXE) $(BOOST_WIN)\libs\python\build\filemgr.py $(BOOST_WIN) del

View File

@@ -1,149 +0,0 @@
# Usage:
#
# make copy Copy the sources and tests
# make Compile all sources
# make test Run doctest tests
# make clean Remove all object files
# make del Remove the sources and tests
#
# Revision history:
# 14 Dec 01 derived from vc60.mak (R.W. Grosse-Kunstleve)
ROOT=R:
BOOST_WIN="$(ROOT)\boost"
BOOST_UNIX=$(HOME)/boost
#PYEXE="C:\Program files\Python\python.exe"
#PYINC=-I"C:\Program files\Python\include"
#PYLIB="C:\Program files\Python\libs\python15.lib"
PYEXE="C:\Python21\python.exe"
PYINC=-I"C:\Python21\include"
PYLIB="C:\Python21\libs\python21.lib"
STDOPTS=-gccinc -prefix UseDLLPrefix.h -DBOOST_PYTHON_STATIC_LIB
WARNOPTS=-warn on,nounusedexpr,nounused
OPTOPTS=-O
CPP=mwcc
CPPOPTS=$(STDOPTS) $(WARNOPTS) $(OPTOPTS) \
$(STLPORTINC) $(STLPORTOPTS) -I$(BOOST_WIN) $(PYINC)
LD=mwld
LDOPTS=-export dllexport -shared
OBJ=classes.obj conversions.obj errors.obj extension_class.obj functions.obj \
init_function.obj module_builder.obj \
objects.obj types.obj cross_module.obj
.SUFFIXES: .obj .cpp
all: libboost_python.lib \
boost_python_test.pyd \
abstract.pyd \
getting_started1.pyd getting_started2.pyd \
simple_vector.pyd \
do_it_yourself_convts.pyd \
nested.pyd \
pickle1.pyd pickle2.pyd pickle3.pyd \
noncopyable_export.pyd noncopyable_import.pyd \
ivect.pyd dvect.pyd \
richcmp1.pyd richcmp2.pyd richcmp3.pyd
libboost_python.lib: $(OBJ)
$(LD) -library -o libboost_python.lib $(OBJ)
boost_python_test.pyd: $(OBJ) comprehensive.obj
$(LD) $(LDOPTS) $(OBJ) comprehensive.obj $(PYLIB) -o boost_python_test.pyd
abstract.pyd: $(OBJ) abstract.obj
$(LD) $(LDOPTS) $(OBJ) abstract.obj $(PYLIB) -o abstract.pyd
getting_started1.pyd: $(OBJ) getting_started1.obj
$(LD) $(LDOPTS) $(OBJ) getting_started1.obj $(PYLIB) -o getting_started1.pyd
getting_started2.pyd: $(OBJ) getting_started2.obj
$(LD) $(LDOPTS) $(OBJ) getting_started2.obj $(PYLIB) -o getting_started2.pyd
simple_vector.pyd: $(OBJ) simple_vector.obj
$(LD) $(LDOPTS) $(OBJ) simple_vector.obj $(PYLIB) -o simple_vector.pyd
do_it_yourself_convts.pyd: $(OBJ) do_it_yourself_convts.obj
$(LD) $(LDOPTS) $(OBJ) do_it_yourself_convts.obj $(PYLIB) -o do_it_yourself_convts.pyd
nested.pyd: $(OBJ) nested.obj
$(LD) $(LDOPTS) $(OBJ) nested.obj $(PYLIB) -o nested.pyd
pickle1.pyd: $(OBJ) pickle1.obj
$(LD) $(LDOPTS) $(OBJ) pickle1.obj $(PYLIB) -o pickle1.pyd
pickle2.pyd: $(OBJ) pickle2.obj
$(LD) $(LDOPTS) $(OBJ) pickle2.obj $(PYLIB) -o pickle2.pyd
pickle3.pyd: $(OBJ) pickle3.obj
$(LD) $(LDOPTS) $(OBJ) pickle3.obj $(PYLIB) -o pickle3.pyd
noncopyable_export.pyd: $(OBJ) noncopyable_export.obj
$(LD) $(LDOPTS) $(OBJ) noncopyable_export.obj $(PYLIB) -o noncopyable_export.pyd
noncopyable_import.pyd: $(OBJ) noncopyable_import.obj
$(LD) $(LDOPTS) $(OBJ) noncopyable_import.obj $(PYLIB) -o noncopyable_import.pyd
ivect.pyd: $(OBJ) ivect.obj
$(LD) $(LDOPTS) $(OBJ) ivect.obj $(PYLIB) -o ivect.pyd
dvect.pyd: $(OBJ) dvect.obj
$(LD) $(LDOPTS) $(OBJ) dvect.obj $(PYLIB) -o dvect.pyd
richcmp1.pyd: $(OBJ) richcmp1.obj
$(LD) $(LDOPTS) $(OBJ) richcmp1.obj $(PYLIB) -o richcmp1.pyd
richcmp2.pyd: $(OBJ) richcmp2.obj
$(LD) $(LDOPTS) $(OBJ) richcmp2.obj $(PYLIB) -o richcmp2.pyd
richcmp3.pyd: $(OBJ) richcmp3.obj
$(LD) $(LDOPTS) $(OBJ) richcmp3.obj $(PYLIB) -o richcmp3.pyd
.cpp.obj:
$(CPP) $(CPPOPTS) -c $*.cpp
test:
$(PYEXE) comprehensive.py
$(PYEXE) test_abstract.py
$(PYEXE) test_getting_started1.py
$(PYEXE) test_getting_started2.py
$(PYEXE) test_simple_vector.py
$(PYEXE) test_do_it_yourself_convts.py
$(PYEXE) test_nested.py
$(PYEXE) test_pickle1.py
$(PYEXE) test_pickle2.py
$(PYEXE) test_pickle3.py
$(PYEXE) test_cross_module.py
$(PYEXE) test_richcmp1.py
$(PYEXE) test_richcmp2.py
$(PYEXE) test_richcmp3.py
clean:
-del *.obj
-del *.lib
-del *.exp
-del *.idb
-del *.pyd
-del *.pyc
softlinks:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) softlinks
unlink:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) unlink
cp:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) cp
rm:
python $(BOOST_UNIX)/libs/python/build/filemgr.py $(BOOST_UNIX) rm
copy:
$(PYEXE) $(BOOST_WIN)\libs\python\build\filemgr.py $(BOOST_WIN) copy
del:
$(PYEXE) $(BOOST_WIN)\libs\python\build\filemgr.py $(BOOST_WIN) del

View File

@@ -1,2 +0,0 @@
call "c:\program files\metrowerks\codewarrior\other metrowerks tools\command line tools\cwenv.bat"
set MWWinx86LibraryFiles=MSL_All-DLL_x86.lib;gdi32.lib;user32.lib;kernel32.lib

23
doc/Jamfile Normal file
View File

@@ -0,0 +1,23 @@
# Copyright David Abrahams 2006. Distributed under the Boost
# Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
import docutils ;
import path ;
sources = building.rst ;
bases = $(sources:S=) ;
# This is a path relative to the html/ subdirectory where the
# generated output will eventually be moved.
stylesheet = "--stylesheet=../../../rst.css" ;
for local b in $(bases)
{
html $(b) : $(b).rst :
<docutils-html>"-gdt --source-url="./$(b).rst" --link-stylesheet --traceback --trim-footnote-reference-space --footnote-references=superscript "$(stylesheet)
;
}
alias htmls : $(bases) ;
stage . : $(bases) ;

22
doc/PyConDC_2003/bpl.html Executable file
View File

@@ -0,0 +1,22 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="refresh" content="0; URL=http://www.boost-consulting.com/writing/bpl.html">
<title>Loading: &ldquo;Building Hybrid Systems With Boost.Python&rdquo;</title>
</head>
<body>
Loading...; if nothing happens, please go to <a href= "http://www.boost-consulting.com/writing/bpl.html">http://www.boost-consulting.com/writing/bpl.html</a>.
</body>
</html>

BIN
doc/PyConDC_2003/bpl.pdf Executable file

Binary file not shown.

5
doc/PyConDC_2003/bpl.txt Normal file
View File

@@ -0,0 +1,5 @@
.. Copyright David Abrahams 2006. Distributed under the Boost
.. Software License, Version 1.0. (See accompanying
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
This file has been moved to http://www.boost-consulting.com/writing/bpl.txt.

View File

@@ -0,0 +1,912 @@
Copyright David Abrahams 2006. Distributed under the Boost
Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
.. This is a comment. Note how any initial comments are moved by
transforms to after the document title, subtitle, and docinfo.
.. Need intro and conclusion
.. Exposing classes
.. Constructors
.. Overloading
.. Properties and data members
.. Inheritance
.. Operators and Special Functions
.. Virtual Functions
.. Call Policies
++++++++++++++++++++++++++++++++++++++++++++++
Introducing Boost.Python (Extended Abstract)
++++++++++++++++++++++++++++++++++++++++++++++
.. bibliographic fields (which also require a transform):
:Author: David Abrahams
:Address: 45 Walnut Street
Somerville, MA 02143
:Contact: dave@boost-consulting.com
:organization: `Boost Consulting`_
:date: $Date$
:status: This is a "work in progress"
:version: 1
:copyright: Copyright David Abrahams 2002. All rights reserved
:Dedication:
For my girlfriend, wife, and partner Luann
:abstract:
This paper describes the Boost.Python library, a system for
C++/Python interoperability.
.. meta::
:keywords: Boost,python,Boost.Python,C++
:description lang=en: C++/Python interoperability with Boost.Python
.. contents:: Table of Contents
.. section-numbering::
.. _`Boost Consulting`: http://www.boost-consulting.com
==============
Introduction
==============
Python and C++ are in many ways as different as two languages could
be: while C++ is usually compiled to machine-code, Python is
interpreted. Python's dynamic type system is often cited as the
foundation of its flexibility, while in C++ static typing is the
cornerstone of its efficiency. C++ has an intricate and difficult
meta-language to support compile-time polymorphism, while Python is
a uniform language with convenient runtime polymorphism.
Yet for many programmers, these very differences mean that Python and
C++ complement one another perfectly. Performance bottlenecks in
Python programs can be rewritten in C++ for maximal speed, and
authors of powerful C++ libraries choose Python as a middleware
language for its flexible system integration capabilities.
Furthermore, the surface differences mask some strong similarities:
* 'C'-family control structures (if, while, for...)
* Support for object-orientation, functional programming, and generic
programming (these are both *multi-paradigm* programming languages.)
* Comprehensive operator overloading facilities, recognizing the
importance of syntactic variability for readability and
expressivity.
* High-level concepts such as collections and iterators.
* High-level encapsulation facilities (C++: namespaces, Python: modules)
to support the design of re-usable libraries.
* Exception-handling for effective management of error conditions.
* C++ idioms in common use, such as handle/body classes and
reference-counted smart pointers mirror Python reference semantics.
Python provides a rich 'C' API for writers of 'C' extension modules.
Unfortunately, using this API directly for exposing C++ type and
function interfaces to Python is much more tedious than it should be.
This is mainly due to the limitations of the 'C' language. Compared to
C++ and Python, 'C' has only very rudimentary abstraction facilities.
Support for exception-handling is completely missing. One important
undesirable consequence is that 'C' extension module writers are
required to manually manage Python reference counts. Another unpleasant
consequence is a very high degree of repetition of similar code in 'C'
extension modules. Of course highly redundant code does not only cause
frustration for the module writer, but is also very difficult to
maintain.
The limitations of the 'C' API have lead to the development of a
variety of wrapping systems. SWIG_ is probably the most popular package
for the integration of C/C++ and Python. A more recent development is
the SIP_ package, which is specifically designed for interfacing Python
with the Qt_ graphical user interface library. Both SWIG and SIP
introduce a new specialized language for defining the inter-language
bindings. Of course being able to use a specialized language has
advantages, but having to deal with three different languages (Python,
C/C++ and the interface language) also introduces practical and mental
difficulties. The CXX_ package demonstrates an interesting alternative.
It shows that at least some parts of Python's 'C' API can be wrapped
and presented through a much more user-friendly C++ interface. However,
unlike SWIG and SIP, CXX does not include support for wrapping C++
classes as new Python types. CXX is also no longer actively developed.
In some respects Boost.Python combines ideas from SWIG and SIP with
ideas from CXX. Like SWIG and SIP, Boost.Python is a system for
wrapping C++ classes as new Python "built-in" types, and C/C++
functions as Python functions. Like CXX, Boost.Python presents Python's
'C' API through a C++ interface. Boost.Python goes beyond the scope of
other systems with the unique support for C++ virtual functions that
are overrideable in Python, support for organizing extensions as Python
packages with a central registry for inter-language type conversions,
and a convenient mechanism for tying into Python's serialization engine
(pickle). Importantly, all this is achieved without introducing a new
syntax. Boost.Python leverages the power of C++ meta-programming
techniques to introspect about the C++ type system, and presents a
simple, IDL-like C++ interface for exposing C/C++ code in extension
modules. Boost.Python is a pure C++ library, the inter-language
bindings are defined in pure C++, and other than a C++ compiler only
Python itself is required to get started with Boost.Python. Last but
not least, Boost.Python is an unrestricted open source library. There
are no strings attached even for commercial applications.
.. _SWIG: http://www.swig.org/
.. _SIP: http://www.riverbankcomputing.co.uk/sip/index.php
.. _Qt: http://www.trolltech.com/
.. _CXX: http://cxx.sourceforge.net/
===========================
Boost.Python Design Goals
===========================
The primary goal of Boost.Python is to allow users to expose C++
classes and functions to Python using nothing more than a C++
compiler. In broad strokes, the user experience should be one of
directly manipulating C++ objects from Python.
However, it's also important not to translate all interfaces *too*
literally: the idioms of each language must be respected. For
example, though C++ and Python both have an iterator concept, they are
expressed very differently. Boost.Python has to be able to bridge the
interface gap.
It must be possible to insulate Python users from crashes resulting
from trivial misuses of C++ interfaces, such as accessing
already-deleted objects. By the same token the library should
insulate C++ users from low-level Python 'C' API, replacing
error-prone 'C' interfaces like manual reference-count management and
raw ``PyObject`` pointers with more-robust alternatives.
Support for component-based development is crucial, so that C++ types
exposed in one extension module can be passed to functions exposed in
another without loss of crucial information like C++ inheritance
relationships.
Finally, all wrapping must be *non-intrusive*, without modifying or
even seeing the original C++ source code. Existing C++ libraries have
to be wrappable by third parties who only have access to header files
and binaries.
==========================
Hello Boost.Python World
==========================
And now for a preview of Boost.Python, and how it improves on the raw
facilities offered by Python. Here's a function we might want to
expose::
char const* greet(unsigned x)
{
static char const* const msgs[] = { "hello", "Boost.Python", "world!" };
if (x > 2)
throw std::range_error("greet: index out of range");
return msgs[x];
}
To wrap this function in standard C++ using the Python 'C' API, we'd
need something like this::
extern "C" // all Python interactions use 'C' linkage and calling convention
{
// Wrapper to handle argument/result conversion and checking
PyObject* greet_wrap(PyObject* args, PyObject * keywords)
{
int x;
if (PyArg_ParseTuple(args, "i", &x)) // extract/check arguments
{
char const* result = greet(x); // invoke wrapped function
return PyString_FromString(result); // convert result to Python
}
return 0; // error occurred
}
// Table of wrapped functions to be exposed by the module
static PyMethodDef methods[] = {
{ "greet", greet_wrap, METH_VARARGS, "return one of 3 parts of a greeting" }
, { NULL, NULL, 0, NULL } // sentinel
};
// module initialization function
DL_EXPORT init_hello()
{
(void) Py_InitModule("hello", methods); // add the methods to the module
}
}
Now here's the wrapping code we'd use to expose it with Boost.Python::
#include <boost/python.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(hello)
{
def("greet", greet, "return one of 3 parts of a greeting");
}
and here it is in action::
>>> import hello
>>> for x in range(3):
... print hello.greet(x)
...
hello
Boost.Python
world!
Aside from the fact that the 'C' API version is much more verbose than
the BPL one, it's worth noting that it doesn't handle a few things
correctly:
* The original function accepts an unsigned integer, and the Python
'C' API only gives us a way of extracting signed integers. The
Boost.Python version will raise a Python exception if we try to pass
a negative number to ``hello.greet``, but the other one will proceed
to do whatever the C++ implementation does when converting an
negative integer to unsigned (usually wrapping to some very large
number), and pass the incorrect translation on to the wrapped
function.
* That brings us to the second problem: if the C++ ``greet()``
function is called with a number greater than 2, it will throw an
exception. Typically, if a C++ exception propagates across the
boundary with code generated by a 'C' compiler, it will cause a
crash. As you can see in the first version, there's no C++
scaffolding there to prevent this from happening. Functions wrapped
by Boost.Python automatically include an exception-handling layer
which protects Python users by translating unhandled C++ exceptions
into a corresponding Python exception.
* A slightly more-subtle limitation is that the argument conversion
used in the Python 'C' API case can only get that integer ``x`` in
*one way*. PyArg_ParseTuple can't convert Python ``long`` objects
(arbitrary-precision integers) which happen to fit in an ``unsigned
int`` but not in a ``signed long``, nor will it ever handle a
wrapped C++ class with a user-defined implicit ``operator unsigned
int()`` conversion. The BPL's dynamic type conversion registry
allows users to add arbitrary conversion methods.
==================
Library Overview
==================
This section outlines some of the library's major features. Except as
necessary to avoid confusion, details of library implementation are
omitted.
-------------------------------------------
The fundamental type-conversion mechanism
-------------------------------------------
XXX This needs to be rewritten.
Every argument of every wrapped function requires some kind of
extraction code to convert it from Python to C++. Likewise, the
function return value has to be converted from C++ to Python.
Appropriate Python exceptions must be raised if the conversion fails.
Argument and return types are part of the function's type, and much of
this tedium can be relieved if the wrapping system can extract that
information through introspection.
Passing a wrapped C++ derived class instance to a C++ function
accepting a pointer or reference to a base class requires knowledge of
the inheritance relationship and how to translate the address of a base
class into that of a derived class.
------------------
Exposing Classes
------------------
C++ classes and structs are exposed with a similarly-terse interface.
Given::
struct World
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
The following code will expose it in our extension module::
#include <boost/python.hpp>
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
}
Although this code has a certain pythonic familiarity, people
sometimes find the syntax bit confusing because it doesn't look like
most of the C++ code they're used to. All the same, this is just
standard C++. Because of their flexible syntax and operator
overloading, C++ and Python are great for defining domain-specific
(sub)languages
(DSLs), and that's what we've done in BPL. To break it down::
class_<World>("World")
constructs an unnamed object of type ``class_<World>`` and passes
``"World"`` to its constructor. This creates a new-style Python class
called ``World`` in the extension module, and associates it with the
C++ type ``World`` in the BPL type conversion registry. We might have
also written::
class_<World> w("World");
but that would've been more verbose, since we'd have to name ``w``
again to invoke its ``def()`` member function::
w.def("greet", &World::greet)
There's nothing special about the location of the dot for member
access in the original example: C++ allows any amount of whitespace on
either side of a token, and placing the dot at the beginning of each
line allows us to chain as many successive calls to member functions
as we like with a uniform syntax. The other key fact that allows
chaining is that ``class_<>`` member functions all return a reference
to ``*this``.
So the example is equivalent to::
class_<World> w("World");
w.def("greet", &World::greet);
w.def("set", &World::set);
It's occasionally useful to be able to break down the components of a
Boost.Python class wrapper in this way, but the rest of this paper
will tend to stick to the terse syntax.
For completeness, here's the wrapped class in use:
>>> import hello
>>> planet = hello.World()
>>> planet.set('howdy')
>>> planet.greet()
'howdy'
Constructors
============
Since our ``World`` class is just a plain ``struct``, it has an
implicit no-argument (nullary) constructor. Boost.Python exposes the
nullary constructor by default, which is why we were able to write:
>>> planet = hello.World()
However, well-designed classes in any language may require constructor
arguments in order to establish their invariants. Unlike Python,
where ``__init__`` is just a specially-named method, In C++
constructors cannot be handled like ordinary member functions. In
particular, we can't take their address: ``&World::World`` is an
error. The library provides a different interface for specifying
constructors. Given::
struct World
{
World(std::string msg); // added constructor
...
we can modify our wrapping code as follows::
class_<World>("World", init<std::string>())
...
of course, a C++ class may have additional constructors, and we can
expose those as well by passing more instances of ``init<...>`` to
``def()``::
class_<World>("World", init<std::string>())
.def(init<double, double>())
...
Boost.Python allows wrapped functions, member functions, and
constructors to be overloaded to mirror C++ overloading.
Data Members and Properties
===========================
Any publicly-accessible data members in a C++ class can be easily
exposed as either ``readonly`` or ``readwrite`` attributes::
class_<World>("World", init<std::string>())
.def_readonly("msg", &World::msg)
...
and can be used directly in Python:
>>> planet = hello.World('howdy')
>>> planet.msg
'howdy'
This does *not* result in adding attributes to the ``World`` instance
``__dict__``, which can result in substantial memory savings when
wrapping large data structures. In fact, no instance ``__dict__``
will be created at all unless attributes are explicitly added from
Python. BPL owes this capability to the new Python 2.2 type system,
in particular the descriptor interface and ``property`` type.
In C++, publicly-accessible data members are considered a sign of poor
design because they break encapsulation, and style guides usually
dictate the use of "getter" and "setter" functions instead. In
Python, however, ``__getattr__``, ``__setattr__``, and since 2.2,
``property`` mean that attribute access is just one more
well-encapsulated syntactic tool at the programmer's disposal. BPL
bridges this idiomatic gap by making Python ``property`` creation
directly available to users. So if ``msg`` were private, we could
still expose it as attribute in Python as follows::
class_<World>("World", init<std::string>())
.add_property("msg", &World::greet, &World::set)
...
The example above mirrors the familiar usage of properties in Python
2.2+:
>>> class World(object):
... __init__(self, msg):
... self.__msg = msg
... def greet(self):
... return self.__msg
... def set(self, msg):
... self.__msg = msg
... msg = property(greet, set)
Operators and Special Functions
===============================
The ability to write arithmetic operators for user-defined types that
C++ and Python both allow the definition of has been a major factor in
the popularity of both languages for scientific computing. The
success of packages like NumPy attests to the power of exposing
operators in extension modules. In this example we'll wrap a class
representing a position in a large file::
class FilePos { /*...*/ };
// Linear offset
FilePos operator+(FilePos, int);
FilePos operator+(int, FilePos);
FilePos operator-(FilePos, int);
// Distance between two FilePos objects
int operator-(FilePos, FilePos);
// Offset with assignment
FilePos& operator+=(FilePos&, int);
FilePos& operator-=(FilePos&, int);
// Comparison
bool operator<(FilePos, FilePos);
The wrapping code looks like this::
class_<FilePos>("FilePos")
.def(self + int()) // __add__
.def(int() + self) // __radd__
.def(self - int()) // __sub__
.def(self - self) // __sub__
.def(self += int()) // __iadd__
.def(self -= int()) // __isub__
.def(self < self); // __lt__
;
The magic is performed using a simplified application of "expression
templates" [VELD1995]_, a technique originally developed by for
optimization of high-performance matrix algebra expressions. The
essence is that instead of performing the computation immediately,
operators are overloaded to construct a type *representing* the
computation. In matrix algebra, dramatic optimizations are often
available when the structure of an entire expression can be taken into
account, rather than processing each operation "greedily".
Boost.Python uses the same technique to build an appropriate Python
callable object based on an expression involving ``self``, which is
then added to the class.
Inheritance
===========
C++ inheritance relationships can be represented to Boost.Python by adding
an optional ``bases<...>`` argument to the ``class_<...>`` template
parameter list as follows::
class_<Derived, bases<Base1,Base2> >("Derived")
...
This has two effects:
1. When the ``class_<...>`` is created, Python type objects
corresponding to ``Base1`` and ``Base2`` are looked up in the BPL
registry, and are used as bases for the new Python ``Derived`` type
object [#mi]_, so methods exposed for the Python ``Base1`` and
``Base2`` types are automatically members of the ``Derived`` type.
Because the registry is global, this works correctly even if
``Derived`` is exposed in a different module from either of its
bases.
2. C++ conversions from ``Derived`` to its bases are added to the
Boost.Python registry. Thus wrapped C++ methods expecting (a
pointer or reference to) an object of either base type can be
called with an object wrapping a ``Derived`` instance. Wrapped
member functions of class ``T`` are treated as though they have an
implicit first argument of ``T&``, so these conversions are
necessary to allow the base class methods to be called for derived
objects.
Of course it's possible to derive new Python classes from wrapped C++
class instances. Because Boost.Python uses the new-style class
system, that works very much as for the Python built-in types. There
is one significant detail in which it differs: the built-in types
generally establish their invariants in their ``__new__`` function, so
that derived classes do not need to call ``__init__`` on the base
class before invoking its methods :
>>> class L(list):
... def __init__(self):
... pass
...
>>> L().reverse()
>>>
Because C++ object construction is a one-step operation, C++ instance
data cannot be constructed until the arguments are available, in the
``__init__`` function:
>>> class D(SomeBPLClass):
... def __init__(self):
... pass
...
>>> D().some_bpl_method()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: bad argument type for built-in operation
This happened because Boost.Python couldn't find instance data of type
``SomeBPLClass`` within the ``D`` instance; ``D``'s ``__init__``
function masked construction of the base class. It could be corrected
by either removing ``D``'s ``__init__`` function or having it call
``SomeBPLClass.__init__(...)`` explicitly.
Virtual Functions
=================
Deriving new types in Python from extension classes is not very
interesting unless they can be used polymorphically from C++. In
other words, Python method implementations should appear to override
the implementation of C++ virtual functions when called *through base
class pointers/references from C++*. Since the only way to alter the
behavior of a virtual function is to override it in a derived class,
the user must build a special derived class to dispatch a polymorphic
class' virtual functions::
//
// interface to wrap:
//
class Base
{
public:
virtual int f(std::string x) { return 42; }
virtual ~Base();
};
int calls_f(Base const& b, std::string x) { return b.f(x); }
//
// Wrapping Code
//
// Dispatcher class
struct BaseWrap : Base
{
// Store a pointer to the Python object
BaseWrap(PyObject* self_) : self(self_) {}
PyObject* self;
// Default implementation, for when f is not overridden
int f_default(std::string x) { return this->Base::f(x); }
// Dispatch implementation
int f(std::string x) { return call_method<int>(self, "f", x); }
};
...
def("calls_f", calls_f);
class_<Base, BaseWrap>("Base")
.def("f", &Base::f, &BaseWrap::f_default)
;
Now here's some Python code which demonstrates:
>>> class Derived(Base):
... def f(self, s):
... return len(s)
...
>>> calls_f(Base(), 'foo')
42
>>> calls_f(Derived(), 'forty-two')
9
Things to notice about the dispatcher class:
* The key element which allows overriding in Python is the
``call_method`` invocation, which uses the same global type
conversion registry as the C++ function wrapping does to convert its
arguments from C++ to Python and its return type from Python to C++.
* Any constructor signatures you wish to wrap must be replicated with
an initial ``PyObject*`` argument
* The dispatcher must store this argument so that it can be used to
invoke ``call_method``
* The ``f_default`` member function is needed when the function being
exposed is not pure virtual; there's no other way ``Base::f`` can be
called on an object of type ``BaseWrap``, since it overrides ``f``.
Admittedly, this formula is tedious to repeat, especially on a project
with many polymorphic classes; that it is necessary reflects
limitations in C++'s compile-time reflection capabilities. Several
efforts are underway to write front-ends for Boost.Python which can
generate these dispatchers (and other wrapping code) automatically.
If these are successful it will mark a move away from wrapping
everything directly in pure C++ for many of our users.
---------------
Serialization
---------------
*Serialization* is the process of converting objects in memory to a
form that can be stored on disk or sent over a network connection. The
serialized object (most often a plain string) can be retrieved and
converted back to the original object. A good serialization system will
automatically convert entire object hierarchies. Python's standard
``pickle`` module is such a system. It leverages the language's strong
runtime introspection facilities for serializing practically arbitrary
user-defined objects. With a few simple and unintrusive provisions this
powerful machinery can be extended to also work for wrapped C++ objects.
Here is an example::
#include <string>
struct World
{
World(std::string a_msg) : msg(a_msg) {}
std::string greet() const { return msg; }
std::string msg;
};
#include <boost/python.hpp>
using namespace boost::python;
struct World_picklers : pickle_suite
{
static tuple
getinitargs(World const& w) { return make_tuple(w.greet()); }
};
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World", init<std::string>())
.def("greet", &World::greet)
.def_pickle(World_picklers())
;
}
Now let's create a ``World`` object and put it to rest on disk::
>>> import hello
>>> import pickle
>>> a_world = hello.World("howdy")
>>> pickle.dump(a_world, open("my_world", "w"))
In a potentially *different script* on a potentially *different
computer* with a potentially *different operating system*::
>>> import pickle
>>> resurrected_world = pickle.load(open("my_world", "r"))
>>> resurrected_world.greet()
'howdy'
Of course the ``cPickle`` module can also be used for faster
processing.
Boost.Python's ``pickle_suite`` fully supports the ``pickle`` protocol
defined in the standard Python documentation. There is a one-to-one
correspondence between the standard pickling methods (``__getinitargs__``,
``__getstate__``, ``__setstate__``) and the functions defined by the
user in the class derived from ``pickle_suite`` (``getinitargs``,
``getstate``, ``setstate``). The ``class_::def_pickle()`` member function
is used to establish the Python bindings for all user-defined functions
simultaneously. Correct signatures for these functions are enforced at
compile time. Non-sensical combinations of the three pickle functions
are also rejected at compile time. These measures are designed to
help the user in avoiding obvious errors.
Enabling serialization of more complex C++ objects requires a little
more work than is shown in the example above. Fortunately the
``object`` interface (see next section) greatly helps in keeping the
code manageable.
------------------
Object interface
------------------
Experienced extension module authors will be familiar with the 'C' view
of Python objects, the ubiquitous ``PyObject*``. Most if not all Python
'C' API functions involve ``PyObject*`` as arguments or return type. A
major complication is the raw reference counting interface presented to
the 'C' programmer. E.g. some API functions return *new references* and
others return *borrowed references*. It is up to the extension module
writer to properly increment and decrement reference counts. This
quickly becomes cumbersome and error prone, especially if there are
multiple execution paths.
Boost.Python provides a type ``object`` which is essentially a high
level wrapper around ``PyObject*``. ``object`` automates reference
counting as much as possible. It also provides the facilities for
converting arbitrary C++ types to Python objects and vice versa.
This significantly reduces the learning effort for prospective
extension module writers.
Creating an ``object`` from any other type is extremely simple::
object o(3);
``object`` has templated interactions with all other types, with
automatic to-python conversions. It happens so naturally that it's
easily overlooked.
The ``extract<T>`` class template can be used to convert Python objects
to C++ types::
double x = extract<double>(o);
All registered user-defined conversions are automatically accessible
through the ``object`` interface. With reference to the ``World`` class
defined in previous examples::
object as_python_object(World("howdy"));
World back_as_c_plus_plus_object = extract<World>(as_python_object);
If a C++ type cannot be converted to a Python object an appropriate
exception is thrown at runtime. Similarly, an appropriate exception is
thrown if a C++ type cannot be extracted from a Python object.
``extract<T>`` provides facilities for avoiding exceptions if this is
desired.
The ``object::attr()`` member function is available for accessing
and manipulating attributes of Python objects. For example::
object planet(World());
planet.attr("set")("howdy");
``planet.attr("set")`` returns a callable ``object``. ``"howdy"`` is
converted to a Python string object which is then passed as an argument
to the ``set`` method.
The ``object`` type is accompanied by a set of derived types
that mirror the Python built-in types such as ``list``, ``dict``,
``tuple``, etc. as much as possible. This enables convenient
manipulation of these high-level types from C++::
dict d;
d["some"] = "thing";
d["lucky_number"] = 13;
list l = d.keys();
This almost looks and works like regular Python code, but it is pure C++.
=================
Thinking hybrid
=================
For many applications runtime performance considerations are very
important. This is particularly true for most scientific applications.
Often the performance considerations dictate the use of a compiled
language for the core algorithms. Traditionally the decision to use a
particular programming language is an exclusive one. Because of the
practical and mental difficulties of combining different languages many
systems are written in just one language. This is quite unfortunate
because the price payed for runtime performance is typically a
significant overhead due to static typing. For example, our experience
shows that developing maintainable C++ code is typically much more
time-consuming and requires much more hard-earned working experience
than developing useful Python code. A related observation is that many
compiled packages are augmented by some type of rudimentary scripting
layer. These ad hoc solutions clearly show that many times a compiled
language alone does not get the job done. On the other hand it is also
clear that a pure Python implementation is too slow for numerically
intensive production code.
Boost.Python enables us to *think hybrid* when developing new
applications. Python can be used for rapidly prototyping a
new application. Python's ease of use and the large pool of standard
libraries give us a head start on the way to a first working system. If
necessary, the working procedure can be used to discover the
rate-limiting algorithms. To maximize performance these can be
reimplemented in C++, together with the Boost.Python bindings needed to
tie them back into the existing higher-level procedure.
Of course, this *top-down* approach is less attractive if it is clear
from the start that many algorithms will eventually have to be
implemented in a compiled language. Fortunately Boost.Python also
enables us to pursue a *bottom-up* approach. We have used this approach
very successfully in the development of a toolbox for scientific
applications (scitbx) that we will describe elsewhere. The toolbox
started out mainly as a library of C++ classes with Boost.Python
bindings, and for a while the growth was mainly concentrated on the C++
parts. However, as the toolbox is becoming more complete, more and more
newly added functionality can be implemented in Python. We expect this
trend to continue, as illustrated qualitatively in this figure:
.. image:: python_cpp_mix.png
This figure shows the ratio of newly added C++ and Python code over
time as new algorithms are implemented. We expect this ratio to level
out near 70% Python. The increasing ability to solve new problems
mostly with the easy-to-use Python language rather than a necessarily
more arcane statically typed language is the return on the investment
of learning how to use Boost.Python. The ability to solve some problems
entirely using only Python will enable a larger group of people to
participate in the rapid development of new applications.
=============
Conclusions
=============
The examples in this paper illustrate that Boost.Python enables
seamless interoperability between C++ and Python. Importantly, this is
achieved without introducing a third syntax: the Python/C++ interface
definitions are written in pure C++. This avoids any problems with
parsing the C++ code to be interfaced to Python, yet the interface
definitions are concise and maintainable. Freed from most of the
development-time penalties of crossing a language boundary, software
designers can take full advantage of two rich and complimentary
language environments. In practice it turns out that some things are
very difficult to do with pure Python/C (e.g. an efficient array
library with an intuitive interface in the compiled language) and
others are very difficult to do with pure C++ (e.g. serialization).
If one has the luxury of being able to design a software system as a
hybrid system from the ground up there are many new ways of avoiding
road blocks in one language or the other.
.. I'm not ready to give up on all of this quite yet
.. Perhaps one day we'll have a language with the simplicity and
expressive power of Python and the compile-time muscle of C++. Being
able to take advantage of all of these facilities without paying the
mental and development-time penalties of crossing a language barrier
would bring enormous benefits. Until then, interoperability tools
like Boost.Python can help lower the barrier and make the benefits of
both languages more accessible to both communities.
===========
Footnotes
===========
.. [#mi] For hard-core new-style class/extension module writers it is
worth noting that the normal requirement that all extension classes
with data form a layout-compatible single-inheritance chain is
lifted for Boost.Python extension classes. Clearly, either
``Base1`` or ``Base2`` has to occupy a different offset in the
``Derived`` class instance. This is possible because the wrapped
part of BPL extension class instances is never assumed to have a
fixed offset within the wrapper.
===========
Citations
===========
.. [VELD1995] T. Veldhuizen, "Expression Templates," C++ Report,
Vol. 7 No. 5 June 1995, pp. 26-31.
http://osl.iu.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html

View File

@@ -0,0 +1,190 @@
/*
:Author: David Goodger
:Contact: goodger@users.sourceforge.net
:date: $Date$
:version: $Revision$
:copyright: This stylesheet has been placed in the public domain.
boostinspect:nolicense
Default cascading style sheet for the HTML output of Docutils.
*/
.first {
margin-top: 0 }
.last {
margin-bottom: 0 }
a.toc-backref {
text-decoration: none ;
color: black }
dd {
margin-bottom: 0.5em }
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.attention, div.caution, div.danger, div.error, div.hint,
div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title {
color: red ;
font-weight: bold ;
font-family: sans-serif }
div.hint p.admonition-title, div.important p.admonition-title,
div.note p.admonition-title, div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em }
div.footer, div.header {
font-size: smaller }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr {
width: 75% }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font-family: serif ;
font-size: 100% }
pre.line-block {
font-family: serif ;
font-size: 100% }
pre.literal-block, pre.doctest-block {
margin-left: 2em ;
margin-right: 2em ;
background-color: #eeeeee }
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option-argument {
font-style: italic }
span.pre {
white-space: pre }
span.problematic {
color: red }
table {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.citation {
border-left: solid thin gray ;
padding-left: 0.5ex }
table.docinfo {
margin: 2em 4em }
table.footnote {
border-left: solid thin black ;
padding-left: 0.5ex }
td, th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
th.docinfo-name, th.field-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap }
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
font-size: 100% }
tt {
background-color: #eeeeee }
ul.auto-toc {
list-style-type: none }

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -1,3 +1,7 @@
/* Copyright David Abrahams 2006. Distributed under the Boost
Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
*/
H1
{
FONT-SIZE: 200%

View File

@@ -1,222 +1,636 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
<title>Boost C++ Libraries: Boost.Python Build and Test HOWTO</title>
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
</head>
<body>
<div class="document" id="logo-boost-python-build-and-test-howto">
<h1 class="title"><a class="reference external" href="../index.htm"><img alt="Boost C++ Libraries:" class="boost-logo" src="../../../boost.png" /></a> Boost.Python Build and Test HOWTO</h1>
<meta name="generator" content="HTML Tidy, see www.w3.org">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at -->
<!-- http://www.boost.org/LICENSE_1_0.txt) -->
<div class="contents sidebar small topic" id="contents">
<p class="topic-title first">Contents</p>
<ul class="auto-toc simple">
<li><a class="reference internal" href="#requirements" id="id25">1&nbsp;&nbsp;&nbsp;Requirements</a></li>
<li><a class="reference internal" href="#background" id="id26">2&nbsp;&nbsp;&nbsp;Background</a></li>
<li><a class="reference internal" href="#no-install-quickstart" id="id27">3&nbsp;&nbsp;&nbsp;No-Install Quickstart</a><ul class="auto-toc">
<li><a class="reference internal" href="#basic-procedure" id="id28">3.1&nbsp;&nbsp;&nbsp;Basic Procedure</a></li>
<li><a class="reference internal" href="#in-case-of-trouble" id="id29">3.2&nbsp;&nbsp;&nbsp;In Case of Trouble</a></li>
<li><a class="reference internal" href="#in-case-everything-seemed-to-work" id="id30">3.3&nbsp;&nbsp;&nbsp;In Case Everything Seemed to Work</a></li>
<li><a class="reference internal" href="#modifying-the-example-project" id="id31">3.4&nbsp;&nbsp;&nbsp;Modifying the Example Project</a></li>
</ul>
</li>
<li><a class="reference internal" href="#installing-boost-python-on-your-system" id="id32">4&nbsp;&nbsp;&nbsp;Installing Boost.Python on your System</a></li>
<li><a class="reference internal" href="#configuring-boost-build" id="id33">5&nbsp;&nbsp;&nbsp;Configuring Boost.Build</a><ul class="auto-toc">
<li><a class="reference internal" href="#python-configuration-parameters" id="id34">5.1&nbsp;&nbsp;&nbsp;Python Configuration Parameters</a></li>
<li><a class="reference internal" href="#examples" id="id35">5.2&nbsp;&nbsp;&nbsp;Examples</a></li>
</ul>
</li>
<li><a class="reference internal" href="#choosing-a-boost-python-library-binary" id="id36">6&nbsp;&nbsp;&nbsp;Choosing a Boost.Python Library Binary</a><ul class="auto-toc">
<li><a class="reference internal" href="#the-dynamic-binary" id="id37">6.1&nbsp;&nbsp;&nbsp;The Dynamic Binary</a></li>
<li><a class="reference internal" href="#the-static-binary" id="id38">6.2&nbsp;&nbsp;&nbsp;The Static Binary</a></li>
</ul>
</li>
<li><a class="reference internal" href="#include-issues" id="id39">7&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">#include</span></tt> Issues</a></li>
<li><a class="reference internal" href="#python-debugging-builds" id="id40">8&nbsp;&nbsp;&nbsp;Python Debugging Builds</a></li>
<li><a class="reference internal" href="#testing-boost-python" id="id41">9&nbsp;&nbsp;&nbsp;Testing Boost.Python</a></li>
<li><a class="reference internal" href="#notes-for-mingw-and-cygwin-with-mno-cygwin-gcc-users" id="id42">10&nbsp;&nbsp;&nbsp;Notes for MinGW (and Cygwin with -mno-cygwin) GCC Users</a></li>
</ul>
</div>
<div class="section" id="requirements">
<h1><a class="toc-backref" href="#id25">1&nbsp;&nbsp;&nbsp;Requirements</a></h1>
<p>Boost.Python requires <a class="reference external" href="http://www.python.org/2.2">Python 2.2</a><a class="footnote-reference" href="#id22" id="id2"><sup>1</sup></a> <em>or</em> <a class="reference external" href="http://www.python.org"><em>newer</em></a>.</p>
</div>
<div class="section" id="background">
<h1><a class="toc-backref" href="#id26">2&nbsp;&nbsp;&nbsp;Background</a></h1>
<p>There are two basic models for combining C++ and Python:</p>
<ul class="simple">
<li><a class="reference external" href="http://www.python.org/doc/current/ext/intro.html">extending</a>, in which the end-user launches the Python interpreter
executable and imports Python “extension modules” written in C++.
Think of taking a library written in C++ and giving it a Python
interface so Python programmers can use it. From Python, these
modules look just like regular Python modules.</li>
<li><a class="reference external" href="http://www.python.org/doc/current/ext/embedding.html">embedding</a>, in which the end-user launches a program written
in C++ that in turn invokes the Python interpreter as a library
subroutine. Think of adding scriptability to an existing
application.</li>
</ul>
<p>The key distinction between extending and embedding is the location
of the C++ <tt class="docutils literal"><span class="pre">main()</span></tt> function: in the Python interpreter executable,
or in some other program, respectively. Note that even when
embedding Python in another program, <a class="reference external" href="http://www.python.org/doc/current/ext/extending-with-embedding.html">extension modules are often
the best way to make C/C++ functionality accessible to Python
code</a>, so the use of extension modules is really at the heart of
both models.</p>
<p>Except in rare cases, extension modules are built as
dynamically-loaded libraries with a single entry point, which means
you can change them without rebuilding either the other extension
modules or the executable containing <tt class="docutils literal"><span class="pre">main()</span></tt>.</p>
</div>
<div class="section" id="no-install-quickstart">
<span id="quickstart"></span><h1><a class="toc-backref" href="#id27">3&nbsp;&nbsp;&nbsp;No-Install Quickstart</a></h1>
<p>There is no need to “install Boost” in order to get started using
Boost.Python. These instructions use <a class="reference external" href="../../../tools/build/index.html">Boost.Build</a> projects,
which will build those binaries as soon as they're needed. Your
first tests may take a little longer while you wait for
Boost.Python to build, but doing things this way will save you from
worrying about build intricacies like which library binaries to use
for a specific compiler configuration and figuring out the right
compiler options to use yourself.</p>
<!-- .. raw:: html
<title>Building an Extension Module</title>
<div style="width:50%"> -->
<div class="note">
<p class="first admonition-title">Note</p>
<p>Of course it's possible to use other build systems to
build Boost.Python and its extensions, but they are not
officially supported by Boost. Moreover <strong>99% of all “I can't
build Boost.Python” problems come from trying to use another
build system</strong> without first following these instructions.</p>
<p>If you want to use another system anyway, we suggest that you
follow these instructions, and then invoke <tt class="docutils literal"><span class="pre">bjam</span></tt> with the</p>
<pre class="literal-block">
<tt class="docutils literal"><span class="pre">-a</span> <span class="pre">-o</span></tt><em>filename</em>
</pre>
<p class="last">options to dump the build commands it executes to a file, so
you can see what your alternate build system needs to do.</p>
</div>
<!-- .. raw:: html
<div>
<h1><img width="277" height="86" align="center" src=
"../../../c++boost.gif" alt="c++boost.gif (8819 bytes)">Building an
Extension Module</h1>
</div> -->
<div class="section" id="basic-procedure">
<h2><a class="toc-backref" href="#id28">3.1&nbsp;&nbsp;&nbsp;Basic Procedure</a></h2>
<ol class="arabic">
<li><p class="first">Get Boost; see sections 1 and 2 [<a class="reference external" href="../../../more/getting_started/unix-variants.html#get-boost">Unix/Linux</a>, <a class="reference external" href="../../../more/getting_started/windows.html#get-boost">Windows</a>] of the
Boost <a class="reference external" href="../../../more/getting_started/index.html">Getting Started Guide</a>.</p>
</li>
<li><p class="first">Get the <tt class="docutils literal"><span class="pre">bjam</span></tt> build driver. See section 5 [<a class="reference external" href="../../../more/getting_started/unix-variants.html#prepare-to-use-a-boost-library-binary">Unix/Linux</a>,
<a class="reference external" href="../../../more/getting_started/windows.html#prepare-to-use-a-boost-library-binary">Windows</a>] of the Boost <a class="reference external" href="../../../more/getting_started/index.html">Getting Started Guide</a>.</p>
</li>
<li><p class="first">cd into the <tt class="docutils literal"><span class="pre">libs/python/example/quickstart/</span></tt> directory of your
Boost installation, which contains a small example project.</p>
</li>
<li><p class="first">Invoke <tt class="docutils literal"><span class="pre">bjam</span></tt>. Replace the “<tt class="docutils literal"><span class="pre">stage</span></tt>“ argument from the
example invocation from section 5 of the <a class="reference external" href="../../../more/getting_started/index.html">Getting Started
Guide</a> with “<tt class="docutils literal"><span class="pre">test</span></tt>,“ to build all the test targets. Also add
the argument “<tt class="docutils literal"><span class="pre">--verbose-test</span></tt>” to see the output generated by
the tests when they are run.</p>
<p>On Windows, your <tt class="docutils literal"><span class="pre">bjam</span></tt> invocation might look something like:</p>
<pre class="literal-block">
C:\boost_1_34_0\…\quickstart&gt; <strong>bjam toolset=msvc --verbose-test test</strong>
</pre>
<p>and on Unix variants, perhaps,</p>
<pre class="literal-block">
~/boost_1_34_0/…/quickstart$ <strong>bjam toolset=gcc --verbose-test test</strong>
</pre>
</li>
</ol>
<div class="admonition-note-to-windows-users admonition">
<p class="first admonition-title">Note to Windows Users</p>
<p class="last">For the sake of concision, the rest of this guide will use
unix-style forward slashes in pathnames instead of the
backslashes with which you may be more familiar. The forward
slashes should work everywhere except in <a class="reference external" href="../../../more/getting_started/windows.html#command-prompt">Command Prompt</a>
windows, where you should use backslashes.</p>
</div>
<p>If you followed this procedure successfully, you will have built an
extension module called <tt class="docutils literal"><span class="pre">extending</span></tt> and tested it by running a
Python script called <tt class="docutils literal"><span class="pre">test_extending.py</span></tt>. You will also have
built and run a simple application called <tt class="docutils literal"><span class="pre">embedding</span></tt> that embeds
python.</p>
</div>
<div class="section" id="in-case-of-trouble">
<h2><a class="toc-backref" href="#id29">3.2&nbsp;&nbsp;&nbsp;In Case of Trouble</a></h2>
<p>If you're seeing lots of compiler and/or linker error messages,
it's probably because Boost.Build is having trouble finding your
Python installation. You might want to pass the
<tt class="docutils literal"><span class="pre">--debug-configuration</span></tt> option to <tt class="docutils literal"><span class="pre">bjam</span></tt> the first few times
you invoke it, to make sure that Boost.Build is correctly locating
all the parts of your Python installation. If it isn't, consider
<a class="reference internal" href="#configuring-boost-build">Configuring Boost.Build</a> as detailed below.</p>
<p>If you're still having trouble, Someone on one of the following
mailing lists may be able to help:</p>
<ul class="simple">
<li>The <a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#jamboost">Boost.Build mailing list</a> for issues related to Boost.Build</li>
<li>The Python <a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#cplussig">C++ Sig</a> for issues specifically related to Boost.Python</li>
</ul>
</div>
<div class="section" id="in-case-everything-seemed-to-work">
<h2><a class="toc-backref" href="#id30">3.3&nbsp;&nbsp;&nbsp;In Case Everything Seemed to Work</a></h2>
<p>Rejoice! If you're new to Boost.Python, at this point it might be
a good idea to ignore build issues for a while and concentrate on
learning the library by going through the <a class="reference external" href="tutorial/index.html">tutorial</a> and perhaps
some of the <a class="reference external" href="v2/reference.html">reference documentation</a>, trying out what you've
learned about the API by modifying the quickstart project.</p>
</div>
<div class="section" id="modifying-the-example-project">
<h2><a class="toc-backref" href="#id31">3.4&nbsp;&nbsp;&nbsp;Modifying the Example Project</a></h2>
<p>If you're content to keep your extension module forever in one
source file called <a class="reference external" href="../example/quickstart/extending.cpp"><tt class="docutils literal"><span class="pre">extending.cpp</span></tt></a>, inside your Boost
distribution, and import it forever as <tt class="docutils literal"><span class="pre">extending</span></tt>, then you can
stop here. However, it's likely that you will want to make a few
changes. There are a few things you can do without having to learn
<a class="reference external" href="../../../tools/build/index.html">Boost.Build</a> in depth.</p>
<p>The project you just built is specified in two files in the current
directory: <a class="reference external" href="../example/quickstart/boost-build.jam"><tt class="docutils literal"><span class="pre">boost-build.jam</span></tt></a>, which tells <tt class="docutils literal"><span class="pre">bjam</span></tt> where it can
find the interpreted code of the Boost build system, and
<a class="reference external" href="../example/quickstart/Jamroot"><tt class="docutils literal"><span class="pre">Jamroot</span></tt></a>, which describes the targets you just built. These
files are heavily commented, so they should be easy to modify.
Take care, however, to preserve whitespace. Punctuation such as
<tt class="docutils literal"><span class="pre">;</span></tt> will not be recognized as intended by <tt class="docutils literal"><span class="pre">bjam</span></tt> if it is not
surrounded by whitespace.</p>
<div class="section" id="relocate-the-project">
<h3>Relocate the Project</h3>
<p>You'll probably want to copy this project elsewhere so you can
change it without modifying your Boost distribution. To do that,
simply</p>
<ol class="loweralpha simple">
<li>copy the entire <tt class="docutils literal"><span class="pre">libs/python/example/quickstart/</span></tt> directory
into a new directory.</li>
<li>In the new copies of <a class="reference external" href="../example/quickstart/boost-build.jam"><tt class="docutils literal"><span class="pre">boost-build.jam</span></tt></a> and <a class="reference external" href="../example/quickstart/Jamroot"><tt class="docutils literal"><span class="pre">Jamroot</span></tt></a>, locate
the relative path near the top of the file that is clearly
marked by a comment, and edit that path so that it refers to the
same directory your Boost distribution as it referred to when
the file was in its original location in the
<tt class="docutils literal"><span class="pre">libs/python/example/quickstart/</span></tt> directory.</li>
</ol>
<p>For example, if you moved the project from
<tt class="docutils literal"><span class="pre">/home/dave/boost_1_34_0/libs/python/example/quickstart</span></tt> to
<tt class="docutils literal"><span class="pre">/home/dave/my-project</span></tt>, you could change the first path in
<a class="reference external" href="../example/quickstart/boost-build.jam"><tt class="docutils literal"><span class="pre">boost-build.jam</span></tt></a> from</p>
<pre class="literal-block">
<strong>../../../..</strong>/tools/build/v2
</pre>
<p>to</p>
<pre class="literal-block">
<strong>/home/dave/boost_1_34_0</strong>/tools/build/v2
</pre>
<p>and change the first path in <a class="reference external" href="../example/quickstart/Jamroot"><tt class="docutils literal"><span class="pre">Jamroot</span></tt></a> from</p>
<pre class="literal-block">
<strong>../../../..</strong>
</pre>
<p>to</p>
<pre class="literal-block">
<strong>/home/dave/boost_1_34_0</strong>
</pre>
</div>
<div class="section" id="add-new-or-change-names-of-existing-source-files">
<h3>Add New or Change Names of Existing Source Files</h3>
<p>The names of additional source files involved in building your
extension module or embedding application can be listed in
<a class="reference external" href="../example/quickstart/Jamroot"><tt class="docutils literal"><span class="pre">Jamroot</span></tt></a> right alongside <tt class="docutils literal"><span class="pre">extending.cpp</span></tt> or <tt class="docutils literal"><span class="pre">embedding.cpp</span></tt>
respectively. Just be sure to leave whitespace around each
filename:</p>
<pre class="literal-block">
… file1.cpp file2.cpp file3.cpp …
</pre>
<p>Naturally, if you want to change the name of a source file you can
tell Boost.Build about it by editing the name in <a class="reference external" href="../example/quickstart/Jamroot"><tt class="docutils literal"><span class="pre">Jamroot</span></tt></a>.</p>
</div>
<div class="section" id="change-the-name-of-your-extension-module">
<h3>Change the Name of your Extension Module</h3>
<p>The name of the extension module is determined by two things:</p>
<ol class="arabic simple">
<li>the name in <a class="reference external" href="../example/quickstart/Jamroot"><tt class="docutils literal"><span class="pre">Jamroot</span></tt></a> immediately following <tt class="docutils literal"><span class="pre">python-extension</span></tt>, and</li>
<li>the name passed to <tt class="docutils literal"><span class="pre">BOOST_PYTHON_MODULE</span></tt> in <a class="reference external" href="../example/quickstart/extending.cpp"><tt class="docutils literal"><span class="pre">extending.cpp</span></tt></a>.</li>
</ol>
<p>To change the name of the extension module from <tt class="docutils literal"><span class="pre">extending</span></tt> to
<tt class="docutils literal"><span class="pre">hello</span></tt>, you'd edit <a class="reference external" href="../example/quickstart/Jamroot"><tt class="docutils literal"><span class="pre">Jamroot</span></tt></a>, changing</p>
<pre class="literal-block">
python-extension <strong>extending</strong> : extending.cpp ;
</pre>
<p>to</p>
<pre class="literal-block">
python-extension <strong>hello</strong> : extending.cpp ;
</pre>
<p>and you'd edit extending.cpp, changing</p>
<pre class="literal-block">
BOOST_PYTHON_MODULE(<strong>extending</strong>)
</pre>
<p>to</p>
<pre class="literal-block">
BOOST_PYTHON_MODULE(<strong>hello</strong>)
</pre>
</div>
</div>
</div>
<div class="section" id="installing-boost-python-on-your-system">
<h1><a class="toc-backref" href="#id32">4&nbsp;&nbsp;&nbsp;Installing Boost.Python on your System</a></h1>
<p>Since Boost.Python is a separately-compiled (as opposed to
<a class="reference external" href="../../../more/getting_started/windows.html#header-only-libraries">header-only</a>) library, its user relies on the services of a
Boost.Python library binary.</p>
<p>If you need a regular installation of the Boost.Python library
binaries on your system, the Boost <a class="reference external" href="../../../more/getting_started/index.html">Getting Started Guide</a> will
walk you through the steps of creating one. If building binaries
from source, you might want to supply the <tt class="docutils literal"><span class="pre">--with-python</span></tt>
argument to <tt class="docutils literal"><span class="pre">bjam</span></tt> (or the <tt class="docutils literal"><span class="pre">--with-libraries=python</span></tt> argument
to <tt class="docutils literal"><span class="pre">configure</span></tt>), so only the Boost.Python binary will be built,
rather than all the Boost binaries.</p>
</div>
<div class="section" id="configuring-boost-build">
<h1><a class="toc-backref" href="#id33">5&nbsp;&nbsp;&nbsp;Configuring Boost.Build</a></h1>
<p>As described in the <a class="reference external" href="http://www.boost.orgdoc/html/bbv2/advanced.html#bbv2.advanced.configuration">Boost.Build reference manual</a>, a file called
<tt class="docutils literal"><span class="pre">user-config.jam</span></tt> in your home directory<a class="footnote-reference" href="#home-dir" id="id11"><sup>6</sup></a> is used to
specify the tools and libraries available to the build system. You
may need to create or edit <tt class="docutils literal"><span class="pre">user-config.jam</span></tt> to tell Boost.Build
how to invoke Python, <tt class="docutils literal"><span class="pre">#include</span></tt> its headers, and link with its
libraries.</p>
<div class="admonition-users-of-unix-variant-oses admonition">
<p class="first admonition-title">Users of Unix-Variant OSes</p>
<p class="last">If you are using a unix-variant OS and you ran Boost's
<tt class="docutils literal"><span class="pre">configure</span></tt> script, it may have generated a
<tt class="docutils literal"><span class="pre">user-config.jam</span></tt> for you.<a class="footnote-reference" href="#overwrite" id="id13"><sup>4</sup></a> If your <tt class="docutils literal"><span class="pre">configure</span></tt>/<tt class="docutils literal"><span class="pre">make</span></tt> sequence was successful and Boost.Python binaries
were built, your <tt class="docutils literal"><span class="pre">user-config.jam</span></tt> file is probably already
correct.</p>
</div>
<p>If you have one fairly “standard” python installation for your
platform, you might not need to do anything special to describe it. If
you haven't configured python in <tt class="docutils literal"><span class="pre">user-config.jam</span></tt> (and you don't
specify <tt class="docutils literal"><span class="pre">--without-python</span></tt> on the Boost.Build command line),
Boost.Build will automatically execute the equivalent of</p>
<pre class="literal-block">
import toolset : using ;
using python ;
</pre>
<p>which automatically looks for Python in the most likely places.
However, that only happens when using the Boost.Python project file
(e.g. when referred to by another project as in the <a class="reference internal" href="#quickstart">quickstart</a>
method). If instead you are linking against separately-compiled
Boost.Python binaries, you should set up a <tt class="docutils literal"><span class="pre">user-config.jam</span></tt> file
with at least the minimal incantation above.</p>
<div class="section" id="python-configuration-parameters">
<h2><a class="toc-backref" href="#id34">5.1&nbsp;&nbsp;&nbsp;Python Configuration Parameters</a></h2>
<p>If you have several versions of Python installed, or Python is
installed in an unusual way, you may want to supply any or all of
the following optional parameters to <tt class="docutils literal"><span class="pre">using</span> <span class="pre">python</span></tt>.</p>
<dl class="docutils">
<dt>version</dt>
<dd>the version of Python to use. Should be in Major.Minor
format, for example, <tt class="docutils literal"><span class="pre">2.3</span></tt>. Do not include the subminor
version (i.e. <em>not</em> <tt class="docutils literal"><span class="pre">2.5.1</span></tt>). If you have multiple Python
versions installed, the version will usually be the only
configuration argument required.</dd>
<dt>cmd-or-prefix</dt>
<dd>preferably, a command that invokes a Python interpreter.
Alternatively, the installation prefix for Python libraries and
header files. Only use the alternative formulation if there is
no appropriate Python executable available.</dd>
<dt>includes</dt>
<dd>the <tt class="docutils literal"><span class="pre">#include</span></tt> paths for Python headers. Normally the correct
path(s) will be automatically deduced from <tt class="docutils literal"><span class="pre">version</span></tt> and/or
<tt class="docutils literal"><span class="pre">cmd-or-prefix</span></tt>.</dd>
<dt>libraries</dt>
<dd>the path to Python library binaries. On MacOS/Darwin,
you can also pass the path of the Python framework. Normally the
correct path(s) will be automatically deduced from <tt class="docutils literal"><span class="pre">version</span></tt>
and/or <tt class="docutils literal"><span class="pre">cmd-or-prefix</span></tt>.</dd>
<dt>condition</dt>
<dd>if specified, should be a set of Boost.Build
properties that are matched against the build configuration when
Boost.Build selects a Python configuration to use. See examples
below for details.</dd>
<dt>extension-suffix</dt>
<dd>A string to append to the name of extension
modules before the true filename extension. You almost certainly
don't need to use this. Usually this suffix is only used when
targeting a Windows debug build of Python, and will be set
automatically for you based on the value of the
<a class="reference internal" href="#python-debugging"><tt class="docutils literal"><span class="pre">&lt;python-debugging&gt;</span></tt></a> feature. However, at least one Linux
distribution (Ubuntu Feisty Fawn) has a specially configured
<a class="reference external" href="https://wiki.ubuntu.com/PyDbgBuilds">python-dbg</a> package that claims to use such a suffix.</dd>
</dl>
</div>
<div class="section" id="examples">
<h2><a class="toc-backref" href="#id35">5.2&nbsp;&nbsp;&nbsp;Examples</a></h2>
<p>Note that in the examples below, case and <em>especially whitespace</em> are
significant.</p>
<ul>
<li><p class="first">If you have both python 2.5 and python 2.4 installed,
<tt class="docutils literal"><span class="pre">user-config.jam</span></tt> might contain:</p>
<pre class="literal-block">
using python : 2.5 ; # Make both versions of Python available
<h2>Building Boost.Python</h2>
using python : 2.4 ; # To build with python 2.4, add python=2.4
# to your command line.
</pre>
<p>The first version configured (2.5) becomes the default. To build
against python 2.4, add <tt class="docutils literal"><span class="pre">python=2.4</span></tt> to the <tt class="docutils literal"><span class="pre">bjam</span></tt> command line.</p>
</li>
<li><p class="first">If you have python installed in an unusual location, you might
supply the path to the interpreter in the <tt class="docutils literal"><span class="pre">cmd-or-prefix</span></tt>
parameter:</p>
<pre class="literal-block">
using python : : /usr/local/python-2.6-beta/bin/python ;
</pre>
</li>
<li><p class="first">If you have a separate build of Python for use with a particular
toolset, you might supply that toolset in the <tt class="docutils literal"><span class="pre">condition</span></tt>
parameter:</p>
<pre class="literal-block">
using python ; # use for most toolsets
<p>Every Boost.Python extension module must be linked with the
<code>boost_python</code> shared library. To build
<code>boost_python</code>, use <a
href="../../../tools/build/index.html">Boost.Build</a> in the
usual way from the <code>libs/python/build</code> subdirectory
of your boost installation (if you have already built boost from
the top level this may have no effect, since the work is already
done).
<h3>Configuration</h3>
You may need to configure the following variables to point Boost.Build at your Python installation:
<table border="1">
<tr><th>Variable Name <th>Semantics <th>Default <th>Notes
<tr>
<td><code>PYTHON_ROOT</code>
<td>The root directory of your Python installation
<td>Windows:&nbsp;<code>c:/tools/python</code>
Unix:&nbsp;<code>/usr/local</code>
<td>On Unix, this is the <code>--with-prefix=</code> directory
used to configure Python
<tr>
<td><code>PYTHON_VERSION</code>
<td>The The 2-part python Major.Minor version number
<td>Windows:&nbsp;<code>2.1</code>
Unix:&nbsp;<code>1.5</code>
<td>Be sure not to include a third number, e.g. <b>not</b>
&quot;<code>2.2.1</code>&quot;, even if that's the version you
have.
<tr>
<td><code>PYTHON_INCLUDES</code>
<td>path to Python <code>#include</code> directories
<td>Autoconfigured from <code>PYTHON_ROOT</code>
<tr>
<td><code>PYTHON_LIB_PATH</code>
<td>path to Python library object.
<td>Autoconfigured from <code>PYTHON_ROOT</code>
<tr>
<td><code>PYTHON_STDLIB_PATH</code>
<td>path to Python standard library modules
<td>Autoconfigured from <code>PYTHON_ROOT</code>
<tr>
<td><code>CYGWIN_ROOT</code>
<td>path to the user's Cygwin installation
<td>
<td><a href="http://www.cygwin.com">Cygwin</a> only. This and the following two settings are
useful when building with multiple toolsets on Windows, since
Cygwin requires a different build of Python.
<tr>
<td><code>GCC_PYTHON_ROOT</code>
<td>path to the user's Cygwin Python installation
<td><code>$(CYGWIN_ROOT)/usr/local</code>
<td><a href="http://www.cygwin.com">Cygwin</a> only
<tr>
<td><code>GCC_DEBUG_PYTHON_ROOT</code>
<td>path to the user's Cygwin <code><a
href="#variants">pydebug</a></code> build
<td><code>$(CYGWIN_ROOT)/usr/local/pydebug</code>
<td><a href="http://www.cygwin.com">Cygwin</a> only
# Use with Intel C++ toolset
using python
: # version
: c:\\Devel\\Python-2.5-IntelBuild\\PCBuild\\python # cmd-or-prefix
: # includes
: # libraries
: &lt;toolset&gt;intel # condition
;
</pre>
</li>
<li><p class="first">If you have downloaded the Python sources and built both the
normal and the “<a class="reference internal" href="#id19">python debugging</a>” builds from source on
Windows, you might see:</p>
<pre class="literal-block">
using python : 2.5 : C:\\src\\Python-2.5\\PCBuild\\python ;
using python : 2.5 : C:\\src\\Python-2.5\\PCBuild\\python_d
: # includes
: # libs
: &lt;python-debugging&gt;on ;
</pre>
</li>
<li><p class="first">You can set up your user-config.jam so a bjam built under Windows
can build/test both Windows and <a class="reference external" href="http://cygwin.com">Cygwin</a> python extensions. Just pass
<tt class="docutils literal"><span class="pre">&lt;target-os&gt;cygwin</span></tt> in the <tt class="docutils literal"><span class="pre">condition</span></tt> parameter
for the cygwin python installation:</p>
<pre class="literal-block">
# windows installation
using python ;
# cygwin installation
using python : : c:\\cygwin\\bin\\python2.5 : : : &lt;target-os&gt;cygwin ;
</pre>
<p>when you put target-os=cygwin in your build request, it should build
with the cygwin version of python:<a class="footnote-reference" href="#flavor" id="id15"><sup>5</sup></a></p>
<blockquote>
<p>bjam target-os=cygwin toolset=gcc</p>
</blockquote>
<p>This is supposed to work the other way, too (targeting windows
python with a <a class="reference external" href="http://cygwin.com">Cygwin</a> bjam) but it seems as though the support in
Boost.Build's toolsets for building that way is broken at the
time of this writing.</p>
</li>
<li><p class="first">Note that because of <a class="reference external" href="http://zigzag.cs.msu.su/boost.build/wiki/AlternativeSelection">the way Boost.Build currently selects target
alternatives</a>, you might have be very explicit in your build
requests. For example, given:</p>
<pre class="literal-block">
using python : 2.5 ; # a regular windows build
using python : 2.4 : : : : &lt;target-os&gt;cygwin ;
</pre>
<p>building with</p>
<pre class="literal-block">
bjam target-os=cygwin
</pre>
<p>will yield an error. Instead, you'll need to write:</p>
<pre class="literal-block">
bjam target-os=cygwin/python=2.4
</pre>
</li>
</ul>
</div>
</div>
<div class="section" id="choosing-a-boost-python-library-binary">
<h1><a class="toc-backref" href="#id36">6&nbsp;&nbsp;&nbsp;Choosing a Boost.Python Library Binary</a></h1>
<p>If—instead of letting Boost.Build construct and link with the right
libraries automatically—you choose to use a pre-built Boost.Python
library, you'll need to think about which one to link with. The
Boost.Python binary comes in both static and dynamic flavors. Take
care to choose the right flavor for your application.<a class="footnote-reference" href="#naming" id="id17"><sup>2</sup></a></p>
<div class="section" id="the-dynamic-binary">
<h2><a class="toc-backref" href="#id37">6.1&nbsp;&nbsp;&nbsp;The Dynamic Binary</a></h2>
<p>The dynamic library is the safest and most-versatile choice:</p>
<ul class="simple">
<li>A single copy of the library code is used by all extension
modules built with a given toolset.<a class="footnote-reference" href="#toolset-specific" id="id18"><sup>3</sup></a></li>
<li>The library contains a type conversion registry. Because one
registry is shared among all extension modules, instances of a
class exposed to Python in one dynamically-loaded extension
module can be passed to functions exposed in another such module.</li>
</ul>
</div>
<div class="section" id="the-static-binary">
<h2><a class="toc-backref" href="#id38">6.2&nbsp;&nbsp;&nbsp;The Static Binary</a></h2>
<p>It might be appropriate to use the static Boost.Python library in
any of the following cases:</p>
<ul class="simple">
<li>You are <a class="reference external" href="http://www.python.org/doc/current/ext/intro.html">extending</a> python and the types exposed in your
dynamically-loaded extension module don't need to be used by any
other Boost.Python extension modules, and you don't care if the
core library code is duplicated among them.</li>
<li>You are <a class="reference external" href="http://www.python.org/doc/current/ext/embedding.html">embedding</a> python in your application and either:<ul>
<li>You are targeting a Unix variant OS other than MacOS or AIX,
where the dynamically-loaded extension modules can “see” the
Boost.Python library symbols that are part of the executable.</li>
<li>Or, you have statically linked some Boost.Python extension
modules into your application and you don't care if any
dynamically-loaded Boost.Python extension modules are able to
use the types exposed by your statically-linked extension
modules (and vice-versa).</li>
</ul>
</li>
</ul>
</div>
</div>
<div class="section" id="include-issues">
<h1><a class="toc-backref" href="#id39">7&nbsp;&nbsp;&nbsp;<tt class="docutils literal"><span class="pre">#include</span></tt> Issues</a></h1>
<ol class="arabic simple">
<li>If you should ever have occasion to <tt class="docutils literal"><span class="pre">#include</span> <span class="pre">&quot;python.h&quot;</span></tt>
directly in a translation unit of a program using Boost.Python,
use <tt class="docutils literal"><span class="pre">#include</span> <span class="pre">&quot;boost/python/detail/wrap_python.hpp&quot;</span></tt> instead.
It handles several issues necessary for use with Boost.Python,
one of which is mentioned in the next section.</li>
<li>Be sure not to <tt class="docutils literal"><span class="pre">#include</span></tt> any system headers before
<tt class="docutils literal"><span class="pre">wrap_python.hpp</span></tt>. This restriction is actually imposed by
Python, or more properly, by Python's interaction with your
operating system. See
<a class="reference external" href="http://docs.python.org/ext/simpleExample.html">http://docs.python.org/ext/simpleExample.html</a> for details.</li>
</ol>
</div>
<div class="section" id="python-debugging-builds">
<span id="id19"></span><span id="python-debugging"></span><h1><a class="toc-backref" href="#id40">8&nbsp;&nbsp;&nbsp;Python Debugging Builds</a></h1>
<p>Python can be built in a special “python debugging” configuration
that adds extra checks and instrumentation that can be very useful
for developers of extension modules. The data structures used by
the debugging configuration contain additional members, so <strong>a
Python executable built with python debugging enabled cannot be
used with an extension module or library compiled without it, and
vice-versa.</strong></p>
<p>Since pre-built “python debugging” versions of the Python
executable and libraries are not supplied with most distributions
of Python,<a class="footnote-reference" href="#get-debug-build" id="id20"><sup>7</sup></a> and we didn't want to force our users
to build them, Boost.Build does not automatically enable python
debugging in its <tt class="docutils literal"><span class="pre">debug</span></tt> build variant (which is the default).
Instead there is a special build property called
<tt class="docutils literal"><span class="pre">python-debugging</span></tt> that, when used as a build property, will
define the right preprocessor symbols and select the right
libraries to link with.</p>
<p>On unix-variant platforms, the debugging versions of Python's data
structures will only be used if the symbol <tt class="docutils literal"><span class="pre">Py_DEBUG</span></tt> is defined.
On many windows compilers, when extension modules are built with
the preprocessor symbol <tt class="docutils literal"><span class="pre">_DEBUG</span></tt>, Python defaults to force
linking with a special debugging version of the Python DLL. Since
that symbol is very commonly used even when Python is not present,
Boost.Python temporarily undefines _DEBUG when Python.h
is #included from <tt class="docutils literal"><span class="pre">boost/python/detail/wrap_python.hpp</span></tt> - unless
<tt class="docutils literal"><span class="pre">BOOST_DEBUG_PYTHON</span></tt> is defined. The upshot is that if you want
“python debugging”and you aren't using Boost.Build, you should make
sure <tt class="docutils literal"><span class="pre">BOOST_DEBUG_PYTHON</span></tt> is defined, or python debugging will be
suppressed.</p>
</div>
<div class="section" id="testing-boost-python">
<h1><a class="toc-backref" href="#id41">9&nbsp;&nbsp;&nbsp;Testing Boost.Python</a></h1>
<p>To run the full test suite for Boost.Python, invoke <tt class="docutils literal"><span class="pre">bjam</span></tt> in the
<tt class="docutils literal"><span class="pre">libs/python/test</span></tt> subdirectory of your Boost distribution.</p>
</div>
<div class="section" id="notes-for-mingw-and-cygwin-with-mno-cygwin-gcc-users">
<h1><a class="toc-backref" href="#id42">10&nbsp;&nbsp;&nbsp;Notes for MinGW (and Cygwin with -mno-cygwin) GCC Users</a></h1>
<p>If you are using a version of Python prior to 2.4.1 with a MinGW
prior to 3.0.0 (with binutils-2.13.90-20030111-1), you will need to
create a MinGW-compatible version of the Python library; the one
shipped with Python will only work with a Microsoft-compatible
linker. Follow the instructions in the “Non-Microsoft” section of
the “Building Extensions: Tips And Tricks” chapter in <a class="reference external" href="http://www.python.org/doc/current/inst/index.html">Installing
Python Modules</a> to create <tt class="docutils literal"><span class="pre">libpythonXX.a</span></tt>, where <tt class="docutils literal"><span class="pre">XX</span></tt>
corresponds to the major and minor version numbers of your Python
installation.</p>
<hr class="docutils" />
<table class="docutils footnote" frame="void" id="id22" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[1]</a></td><td>Note that although we tested earlier versions of
Boost.Python with Python 2.2, and we don't <em>think</em> we've done
anything to break compatibility, this release of Boost.Python
may not have been tested with versions of Python earlier than
2.4, so we're not 100% sure that python 2.2 and 2.3 are
supported.</td></tr>
</tbody>
</table>
<h3>Results</h3>
<p>The build process will create a
<code>libs/python/build/bin-stage</code> subdirectory of the
boost root (or of <code>$(ALL_LOCATE_TARGET)</code>,
if you have set that variable), containing the built
libraries. The libraries are actually built to unique
directories for each toolset and variant elsewhere in the
filesystem, and copied to the
<code>bin-stage</code> directory as a convenience, so if you
build with multiple toolsets at once, the product of later
toolsets will overwrite that of earlier toolsets in
<code>bin-stage</code>.
<h3>Testing</h3>
<p>To build and test Boost.Python from within the
<code>libs/python/build</code> directory, invoke
<blockquote>
<pre>
bjam -sTOOLS=<i><a href="../../../tools/build/index.html#Tools">toolset</a></i> test
<table class="docutils footnote" frame="void" id="naming" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id17">[2]</a></td><td><p class="first">Information about how to identify the
static and dynamic builds of Boost.Python:</p>
<ul class="simple">
<li><a class="reference external" href="../../../more/getting_started/windows.html#library-naming">on Windows</a></li>
<li><a class="reference external" href="../../../more/getting_started/unix-variants.html#library-naming">on Unix variants</a></li>
</ul>
</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="toolset-specific" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id18">[3]</a></td><td>Because of the way most *nix platforms
share symbols among dynamically-loaded objects, I'm not certain
that extension modules built with different compiler toolsets
will always use different copies of the Boost.Python library
when loaded into the same Python instance. Not using different
libraries could be a good thing if the compilers have compatible
ABIs, because extension modules built with the two libraries
would be interoperable. Otherwise, it could spell disaster,
since an extension module and the Boost.Python library would
have different ideas of such things as class layout. I would
appreciate someone doing the experiment to find out what
happens.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="overwrite" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id13">[4]</a></td><td><tt class="docutils literal"><span class="pre">configure</span></tt> overwrites the existing
<tt class="docutils literal"><span class="pre">user-config.jam</span></tt> in your home directory
(if any) after making a backup of the old version.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="flavor" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id15">[5]</a></td><td>Note that the <tt class="docutils literal"><span class="pre">&lt;target-os&gt;cygwin</span></tt> feature is
different from the <tt class="docutils literal"><span class="pre">&lt;flavor&gt;cygwin</span></tt> subfeature of the <tt class="docutils literal"><span class="pre">gcc</span></tt>
toolset, and you might need handle both explicitly if you also
have a MinGW GCC installed.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="home-dir" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id11">[6]</a></td><td><p class="first">Windows users, your home directory can be
found by typing:</p>
<pre class="literal-block">
ECHO %HOMEDRIVE%%HOMEPATH%
</pre>
</blockquote>
This will
update all of the Boost.Python v1 test and example targets. The tests
are relatively quiet by default. To get more-verbose output, you might try
<blockquote>
<pre>
bjam -sTOOLS=<i><a href="../../../tools/build/index.html#Tools">toolset</a></i> -sPYTHON_TEST_ARGS=-v test
</pre>
</blockquote>
which will print each test's Python code with the expected output as
it passes.
<p class="last">into a <a class="reference external" href="../../../more/getting_started/windows.html#command-prompt">command prompt</a> window.</p>
</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="get-debug-build" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id20">[7]</a></td><td>On Unix and similar platforms, a debugging
python and associated libraries are built by adding
<tt class="docutils literal"><span class="pre">--with-pydebug</span></tt> when configuring the Python build. On
Windows, the debugging version of Python is generated by
the &quot;Win32 Debug&quot; target of the Visual Studio project in the
PCBuild subdirectory of a full Python source code distribution.
</td></tr>
</tbody>
</table>
</div>
</div>
<div class="footer">
<hr class="footer" />
<a class="reference external" href="./building.rst">View document source</a>.
Generated on: 2007-07-02 13:46 UTC.
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
<h2>Building your Extension Module</h2>
Though there are other approaches, the easiest way to build an
extension module using Boost.Python is with Boost.Build. Until
Boost.Build v2 is released, cross-project build dependencies are
not supported, so it works most smoothly if you add a new
subproject to your boost installation. The
<code>libs/python/example</code> subdirectory of your boost
installation contains a minimal example (along with many extra
sources). To copy the example subproject:
<ol>
<li>Create a new subdirectory in, <code>libs/python</code>, say
<code>libs/python/my_project</code>.
<li>Copy <code><a
href="../example/Jamfile">libs/python/example/Jamfile</a></code>
to your new directory.
<li>Edit the Jamfile as appropriate for your project. You'll
want to change the &quot;<code>subproject</code>&quot; rule
invocation at the top, and the names of some of the source files
and/or targets.
</ol>
If you can't modify or copy your boost installation, the
alternative is to create your own Boost.Build project. A similar
example you can use as a starting point is available in <code><a
href="../example/project.zip">this archive</a></code>. You'll
need to edit the Jamfile and Jamrules files, depending on the
relative location of your Boost installation and the new
project. Note that automatic testing of extension modules is not
available in this configuration.
<h2><a name="variants">Build Variants</a></h2>
Three <a
href="../../../tools/build/build_system.htm#variants">variant</a>
configurations of all python-related targets are supported, and
can be selected by setting the <code><a
href="../../../tools/build/build_system.htm#user_globals">BUILD</a></code>
variable:
<ul>
<li><code>release</code> (optimization, <tt>-DNDEBUG</tt>)
<li><code>debug</code> (no optimization <tt>-D_DEBUG</tt>)
<li><code>debug-python</code> (no optimization, <tt>-D_DEBUG
-DBOOST_DEBUG_PYTHON</tt>)
</ul>
<p>The first two variants of the <code>boost_python</code>
library are built by default, and are compatible with the
default Python distribution. The <code>debug-python</code>
variant corresponds to a specially-built debugging version of
Python. On Unix platforms, this python is built by adding
<code>--with-pydebug</code> when configuring the Python
build. On Windows, the debugging version of Python is generated
by the &quot;Win32 Debug&quot; target of the
<code>PCBuild.dsw</code> Visual C++ 6.0 project in the
<code>PCBuild</code> subdirectory of your Python distribution.
Extension modules built with Python debugging enabled are <b>not
link-compatible</b> with a non-debug build of Python. Since few
people actually have a debug build of Python (it doesn't come
with the standard distribution), the normal
<code>debug</code> variant builds modules which are compatible
with ordinary Python.
<p>On many windows compilers, when extension modules are built
with
<tt>-D_DEBUG</tt>, Python defaults to <i>force</i> linking with a
special debugging version of the Python DLL. Since this debug DLL
isn't supplied with the default Python installation for Windows,
Boost.Python uses <tt><a href=
"../../../boost/python/detail/wrap_python.hpp">boost/python/detail/wrap_python.hpp</a></tt>
to temporarily undefine <tt>_DEBUG</tt> when <tt>Python.h</tt> is
<tt>#include</tt>d - unless <code>BOOST_DEBUG_PYTHON</code> is defined.
<p>If you want the extra runtime checks available with the
debugging version of the library, <tt>#define
BOOST_DEBUG_PYTHON</tt> to re-enable python debuggin, and link
with the <code>debug-python</code> variant of
<tt>boost_python</tt>.
<p>If you do not <tt>#define BOOST_DEBUG_PYTHON</tt>, be sure that
any source files in your extension module <tt>#include &lt;<a href=
"../../../boost/python/detail/wrap_python.hpp">boost/python/detail/wrap_python.hpp</a>&gt;</tt>
instead of the usual <tt>Python.h</tt>, or you will have link
incompatibilities.<br>
<hr>
Next: <a href="enums.html">Wrapping Enums</a> Previous: <a href=
"under-the-hood.html">A Peek Under the Hood</a> Up: <a href=
"index.html">Top</a>
<hr>
<p>&copy; Copyright David Abrahams 2002. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided ``as is'' without
express or implied warranty, and with no claim as to its suitability for
any purpose.
<p>Updated: May 15, 2002 (David Abrahams)
</div>
</div>
</body>
</html>

680
doc/building.rst Normal file
View File

@@ -0,0 +1,680 @@
.. Copyright David Abrahams 2006. Distributed under the Boost
.. Software License, Version 1.0. (See accompanying
.. file LICENSE_1_0.txt or copy at
.. http://www.boost.org/LICENSE_1_0.txt)
==============================================
|(logo)|__ Boost.Python Build and Test HOWTO
==============================================
.. |(logo)| image:: ../../../boost.png
:alt: Boost C++ Libraries:
:class: boost-logo
__ ../index.htm
.. section-numbering::
:depth: 2
.. contents:: Contents
:depth: 2
:class: sidebar small
.. |newer| replace:: *newer*
Requirements
============
Boost.Python requires `Python 2.2`_ [#2.2]_ *or* |newer|__.
.. _Python 2.2: http://www.python.org/2.2
__ http://www.python.org
Background
==========
There are two basic models for combining C++ and Python:
- extending_, in which the end-user launches the Python interpreter
executable and imports Python “extension modules” written in C++.
Think of taking a library written in C++ and giving it a Python
interface so Python programmers can use it. From Python, these
modules look just like regular Python modules.
- embedding_, in which the end-user launches a program written
in C++ that in turn invokes the Python interpreter as a library
subroutine. Think of adding scriptability to an existing
application.
.. _extending: http://www.python.org/doc/current/ext/intro.html
.. _embedding: http://www.python.org/doc/current/ext/embedding.html
The key distinction between extending and embedding is the location
of the C++ ``main()`` function: in the Python interpreter executable,
or in some other program, respectively. Note that even when
embedding Python in another program, `extension modules are often
the best way to make C/C++ functionality accessible to Python
code`__, so the use of extension modules is really at the heart of
both models.
__ http://www.python.org/doc/current/ext/extending-with-embedding.html
Except in rare cases, extension modules are built as
dynamically-loaded libraries with a single entry point, which means
you can change them without rebuilding either the other extension
modules or the executable containing ``main()``.
.. _quickstart:
No-Install Quickstart
=====================
There is no need to “install Boost” in order to get started using
Boost.Python. These instructions use Boost.Build_ projects,
which will build those binaries as soon as they're needed. Your
first tests may take a little longer while you wait for
Boost.Python to build, but doing things this way will save you from
worrying about build intricacies like which library binaries to use
for a specific compiler configuration and figuring out the right
compiler options to use yourself.
.. .. raw:: html
<div style="width:50%">
.. Note:: Of course it's possible to use other build systems to
build Boost.Python and its extensions, but they are not
officially supported by Boost. Moreover **99% of all “I can't
build Boost.Python” problems come from trying to use another
build system** without first following these instructions.
If you want to use another system anyway, we suggest that you
follow these instructions, and then invoke ``bjam`` with the
.. parsed-literal::
``-a -o``\ *filename*
options to dump the build commands it executes to a file, so
you can see what your alternate build system needs to do.
.. .. raw:: html
</div>
.. _Boost.Build: ../../../tools/build/index.html
Basic Procedure
---------------
1. Get Boost; see sections 1 and 2 [`Unix/Linux`__, `Windows`__\ ] of the
Boost `Getting Started Guide`_.
__ ../../../more/getting_started/unix-variants.html#get-boost
__ ../../../more/getting_started/windows.html#get-boost
2. Get the ``bjam`` build driver. See section 5 [`Unix/Linux`__,
`Windows`__\ ] of the Boost `Getting Started Guide`_.
__ ../../../more/getting_started/unix-variants.html#prepare-to-use-a-boost-library-binary
__ ../../../more/getting_started/windows.html#prepare-to-use-a-boost-library-binary
3. cd into the ``libs/python/example/quickstart/`` directory of your
Boost installation, which contains a small example project.
4. Invoke ``bjam``. Replace the “\ ``stage``\ “ argument from the
example invocation from section 5 of the `Getting Started
Guide`_ with “\ ``test``\ ,“ to build all the test targets. Also add
the argument “\ ``--verbose-test``\ ” to see the output generated by
the tests when they are run.
On Windows, your ``bjam`` invocation might look something like:
.. parsed-literal::
C:\\boost_1_34_0\\…\\quickstart> **bjam toolset=msvc --verbose-test test**
and on Unix variants, perhaps,
.. parsed-literal::
~/boost_1_34_0/…/quickstart$ **bjam toolset=gcc --verbose-test test**
.. Admonition:: Note to Windows Users
For the sake of concision, the rest of this guide will use
unix-style forward slashes in pathnames instead of the
backslashes with which you may be more familiar. The forward
slashes should work everywhere except in `Command Prompt`_
windows, where you should use backslashes.
.. _Command Prompt: ../../../more/getting_started/windows.html#command-prompt
If you followed this procedure successfully, you will have built an
extension module called ``extending`` and tested it by running a
Python script called ``test_extending.py``. You will also have
built and run a simple application called ``embedding`` that embeds
python.
.. _Getting Started Guide: ../../../more/getting_started/index.html
In Case of Trouble
------------------
If you're seeing lots of compiler and/or linker error messages,
it's probably because Boost.Build is having trouble finding your
Python installation. You might want to pass the
``--debug-configuration`` option to ``bjam`` the first few times
you invoke it, to make sure that Boost.Build is correctly locating
all the parts of your Python installation. If it isn't, consider
`Configuring Boost.Build`_ as detailed below.
If you're still having trouble, Someone on one of the following
mailing lists may be able to help:
* The `Boost.Build mailing list`__ for issues related to Boost.Build
* The Python `C++ Sig`__ for issues specifically related to Boost.Python
__ http://www.boost.org/more/mailing_lists.htm#jamboost
__ http://www.boost.org/more/mailing_lists.htm#cplussig
In Case Everything Seemed to Work
---------------------------------
Rejoice! If you're new to Boost.Python, at this point it might be
a good idea to ignore build issues for a while and concentrate on
learning the library by going through the tutorial_ and perhaps
some of the `reference documentation`_, trying out what you've
learned about the API by modifying the quickstart project.
.. _reference documentation: v2/reference.html
.. _tutorial: tutorial/index.html
Modifying the Example Project
-----------------------------
If you're content to keep your extension module forever in one
source file called |extending.cpp|_, inside your Boost
distribution, and import it forever as ``extending``, then you can
stop here. However, it's likely that you will want to make a few
changes. There are a few things you can do without having to learn
Boost.Build_ in depth.
The project you just built is specified in two files in the current
directory: |boost-build.jam|_, which tells ``bjam`` where it can
find the interpreted code of the Boost build system, and
|Jamroot|_, which describes the targets you just built. These
files are heavily commented, so they should be easy to modify.
Take care, however, to preserve whitespace. Punctuation such as
``;`` will not be recognized as intended by ``bjam`` if it is not
surrounded by whitespace.
.. |boost-build.jam| replace:: ``boost-build.jam``
.. _boost-build.jam: ../example/quickstart/boost-build.jam
.. |Jamroot| replace:: ``Jamroot``
.. _Jamroot: ../example/quickstart/Jamroot
.. |extending.cpp| replace:: ``extending.cpp``
.. _extending.cpp: ../example/quickstart/extending.cpp
Relocate the Project
....................
You'll probably want to copy this project elsewhere so you can
change it without modifying your Boost distribution. To do that,
simply
a. copy the entire ``libs/python/example/quickstart/`` directory
into a new directory.
b. In the new copies of |boost-build.jam|_ and |Jamroot|_, locate
the relative path near the top of the file that is clearly
marked by a comment, and edit that path so that it refers to the
same directory your Boost distribution as it referred to when
the file was in its original location in the
``libs/python/example/quickstart/`` directory.
For example, if you moved the project from
``/home/dave/boost_1_34_0/libs/python/example/quickstart`` to
``/home/dave/my-project``, you could change the first path in
|boost-build.jam|_ from
.. parsed-literal::
**../../../..**\ /tools/build/v2
to
.. parsed-literal::
**/home/dave/boost_1_34_0**\ /tools/build/v2
and change the first path in |Jamroot|_ from
.. parsed-literal::
**../../../..**
to
.. parsed-literal::
**/home/dave/boost_1_34_0**
Add New or Change Names of Existing Source Files
................................................
The names of additional source files involved in building your
extension module or embedding application can be listed in
|Jamroot|_ right alongside ``extending.cpp`` or ``embedding.cpp``
respectively. Just be sure to leave whitespace around each
filename::
… file1.cpp file2.cpp file3.cpp …
Naturally, if you want to change the name of a source file you can
tell Boost.Build about it by editing the name in |Jamroot|_.
Change the Name of your Extension Module
........................................
The name of the extension module is determined by two things:
1. the name in |Jamroot|_ immediately following ``python-extension``, and
2. the name passed to ``BOOST_PYTHON_MODULE`` in |extending.cpp|_.
To change the name of the extension module from ``extending`` to
``hello``, you'd edit |Jamroot|_, changing
.. parsed-literal::
python-extension **extending** : extending.cpp ;
to
.. parsed-literal::
python-extension **hello** : extending.cpp ;
and you'd edit extending.cpp, changing
.. parsed-literal::
BOOST_PYTHON_MODULE(\ **extending**\ )
to
.. parsed-literal::
BOOST_PYTHON_MODULE(\ **hello**\ )
Installing Boost.Python on your System
======================================
Since Boost.Python is a separately-compiled (as opposed to
`header-only`_) library, its user relies on the services of a
Boost.Python library binary.
.. _header-only: ../../../more/getting_started/windows.html#header-only-libraries
If you need a regular installation of the Boost.Python library
binaries on your system, the Boost `Getting Started Guide`_ will
walk you through the steps of creating one. If building binaries
from source, you might want to supply the ``--with-python``
argument to ``bjam`` (or the ``--with-libraries=python`` argument
to ``configure``), so only the Boost.Python binary will be built,
rather than all the Boost binaries.
Configuring Boost.Build
=======================
As described in the `Boost.Build reference manual`__, a file called
``user-config.jam`` in your home directory [#home-dir]_ is used to
specify the tools and libraries available to the build system. You
may need to create or edit ``user-config.jam`` to tell Boost.Build
how to invoke Python, ``#include`` its headers, and link with its
libraries.
__ http://www.boost.orgdoc/html/bbv2/advanced.html#bbv2.advanced.configuration
.. Admonition:: Users of Unix-Variant OSes
If you are using a unix-variant OS and you ran Boost's
``configure`` script, it may have generated a
``user-config.jam`` for you. [#overwrite]_ If your ``configure``\
/\ ``make`` sequence was successful and Boost.Python binaries
were built, your ``user-config.jam`` file is probably already
correct.
If you have one fairly “standard” python installation for your
platform, you might not need to do anything special to describe it. If
you haven't configured python in ``user-config.jam`` (and you don't
specify ``--without-python`` on the Boost.Build command line),
Boost.Build will automatically execute the equivalent of ::
import toolset : using ;
using python ;
which automatically looks for Python in the most likely places.
However, that only happens when using the Boost.Python project file
(e.g. when referred to by another project as in the quickstart_
method). If instead you are linking against separately-compiled
Boost.Python binaries, you should set up a ``user-config.jam`` file
with at least the minimal incantation above.
Python Configuration Parameters
-------------------------------
If you have several versions of Python installed, or Python is
installed in an unusual way, you may want to supply any or all of
the following optional parameters to ``using python``.
version
the version of Python to use. Should be in Major.Minor
format, for example, ``2.3``. Do not include the subminor
version (i.e. *not* ``2.5.1``). If you have multiple Python
versions installed, the version will usually be the only
configuration argument required.
cmd-or-prefix
preferably, a command that invokes a Python interpreter.
Alternatively, the installation prefix for Python libraries and
header files. Only use the alternative formulation if there is
no appropriate Python executable available.
includes
the ``#include`` paths for Python headers. Normally the correct
path(s) will be automatically deduced from ``version`` and/or
``cmd-or-prefix``.
libraries
the path to Python library binaries. On MacOS/Darwin,
you can also pass the path of the Python framework. Normally the
correct path(s) will be automatically deduced from ``version``
and/or ``cmd-or-prefix``.
condition
if specified, should be a set of Boost.Build
properties that are matched against the build configuration when
Boost.Build selects a Python configuration to use. See examples
below for details.
extension-suffix
A string to append to the name of extension
modules before the true filename extension. You almost certainly
don't need to use this. Usually this suffix is only used when
targeting a Windows debug build of Python, and will be set
automatically for you based on the value of the
|python-debugging|_ feature. However, at least one Linux
distribution (Ubuntu Feisty Fawn) has a specially configured
`python-dbg`__ package that claims to use such a suffix.
.. |python-debugging| replace:: ``<python-debugging>``
__ https://wiki.ubuntu.com/PyDbgBuilds
Examples
--------
Note that in the examples below, case and *especially whitespace* are
significant.
- If you have both python 2.5 and python 2.4 installed,
``user-config.jam`` might contain::
using python : 2.5 ; # Make both versions of Python available
using python : 2.4 ; # To build with python 2.4, add python=2.4
# to your command line.
The first version configured (2.5) becomes the default. To build
against python 2.4, add ``python=2.4`` to the ``bjam`` command line.
- If you have python installed in an unusual location, you might
supply the path to the interpreter in the ``cmd-or-prefix``
parameter::
using python : : /usr/local/python-2.6-beta/bin/python ;
- If you have a separate build of Python for use with a particular
toolset, you might supply that toolset in the ``condition``
parameter::
using python ; # use for most toolsets
# Use with Intel C++ toolset
using python
: # version
: c:\\Devel\\Python-2.5-IntelBuild\\PCBuild\\python # cmd-or-prefix
: # includes
: # libraries
: <toolset>intel # condition
;
- If you have downloaded the Python sources and built both the
normal and the “\ `python debugging`_\ ” builds from source on
Windows, you might see::
using python : 2.5 : C:\\src\\Python-2.5\\PCBuild\\python ;
using python : 2.5 : C:\\src\\Python-2.5\\PCBuild\\python_d
: # includes
: # libs
: <python-debugging>on ;
- You can set up your user-config.jam so a bjam built under Windows
can build/test both Windows and Cygwin_ python extensions. Just pass
``<target-os>cygwin`` in the ``condition`` parameter
for the cygwin python installation::
# windows installation
using python ;
# cygwin installation
using python : : c:\\cygwin\\bin\\python2.5 : : : <target-os>cygwin ;
when you put target-os=cygwin in your build request, it should build
with the cygwin version of python: [#flavor]_
bjam target-os=cygwin toolset=gcc
This is supposed to work the other way, too (targeting windows
python with a Cygwin_ bjam) but it seems as though the support in
Boost.Build's toolsets for building that way is broken at the
time of this writing.
- Note that because of `the way Boost.Build currently selects target
alternatives`__, you might have be very explicit in your build
requests. For example, given::
using python : 2.5 ; # a regular windows build
using python : 2.4 : : : : <target-os>cygwin ;
building with ::
bjam target-os=cygwin
will yield an error. Instead, you'll need to write::
bjam target-os=cygwin/python=2.4
.. _Cygwin: http://cygwin.com
__ http://zigzag.cs.msu.su/boost.build/wiki/AlternativeSelection
Choosing a Boost.Python Library Binary
======================================
If—instead of letting Boost.Build construct and link with the right
libraries automatically—you choose to use a pre-built Boost.Python
library, you'll need to think about which one to link with. The
Boost.Python binary comes in both static and dynamic flavors. Take
care to choose the right flavor for your application. [#naming]_
The Dynamic Binary
------------------
The dynamic library is the safest and most-versatile choice:
- A single copy of the library code is used by all extension
modules built with a given toolset. [#toolset-specific]_
- The library contains a type conversion registry. Because one
registry is shared among all extension modules, instances of a
class exposed to Python in one dynamically-loaded extension
module can be passed to functions exposed in another such module.
The Static Binary
-----------------
It might be appropriate to use the static Boost.Python library in
any of the following cases:
- You are extending_ python and the types exposed in your
dynamically-loaded extension module don't need to be used by any
other Boost.Python extension modules, and you don't care if the
core library code is duplicated among them.
- You are embedding_ python in your application and either:
- You are targeting a Unix variant OS other than MacOS or AIX,
where the dynamically-loaded extension modules can “see” the
Boost.Python library symbols that are part of the executable.
- Or, you have statically linked some Boost.Python extension
modules into your application and you don't care if any
dynamically-loaded Boost.Python extension modules are able to
use the types exposed by your statically-linked extension
modules (and vice-versa).
``#include`` Issues
===================
1. If you should ever have occasion to ``#include "python.h"``
directly in a translation unit of a program using Boost.Python,
use ``#include "boost/python/detail/wrap_python.hpp"`` instead.
It handles several issues necessary for use with Boost.Python,
one of which is mentioned in the next section.
2. Be sure not to ``#include`` any system headers before
``wrap_python.hpp``. This restriction is actually imposed by
Python, or more properly, by Python's interaction with your
operating system. See
http://docs.python.org/ext/simpleExample.html for details.
.. _python-debugging:
.. _python debugging:
Python Debugging Builds
=======================
Python can be built in a special “python debugging” configuration
that adds extra checks and instrumentation that can be very useful
for developers of extension modules. The data structures used by
the debugging configuration contain additional members, so **a
Python executable built with python debugging enabled cannot be
used with an extension module or library compiled without it, and
vice-versa.**
Since pre-built “python debugging” versions of the Python
executable and libraries are not supplied with most distributions
of Python, [#get-debug-build]_ and we didn't want to force our users
to build them, Boost.Build does not automatically enable python
debugging in its ``debug`` build variant (which is the default).
Instead there is a special build property called
``python-debugging`` that, when used as a build property, will
define the right preprocessor symbols and select the right
libraries to link with.
On unix-variant platforms, the debugging versions of Python's data
structures will only be used if the symbol ``Py_DEBUG`` is defined.
On many windows compilers, when extension modules are built with
the preprocessor symbol ``_DEBUG``, Python defaults to force
linking with a special debugging version of the Python DLL. Since
that symbol is very commonly used even when Python is not present,
Boost.Python temporarily undefines _DEBUG when Python.h
is #included from ``boost/python/detail/wrap_python.hpp`` - unless
``BOOST_DEBUG_PYTHON`` is defined. The upshot is that if you want
“python debugging”and you aren't using Boost.Build, you should make
sure ``BOOST_DEBUG_PYTHON`` is defined, or python debugging will be
suppressed.
Testing Boost.Python
====================
To run the full test suite for Boost.Python, invoke ``bjam`` in the
``libs/python/test`` subdirectory of your Boost distribution.
Notes for MinGW (and Cygwin with -mno-cygwin) GCC Users
=======================================================
If you are using a version of Python prior to 2.4.1 with a MinGW
prior to 3.0.0 (with binutils-2.13.90-20030111-1), you will need to
create a MinGW-compatible version of the Python library; the one
shipped with Python will only work with a Microsoft-compatible
linker. Follow the instructions in the “Non-Microsoft” section of
the “Building Extensions: Tips And Tricks” chapter in `Installing
Python Modules`__ to create ``libpythonXX.a``, where ``XX``
corresponds to the major and minor version numbers of your Python
installation.
__ http://www.python.org/doc/current/inst/index.html
-----------------------------
.. [#2.2] Note that although we tested earlier versions of
Boost.Python with Python 2.2, and we don't *think* we've done
anything to break compatibility, this release of Boost.Python
may not have been tested with versions of Python earlier than
2.4, so we're not 100% sure that python 2.2 and 2.3 are
supported.
.. [#naming] Information about how to identify the
static and dynamic builds of Boost.Python:
* `on Windows`__
* `on Unix variants`__
__ ../../../more/getting_started/windows.html#library-naming
__ ../../../more/getting_started/unix-variants.html#library-naming
.. [#toolset-specific] Because of the way most \*nix platforms
share symbols among dynamically-loaded objects, I'm not certain
that extension modules built with different compiler toolsets
will always use different copies of the Boost.Python library
when loaded into the same Python instance. Not using different
libraries could be a good thing if the compilers have compatible
ABIs, because extension modules built with the two libraries
would be interoperable. Otherwise, it could spell disaster,
since an extension module and the Boost.Python library would
have different ideas of such things as class layout. I would
appreciate someone doing the experiment to find out what
happens.
.. [#overwrite] ``configure`` overwrites the existing
``user-config.jam`` in your home directory
(if any) after making a backup of the old version.
.. [#flavor] Note that the ``<target-os>cygwin`` feature is
different from the ``<flavor>cygwin`` subfeature of the ``gcc``
toolset, and you might need handle both explicitly if you also
have a MinGW GCC installed.
.. [#home-dir] Windows users, your home directory can be
found by typing::
ECHO %HOMEDRIVE%%HOMEPATH%
into a `command prompt`_ window.
.. [#get-debug-build] On Unix and similar platforms, a debugging
python and associated libraries are built by adding
``--with-pydebug`` when configuring the Python build. On
Windows, the debugging version of Python is generated by
the "Win32 Debug" target of the Visual Studio project in the
PCBuild subdirectory of a full Python source code distribution.

View File

@@ -1,231 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>
Comparisons with Other Systems
</title>
<div>
<h1>
<img width="277" height="86" id="_x0000_i1025" align="center"
src="../../../c++boost.gif" alt= "c++boost.gif (8819 bytes)"><br>
Comparisons with
Other Systems
</h1>
<h2>CXX</h2>
<p>
Like Boost.Python, <a href="http://cxx.sourceforge.net/">CXX</a> attempts to
provide a C++-oriented interface to Python. In most cases, as with the
boost library, it relieves the user from worrying about
reference-counts. Both libraries automatically convert thrown C++
exceptions into Python exceptions. As far as I can tell, CXX has no
support for subclassing C++ extension types in Python. An even
more significant difference is that a user's C++ code is still basically
``dealing with Python objects'', though they are wrapped in
C++ classes. This means such jobs as argument parsing and conversion are
still left to be done explicitly by the user.
<p>
CXX claims to interoperate well with the C++ Standard Library
(a.k.a. STL) by providing iterators into Python Lists and Dictionaries,
but the claim is unfortunately unsupportable. The problem is that in
general, access to Python sequence and mapping elements through
iterators requires the use of proxy objects as the return value of
iterator dereference operations. This usage conflicts with the basic
ForwardIterator requirements in <a
href="http://anubis.dkuug.dk/jtc1/sc22/open/n2356/lib-iterators.html#lib.forward.iterators">
section 24.1.3 of the standard</a> (dereferencing must produce a
reference). Although you may be able to use these iterators with some
operations in some standard library implementations, it is neither
guaranteed to work nor portable.
<p>
As far as I can tell, CXX enables one to write what is essentially
idiomatic Python code in C++, manipulating Python objects through the
same fully-generic interfaces we use in Python. While you're hardly
programming directly to the ``bare metal'' with CXX, it basically
presents a ``C++-ized'' version of the Python 'C' API. Some fraction of
that capability is available in Boost.Python through <tt><a
href="../../../boost/python/objects.hpp">boost/python/objects.hpp</a></tt>,
which provides C++ objects corresponding to Python lists, tuples,
strings, and dictionaries, and through <tt><a
href="../../../boost/python/callback.hpp">boost/python/callback.hpp</a></tt>,
which allows you to call back into python with C++ arguments.
<p>
<a href="mailto:dubois1@llnl.gov">Paul F. Dubois</a>, the original
author of CXX, has told me that what I've described is only half of the
picture with CXX, but I never understood his explanation well-enough to
fill in the other half. Here is his response to the commentary above:
<blockquote>
``My intention with CXX was not to do what you are doing. It was to enable a
person to write an extension directly in C++ rather than C. I figured others had
the wrapping business covered. I thought maybe CXX would provide an easier
target language for those making wrappers, but I never explored
that.''<br><i>-<a href="mailto:dubois1@llnl.gov">Paul Dubois</a></i>
</blockquote>
<h2>SWIG</h2>
<p>
<a href= "http://www.swig.org/">SWIG</a> is an impressively mature tool
for exporting an existing ANSI 'C' interface into various scripting
languages. Swig relies on a parser to read your source code and produce
additional source code files which can be compiled into a Python (or
Perl or Tcl) extension module. It has been successfully used to create
many Python extension modules. Like Boost.Python, SWIG is trying to allow an
existing interface to be wrapped with little or no change to the
existing code. The documentation says ``SWIG parses a form of ANSI C
syntax that has been extended with a number of special directives. As a
result, interfaces are usually built by grabbing a header file and
tweaking it a little bit.'' For C++ interfaces, the tweaking has often
proven to amount to more than just a little bit. One user
writes:
<blockquote> ``The problem with swig (when I used it) is that it
couldnt handle templates, didnt do func overloading properly etc. For
ANSI C libraries this was fine. But for usual C++ code this was a
problem. Simple things work. But for anything very complicated (or
realistic), one had to write code by hand. I believe Boost.Python doesn't have
this problem[<a href="#sic">sic</a>]... IMHO overloaded functions are very important to
wrap correctly.''<br><i>-Prabhu Ramachandran</i>
</blockquote>
<p>
By contrast, Boost.Python doesn't attempt to parse C++ - the problem is simply
too complex to do correctly. <a name="sic">Technically</a>, one does
write code by hand to use Boost.Python. The goal, however, has been to make
that code nearly as simple as listing the names of the classes and
member functions you want to expose in Python.
<h2>SIP</h2>
<p>
<a
href="http://www.thekompany.com/projects/pykde/background.php3?dhtml_ok=1">SIP</a>
is a system similar to SWIG, though seemingly more
C++-oriented. The author says that like Boost.Python, SIP supports overriding
extension class member functions in Python subclasses. It appears to
have been designed specifically to directly support some features of
PyQt/PyKDE, which is its primary client. Documentation is almost
entirely missing at the time of this writing, so a detailed comparison
is difficult.
<h2>ILU</h2>
<p>
<a
href="ftp://ftp.parc.xerox.com/pub/ilu/ilu.html">ILU</a>
is a very ambitious project which tries to describe a module's interface
(types and functions) in terms of an <a
href="ftp://ftp.parc.xerox.com/pub/ilu/2.0b1/manual-html/manual_2.html">Interface
Specification Language</a> (ISL) so that it can be uniformly interfaced
to a wide range of computer languages, including Common Lisp, C++, C,
Modula-3, and Python. ILU can parse the ISL to generate a C++ language
header file describing the interface, of which the user is expected to
provide an implementation. Unlike Boost.Python, this means that the system
imposes implementation details on your C++ code at the deepest level. It
is worth noting that some of the C++ names generated by ILU are supposed
to be reserved to the C++ implementation. It is unclear from the
documentation whether ILU supports overriding C++ virtual functions in Python.
<h2>GRAD</h2>
<p>
<a
href="http://www.python.org/workshops/1996-11/papers/GRAD/html/GRADcover.html">GRAD</a>
is another very ambitious project aimed at generating Python wrappers for
interfaces written in ``legacy languages'', among which C++ is the first one
implemented. Like SWIG, it aims to parse source code and automatically
generate wrappers, though it appears to take a more sophisticated approach
to parsing in general and C++ in particular, so it should do a much better
job with C++. It appears to support function overloading. The
documentation is missing a lot of information I'd like to see, so it is
difficult to give an accurate and fair assessment. I am left with the
following questions:
<ul>
<li>Does it support overriding of virtual functions?
<li>What about overriding private or protected virtual functions (the documentation indicates
that only public interfaces are supported)?
<li>Which C++ language constructs are supportd?
<li>Does it support implicit conversions between wrapped C++ classes that have
an inheritance relationship?
<li>Does it support smart pointers?
</ul>
<p>
Anyone in the possession of the answers to these questions will earn my
gratitude for a write-up <code>;-)</code>
<h2>Zope ExtensionClasses</h2>
<p>
<a href="http:http://www.digicool.com/releases/ExtensionClass">
ExtensionClasses in Zope</a> use the same underlying mechanism as Boost.Python
to support subclassing of extension types in Python, including
multiple-inheritance. Both systems support pickling/unpickling of
extension class instances in very similar ways. Both systems rely on the
same ``<a
href="http://www.python.org/workshops/1994-11/BuiltInClasses/Welcome.html">Don
Beaudry Hack</a>'' that also inspired Don's MESS System.
<p>
The major differences are:
<ul>
<li>Zope is entirely 'C' language-based. It doesn't require a C++
compiler, so it's much more portable than Boost.Python, which stresses
the limits of even some modern C++ implementations.
<li>
Boost.Python lifts the burden on the user to parse and convert function
argument types. Zope provides no such facility.
<li>
Boost.Python lifts the burden on the user to maintain Python
reference-counts.
<li>
Boost.Python supports function overloading; Zope does not.
<li>
Boost.Python supplies a simple mechanism for exposing read-only and
read/write access to data members of the wrapped C++ type as Python
attributes.
<li>
Writing a Zope ExtensionClass is significantly more complex than
exposing a C++ class to python using Boost.Python (mostly a summary of the
previous 4 items). <a href=
"http://www.digicool.com/releases/ExtensionClass/MultiMapping.html">A
Zope Example</a> illustrates the differences.
<li>
Zope's ExtensionClasses are specifically motivated by ``the need for a
C-based persistence mechanism''. Boost.Python's are motivated by the desire
to simply reflect a C++ API into Python with as little modification as
possible.
<li>
The following Zope restriction does not apply to Boost.Python: ``At most one
base extension direct or indirect super class may define C data
members. If an extension subclass inherits from multiple base
extension classes, then all but one must be mix-in classes that
provide extension methods but no data.''
<li>
Zope requires use of the somewhat funky inheritedAttribute (search for
``inheritedAttribute'' on <a
href="http://www.digicool.com/releases/ExtensionClass">this page</a>)
method to access base class methods. In Boost.Python, base class methods can
be accessed in the usual way by writing
``<code>BaseClass.method</code>''.
<li>
Zope supplies some creative but esoteric idioms such as <a href=
"http://www.digicool.com/releases/ExtensionClass/Acquisition.html">
Acquisition</a>. No specific support for this is built into Boost.Python.
<li>
Zope's ComputedAttribute support is designed to be used from Python.
<a href="special.html#getter_setter">The analogous feature of
Boost.Python</a> can be used from C++ or Python. The feature is arguably
easier to use in Boost.Python.
</ul>
<p>
Next: <a href="example1.html">A Simple Example Using Boost.Python</a>
Previous: <a href="extending.html">A Brief Introduction to writing Python Extension Modules</a>
Up: <a href="index.html">Top</a>
<p>
&copy; Copyright David Abrahams 2000. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided ``as is'' without
express or implied warranty, and with no claim as to its suitability
for any purpose.
<p>
Updated: Mar 6, 2001
</div>

View File

@@ -1,336 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>Cross-extension-module dependencies</title>
<div>
<img src="../../../c++boost.gif"
alt="c++boost.gif (8819 bytes)"
align="center"
width="277" height="86">
<hr>
<h1>Cross-extension-module dependencies</h1>
It is good programming practice to organize large projects as modules
that interact with each other via well defined interfaces. With
Boost.Python it is possible to reflect this organization at the C++
level at the Python level. This is, each logical C++ module can be
organized as a separate Python extension module.
<p>
At first sight this might seem natural and straightforward. However, it
is a fairly complex problem to establish cross-extension-module
dependencies while maintaining the same ease of use Boost.Python
provides for classes that are wrapped in the same extension module. To
a large extent this complexity can be hidden from the author of a
Boost.Python extension module, but not entirely.
<hr>
<h2>The recipe</h2>
Suppose there is an extension module that exposes certain instances of
the C++ <tt>std::vector</tt> template library such that it can be used
from Python in the following manner:
<pre>
import std_vector
v = std_vector.double([1, 2, 3, 4])
v.push_back(5)
v.size()
</pre>
Suppose the <tt>std_vector</tt> module is done well and reflects all
C++ functions that are useful at the Python level, for all C++ built-in
data types (<tt>std_vector.int</tt>, <tt>std_vector.long</tt>, etc.).
<p>
Suppose further that there is statistic module with a C++ class that
has constructors or member functions that use or return a
<tt>std::vector</tt>. For example:
<pre>
class xy {
public:
xy(const std::vector&lt;double&gt;&amp; x, const std::vector&lt;double&gt;&amp; y) : m_x(x), m_y(y) {}
const std::vector&lt;double&gt;&amp; x() const { return m_x; }
const std::vector&lt;double&gt;&amp; y() const { return m_y; }
double correlation();
private:
std::vector&lt;double&gt; m_x;
std::vector&lt;double&gt; m_y;
}
</pre>
What is more natural than reusing the <tt>std_vector</tt> extension
module to expose these constructors or functions to Python?
<p>
Unfortunately, what seems natural needs a little work in both the
<tt>std_vector</tt> and the <tt>statistics</tt> module.
<p>
In the <tt>std_vector</tt> extension module,
<tt>std::vector&lt;double&gt;</tt> is exposed to Python in the usual
way with the <tt>class_builder&lt;&gt;</tt> template. To also enable the
automatic conversion of <tt>std::vector&lt;double&gt;</tt> function
arguments or return values in other Boost.Python C++ modules, the
converters that convert a <tt>std::vector&lt;double&gt;</tt> C++ object
to a Python object and vice versa (i.e. the <tt>to_python()</tt> and
<tt>from_python()</tt> template functions) have to be exported. For
example:
<pre>
#include &lt;boost/python/cross_module.hpp&gt;
//...
class_builder&lt;std::vector&lt;double&gt; &gt; v_double(std_vector_module, &quot;double&quot;);
export_converters(v_double);
</pre>
In the extension module that wraps <tt>class xy</tt> we can now import
these converters with the <tt>import_converters&lt;&gt;</tt> template.
For example:
<pre>
#include &lt;boost/python/cross_module.hpp&gt;
//...
import_converters&lt;std::vector&lt;double&gt; &gt; v_double_converters(&quot;std_vector&quot;, &quot;double&quot;);
</pre>
That is all. All the attributes that are defined for
<tt>std_vector.double</tt> in the <tt>std_vector</tt> Boost.Python
module will be available for the returned objects of <tt>xy.x()</tt>
and <tt>xy.y()</tt>. Similarly, the constructor for <tt>xy</tt> will
accept objects that were created by the <tt>std_vector</tt>module.
<hr>
<h2>Placement of <tt>import_converters&lt;&gt;</tt> template instantiations</h2>
<tt>import_converts&lt;&gt;</tt> can be viewed as a drop-in replacement
for <tt>class_wrapper&lt;&gt;</tt>, and the recommendations for the
placement of <tt>class_wrapper&lt;&gt;</tt> template instantiations
also apply to to <tt>import_converts&lt;&gt;</tt>. In particular, it is
important that an instantiation of <tt>class_wrapper&lt;&gt;</tt> is
visible to any code which wraps a C++ function with a <tt>T</tt>,
<tt>T*</tt>, const <tt>T&amp;</tt>, etc. parameter or return value.
Therefore you may want to group all <tt>class_wrapper&lt;&gt;</tt> and
<tt>import_converts&lt;&gt;</tt> instantiations at the top of your
module's init function, then <tt>def()</tt> the member functions later
to avoid problems with inter-class dependencies.
<hr>
<h2>Non-copyable types</h2>
<tt>export_converters()</tt> instantiates C++ template functions that
invoke the copy constructor of the wrapped type. For a type that is
non-copyable this will result in compile-time error messages. In such a
case, <tt>export_converters_noncopyable()</tt> can be used to export
the converters that do not involve the copy constructor of the wrapped
type. For example:
<pre>
class_builder&lt;store&gt; py_store(your_module, &quot;store&quot;);
export_converters_noncopyable(py_store);
</pre>
The corresponding <tt>import_converters&lt;&gt;</tt> statement does not
need any special attention:
<pre>
import_converters&lt;store&gt; py_store(&quot;noncopyable_export&quot;, &quot;store&quot;);
</pre>
<hr>
<h2>Python module search path</h2>
The <tt>std_vector</tt> and <tt>statistics</tt> modules can now be used
in the following way:
<pre>
import std_vector
import statistics
x = std_vector.double([1, 2, 3, 4])
y = std_vector.double([2, 4, 6, 8])
xy = statistics.xy(x, y)
xy.correlation()
</pre>
In this example it is clear that Python has to be able to find both the
<tt>std_vector</tt> and the <tt>statistics</tt> extension module. In
other words, both extension modules need to be in the Python module
search path (<tt>sys.path</tt>).
<p>
The situation is not always this obvious. Suppose the
<tt>statistics</tt> module has a <tt>random()</tt> function that
returns a vector of random numbers with a given length:
<pre>
import statistics
x = statistics.random(5)
y = statistics.random(5)
xy = statistics.xy(x, y)
xy.correlation()
</pre>
A naive user will not easily anticipate that the <tt>std_vector</tt>
module is used to pass the <tt>x</tt> and <tt>y</tt> vectors around. If
the <tt>std_vector</tt> module is in the Python module search path,
this form of ignorance is of no harm. On the contrary, we are glad
that we do not have to bother the user with details like this.
<p>
If the <tt>std_vector</tt> module is not in the Python module search
path, a Python exception will be raised:
<pre>
Traceback (innermost last):
File &quot;foo.py&quot;, line 2, in ?
x = statistics.random(5)
ImportError: No module named std_vector
</pre>
As is the case with any system of a non-trivial complexity, it is
important that the setup is consistent and complete.
<hr>
<h2>Two-way module dependencies</h2>
Boost.Python supports two-way module dependencies. This is best
illustrated by a simple example.
<p>
Suppose there is a module <tt>ivect</tt> that implements vectors of
integers, and a similar module <tt>dvect</tt> that implements vectors
of doubles. We want to be able do convert an integer vector to a double
vector and vice versa. For example:
<pre>
import ivect
iv = ivect.ivect((1,2,3,4,5))
dv = iv.as_dvect()
</pre>
The last expression will implicitly import the <tt>dvect</tt> module in
order to enable the conversion of the C++ representation of
<tt>dvect</tt> to a Python object. The analogous is possible for a
<tt>dvect</tt>:
<pre>
import dvect
dv = dvect.dvect((1,2,3,4,5))
iv = dv.as_ivect()
</pre>
Now the <tt>ivect</tt> module is imported implicitly.
<p>
Note that the two-way dependencies are possible because the
dependencies are resolved only when needed. This is, the initialization
of the <tt>ivect</tt> module does not rely on the <tt>dvect</tt>
module, and vice versa. Only if <tt>as_dvect()</tt> or
<tt>as_ivect()</tt> is actually invoked will the corresponding module
be implicitly imported. This also means that, for example, the
<tt>dvect</tt> module does not have to be available at all if
<tt>as_dvect()</tt> is never used.
<hr>
<h2>Clarification of compile-time and link-time dependencies</h2>
Boost.Python's support for resolving cross-module dependencies at
runtime does not imply that compile-time dependencies are eliminated.
For example, the statistics extension module in the example above will
need to <tt>#include &lt;vector&gt;</tt>. This is immediately obvious
from the definition of <tt>class xy</tt>.
<p>
If a library is wrapped that consists of both header files and compiled
components (e.g. <tt>libdvect.a</tt>, <tt>dvect.lib</tt>, etc.), both
the Boost.Python extension module with the
<tt>export_converters()</tt> statement and the module with the
<tt>import_converters&lt;&gt;</tt> statement need to be linked against
the object library. Ideally one would build a shared library (e.g.
<tt>libdvect.so</tt>, <tt>dvect.dll</tt>, etc.). However, this
introduces the issue of having to configure the search path for the
dynamic loading correctly. For small libraries it is therefore often
more convenient to ignore the fact that the object files are loaded
into memory more than once.
<hr>
<h2>Summary of motivation for cross-module support</h2>
The main purpose of Boost.Python's cross-module support is to allow for
a modular system layout. With this support it is straightforward to
reflect C++ code organization at the Python level. Without the
cross-module support, a multi-purpose module like <tt>std_vector</tt>
would be impractical because the entire wrapper code would somehow have
to be duplicated in all extension modules that use it, making them
harder to maintain and harder to build.
<p>
Another motivation for the cross-module support is that two extension
modules that wrap the same class cannot both be imported into Python.
For example, if there are two modules <tt>A</tt> and <tt>B</tt> that
both wrap a given <tt>class X</tt>, this will work:
<pre>
import A
x = A.X()
</pre>
This will also work:
<pre>
import B
x = B.X()
</pre>
However, this will fail:
<pre>
import A
import B
python: /net/cci/rwgk/boost/boost/python/detail/extension_class.hpp:866:
static void boost::python::detail::class_registry&lt;X&gt;::register_class(boost::python::detail::extension_class_base *):
Assertion `static_class_object == 0' failed.
Abort
</pre>
A good solution is to wrap <tt>class X</tt> only once. Depending on the
situation, this could be done by module <tt>A</tt> or <tt>B</tt>, or an
additional small extension module that only wraps and exports
<tt>class X</tt>.
<p>
Finally, there can be important psychological or political reasons for
using the cross-module support. If a group of classes is lumped
together with many others in a huge module, the authors will have
difficulties in being identified with their work. The situation is
much more transparent if the work is represented by a module with a
recognizable name. This is not just a question of strong egos, but also
of getting credit and funding.
<hr>
<h2>Why not use <tt>export_converters()</tt> universally?</h2>
There is some overhead associated with the Boost.Python cross-module
support. Depending on the platform, the size of the code generated by
<tt>export_converters()</tt> is roughly 10%-20% of that generated
by <tt>class_builder&lt;&gt;</tt>. For a large extension module with
many wrapped classes, this could mean a significant difference.
Therefore the general recommendation is to use
<tt>export_converters()</tt> only for classes that are likely to
be used as function arguments or return values in other modules.
<hr>
&copy; Copyright Ralf W. Grosse-Kunstleve 2001. Permission to copy,
use, modify, sell and distribute this document is granted provided this
copyright notice appears in all copies. This document is provided "as
is" without express or implied warranty, and with no claim as to its
suitability for any purpose.
<p>
Updated: April 2001
</div>

View File

@@ -1,192 +0,0 @@
Given a real Python class 'A', a wrapped C++ class 'B', and this definition:
class C(A, B):
def __init__(self):
B.__init__(self)
self.x = 1
...
c = C()
this diagram describes the internal structure of an instance of 'C', including
its inheritance relationships. Note that ExtensionClass<B> is derived from
Class<ExtensionInstance>, and is in fact identical for all intents and purposes.
MetaClass<ExtensionInstance>
+---------+ +---------+
types.ClassType: | | | |
| | | |
| | | |
+---------+ +---------+
^ ^ ^
PyClassObject | ExtensionClass<B> | |
A: +------------+ | B: +------------+ | |
| ob_type -+-+ | ob_type -+-----+ |
| | ()<--+- __bases__ | |
| | | __dict__ -+->{...} |
| | 'B'<-+- __name__ | |
+------------+ +------------+ |
^ ^ |
| | |
+-----+ +-------------+ |
| | |
| | Class<ExtensionInstance> |
| | C: +------------+ |
| | | ob_type -+------------+
tuple:(*, *)<--+- __bases__ |
| __dict__ -+->{__module__, <methods, etc.>}
'C' <-+- __name__ |
+------------+
^ (in case of inheritance from more than one
| extension class, this vector would contain
+---------------+ a pointer to an instance holder for the data
| of each corresponding C++ class)
| ExtensionInstance
| c: +---------------------+ std::vector<InstanceHolderBase>
+----+- __class__ | +---+--
| m_wrapped_objects -+->| * | ...
{'x': 1}<-+- __dict__ | +-|-+--
+---------------------+ | InstanceValueHolder<B>
| +--------------------------------+
+-->| (contains a C++ instance of B) |
+--------------------------------+
In our inheritance test cases in extclass_demo.cpp/test_extclass.py, we have the
following C++ inheritance hierarchy:
+-----+ +----+
| A1 | | A2 |
+-----+ +----+
^ ^ ^ ^ ^
| | | | |
+-----+ | +---------+-----+
| | | |
| +---+----------+
.......!...... | |
: A_callback : +-+--+ +-+--+
:............: | B1 | | B2 |
+----+ +----+
^
|
+-------+---------+
| |
+-+-+ ......!.......
| C | : B_callback :
+---+ :............:
A_callback and B_callback are used as part of the wrapping mechanism but not
represented in Python. C is also not represented in Python but is delivered
there polymorphically through a smart pointer.
This is the data structure in Python.
ExtensionClass<A1>
A1: +------------+
()<--+- __bases__ |
| __dict__ -+->{...}
+------------+
^
| ExtensionInstance
| a1: +---------------------+ vec InstanceValueHolder<A1,A_callback>
+---------+- __class__ | +---+ +---------------------+
| | m_wrapped_objects -+->| *-+-->| contains A_callback |
| +---------------------+ +---+ +---------------------+
|
| ExtensionInstance
| pa1_a1: +---------------------+ vec InstancePtrHolder<auto_ptr<A1>,A1>
+---------+- __class__ | +---+ +---+
| | m_wrapped_objects -+->| *-+-->| *-+-+ A1
| +---------------------+ +---+ +---+ | +---+
| +->| |
| ExtensionInstance +---+
| pb1_a1: +---------------------+ vec InstancePtrHolder<auto_ptr<A1>,A1>
+---------+- __class__ | +---+ +---+
| | m_wrapped_objects -+->| *-+-->| *-+-+ B1
| +---------------------+ +---+ +---+ | +---+
| +->| |
| ExtensionInstance +---+
| pb2_a1: +---------------------+ vec InstancePtrHolder<auto_ptr<A1>,A1>
+---------+- __class__ | +---+ +---+
| | m_wrapped_objects -+->| *-+-->| *-+-+ B2
| +---------------------+ +---+ +---+ | +---+
| +->| |
| +---+
| ExtensionClass<A1>
| A2: +------------+
| ()<--+- __bases__ |
| | __dict__ -+->{...}
| +------------+
| ^
| | ExtensionInstance
| a2: | +---------------------+ vec InstanceValueHolder<A2>
| +-+- __class__ | +---+ +-------------+
| | | m_wrapped_objects -+->| *-+-->| contains A2 |
| | +---------------------+ +---+ +-------------+
| |
| | ExtensionInstance
| pa2_a2: | +---------------------+ vec InstancePtrHolder<auto_ptr<A2>,A2>
| +-+- __class__ | +---+ +---+
| | | m_wrapped_objects -+->| *-+-->| *-+-+ A2
| | +---------------------+ +---+ +---+ | +---+
| | +->| |
| | ExtensionInstance +---+
| pb1_a2: | +---------------------+ vec InstancePtrHolder<auto_ptr<A2>,A2>
| +-+- __class__ | +---+ +---+
| | | m_wrapped_objects -+->| *-+-->| *-+-+ B1
| | +---------------------+ +---+ +---+ | +---+
| | +->| |
| | +---+
| |
| +---------------+------------------------------+
| | |
+------+-------------------------+-|----------------------------+ |
| | | | |
| Class<ExtensionInstance> | | ExtensionClass<B1> | | ExtensionClass<B1>
| DA1: +------------+ | | B1: +------------+ | | B2: +------------+
(*,)<---+- __bases__ | (*,*)<---+- __bases__ | (*,*)<---+- __bases__ |
| __dict__ -+->{...} | __dict__ -+->{...} | __dict__ -+->{...}
+------------+ +------------+ +------------+
^ ^ ^
| ExtensionInstance | |
| da1: +---------------------+ | vec InstanceValueHolder<A1,A_callback>
+-------+- __class__ | | +---+ +---------------------+ |
| m_wrapped_objects -+--|-->| *-+-->| contains A_callback | |
+---------------------+ | +---+ +---------------------+ |
+--------------------------------------+ |
| ExtensionInstance |
b1: | +---------------------+ vec InstanceValueHolder<B1,B_callback> |
+-+- __class__ | +---+ +---------------------+ |
| | m_wrapped_objects -+->| *-+-->| contains B_callback | |
| +---------------------+ +---+ +---------------------+ |
| |
| ExtensionInstance |
pb1_b1: | +---------------------+ vec InstancePtrHolder<auto_ptr<B1>,B1> |
+-+- __class__ | +---+ +---+ |
| | m_wrapped_objects -+->| *-+-->| *-+-+ B1 |
| +---------------------+ +---+ +---+ | +---+ |
| +->| | |
| ExtensionInstance +---+ |
pc_b1: | +---------------------+ vec InstancePtrHolder<auto_ptr<B1>,B1> |
+-+- __class__ | +---+ +---+ |
| | m_wrapped_objects -+->| *-+-->| *-+-+ C |
| +---------------------+ +---+ +---+ | +---+ |
| +->| | |
| +---+ |
| |
| Class<ExtensionInstance> +---------------------------------------+
| DB1: +------------+ | ExtensionInstance
(*,)<---+- __bases__ | a2: | +---------------------+ vec InstanceValueHolder<A2>
| __dict__ -+->{...} +-+- __class__ | +---+ +-------------+
+------------+ | m_wrapped_objects -+->| *-+-->| contains A2 |
^ +---------------------+ +---+ +-------------+
| ExtensionInstance
db1: | +---------------------+ vec InstanceValueHolder<B1,B_callback>
+-+- __class__ | +---+ +----------------------+
| m_wrapped_objects -+-->| *-+-->| contains B1_callback |
+---------------------+ +---+ +----------------------+

View File

@@ -1,120 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>
Wrapping enums
</title>
<div>
<h1>
<img width="277" height="86" id="_x0000_i1025" align="center"
src="../../../c++boost.gif" alt= "c++boost.gif (8819 bytes)"><br>
Wrapping enums
</h1>
<p>Because there is in general no way to deduce that a value of arbitrary type T
is an enumeration constant, the Boost Python Library cannot automatically
convert enum values to and from Python. To handle this case, you need to decide
how you want the enum to show up in Python (since Python doesn't have
enums). Once you have done that, you can write some simple
<code>from_python()</code> and <code>to_python()</code> functions.
<p>If you are satisfied with a Python int as a way to represent your enum
values, we provide a shorthand for these functions. You just need to cause
<code>boost::python::enum_as_int_converters&lt;EnumType&gt;</code> to be
instantiated, where
<code>EnumType</code> is your enumerated type. There are two convenient ways to do this:
<ol>
<li>Explicit instantiation:
<blockquote><pre>
template class boost::python::enum_as_int_converters&lt;my_enum&gt;;
</blockquote></pre>
Some buggy C++ implementations require a class to be instantiated in the same
namespace in which it is defined. In that case, the simple incantation above becomes:
<blockquote>
<pre>
...
} // close my_namespace
// drop into namespace python and explicitly instantiate
namespace boost { namespace python {
template class enum_as_int_converters&lt;my_enum_type&gt;;
}} // namespace boost::python
namespace my_namespace { // re-open my_namespace
...
</pre>
</blockquote>
<li>If you have such an implementation, you may find this technique more convenient
<blockquote><pre>
// instantiate as base class in any namespace
struct EnumTypeConverters
: boost::python::enum_as_int_converters&lt;EnumType&gt;
{
};
</blockquote></pre>
</ol>
<p>Either of the above is equivalent to the following declarations:
<blockquote><pre>
BOOST_PYTHON_BEGIN_CONVERSION_NAMESPACE // this is a gcc 2.95.2 bug workaround
MyEnumType from_python(PyObject* x, boost::python::type&lt;MyEnumType&gt;)
{
return static_cast&lt;MyEnum&gt;(
from_python(x, boost::python::type&lt;long&gt;()));
}
MyEnumType from_python(PyObject* x, boost::python::type&lt;const MyEnumType&amp;&gt;)
{
return static_cast&lt;MyEnum&gt;(
from_python(x, boost::python::type&lt;long&gt;()));
}
PyObject* to_python(MyEnumType x)
{
return to_python(static_cast&lt;long&gt;(x));
}
BOOST_PYTHON_END_CONVERSION_NAMESPACE
</pre></blockquote>
<p>This technique defines the conversions of
<code>MyEnumType</code> in terms of the conversions for the built-in
<code>long</code> type.
You may also want to add a bunch of lines like this to your module
initialization. These bind the corresponding enum values to the appropriate
names so they can be used from Python:
<blockquote><pre>
mymodule.add(boost::python::make_ref(enum_value_1), "enum_value_1");
mymodule.add(boost::python::make_ref(enum_value_2), "enum_value_2");
...
</pre></blockquote>
You can also add these to an extension class definition, if your enum happens to
be local to a class and you want the analogous interface in Python:
<blockquote><pre>
my_class_builder.add(boost::python::to_python(enum_value_1), "enum_value_1");
my_class_builder.add(boost::python::to_python(enum_value_2), "enum_value_2");
...
</pre></blockquote>
<p>
Next: <a href="pointers.html">Pointers and Smart Pointers</a>
Previous: <a href="building.html">Building an Extension Module</a>
Up: <a href="index.html">Top</a>
<p>
&copy; Copyright David Abrahams 2000. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided ``as
is'' without express or implied warranty, and with no claim as to
its suitability for any purpose.
<p>
Updated: Mar 6, 2001
</div>

View File

@@ -1,75 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>
A Simple Example
</title>
<div>
<h1>
<img width="277" height="86" id="_x0000_i1025" src="../../../c++boost.gif" alt=
"c++boost.gif (8819 bytes)">
</h1>
<h1>
A Simple Example
</h1>
<p>
Suppose we have the following C++ API which we want to expose in
Python:
<blockquote>
<pre>
#include &lt;string&gt;
namespace { // Avoid cluttering the global namespace.
// A couple of simple C++ functions that we want to expose to Python.
std::string greet() { return "hello, world"; }
int square(int number) { return number * number; }
}
</pre>
</blockquote>
<p>
Here is the C++ code for a python module called <tt>getting_started1</tt>
which exposes the API.
<blockquote>
<pre>
#include &lt;boost/python/class_builder.hpp&gt;
namespace python = boost::python;
BOOST_PYTHON_MODULE_INIT(getting_started1)
{
// Create an object representing this extension module.
python::module_builder this_module("getting_started1");
// Add regular functions to the module.
this_module.def(greet, "greet");
this_module.def(square, "square");
}
</pre>
</blockquote>
<p>
That's it! If we build this shared library and put it on our <code>
PYTHONPATH</code> we can now access our C++ functions from
Python.
<blockquote>
<pre>
&gt;&gt;&gt; import getting_started1
&gt;&gt;&gt; print getting_started1.greet()
hello, world
&gt;&gt;&gt; number = 11
&gt;&gt;&gt; print number, '*', number, '=', getting_started1.square(number)
11 * 11 = 121
</pre>
<p>
Next: <a href="exporting_classes.html">Exporting Classes</a>
Previous: <a href="comparisons.html">Comparisons with other systems</a> Up:
<a href="index.html">Top</a>
<p>
&copy; Copyright David Abrahams 2000. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided "as is" without
express or implied warranty, and with no claim as to its suitability
for any purpose.
<p>
Updated: Mar 6, 2000
</div>

View File

@@ -1,143 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>
Exporting Classes
</title>
<div>
<h1>
<img width="277" height="86" id="_x0000_i1025" src="../../../c++boost.gif" alt=
"c++boost.gif (8819 bytes)">
</h1>
<h1>
Exporting Classes
</h1>
<p>
Now let's expose a C++ class to Python:
<blockquote><pre>
#include &lt;iostream&gt;
#include &lt;string&gt;
namespace { // Avoid cluttering the global namespace.
// A friendly class.
class hello
{
public:
hello(const std::string&amp; country) { this-&gt;country = country; }
std::string greet() const { return "Hello from " + country; }
private:
std::string country;
};
// A function taking a hello object as an argument.
std::string invite(const hello&amp; w) {
return w.greet() + "! Please come soon!";
}
}
</blockquote></pre> <p>
To expose the class, we use a <tt>class_builder</tt> in addition to the
<tt>module_builder</tt> from the previous example. Class member functions
are exposed by using the <tt>def()</tt> member function on the
<tt>class_builder</tt>:
<blockquote><pre>
#include &lt;boost/python/class_builder.hpp&gt;
namespace python = boost::python;
BOOST_PYTHON_MODULE_INIT(getting_started2)
{
// Create an object representing this extension module.
python::module_builder this_module("getting_started2");
// Create the Python type object for our extension class.
python::class_builder&lt;hello&gt; hello_class(this_module, "hello");
// Add the __init__ function.
hello_class.def(python::constructor&lt;std::string&gt;());
// Add a regular member function.
hello_class.def(&amp;hello::greet, "greet");
// Add invite() as a regular function to the module.
this_module.def(invite, "invite");
// Even better, invite() can also be made a member of hello_class!!!
hello_class.def(invite, "invite");
}
</blockquote></pre>
<p>
Now we can use the class normally from Python:
<blockquote><pre>
&gt;&gt;&gt; from getting_started2 import *
&gt;&gt;&gt; hi = hello('California')
&gt;&gt;&gt; hi.greet()
'Hello from California'
&gt;&gt;&gt; invite(hi)
'Hello from California! Please come soon!'
&gt;&gt;&gt; hi.invite()
'Hello from California! Please come soon!'
</blockquote></pre>
Notes:<ul>
<li> We expose the class' constructor by calling <tt>def()</tt> on the
<tt>class_builder</tt> with an argument whose type is
<tt>constructor&lt;</tt><i>params</i><tt>&gt;</tt>, where <i>params</i>
matches the list of constructor argument types:
<li>Regular member functions are defined by calling <tt>def()</tt> with a
member function pointer and its Python name:
<li>Any function added to a class whose initial argument matches the class (or
any base) will act like a member function in Python.
<li>To define a nested class, just pass the enclosing
<tt>class_builder</tt> (instead of a <tt>module_builder</tt>) as the
first argument to the nested <tt>class_builder</tt>'s constructor.
</ul>
<p>
We can even make a subclass of <code>hello.world</code>:
<blockquote><pre>
&gt;&gt;&gt; class wordy(hello):
... def greet(self):
... return hello.greet(self) + ', where the weather is fine'
...
&gt;&gt;&gt; hi2 = wordy('Florida')
&gt;&gt;&gt; hi2.greet()
'Hello from Florida, where the weather is fine'
&gt;&gt;&gt; invite(hi2)
'Hello from Florida! Please come soon!'
</blockquote></pre>
<p>
Pretty cool! You can't do that with an ordinary Python extension type!
Of course, you may now have a slightly empty feeling in the pit of
your little pythonic stomach. Perhaps you wanted to see the following
<tt>wordy</tt> invitation:
<blockquote><pre>
'Hello from Florida, where the weather is fine! Please come soon!'
</blockquote></pre>
After all, <tt>invite</tt> calls <tt>hello::greet()</tt>, and you
reimplemented that in your Python subclass, <tt>wordy</tt>. If so, <a
href= "overriding.html">read on</a>...
<p>
Next: <a href="overriding.html">Overridable virtual functions</a>
Previous: <a href="example1.html">A Simple Example</a> Up:
<a href="index.html">Top</a>
<p>
&copy; Copyright David Abrahams 2000. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided "as is" without
express or implied warranty, and with no claim as to its suitability
for any purpose.
<p>
Updated: Mar 6, 2001
</div>

View File

@@ -1,73 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>
A Brief Introduction to writing Python extension modules
</title>
<h1>
<img src="../../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align="center"
width="277" height="86">
</h1>
<h1>
A Brief Introduction to writing Python extension modules
</h1>
<p>
Interfacing any language to Python involves building a module which can
be loaded by the Python interpreter, but which isn't written in Python.
This is known as an <em>extension module</em>. Many of the <a href=
"http://www.python.org/doc/current/lib/lib.html">built-in Python
libraries</a> are constructed in 'C' this way; Python even supplies its
<a href="http://www.python.org/doc/current/lib/types.html">fundamental
types</a> using the same mechanism. An extension module can be statically
linked with the Python interpreter, but it more commonly resides in a
shared library or DLL.
<p>
As you can see from <a href=
"http://www.python.org/doc/current/ext/ext.html"> The Python Extending
and Embedding Tutorial</a>, writing an extension module normally means
worrying about
<ul>
<li>
<a href="http://www.python.org/doc/current/ext/refcounts.html">
maintaining reference counts</a>
<li>
<a href="http://www.python.org/doc/current/ext/callingPython.html"> how
to call back into Python</a>
<li>
<a href="http://www.python.org/doc/current/ext/parseTuple.html">
function argument parsing and typechecking</a>
</ul>
This last item typically occupies a great deal of code in an extension
module. Remember that Python is a completely dynamic language. A callable
object receives its arguments in a tuple; it is up to that object to extract
those arguments from the tuple, check their types, and raise appropriate
exceptions. There are numerous other tedious details that need to be
managed; too many to mention here. The Boost Python Library is designed to
lift most of that burden.<br>
<br>
<p>
Another obstacle that most people run into eventually when extending
Python is that there's no way to make a true Python class in an extension
module. The typical solution is to create a new Python type in the
extension module, and then write an additional module in 100% Python. The
Python module defines a Python class which dispatches to an instance of
the extension type, which it contains. This allows users to write
subclasses of the class in the Python module, almost as though they were
sublcassing the extension type. Aside from being tedious, it's not really
the same as having a true class, because there's no way for the user to
override a method of the extension type which is called from the
extension module. Boost.Python solves this problem by taking advantage of <a
href="http://www.python.org/doc/essays/metaclasses/">Python's metaclass
feature</a> to provide objects which look, walk, and hiss almost exactly
like regular Python classes. Boost.Python classes are actually cleaner than
Python classes in some subtle ways; a more detailed discussion will
follow (someday).</p>
<p>Next: <a href="comparisons.html">Comparisons with Other Systems</a> Up: <a
href="index.html">Top</a> </p>
<p>
&copy; Copyright David Abrahams 2000. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided "as is" without
express or implied warranty, and with no claim as to its suitability for
any purpose.</p>

View File

@@ -1,205 +1,184 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>
The Boost Python Library (Boost.Python)
</title>
<h1>
<img src="../../../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277"
align="center" height="86"><br>The Boost Python Library (Boost.Python)
</h1>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<h2>Synopsis</h2>
<p>
Use the Boost Python Library to quickly and easily export a C++ library to <a
href="http://www.python.org">Python</a> such that the Python interface is
very similar to the C++ interface. It is designed to be minimally
intrusive on your C++ design. In most cases, you should not have to alter
your C++ classes in any way in order to use them with Boost.Python. The system
<em>should</em> simply ``reflect'' your C++ classes and functions into
Python.
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../../../boost.css">
<p>
<title>Boost.Python</title>
</head>
<table border="1">
<tr><td> <b>Note:</b> this is the last official release of
Boost.Python v1. Development of this version of the library has
stopped; it will be retired soon in favor of the redesigned and
improved version 2. A summary of the development goals is available on
the Python <a href="http://www.python.org/sigs/c++-sig/">C++-sig</a>
page, which also serves as a mailing list for users of both versions
of the library. A preview of the v2 documentation is available <a
href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/python/doc/v2/index.html?rev=HEAD&content-type=text/html">here</a>,
and instructions for getting started with a prerelease are available
upon request.
</table>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../boost.png" border="0"></a></h3>
</td>
<h2>Supported Platforms</h2>
<p>Boost.Python is known to have been tested
against <a href="http://www.python/org/2.2.1">Python 2.2.1</a> using
the following compilers:
<td valign="top">
<h1 align="center">Boost.Python</h1>
<ul>
<li><a
href="http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/default.asp">MSVC++6sp5</a>.
All tests pass.
<h2 align="center">Index</h2>
</td>
<li><a
href="http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/default.asp">MSVC++6sp5</a>
with <a href="http://www.stlport.org">STLPort</a>-4.5.3. A compiler bug interferes with
<a
href="../example/simple_vector.cpp">libs/python/example/simple_vector.cpp</a>. All
other tests pass.
<p>
<li><a href="http://msdn.microsoft.com/visualc/">MSVC++7 (Visual
Studio .NET)</a>. All tests pass.
<td align="right">
<p>
<li><a href="http://www.metrowerks.com/products/windows/">Metrowerks
CodeWarrior Pro7.2 and Pro7.0 for Windows</a>. All tests pass.
<form method="get" action="http://www.google.com/custom">
<p>
<span id= "search-choice">
Search
<select name="hq" id="hq">
<option label="All Documentation" value=
"site:www.boost.org inurl:www.boost.org/libs/python/doc">
All Documentation
</option>
<option label="Tutorial" value=
"site:www.boost.org inurl:www.boost.org/libs/python/doc/tutorial">
Tutorial
</option>
<option label="Reference" value=
"site:www.boost.org inurl:www.boost.org/libs/python/doc/v2">
Reference
</option>
</select>
<br>
</span>
<p>
<li><a href="http://gcc.gnu.org">GCC 3.0.4</a> under <a
href="http://www.cygwin.com">Cygwin</a> and
<a href="http://www.redhat.com/">RedHat Linux 7.1</a>.
All tests pass.
<span id="search-text">
<input type="text" name="q" id="q" size="31" maxlength="255" alt="Search Text" />
</span>
<p>
<li>Compaq C++ V6.2-024 for Digital UNIX (an <a
href="http://www.edg.com/">EDG</a>-based compiler).
All tests pass.<br>
Note that the Boost.Compatibility
library must be included (see e.g. tru64_cxx.mak in the build
directory).
<br>
<span id= "google">
<a href= "http://www.google.com/search">
<img src="../../../more/google_logo_25wht.gif" alt="Google" border="0" /></a>Powered
</span>
<p>
<li>Silicon Graphics MIPSpro Version 7.3.1.2m (an <a
href="http://www.edg.com/">EDG</a>-based compiler).
All tests pass.<br>
Note that the Boost.Compatibility
library must be included (see e.g. irix_CC.mak in the build
directory).
<span id="go">
<input type="image" name="search" src="../../../more/space.gif" alt="Search" id="search-button" />
</span>
<p>
<li><a href="http://gcc.gnu.org">GCC 2.95.2</a> under <a
href="http://www.mingw.org">MinGW</a> and <a
href="http://www.redhat.com/">RedHat Linux 7.1</a>.
Compilation succeeds, but some tests fail at runtime due to
exception handling bugs. It is therefore highly recommended
to use GCC 3.0.4 instead.
<br>
<input type="hidden" name="cof" value= "LW:277;L:http://www.boost.org/boost.png;LH:86;AH:center;GL:0;S:http://www.boost.org;AWFID:9b83d16ce652ed5a;" />
<input type="hidden" name="sa" value= "Google Search" />
<input type="hidden" name= "domains" value= "www.boost.org;mail.python.org" /></p>
</form>
<p>
<li><a
href="http://developer.intel.com/software/products/compilers/c50/">Intel
C++ 6.0</a> beta: Comprehensive test fails to link due to a
linker bug. Other tests seem to work.
</td>
</tr>
<tr>
<p>
<li><a
href="http://developer.intel.com/software/products/compilers/c50/">Intel
C++ 5.0</a> Comprehensive test fails at runtime due to an
exception-handling bug. Other tests seem to work.
</tr>
</table>
<hr>
</ul>
<p>
Note that pickling doesn't work with Python 2.2
due to a core language bug. This is fixed in
<a href="http://www.python/org/2.2.1">2.2.1</a>.
<h2>Synopsis</h2>
Welcome to version 2 of <b>Boost.Python</b>, a C++ library which enables
seamless interoperability between C++ and the <a href=
"http://www.python.org">Python</a> programming language. The new version
has been rewritten from the ground up, with a more convenient and
flexible interface, and many new capabilities, including support for:
<p>
Boost.Python has also been used with other versions of Python back to
Python 1.5.2. It is expected that the older Python releases still work,
but we are not regularly testing for backward compatibility.
<ul>
<li>References and Pointers</li>
<h2>Credits</h2>
<ul>
<li><a href="../../../people/dave_abrahams.htm">David Abrahams</a> originated
and wrote most of the library, and continues to coordinate development.
<li>Globally Registered Type Coercions</li>
<li><a href="mailto:koethe@informatik.uni-hamburg.de">Ullrich Koethe</a>
had independently developed a similar system. When he discovered Boost.Python,
he generously contributed countless hours of coding and much insight into
improving it. He is responsible for an early version of the support for <a
href="overloading.html">function overloading</a> and wrote the support for
<a href="inheritance.html#implicit_conversion">reflecting C++ inheritance
relationships</a>. He has helped to improve error-reporting from both
Python and C++, and has designed an extremely easy-to-use way of
exposing <a href="special.html#numeric">numeric operators</a>, including
a way to avoid explicit coercion by means of overloading.
<li>Automatic Cross-Module Type Conversions</li>
<li>Efficient Function Overloading</li>
<li>C++ to Python Exception Translation</li>
<li>Default Arguments</li>
<li>Keyword Arguments</li>
<li>Manipulating Python objects in C++</li>
<li>Exporting C++ Iterators as Python Iterators</li>
<li>Documentation Strings</li>
</ul>
The development of these features was funded in part by grants to <a
href="http://www.boost-consulting.com">Boost Consulting</a> from the <a
href="http://www.llnl.gov/">Lawrence Livermore National Laboratories</a>
and by the <a href="http://cci.lbl.gov/">Computational Crystallography
Initiative</a> at Lawrence Berkeley National Laboratories.
<hr>
<h2>Contents</h2>
<dl class="index">
<dt><a href="tutorial/index.html">Tutorial Introduction</a></dt>
<dt><a href="building.html">Building and Testing</a></dt>
<dt><a href="v2/reference.html">Reference Manual</a></dt>
<dt>Suites:</dt>
<dd>
<ul>
<li><a href="v2/pickle.html">Pickle</a></li>
<li><a href="v2/indexing.html">Indexing</a></li>
</ul>
</dd>
<dt><a href="v2/configuration.html">Configuration Information</a></dt>
<dt><a href="v2/platforms.html">Known Working Platforms and
Compilers</a></dt>
<dt><a href="v2/definitions.html">Definitions</a></dt>
<dt><a href="projects.html">Projects using Boost.Python</a></dt>
<dt><a href="support.html">Support Resources</a></dt>
<dt><a href="v2/faq.html">Frequently Asked Questions (FAQs)</a></dt>
<li><a href="http://cci.lbl.gov/staff/ralf_grosse-kunstleve.html">Ralf W.
Grosse-Kunstleve</a> contributed <a href="pickle.html">pickle support</a>
and numerous other small improvements. He's working on a way to allow
types exported by multiple modules to interact.
<dt><a href="http://www.language-binding.net/pyplusplus/pyplusplus.html">Py++ Boost.Python code generator</a></dt>
<li>The members of the boost mailing list and the Python community
supplied invaluable early feedback. In particular, Ron Clarke, Mark Evans,
Anton Gluck, Chuck Ingold, Prabhu Ramachandran, and Barry Scott took the
brave step of trying to use Boost.Python while it was still in early
stages of development.
<dt><a href="../pyste/index.html">Pyste Boost.Python code generator (no longer maintained)</a></dt>
<li>The development of Boost.Python wouldn't have been possible without
the generous support of <a href="http://www.dragonsys.com/">Dragon
Systems/Lernout and Hauspie, Inc</a> who supported its development as an
open-source project.
</ul>
<dt><a href="internals.html">Internals Documentation</a></dt>
<h2>Table of Contents</h2>
<ol>
<li><a href="extending.html">A Brief Introduction to writing Python
extension modules</a>
<li><a href="comparisons.html">Comparisons between Boost.Python and other
systems for extending Python</a>
<li><a href="example1.html">A Simple Example</a>
<li><a href="exporting_classes.html">Exporting Classes</a>
<li><a href="overriding.html">Overridable Virtual Functions</a>
<li><a href="overloading.html">Function Overloading</a>
<li><a href="inheritance.html">Inheritance</a>
<li><a href="special.html">Special Method and Operator Support</a>
<li><a href="under-the-hood.html">A Peek Under the Hood</a>
<li><a href="building.html">Building an Extension Module</a>
<li><a href="pickle.html">Pickle Support</a>
<li><a href="cross_module.html">Cross-Extension-Module Dependencies</a>
<li><a href="enums.html">Wrapping Enums</a>
<li><a href="pointers.html">Pointers and Smart Pointers</a>
<li><a href="data_structures.txt">Internal Data Structures</a>
</ol>
<dt><a href="news.html">News/Change Log</a></dt>
<p>
Documentation is a major ongoing project; assistance is greatly
appreciated! In the meantime, useful examples of every Boost.Python feature should
be evident in the regression test files <code>test/comprehensive.[<a
href="../test/comprehensive.py">py</a>/<a
href="../test/comprehensive.hpp">hpp</a>/<a
href="../test/comprehensive.cpp">cpp</a>]</code>
<dt><a href="../todo.html">TODO list</a></dt>
<p>
Questions should be directed to the <a href=
"http://www.python.org/sigs/c++-sig/">Python C++ SIG</a>.
<dt><a href="v2/progress_reports.html">LLNL Progress Reports</a></dt>
<p>
&copy; Copyright David Abrahams 2001. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided ``as is'' without
express or implied warranty, and with no claim as to its suitability for
any purpose.
<p>
Updated: Apr 2002
<dt><a href="v2/acknowledgments.html">Acknowledgments</a></dt>
</dl>
<hr>
<h2>Articles</h2>
&quot;<a href="PyConDC_2003/bpl.html">Building Hybrid
Systems With Boost Python</a>&quot;, by Dave Abrahams and Ralf
W. Grosse-Kunstleve (<a href="PyConDC_2003/bpl.pdf">PDF</a>)
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
26 August, 2003
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave
Abrahams</a> 2002-2003.</i></p>
</body>
</html>

View File

@@ -1,166 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>
Inheritance
</title>
<div>
<h1>
<img width="277" height="86" id="_x0000_i1025" align="center"
src="../../../c++boost.gif" alt= "c++boost.gif (8819 bytes)">Inheritance
</h1>
<h2>Inheritance in Python</h2>
<p>
Boost.Python extension classes support single and multiple-inheritance in
Python, just like regular Python classes. You can arbitrarily mix
built-in Python classes with extension classes in a derived class'
tuple of bases. Whenever a Boost.Python extension class is among the bases for a
new class in Python, the result is an extension class:
<blockquote>
<pre>
&gt;&gt;&gt; class MyPythonClass:
... def f(): return 'MyPythonClass.f()'
...
&gt;&gt;&gt; import my_extension_module
&gt;&gt;&gt; class Derived(my_extension_module.MyExtensionClass, MyPythonClass):
... '''This is an extension class'''
... pass
...
&gt;&gt;&gt; x = Derived()
&gt;&gt;&gt; x.f()
'MyPythonClass.f()'
&gt;&gt;&gt; x.g()
'MyExtensionClass.g()'
</pre>
</blockquote>
<h2><a name="implicit_conversion">Reflecting C++ Inheritance Relationships</a></h2>
<p>
Boost.Python also allows us to represent C++ inheritance relationships so that
wrapped derived classes may be passed where values, pointers, or
references to a base class are expected as arguments. The
<code>declare_base</code> member function of
<code>class_builder&lt;&gt;</code> is used to establish the relationship
between base and derived classes:
<blockquote>
<pre>
#include &lt;memory&gt; // for std::auto_ptr&lt;&gt;
struct Base {
virtual ~Base() {}
virtual const char* name() const { return "Base"; }
};
struct Derived : Base {
Derived() : x(-1) {}
virtual const char* name() const { return "Derived"; }
int x;
};
std::auto_ptr&lt;Base&gt; derived_as_base() {
return std::auto_ptr&lt;Base&gt;(new Derived);
}
const char* get_name(const Base& b) {
return b.name();
}
int get_derived_x(const Derived& d) {
return d.x;
}
<hr>
#include &lt;boost/python/class_builder.hpp&gt;
// namespace alias for code brevity
namespace python = boost::python;
BOOST_PYTHON_MODULE_INIT(my_module)
{
    python::module_builder my_module("my_module");
    python::class_builder&lt;Base&gt; base_class(my_module, "Base");
    base_class.def(python::constructor&lt;&gt;());
    python::class_builder&lt;Derived&gt; derived_class(my_module, "Derived");
    derived_class.def(python::constructor&lt;&gt;());
<b>// Establish the inheritance relationship between Base and Derived
derived_class.declare_base(base_class);</b>
my_module.def(derived_as_base, "derived_as_base");
my_module.def(get_name, "get_name");
my_module.def(get_derived_x, "get_derived_x");
}
</pre>
</blockquote>
<p>
Then, in Python:
<blockquote>
<pre>
&gt;&gt;&gt; from my_module import *
&gt;&gt;&gt; base = Base()
&gt;&gt;&gt; derived = Derived()
&gt;&gt;&gt; get_name(base)
'Base'
</pre>
</blockquote>
<i>objects of wrapped class Derived may be passed where Base is expected</i>
<blockquote>
<pre>
&gt;&gt;&gt; get_name(derived)
'Derived'
</pre>
</blockquote>
<i>objects of wrapped class Derived can be passed where Derived is
expected but where type information has been lost.</i>
<blockquote>
<pre>
&gt;&gt;&gt; get_derived_x(derived_as_base())
-1
</pre>
</blockquote>
<h2>Inheritance Without Virtual Functions</h2>
<p>
If for some reason your base class has no virtual functions but you still want
to represent the inheritance relationship between base and derived classes,
pass the special symbol <code>boost::python::without_downcast</code> as the 2nd parameter
to <code>declare_base</code>:
<blockquote>
<pre>
struct Base2 {};
struct Derived2 { int f(); };
<hr>
...
   python::class_builder&lt;Base&gt; base2_class(my_module, "Base2");
   base2_class.def(python::constructor&lt;&gt;());
   python::class_builder&lt;Derived2&gt; derived2_class(my_module, "Derived2");
   derived2_class.def(python::constructor&lt;&gt;());
derived_class.declare_base(base_class, <b>python::without_downcast</b>);
</pre>
</blockquote>
<p>This approach will allow <code>Derived2</code> objects to be passed where
<code>Base2</code> is expected, but does not attempt to implicitly convert (downcast)
smart-pointers to <code>Base2</code> into <code>Derived2</code> pointers,
references, or values.
<p>
Next: <a href="special.html">Special Method and Operator Support</a>
Previous: <a href="overloading.html">Function Overloading</a>
Up: <a href="index.html">Top</a>
<p>
&copy; Copyright David Abrahams 2000. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided "as is" without
express or implied warranty, and with no claim as to its suitability
for any purpose.
<p>
Updated: Nov 26, 2000
</div>

186
doc/internals.html Executable file
View File

@@ -0,0 +1,186 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.3.0: http://docutils.sourceforge.net/" />
<title>Boost.Python Internals Boost</title>
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
</head>
<body>
<div class="document" id="boost-python-internals-logo">
<h1 class="title"><a class="reference" href="index.html">Boost.Python</a> Internals <a class="reference" href="../../../index.htm"><img alt="Boost" src="../../../boost.png" /></a></h1>
<div class="section" id="a-conversation-between-brett-calcott-and-david-abrahams">
<h1><a name="a-conversation-between-brett-calcott-and-david-abrahams">A conversation between Brett Calcott and David Abrahams</a></h1>
<table class="field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">copyright:</th><td class="field-body">Copyright David Abrahams and Brett Calcott 2003. See
accompanying <a class="reference" href="../../../LICENSE_1_0.txt">license</a> for terms of use.</td>
</tr>
</tbody>
</table>
<p>In both of these cases, I'm quite capable of reading code - but the
thing I don't get from scanning the source is a sense of the
architecture, both structurally, and temporally (er, I mean in what
order things go on).</p>
<ol class="arabic">
<li><p class="first">What happens when you do the following:</p>
<pre class="literal-block">
struct boring {};
...etc...
class_&lt;boring&gt;(&quot;boring&quot;)
;
</pre>
</li>
</ol>
<p>There seems to be a fair bit going on.</p>
<blockquote>
<ul class="simple">
<li>Python needs a new ClassType to be registered.</li>
<li>We need to construct a new type that can hold our boring struct.</li>
<li>Inward and outward converters need to be registered for the type.</li>
</ul>
</blockquote>
<p>Can you gesture in the general direction where these things are done?</p>
<blockquote>
<p>I only have time for a &quot;off-the-top-of-my-head&quot; answer at the moment;
I suggest you step through the code with a debugger after reading this
to see how it works, fill in details, and make sure I didn't forget
anything.</p>
<blockquote>
<p>A new (Python) subclass of Boost.Python.Instance (see
libs/python/src/object/class.cpp) is created by invoking
Boost.Python.class, the metatype:</p>
<pre class="literal-block">
&gt;&gt;&gt; boring = Boost.Python.class(
... 'boring'
... , bases_tuple # in this case, just ()
... , {
... '__module__' : module_name
... , '__doc__' : doc_string # optional
... }
... )
</pre>
<p>A handle to this object is stuck in the m_class_object field
of the registration associated with <tt class="literal"><span class="pre">typeid(boring)</span></tt>. The
registry will keep that object alive forever, even if you
wipe out the 'boring' attribute of the extension module
(probably not a good thing).</p>
<p>Because you didn't specify <tt class="literal"><span class="pre">class&lt;boring,</span> <span class="pre">non_copyable,</span>
<span class="pre">...&gt;</span></tt>, a to-python converter for boring is registered which
copies its argument into a value_holder held by the the
Python boring object.</p>
<p>Because you didn't specify <tt class="literal"><span class="pre">class&lt;boring</span> <span class="pre">...&gt;(no_init)</span></tt>,
an <tt class="literal"><span class="pre">__init__</span></tt> function object is added to the class
dictionary which default-constructs a boring in a
value_holder (because you didn't specify some smart pointer
or derived wrapper class as a holder) held by the Python
boring object.</p>
<p><tt class="literal"><span class="pre">register_class_from_python</span></tt> is used to register a
from-python converter for <tt class="literal"><span class="pre">shared_ptr&lt;boring&gt;</span></tt>.
<tt class="literal"><span class="pre">boost::shared_ptr</span></tt>s are special among smart pointers
because their Deleter argument can be made to manage the
whole Python object, not just the C++ object it contains, no
matter how the C++ object is held.</p>
<p>If there were any <tt class="literal"><span class="pre">bases&lt;&gt;</span></tt>, we'd also be registering the
relationship between these base classes and boring in the
up/down cast graph (<tt class="literal"><span class="pre">inheritance.[hpp/cpp]</span></tt>).</p>
<p>In earlier versions of the code, we'd be registering lvalue
from-python converters for the class here, but now
from-python conversion for wrapped classes is handled as a
special case, before consulting the registry, if the source
Python object's metaclass is the Boost.Python metaclass.</p>
<p>Hmm, that from-python converter probably ought to be handled
the way class converters are, with no explicit conversions
registered.</p>
</blockquote>
</blockquote>
<ol class="arabic" start="2">
<li><p class="first">Can you give a brief overview of the data structures that are
present in the registry</p>
<blockquote>
<p>The registry is simple: it's just a map from typeid -&gt;
registration (see boost/python/converter/registrations.hpp).
<tt class="literal"><span class="pre">lvalue_chain</span></tt> and <tt class="literal"><span class="pre">rvalue_chain</span></tt> are simple endogenous
linked lists.</p>
<p>If you want to know more, just ask.</p>
<p>If you want to know about the cast graph, ask me something specific in
a separate message.</p>
</blockquote>
<p>and an overview of the process that happens as a type makes its
way from c++ to python and back again.</p>
</li>
</ol>
<blockquote>
<p>Big subject. I suggest some background reading: look for relevant
info in the LLNL progress reports and the messages they link to.
Also,</p>
<blockquote>
<p><a class="reference" href="http://mail.python.org/pipermail/c++-sig/2002-May/001023.html">http://mail.python.org/pipermail/c++-sig/2002-May/001023.html</a></p>
<p><a class="reference" href="http://mail.python.org/pipermail/c++-sig/2002-December/003115.html">http://mail.python.org/pipermail/c++-sig/2002-December/003115.html</a></p>
<p><a class="reference" href="http://aspn.activestate.com/ASPN/Mail/Message/1280898">http://aspn.activestate.com/ASPN/Mail/Message/1280898</a></p>
<p><a class="reference" href="http://mail.python.org/pipermail/c++-sig/2002-July/001755.html">http://mail.python.org/pipermail/c++-sig/2002-July/001755.html</a></p>
</blockquote>
<p>from c++ to python:</p>
<blockquote>
<p>It depends on the type and the call policies in use or, for
<tt class="literal"><span class="pre">call&lt;&gt;(...)</span></tt>, <tt class="literal"><span class="pre">call_method&lt;&gt;(...)</span></tt>, or <tt class="literal"><span class="pre">object(...)</span></tt>, if
<tt class="literal"><span class="pre">ref</span></tt> or <tt class="literal"><span class="pre">ptr</span></tt> is used. There are also two basic
categories to to-python conversion, &quot;return value&quot; conversion
(for Python-&gt;C++ calls) and &quot;argument&quot; conversion (for
C++-&gt;Python calls and explicit <tt class="literal"><span class="pre">object()</span></tt> conversions). The
behavior of these two categories differs subtly in various ways
whose details I forget at the moment. You can probably find
the answers in the above references, and certainly in the code.</p>
<p>The &quot;default&quot; case is by-value (copying) conversion, which uses
to_python_value as a to-python converter.</p>
<blockquote>
<p>Since there can sensibly be only one way to convert any type
to python (disregarding the idea of scoped registries for the
moment), it makes sense that to-python conversions can be
handled by specializing a template. If the type is one of
the types handled by a built-in conversion
(builtin_converters.hpp), the corresponding template
specialization of to_python_value gets used.</p>
<p>Otherwise, to_python_value uses the <tt class="literal"><span class="pre">m_to_python</span></tt>
function in the registration for the C++ type.</p>
</blockquote>
<p>Other conversions, like by-reference conversions, are only
available for wrapped classes, and are requested explicitly by
using <tt class="literal"><span class="pre">ref(...)</span></tt>, <tt class="literal"><span class="pre">ptr(...)</span></tt>, or by specifying different
CallPolicies for a call, which can cause a different to-python
converter to be used. These conversions are never registered
anywhere, though they do need to use the registration to find
the Python class corresponding to the C++ type being referred
to. They just build a new Python instance and stick the
appropriate Holder instance in it.</p>
</blockquote>
<p>from python to C++:</p>
<blockquote>
<p>Once again I think there is a distinction between &quot;return value&quot;
and &quot;argument&quot; conversions, and I forget exactly what that is.</p>
<p>What happens depends on whether an lvalue conversion is needed
(see <a class="reference" href="http://mail.python.org/pipermail/c++-sig/2002-May/001023.html">http://mail.python.org/pipermail/c++-sig/2002-May/001023.html</a>)
All lvalue conversions are also registered in a type's rvalue
conversion chain, since when an rvalue will do, an lvalue is
certainly good enough.</p>
<p>An lvalue conversion can be done in one step (just get me the
pointer to the object - it can be <tt class="literal"><span class="pre">NULL</span></tt> if no conversion is
possible) while an rvalue conversion requires two steps to
support wrapped function overloading and multiple converters for
a given C++ target type: first tell me if a conversion is
possible, then construct the converted object as a second step.</p>
</blockquote>
</blockquote>
</div>
</div>
<hr class="footer"/>
<div class="footer">
<a class="reference" href="internals.rst">View document source</a>.
Generated on: 2003-09-12 14:51 UTC.
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
</div>
</body>
</html>

182
doc/internals.rst Executable file
View File

@@ -0,0 +1,182 @@
===================================
Boost.Python_ Internals |(logo)|__
===================================
.. |(logo)| image:: ../../../boost.png
:alt: Boost
:class: boost-logo
__ ../../../index.htm
.. _`Boost.Python`: index.html
.. _license: ../../../LICENSE_1_0.txt
-------------------------------------------------------
A conversation between Brett Calcott and David Abrahams
-------------------------------------------------------
:copyright: Copyright David Abrahams and Brett Calcott 2003. See
accompanying license_ for terms of use.
In both of these cases, I'm quite capable of reading code - but the
thing I don't get from scanning the source is a sense of the
architecture, both structurally, and temporally (er, I mean in what
order things go on).
1) What happens when you do the following::
struct boring {};
...etc...
class_<boring>("boring")
;
There seems to be a fair bit going on.
- Python needs a new ClassType to be registered.
- We need to construct a new type that can hold our boring struct.
- Inward and outward converters need to be registered for the type.
Can you gesture in the general direction where these things are done?
I only have time for a "off-the-top-of-my-head" answer at the moment;
I suggest you step through the code with a debugger after reading this
to see how it works, fill in details, and make sure I didn't forget
anything.
A new (Python) subclass of Boost.Python.Instance (see
libs/python/src/object/class.cpp) is created by invoking
Boost.Python.class, the metatype::
>>> boring = Boost.Python.class(
... 'boring'
... , bases_tuple # in this case, just ()
... , {
... '__module__' : module_name
... , '__doc__' : doc_string # optional
... }
... )
A handle to this object is stuck in the m_class_object field
of the registration associated with ``typeid(boring)``. The
registry will keep that object alive forever, even if you
wipe out the 'boring' attribute of the extension module
(probably not a good thing).
Because you didn't specify ``class<boring, non_copyable,
...>``, a to-python converter for boring is registered which
copies its argument into a value_holder held by the the
Python boring object.
Because you didn't specify ``class<boring ...>(no_init)``,
an ``__init__`` function object is added to the class
dictionary which default-constructs a boring in a
value_holder (because you didn't specify some smart pointer
or derived wrapper class as a holder) held by the Python
boring object.
``register_class_from_python`` is used to register a
from-python converter for ``shared_ptr<boring>``.
``boost::shared_ptr``\ s are special among smart pointers
because their Deleter argument can be made to manage the
whole Python object, not just the C++ object it contains, no
matter how the C++ object is held.
If there were any ``bases<>``, we'd also be registering the
relationship between these base classes and boring in the
up/down cast graph (``inheritance.[hpp/cpp]``).
In earlier versions of the code, we'd be registering lvalue
from-python converters for the class here, but now
from-python conversion for wrapped classes is handled as a
special case, before consulting the registry, if the source
Python object's metaclass is the Boost.Python metaclass.
Hmm, that from-python converter probably ought to be handled
the way class converters are, with no explicit conversions
registered.
2) Can you give a brief overview of the data structures that are
present in the registry
The registry is simple: it's just a map from typeid ->
registration (see boost/python/converter/registrations.hpp).
``lvalue_chain`` and ``rvalue_chain`` are simple endogenous
linked lists.
If you want to know more, just ask.
If you want to know about the cast graph, ask me something specific in
a separate message.
and an overview of the process that happens as a type makes its
way from c++ to python and back again.
Big subject. I suggest some background reading: look for relevant
info in the LLNL progress reports and the messages they link to.
Also,
http://mail.python.org/pipermail/c++-sig/2002-May/001023.html
http://mail.python.org/pipermail/c++-sig/2002-December/003115.html
http://aspn.activestate.com/ASPN/Mail/Message/1280898
http://mail.python.org/pipermail/c++-sig/2002-July/001755.html
from c++ to python:
It depends on the type and the call policies in use or, for
``call<>(...)``, ``call_method<>(...)``, or ``object(...)``, if
``ref`` or ``ptr`` is used. There are also two basic
categories to to-python conversion, "return value" conversion
(for Python->C++ calls) and "argument" conversion (for
C++->Python calls and explicit ``object()`` conversions). The
behavior of these two categories differs subtly in various ways
whose details I forget at the moment. You can probably find
the answers in the above references, and certainly in the code.
The "default" case is by-value (copying) conversion, which uses
to_python_value as a to-python converter.
Since there can sensibly be only one way to convert any type
to python (disregarding the idea of scoped registries for the
moment), it makes sense that to-python conversions can be
handled by specializing a template. If the type is one of
the types handled by a built-in conversion
(builtin_converters.hpp), the corresponding template
specialization of to_python_value gets used.
Otherwise, to_python_value uses the ``m_to_python``
function in the registration for the C++ type.
Other conversions, like by-reference conversions, are only
available for wrapped classes, and are requested explicitly by
using ``ref(...)``, ``ptr(...)``, or by specifying different
CallPolicies for a call, which can cause a different to-python
converter to be used. These conversions are never registered
anywhere, though they do need to use the registration to find
the Python class corresponding to the C++ type being referred
to. They just build a new Python instance and stick the
appropriate Holder instance in it.
from python to C++:
Once again I think there is a distinction between "return value"
and "argument" conversions, and I forget exactly what that is.
What happens depends on whether an lvalue conversion is needed
(see http://mail.python.org/pipermail/c++-sig/2002-May/001023.html)
All lvalue conversions are also registered in a type's rvalue
conversion chain, since when an rvalue will do, an lvalue is
certainly good enough.
An lvalue conversion can be done in one step (just get me the
pointer to the object - it can be ``NULL`` if no conversion is
possible) while an rvalue conversion requires two steps to
support wrapped function overloading and multiple converters for
a given C++ target type: first tell me if a conversion is
possible, then construct the converted object as a second step.

View File

@@ -1,326 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>A New Type Conversion Mechanism for Boost.Python</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><img border="0" src="../../../c++boost.gif" width="277" height="86"
alt="boost logo"></p>
<h1>A New Type Conversion Mechanism for Boost.Python</h1>
<p>By <a href="../../../people/dave_abrahams.htm">David Abrahams</a>.
<h2>Introduction</h2>
This document describes a redesign of the mechanism for automatically
converting objects between C++ and Python. The current implementation
uses two functions for any type <tt>T</tt>:
<blockquote><pre>
U from_python(PyObject*, type&lt;T&gt;);
void to_python(V);
</pre></blockquote>
where U is convertible to T and T is convertible to V. These functions
are at the heart of C++/Python interoperability in Boost.Python, so
why would we want to change them? There are many reasons:
<h3>Bugs</h3>
<p>Firstly, the current mechanism relies on a common C++ compiler
bug. This is not just embarrassing: as compilers get to be more
conformant, the library stops working. The issue, in detail, is the
use of inline friend functions in templates to generate
conversions. It is a very powerful, and legal technique as long as
it's used correctly:
<blockquote><pre>
template &lt;class Derived&gt;
struct add_some_functions
{
friend <i>return-type</i> some_function1(..., Derived <i>cv-*-&amp;-opt</i>, ...);
friend <i>return-type</i> some_function2(..., Derived <i>cv-*-&amp;-opt</i>, ...);
};
template &lt;class T&gt;
struct some_template : add_some_functions&lt;some_template&lt;T&gt; &gt;
{
};
</pre></blockquote>
The <tt>add_some_functions</tt> template generates free functions
which operate on <tt>Derived</tt>, or on related types. Strictly
speaking the related types are not just cv-qualified <tt>Derived</tt>
values, pointers and/or references. Section 3.4.2 in the standard
describes exactly which types you must use as parameters to these
functions if you want the functions to be found
(there is also a less-technical description in section 11.5.1 of
C++PL3 <a href="#ref_1">[1]</a>). Suffice it to say that
with the current design, the <tt>from_python</tt> and
<tt>to_python</tt> functions are not supposed to be callable under any
conditions!
<h3>Compilation and Linking Time</h3>
The conversion functions generated for each wrapped class using the
above technique are not function templates, but regular functions. The
upshot is that they must <i>all</i> be generated regardless of whether
they are actually used. Generating all of those functions can slow
down module compilation, and resolving the references can slow down
linking.
<h3>Efficiency</h3>
The conversion functions are primarily used in (member) function
wrappers to convert the arguments and return values. Being functions,
converters have no interface which allows us to ask &quot;will the
conversion succeed?&quot; without calling the function. Since the
return value of the function must be the object to be passed as an
argument, Boost.Python currently uses C++ exception-handling to detect
an unsuccessful conversion. It's not a particularly good use of
exception-handling, since the failure is not handled very far from
where it occurred. More importantly, it means that C++ exceptions are
thrown during overload resolution as we seek an overload that matches
the arguments passed. Depending on the implementation, this approach
can result in significant slowdowns.
<p>It is also unclear that the current library generates a minimal
amount of code for any type conversion. Many of the conversion
functions are nontrivial, and partly because of compiler limitations,
they are declared <tt>inline</tt>. Also, we could have done a better
job separating the type-specific conversion code from the code which
is type-independent.
<h3>Cross-module Support</h3>
The current strategy requires every module to contain the definition
of conversions it uses. In general, a new module can never supply
conversion code which is used by another module. Ralf Grosse-Kunstleve
designed a clever system which imports conversions directly from one
library into another using some explicit declarations, but it has some
disadvantages also:
<ol>
<li>The system Ullrich Koethe designed for implicit conversion between
wrapped classes related through inheritance does not currently work if
the classes are defined in separate modules.
<li>The writer of the importing module is required to know the name of
the module supplying the imported conversions.
<li>There can be only one way to extract any given C++ type from a
Python object in a given module.
</ol>
The first item might be addressed by moving Boost.Python into a shared
library, but the other two cannot. Ralf turned the limitation in item
two into a feature: the required module is loaded implicitly when a
conversion it defines is invoked. We will probably want to provide
that functionality anyway, but it's not clear that we should require
the declaration of all such conversions. The final item is a more
serious limitation. If, for example, new numeric types are defined in
separate modules, and these types can all be converted to
<tt>double</tt>s, we have to choose just one conversion method.
<h3>Ease-of-use</h3>
One persistent source of confusion for users of Boost.Python has been
the fact that conversions for a class are not be visible at
compile-time until the declaration of that class has been seen. When
the user tries to expose a (member) function operating on or returning
an instance of the class in question, compilation fails...even though
the user goes on to expose the class in the same translation unit!
<p>
The new system lifts all compile-time checks for the existence of
particular type conversions and replaces them with runtime checks, in
true Pythonic style. While this might seem cavalier, the compile-time
checks are actually not much use in the current system if many classes
are wrapped in separate modules, since the checks are based only on
the user's declaration that the conversions exist.
<h2>The New Design</h2>
<h3>Motivation</h3>
The new design was heavily influenced by a desire to generate as
little code as possible in extension modules. Some of Boost.Python's
clients are enormous projects where link time is proportional to the
amount of object code, and there are many Python extension modules. As
such, we try to keep type-specific conversion code out of modules
other than the one the converters are defined in, and rely as much as
possible on centralized control through a shared library.
<h3>The Basics</h3>
The library contains a <tt>registry</tt> which maps runtime type
identifiers (actually an extension of <tt>std::type_info</tt> which
preserves references and constness) to entries containing type
converters. An <tt>entry</tt> can contain only one converter from C++ to Python
(<tt>wrapper</tt>), but many converters from Python to C++
(<tt>unwrapper</tt>s). <font color="#ff0000">What should happen if
multiple modules try to register wrappers for the same type?</font>. Wrappers
and unwrappers are known as <tt>body</tt> objects, and are accessed
by the user and the library (in its function-wrapping code) through
corresponding <tt>handle</tt> (<tt>wrap&lt;T&gt;</tt> and
<tt>unwrap&lt;T&gt;</tt>) objects. The <tt>handle</tt> objects are
extremely lightweight, and delegate <i>all</i> of their operations to
the corresponding <tt>body</tt>.
<p>
When a <tt>handle</tt> object is constructed, it accesses the
registry to find a corresponding <tt>body</tt> that can convert the
handle's constructor argument. Actually the registry record for any
type
<tt>T</tt>used in a module is looked up only once and stored in a
static <tt>registration&lt;T&gt;</tt> object for efficiency. For
example, if the handle is an <tt>unwrap&lt;Foo&amp;&gt;</tt> object,
the <tt>entry</tt> for <tt>Foo&amp;</tt> is looked up in the
<tt>registry</tt>, and each <tt>unwrapper</tt> it contains is queried
to determine if it can convert the
<tt>PyObject*</tt> with which the <tt>unwrap</tt> was constructed. If
a body object which can perform the conversion is found, a pointer to
it is stored in the handle. A body object may at any point store
additional data in the handle to speed up the conversion process.
<p>
Now that the handle has been constructed, the user can ask it whether
the conversion can be performed. All handles can be tested as though
they were convertible to <tt>bool</tt>; a <tt>true</tt> value
indicates success. If the user forges ahead and tries to do the
conversion without checking when no conversion is possible, an
exception will be thrown as usual. The conversion itself is performed
by the body object.
<h3>Handling complex conversions</h3>
<p>Some conversions may require a dynamic allocation. For example,
when a Python tuple is converted to a <tt>std::vector&lt;double&gt;
const&amp;</tt>, we need some storage into which to construct the
vector so that a reference to it can be formed. Furthermore, multiple
conversions of the same type may need to be &quot;active&quot;
simultaneously, so we can't keep a single copy of the storage
anywhere. We could keep the storage in the <tt>body</tt> object, and
have the body clone itself in case the storage is used, but in that
case the storage in the body which lives in the registry is never
used. If the storage was actually an object of the target type (the
safest way in C++), we'd have to find a way to construct one for the
body in the registry, since it may not have a default constructor.
<p>
The most obvious way out of this quagmire is to allocate the object using a
<i>new-expression</i>, and store a pointer to it in the handle. Since
the <tt>body</tt> object knows everything about the data it needs to
allocate (if any), it is also given responsibility for destroying that
data. When the <tt>handle</tt> is destroyed it asks the <tt>body</tt>
object to tear down any data it may have stored there. In many ways,
you can think of the <tt>body</tt> as a &quot;dynamically-determined
vtable&quot; for the handle.
<h3>Eliminating Redundancy</h3>
If you look at the current Boost.Python code, you'll see that there
are an enormous number of conversion functions generated for each
wrapped class. For a given class <tt>T</tt>, functions are generated
to extract the following types <tt>from_python</tt>:
<blockquote><pre>
T*
T const*
T const* const&amp;
T* const&amp;
T&amp;
T const&amp;
T
std::auto_ptr&lt;T&gt;&amp;
std::auto_ptr&lt;T&gt;
std::auto_ptr&lt;T&gt; const&amp;
boost::shared_ptr&lt;T&gt;&amp;
boost::shared_ptr&lt;T&gt;
boost::shared_ptr&lt;T&gt; const&amp;
</pre></blockquote>
Most of these are implemented in terms of just a few conversions, and
<t>if you're lucky</t>, they will be inlined and cause no extra
overhead. In the new system, however, a significant amount of data
will be associated with each type that needs to be converted. We
certainly don't want to register a separate unwrapper object for all
of the above types.
<p>Fortunately, much of the redundancy can be eliminated. For example,
if we generate an unwrapper for <tt>T&</tt>, we don't need an
unwrapper for <tt>T const&</tt> or <tt>T</tt>. Accordingly, the user's
request to wrap/unwrap a given type is translated at compile-time into
a request which helps to eliminate redundancy. The rules used to
<tt>unwrap</tt> a type are:
<ol>
<li> Treat built-in types specially: when unwrapping a value or
constant reference to one of these, use a value for the target
type. It will bind to a const reference if neccessary, and more
importantly, avoids having to dynamically allocate room for
an lvalue of types which can be cheaply copied.
<li>
Reduce everything else to a reference to an un-cv-qualified type
where possible. Since cv-qualification is lost on Python
anyway, there's no point in trying to convert to a
<tt>const&amp;</tt>. <font color="#ff0000">What about conversions
to values like the tuple-&gt;vector example above? It seems to me
that we don't want to make a <tt>vector&lt;double&gt;&amp;</tt>
(non-const) converter available for that case. We may need to
rethink this slightly.</font>
</ol>
<p>To handle the problem described above in item 2, we modify the
procedure slightly. To unwrap any non-scalar <tt>T</tt>, we seek an
unwrapper for <tt>add_reference&lt;T&gt;::type</tt>. Unwrappers for
<tt>T&nbsp;const&amp;</tt> always return <tt>T&amp;</tt>, and are
registered under both <tt>T&nbsp;&amp;</tt> and
<tt>T&nbsp;const&amp;</tt>.
<p>For compilers not supporting partial specialization, unwrappers for
<tt>T&nbsp;const&amp;</tt> must return <tt>T&nbsp;const&amp;</tt>
(since constness can't be stripped), but a separate unwrapper object
need to be registered for <tt>T&nbsp;&amp;</tt> and
<tt>T&nbsp;const&amp;</tt> anyway, for the same reasons.
<font color="#ff0000">We may want to make it possible to compile as
though partial specialization were unavailable even on compilers where
it is available, in case modules could be compiled by different
compilers with compatible ABIs (e.g. Intel C++ and MSVC6).</font>
<h3>Efficient Argument Conversion</h3>
Since type conversions are primarily used in function wrappers, an
optimization is provided for the case where a group of conversions are
used together. Each <tt>handle</tt> class has a corresponding
&quot;<tt>_more</tt>&quot; class which does the same job, but has a
trivial destructor. Instead of asking each &quot;<tt>_more</tt>&quot;
handle to destroy its own body, it is linked into an endogenous list
managed by the first (ordinary) handle. The <tt>wrap</tt> and
<tt>unwrap</tt> destructors are responsible for traversing that list
and asking each <tt>body</tt> class to tear down its
<tt>handle</tt>. This mechanism is also used to determine if all of
the argument/return-value conversions can succeed with a single
function call in the function wrapping code. <font color="#ff0000">We
might need to handle return values in a separate step for Python
callbacks, since the availablility of a conversion won't be known
until the result object is retrieved.</font>
<br>
<hr>
<h2>References</h2>
<p><a name="ref_1">[1]</a>B. Stroustrup, The C++ Programming Language
Special Edition Addison-Wesley, ISBN 0-201-70073-5.
<hr>
<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B %Y" startspan -->19 December 2001<!--webbot bot="Timestamp" endspan i-checksum="31283" --></p>
<p>© Copyright David Abrahams, 2001</p>
</body>
</html>

View File

@@ -1,111 +0,0 @@
This hierarchy contains converter handle classes.
+-------------+
| noncopyable |
+-------------+
^
| A common base class used so that
+--------+--------+ conversions can be linked into a
| conversion_base | chain for efficient argument
+-----------------+ conversion
^
|
+---------+-----------+
| |
+-----------+----+ +------+-------+ only used for
| unwrap_more<T> | | wrap_more<T> | chaining, and don't manage any
+----------------+ +--------------+ resources.
^ ^
| |
+-----+-----+ +-------+-+ These converters are what users
| unwrap<T> | | wrap<T> | actually touch, but they do so
+-----------+ +---------+ through a type generator which
minimizes the number of converters
that must be generated, so they
Each unwrap<T>, unwrap_more<T>, wrap<T>, wrap_more<T> converter holds
a reference to an appropriate converter object
This hierarchy contains converter body classes
Exposes use/release which
are needed in case the converter
+-----------+ in the registry needs to be
| converter | cloned. That occurs when a
+-----------+ unwrap target type is not
^ contained within the Python object.
|
+------------------+-----+
| |
+--------+-------+ Exposes |
| unwrapper_base | convertible() |
+----------------+ |
^ |
| |
+--------+----+ +-----+-----+
| unwrapper<T>| | wrapper<T>|
+-------------+ +-----------+
Exposes T convert(PyObject*) Exposes PyObject* convert(T)
unwrap:
constructed with a PyObject*, whose reference count is
incremented.
find the registry entry for the target type
look in the collection of converters for one which claims to be
able to convert the PyObject to the target type.
stick a pointer to the unwrapper in the unwrap object
when unwrap is queried for convertibility, it checks to see
if it has a pointer to an unwrapper.
on conversion, the unwrapper is asked to allocate an
implementation if the unwrap object isn't already holding
one. The unwrap object "takes ownership" of the unwrapper's
implementation. No memory allocation will actually take place
unless this is a value conversion.
on destruction, the unwrapper is asked to free any implementation
held by the unwrap object. No memory deallocation actually
takes place unless this is a value conversion
on destruction, the reference count on the held PyObject is
decremented.
We need to make sure that by default, you can't instantiate
callback<> for reference and pointer return types: although the
unwrappers may exist, they may convert by-value, which would cause
the referent to be destroyed upon return.
wrap:
find the registry entry for the source type
see if there is a converter. If found, stick a pointer to it in
the wrap object.
when queried for convertibility, it checks to see if it has a
pointer to a converter.
on conversion, a reference to the target PyObject is held by the
converter. Generally, the PyObject will have been created by the
converter, but in certain cases it may be a pre-existing object,
whose reference count will have been incremented.
when a wrap<T> x is used to return from a C++ function,
x.release() is returned so that x no longer holds a reference to
the PyObject when destroyed.
Otherwise, on destruction, any PyObject still held has its
reference-count decremented.
When a converter is created by the user, the appropriate element must
be added to the registry; when it is destroyed, it must be removed
from the registry.

335
doc/news.html Normal file
View File

@@ -0,0 +1,335 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Cygwin (vers 1st September 2004), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<link rel="stylesheet" type="text/css" href="boost.css">
<title>Boost.Python - News/Change Log</title>
</head>
<body link="#0000FF" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="index.html">Boost.Python</a></h1>
<h2 align="center">News/Change Log</h2>
</td>
</tr>
</table>
<hr>
<dl class="page-index">
<dt>Current SVN</dt>
<dd>
<ul>
<li>Pythonic signatures are now automatically appended to the
docstrings.
<li>Use <a href="v2/docstring_options.html"
><code>docstring_options.hpp</code></a> header
control the content of docstrings.
<li>This new feature increases the size of the modules by about 14%.
If this is not acceptable it can be turned off by defining the macro
BOOST_PYTHON_NO_PY_SIGNATURES. Modules compiled with and without the macro
defined are compatible.
</li>
<li> If BOOST_PYTHON_NO_PY_SIGNATURES is undefined, this version defines the
macro BOOST_PYTHON_SUPPORTS_PY_SIGNATURES. This allows writing code that will compile
with older version of Boost.Python (see <a href="v2/pytype_function.html#examples">here</a>).
</li>
<li>By defining BOOST_PYTHON_PY_SIGNATURES_PROPER_INIT_SELF_TYPE, and at a cost
of another 14% size increase, proper pythonic type is generated for the "self"
parameter of the __init__ methods.
</li>
<li> To support this new feature changes were made to the
<a href="v2/to_python_converter.html"><code>to_python_converter.hpp</code></a>,
<a href="v2/default_call_policies.html"><code>default_call_policies</code></a>,
<a href="v2/ResultConverter.html"><code>ResultConverter</code></a>,
<a href="v2/CallPolicies.html"><code>CallPolicies</code></a> and some others.
Efforts were made not to have interface breaking changes.
</li>
</ul>
</dd>
<dt>12 May 2007 - 1.34.0 release</dt>
<dd>
<ul>
<li>C++ signatures are now automatically appended to the
docstrings.
<li>New <a href="v2/docstring_options.html"
><code>docstring_options.hpp</code></a> header to
control the content of docstrings.
<li>Support for converting <code>void*</code> to/from python,
with <code><a
href="v2/opaque.html">opaque_pointer_converter</a></code>
as the return value policy. Thanks to Niall Douglas for the
initial patch.
</ul>
</dd>
<dt>19 October 2005 - 1.33.1 release</dt>
<dd>
<ul>
<li><code>wrapper&lt;T&gt;</code> can now be used as expected with a
held type of <i>some-smart-pointer</i><code>&lt;T&gt;</code></li>
<li>The build now assumes Python 2.4 by default, rather than 2.2</li>
<li>Support Python that's built without Unicode support</li>
<li>Support for wrapping classes with overloaded address-of
(<code>&amp;</code>) operators</li>
</ul>
</dd>
<dt>14 August 2005 - 1.33 release</dt>
<dd>
<ul>
<li>Support for docstrings on nonstatic properties.</li>
<li>We now export the client-provided docstrings for
<code>init&lt;optional&lt;&gt; &gt;</code> and
<i>XXX</i><code>_FUNCTION_OVERLOADS()</code> for only the last
overload.</li>
<li>Fixed some support for Embedded VC++ 4</li>
<li>Better support for rvalue from-python conversions of shared_ptr:
always return a pointer that holds the owning python object *unless*
the python object contains a NULL shared_ptr holder of the right
type.</li>
<li>Support for exposing <code>vector&lt;T*&gt;</code> with the
indexing suite.</li>
<li>Support for GCC-3.3 on MacOS.</li>
<li>updated visual studio project build file to include two new files
(slice.cpp and wrapper.cpp)</li>
<li>Added search feature to the index page.</li>
<li>Numerous fixes to the tutorial</li>
<li>Numerous workarounds for MSVC 6 and 7, GCC 2.96, and EDG
2.45</li>
</ul>
</dd>
<dt>11 March 2005</dt>
<dd>
<ul>
<li>Added a hack that will fool PyDoc into working with Boost.Python,
thanks to Nick Rasmussen</li>
</ul>
</dd>
<dt>19 November 2004 - 1.32 release</dt>
<dd>
<ul>
<li>Updated to use the Boost Software License.</li>
<li>A new, <a href=
"tutorial/doc/html/python/exposing.html#python.class_virtual_functions">
better method of wrapping classes with virtual functions</a> has been
implemented.</li>
<li>Support for upcoming GCC symbol export control features have been
folded in, thanks to Niall Douglas.</li>
<li>Improved support for <code>std::auto_ptr</code>-like types.</li>
<li>The Visual C++ bug that makes top-level <i>cv-qualification</i>
of function parameter types part of the function type has been worked
around.</li>
<li>Components used by other libraries have been moved out of
<code>python/detail</code> and into <code>boost/detail</code> to
improve dependency relationships.</li>
<li>Miscellaneous bug fixes and compiler workarounds.</li>
</ul>
</dd>
<dt>8 Sept 2004</dt>
<dd>Support for Python's Bool type, thanks to <a href=
"mailto:dholth-at-fastmail.fm">Daniel Holth</a>.</dd>
<dt>11 Sept 2003</dt>
<dd>
<ul>
<li>Changed the response to multiple to-python converters being
registered for the same type from a hard error into warning;
Boost.Python now reports the offending type in the message.</li>
<li>Added builtin <code>std::wstring</code> conversions</li>
<li>Added <code>std::out_of_range</code> =&gt; Python
<code>IndexError</code> exception conversion, thanks to <a href=
"mailto:RaoulGough-at-yahoo.co.uk">Raoul Gough</a></li>
</ul>
</dd>
<dt>9 Sept 2003</dt>
<dd>Added new <code><a href="v2/str.html#str-spec">str</a></code></dd>
<dt>constructors which take a range of characters, allowing strings
containing nul (<code>'\0'</code>) characters.</dt>
<dt>8 Sept 2003</dt>
<dd>Added the ability to create methods from function objects (with an
<code>operator()</code>); see the <a href=
"v2/make_function.html#make_function-spec">make_function</a> docs for
more info.</dd>
<dt>10 August 2003</dt>
<dd>Added the new <code>properties</code> unit tests contributed by
<a href="mailto:romany-at-actimize.com">Roman Yakovenko</a> and
documented <code>add_static_property</code> at his urging.</dd>
<dt>1 August 2003</dt>
<dd>
Added the new <code>arg</code> class contributed by <a href=
"mailto:nickm-at-sitius.com">Nikolay Mladenov</a> which supplies the
ability to wrap functions that can be called with ommitted arguments in
the middle:
<pre>
void f(int x = 0, double y = 3.14, std::string z = std::string("foo"));
BOOST_PYTHON_MODULE(test)
{
def("f", f
, (arg("x", 0), arg("y", 3.14), arg("z", "foo")));
}
</pre>And in Python:
<pre>
&gt;&gt;&gt; import test
&gt;&gt;&gt; f(0, z = "bar")
&gt;&gt;&gt; f(z = "bar", y = 0.0)
</pre>Thanks, Nikolay!
</dd>
<dt>22 July 2003</dt>
<dd>Killed the dreaded "bad argument type for builtin operation" error.
Argument errors now show the actual and expected argument types!</dd>
<dt>19 July 2003</dt>
<dd>Added the new <code><a href=
"v2/return_arg.html">return_arg</a></code> policy from <a href=
"mailto:nickm-at-sitius.com">Nikolay Mladenov</a>. Thanks, Nikolay!</dd>
<dt>18 March, 2003</dt>
<dd><a href="mailto:Gottfried.Ganssauge-at-haufe.de">Gottfried
Gan&szlig;auge</a> has contributed <a href=
"v2/opaque.html">opaque pointer support</a>.<br>
<a href="mailto:nicodemus-at-globalite.com.br">Bruno da Silva de
Oliveira</a> has contributed the exciting <a href=
"../pyste/index.html">Pyste</a> ("Pie-steh") package.</dd>
<dt>24 February 2003</dt>
<dd>Finished improved support for <code>boost::shared_ptr</code>. Now any
wrapped object of C++ class <code>X</code> can be converted automatically
to <code>shared_ptr&lt;X&gt;</code>, regardless of how it was wrapped.
The <code>shared_ptr</code> will manage the lifetime of the Python object
which supplied the <code>X</code>, rather than just the <code>X</code>
object itself, and when such a <code>shared_ptr</code> is converted back
to Python, the original Python object will be returned.</dd>
<dt>19 January 2003</dt>
<dd>Integrated <code>staticmethod</code> support from <a href=
"mailto:nickm-at-sitius.com">Nikolay Mladenov</a>. Thanks, Nikolay!</dd>
<dt>29 December 2002</dt>
<dd>Added Visual Studio project file and instructions from Brett Calcott.
Thanks, Brett!</dd>
<dt>20 December 2002</dt>
<dd>Added automatic downcasting for pointers, references, and smart
pointers to polymorphic class types upon conversion to python</dd>
<dt>18 December 2002</dt>
<dd>Optimized from_python conversions for wrapped classes by putting the
conversion logic in the shared library instead of registering separate
converters for each class in each extension module</dd>
<dt>19 November 2002</dt>
<dd>Removed the need for users to cast base class member function
pointers when used as arguments to <a href=
"v2/class.html#class_-spec-modifiers">add_property</a></dd>
<dt>13 December 2002</dt>
<dd>Allow exporting of <a href=
"v2/enum.html#enum_-spec"><code>enum_</code></a> values into enclosing
<a href="v2/scope.html#scope-spec"><code>scope</code></a>.<br>
Fixed unsigned integer conversions to deal correctly with numbers that
are out-of-range of <code>signed long</code>.</dd>
<dt>14 November 2002</dt>
<dd>Auto-detection of class data members wrapped with <a href=
"v2/data_members.html#make_getter-spec"><code>make_getter</code></a></dd>
<dt>13 November 2002</dt>
<dd>Full Support for <code>std::auto_ptr&lt;&gt;</code> added.</dd>
<dt>October 2002</dt>
<dd>Ongoing updates and improvements to tutorial documentation</dd>
<dt>10 October 2002</dt>
<dd>Boost.Python V2 is released!</dd>
</dl>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
19 November 2004
<!--webbot bot="Timestamp" endspan i-checksum="39359" --></p>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave
Abrahams</a> 2002-2003.</i></p>
</body>
</html>

View File

@@ -1,155 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>
Function Overloading
</title>
<div>
<h1>
<img width="277" height="86" id="_x0000_i1025" align="center"
src="../../../c++boost.gif" alt= "c++boost.gif (8819 bytes)">Function Overloading
</h1>
<h2>An Example</h2>
<p>
To expose overloaded functions in Python, simply <code>def()</code> each
one with the same Python name:
<blockquote>
<pre>
inline int f1() { return 3; }
inline int f2(int x) { return x + 1; }
class X {
public:
X() : m_value(0) {}
X(int n) : m_value(n) {}
int value() const { return m_value; }
void value(int v) { m_value = v; }
private:
int m_value;
};
...
BOOST_PYTHON_MODULE_INIT(overload_demo)
{
    try
    {
boost::python::module_builder overload_demo("overload_demo");
// Overloaded functions at module scope
overload_demo.def(f1, "f");
overload_demo.def(f2, "f");
boost::python::class_builder&lt;X&gt; x_class(overload_demo, "X");
// Overloaded constructors
x_class.def(boost::python::constructor&lt;&gt;());
x_class.def(boost::python::constructor&lt;int&gt;());
// Overloaded member functions
x_class.def((int (X::*)() const)&amp;X::value, "value");
x_class.def((void (X::*)(int))&amp;X::value, "value");
...
</pre>
</blockquote>
<p>
Now in Python:
<blockquote>
<pre>
>>> from overload_demo import *
>>> x0 = X()
>>> x1 = X(1)
>>> x0.value()
0
>>> x1.value()
1
>>> x0.value(3)
>>> x0.value()
3
>>> X('hello')
TypeError: No overloaded functions match (X, string). Candidates are:
void (*)()
void (*)(int)
>>> f()
3
>>> f(4)
5
</pre>
</blockquote>
<h2>Discussion</h2>
<p>
Notice that overloading in the Python module was produced three ways:<ol>
<li>by combining the non-overloaded C++ functions <code>int f1()</code>
and <code>int f2(int)</code> and exposing them as <code>f</code> in Python.
<li>by exposing the overloaded constructors of <code>class X</code>
<li>by exposing the overloaded member functions <code>X::value</code>.
</ol>
<p>
Techniques 1. and 3. above are really alternatives. In case 3, you need
to form a pointer to each of the overloaded functions. The casting
syntax shown above is one way to do that in C++. Case 1 does not require
complicated-looking casts, but may not be viable if you can't change
your C++ interface. N.B. There's really nothing unsafe about casting an
overloaded (member) function address this way: the compiler won't let
you write it at all unless you get it right.
<h2>An Alternative to Casting</h2>
<p>
This approach is not neccessarily better, but may be preferable for some
people who have trouble writing out the types of (member) function
pointers or simply prefer to avoid all casts as a matter of principle:
<blockquote>
<pre>
// Forwarding functions for X::value
inline void set_x_value(X&amp; self, int v) { self.value(v); }
inline int get_x_value(X&amp; self) { return self.value(); }
...
// Overloaded member functions
x_class.def(set_x_value, "value");
x_class.def(get_x_value, "value");
</pre>
</blockquote>
<p>Here we are taking advantage of the ability to expose C++ functions at
namespace scope as Python member functions.
<h2>Overload Resolution</h2>
<p>
The function overload resolution mechanism works as follows:
<ul>
<li>Attribute lookup for extension classes proceeds in <a
href="http://www.python.org/doc/current/tut/node11.html#SECTION0011510000000000000000">the
usual Python way</a> using a depth-first, left-to-right search. When a
class is found which has a matching attribute, only functions overloaded
in the context of that class are candidates for overload resolution. In
this sense, overload resolution mirrors the C++ mechanism, where a name
in a derived class ``hides'' all functions with the same name from a base
class.
<p>
<li>Within a name-space context (extension class or module), overloaded
functions are tried in the same order they were
<code>def()</code>ed. The first function whose signature can be made to
match each argument passed is the one which is ultimately called.
This means in particular that you cannot overload the same function on
both ``<code>int</code>'' and ``<code>float</code>'' because Python
automatically converts either of the two types into the other one.
If the ``<code>float</code>'' overload is found first, it is used
also used for arguments of type ``<code>int</code>'' as well, and the
``<code>int</code>'' version of the function is never invoked.
</ul>
<p>
Next: <a href="inheritance.html">Inheritance</a>
Previous: <a href="overriding.html">Overridable Virtual Functions</a>
Up: <a href="index.html">Top</a>
<p>
&copy; Copyright David Abrahams 2001. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided ``as
is'' without express or implied warranty, and with no claim as to
its suitability for any purpose.
<p>
Updated: Mar 6, 2001
</div>

View File

@@ -1,208 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Overridable Virtual Functions</title>
<img src="../../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align="center"
width="277" height="86">
<h1>Overridable Virtual Functions</h1>
<p>
In the <a href="exporting_classes.html">previous example</a> we exposed a simple
C++ class in Python and showed that we could write a subclass. We even
redefined one of the functions in our derived class. Now we will learn
how to make the function behave virtually <em>when called from C++</em>.
<h2><a name="overriding_example">Example</a></h2>
<p>In this example, it is assumed that <code>hello::greet()</code> is a virtual
member function:
<blockquote><pre>
class hello
{
public:
hello(const std::string&amp; country) { this-&gt;country = country; }
<b>virtual</b> std::string greet() const { return "Hello from " + country; }
    virtual ~hello(); // Good practice
...
};
</pre></blockquote>
<p>
We'll need a derived class<a href="#why_derived">*</a> to help us
dispatch the call to Python. In our derived class, we need the following
elements:
<ol>
<li><a name="derived_1">A</a> <code>PyObject*</code> data member (usually
called <tt>self</tt>) that holds a pointer to the Python object corresponding
to our C++ <tt>hello</tt> instance.
<li><a name="derived_2">For</a> each exposed constructor of the
base class <tt>T</tt>, a constructor which takes the same parameters preceded by an initial
<code>PyObject*</code> argument. The initial argument should be stored in the <tt>self</tt> data
member described above.
<li><a name="derived_3">If</a> the class being wrapped is ever returned <i>by
value</i> from a wrapped function, be sure you do the same for the
<tt>T</tt>'s copy constructor: you'll need a constructor taking arguments
<tt>(PyObject*,&nbsp;const&nbsp;T&amp;)</tt>.
<li><a name="derived_4">An</a> implementation of each virtual function you may
wish to override in Python which uses
<tt>callback&lt</tt><i>return-type</i><tt>&gt;::call_method(self,&nbsp;&quot;</tt><i>name</i><tt>&quot;,&nbsp;</tt><i>args...</i><tt>)</tt> to call
the Python override.
<li><a name="derived_5">For</a> each non-pure virtual function meant to be
overridable from Python, a static member function (or a free function) taking
a reference or pointer to the <tt>T</tt> as the first parameter and which
forwards any additional parameters neccessary to the <i>default</i>
implementation of the virtual function. See also <a href="#private">this
note</a> if the base class virtual function is private.
</ol>
<blockquote><pre>
struct hello_callback : hello
{
// hello constructor storing initial self_ parameter
hello_callback(PyObject* self_, const std::string&amp; x) // <a href="#derived_2">2</a>
: hello(x), self(self_) {}
// In case hello is returned by-value from a wrapped function
hello_callback(PyObject* self_, const hello&amp; x) // <a href="#derived_3">3</a>
: hello(x), self(self_) {}
// Override greet to call back into Python
std::string greet() const // <a href="#derived_4">4</a>
{ return boost::python::callback&lt;std::string&gt;::call_method(self, "greet"); }
// Supplies the default implementation of greet
static std::string <a name= "default_implementation">default_greet</a>(const hello& self_) const // <a href="#derived_5">5</a>
{ return self_.hello::greet(); }
private:
PyObject* self; // <a href="#derived_1">1</a>
};
</pre></blockquote>
<p>
Finally, we add <tt>hello_callback</tt> to the <tt>
class_builder&lt;&gt;</tt> declaration in our module initialization
function, and when we define the function, we must tell Boost.Python about the default
implementation:
<blockquote><pre>
// Create the <a name=
"hello_class">Python type object</a> for our extension class
boost::python::class_builder&lt;hello<strong>,hello_callback&gt;</strong> hello_class(hello, "hello");
// Add a virtual member function
hello_class.def(&amp;hello::greet, "greet", &amp;<b>hello_callback::default_greet</b>);
</pre></blockquote>
<p>
Now our Python subclass of <tt>hello</tt> behaves as expected:
<blockquote><pre>
&gt;&gt;&gt; class wordy(hello):
... def greet(self):
... return hello.greet(self) + ', where the weather is fine'
...
&gt;&gt;&gt; hi2 = wordy('Florida')
&gt;&gt;&gt; hi2.greet()
'Hello from Florida, where the weather is fine'
&gt;&gt;&gt; invite(hi2)
'Hello from Florida, where the weather is fine! Please come soon!'
</pre></blockquote>
<p>
<a name="why_derived">*</a>You may ask, "Why do we need this derived
class? This could have been designed so that everything gets done right
inside of <tt>hello</tt>." One of the goals of Boost.Python is to be
minimally intrusive on an existing C++ design. In principle, it should be
possible to expose the interface for a 3rd party library without changing
it. To unintrusively hook into the virtual functions so that a Python
override may be called, we must use a derived class.
<h2>Pure Virtual Functions</h2>
<p>
A pure virtual function with no implementation is actually a lot easier to
deal with than a virtual function with a default implementation. First of
all, you obviously don't need to <a href="#default_implementation"> supply
a default implementation</a>. Secondly, you don't need to call
<tt>def()</tt> on the <tt>extension_class&lt;&gt;</tt> instance
for the virtual function. In fact, you wouldn't <em>want</em> to: if the
corresponding attribute on the Python class stays undefined, you'll get an
<tt>AttributeError</tt> in Python when you try to call the function,
indicating that it should have been implemented. For example:
<blockquote>
<pre>
struct baz {
<strong>virtual</strong> int pure(int) = 0;
int calls_pure(int x) { return pure(x) + 1000; }
};
struct baz_callback {
int pure(int x) { boost::python::callback&lt;int&gt;::call_method(m_self, "pure", x); }
};
BOOST_PYTHON_MODULE_INIT(foobar)
{
boost::python::module_builder foobar("foobar");
boost::python::class_builder&lt;baz,baz_callback&gt; baz_class("baz");
baz_class.def(&amp;baz::calls_pure, "calls_pure");
}
</pre>
</blockquote>
<p>
Now in Python:
<blockquote>
<pre>
&gt;&gt;&gt; from foobar import baz
&gt;&gt;&gt; x = baz()
&gt;&gt;&gt; x.pure(1)
Traceback (innermost last):
File "&lt;stdin&gt;", line 1, in ?
AttributeError: pure
&gt;&gt;&gt; x.calls_pure(1)
Traceback (innermost last):
File "&lt;stdin&gt;", line 1, in ?
AttributeError: pure
&gt;&gt;&gt; class mumble(baz):
... def pure(self, x): return x + 1
...
&gt;&gt;&gt; y = mumble()
&gt;&gt;&gt; y.pure(99)
100
&gt;&gt;&gt; y.calls_pure(99)
1100
</pre></blockquote>
<a name="private"><h2>Private Non-Pure Virtual Functions</h2></a>
<p>This is one area where some minor intrusiveness on the wrapped library is
required. Once it has been overridden, the only way to call the base class
implementation of a private virtual function is to make the derived class a
friend of the base class. You didn't hear it from me, but most C++
implementations will allow you to change the declaration of the base class in
this limited way without breaking binary compatibility (though it will certainly
break the <a
href="http://cs.calvin.edu/c++/C++Standard-Nov97/basic.html#basic.def.odr">ODR</a>).
<hr>
<p>
Next: <a href="overloading.html">Function Overloading</a>
Previous: <a href="exporting_classes.html">Exporting Classes</a>
Up: <a href="index.html">Top</a>
<p>
&copy; Copyright David Abrahams 2001. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided "as is" without
express or implied warranty, and with no claim as to its suitability for
any purpose.
<p>
Updated: Mar 21, 2001

View File

@@ -1,272 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>Boost.Python Pickle Support</title>
<div>
<img src="../../../c++boost.gif"
alt="c++boost.gif (8819 bytes)"
align="center"
width="277" height="86">
<hr>
<h1>Boost.Python Pickle Support</h1>
Pickle is a Python module for object serialization, also known
as persistence, marshalling, or flattening.
<p>
It is often necessary to save and restore the contents of an object to
a file. One approach to this problem is to write a pair of functions
that read and write data from a file in a special format. A powerful
alternative approach is to use Python's pickle module. Exploiting
Python's ability for introspection, the pickle module recursively
converts nearly arbitrary Python objects into a stream of bytes that
can be written to a file.
<p>
The Boost Python Library supports the pickle module by emulating the
interface implemented by Jim Fulton's ExtensionClass module that is
included in the
<a href="http://www.zope.org/"
>ZOPE</a>
distribution.
This interface is similar to that for regular Python classes as
described in detail in the
<a href="http://www.python.org/doc/current/lib/module-pickle.html"
>Python Library Reference for pickle.</a>
<hr>
<h2>The Boost.Python Pickle Interface</h2>
At the user level, the Boost.Python pickle interface involves three special
methods:
<dl>
<dt>
<strong><tt>__getinitargs__</tt></strong>
<dd>
When an instance of a Boost.Python extension class is pickled, the
pickler tests if the instance has a <tt>__getinitargs__</tt> method.
This method must return a Python tuple (it is most convenient to use
a boost::python::tuple). When the instance is restored by the
unpickler, the contents of this tuple are used as the arguments for
the class constructor.
<p>
If <tt>__getinitargs__</tt> is not defined, the class constructor
will be called without arguments.
<p>
<dt>
<strong><tt>__getstate__</tt></strong>
<dd>
When an instance of a Boost.Python extension class is pickled, the
pickler tests if the instance has a <tt>__getstate__</tt> method.
This method should return a Python object representing the state of
the instance.
<p>
If <tt>__getstate__</tt> is not defined, the instance's
<tt>__dict__</tt> is pickled (if it is not empty).
<p>
<dt>
<strong><tt>__setstate__</tt></strong>
<dd>
When an instance of a Boost.Python extension class is restored by the
unpickler, it is first constructed using the result of
<tt>__getinitargs__</tt> as arguments (see above). Subsequently the
unpickler tests if the new instance has a <tt>__setstate__</tt>
method. If so, this method is called with the result of
<tt>__getstate__</tt> (a Python object) as the argument.
<p>
If <tt>__setstate__</tt> is not defined, the result of
<tt>__getstate__</tt> must be a Python dictionary. The items of this
dictionary are added to the instance's <tt>__dict__</tt>.
</dl>
If both <tt>__getstate__</tt> and <tt>__setstate__</tt> are defined,
the Python object returned by <tt>__getstate__</tt> need not be a
dictionary. The <tt>__getstate__</tt> and <tt>__setstate__</tt> methods
can do what they want.
<hr>
<h2>Pitfalls and Safety Guards</h2>
In Boost.Python extension modules with many extension classes,
providing complete pickle support for all classes would be a
significant overhead. In general complete pickle support should only be
implemented for extension classes that will eventually be pickled.
However, the author of a Boost.Python extension module might not
anticipate correctly which classes need support for pickle.
Unfortunately, the pickle protocol described above has two important
pitfalls that the end user of a Boost.Python extension module might not
be aware of:
<dl>
<dt>
<strong>Pitfall 1:</strong>
Both <tt>__getinitargs__</tt> and <tt>__getstate__</tt> are not defined.
<dd>
In this situation the unpickler calls the class constructor without
arguments and then adds the <tt>__dict__</tt> that was pickled by
default to that of the new instance.
<p>
However, most C++ classes wrapped with Boost.Python will have member
data that are not restored correctly by this procedure. To alert the
user to this problem, a safety guard is provided. If both
<tt>__getinitargs__</tt> and <tt>__getstate__</tt> are not defined,
Boost.Python tests if the class has an attribute
<tt>__dict_defines_state__</tt>. An exception is raised if this
attribute is not defined:
<pre>
RuntimeError: Incomplete pickle support (__dict_defines_state__ not set)
</pre>
In the rare cases where this is not the desired behavior, the safety
guard can deliberately be disabled. The corresponding C++ code for
this is, e.g.:
<pre>
class_builder&lt;your_class&gt; py_your_class(your_module, "your_class");
py_your_class.dict_defines_state();
</pre>
It is also possible to override the safety guard at the Python level.
E.g.:
<pre>
import your_bpl_module
class your_class(your_bpl_module.your_class):
__dict_defines_state__ = 1
</pre>
<p>
<dt>
<strong>Pitfall 2:</strong>
<tt>__getstate__</tt> is defined and the instance's <tt>__dict__</tt> is not empty.
<dd>
The author of a Boost.Python extension class might provide a
<tt>__getstate__</tt> method without considering the possibilities
that:
<p>
<ul>
<li>
his class is used in Python as a base class. Most likely the
<tt>__dict__</tt> of instances of the derived class needs to be
pickled in order to restore the instances correctly.
<p>
<li>
the user adds items to the instance's <tt>__dict__</tt> directly.
Again, the <tt>__dict__</tt> of the instance then needs to be
pickled.
</ul>
<p>
To alert the user to this highly unobvious problem, a safety guard is
provided. If <tt>__getstate__</tt> is defined and the instance's
<tt>__dict__</tt> is not empty, Boost.Python tests if the class has
an attribute <tt>__getstate_manages_dict__</tt>. An exception is
raised if this attribute is not defined:
<pre>
RuntimeError: Incomplete pickle support (__getstate_manages_dict__ not set)
</pre>
To resolve this problem, it should first be established that the
<tt>__getstate__</tt> and <tt>__setstate__</tt> methods manage the
instances's <tt>__dict__</tt> correctly. Note that this can be done
both at the C++ and the Python level. Finally, the safety guard
should intentionally be overridden. E.g. in C++:
<pre>
class_builder&lt;your_class&gt; py_your_class(your_module, "your_class");
py_your_class.getstate_manages_dict();
</pre>
In Python:
<pre>
import your_bpl_module
class your_class(your_bpl_module.your_class):
__getstate_manages_dict__ = 1
def __getstate__(self):
# your code here
def __setstate__(self, state):
# your code here
</pre>
</dl>
<hr>
<h2>Practical Advice</h2>
<ul>
<li>
Avoid using <tt>__getstate__</tt> if the instance can also be
reconstructed by way of <tt>__getinitargs__</tt>. This automatically
avoids Pitfall 2.
<p>
<li>
If <tt>__getstate__</tt> is required, include the instance's
<tt>__dict__</tt> in the Python object that is returned.
</ul>
<hr>
<h2>Examples</h2>
There are three files in <tt>boost/libs/python/example</tt> that
show how so provide pickle support.
<h3><a href="../example/pickle1.cpp"><tt>pickle1.cpp</tt></a></h3>
The C++ class in this example can be fully restored by passing the
appropriate argument to the constructor. Therefore it is sufficient
to define the pickle interface method <tt>__getinitargs__</tt>.
<h3><a href="../example/pickle2.cpp"><tt>pickle2.cpp</tt></a></h3>
The C++ class in this example contains member data that cannot be
restored by any of the constructors. Therefore it is necessary to
provide the <tt>__getstate__</tt>/<tt>__setstate__</tt> pair of
pickle interface methods.
<p>
For simplicity, the <tt>__dict__</tt> is not included in the result
of <tt>__getstate__</tt>. This is not generally recommended, but a
valid approach if it is anticipated that the object's
<tt>__dict__</tt> will always be empty. Note that the safety guards
will catch the cases where this assumption is violated.
<h3><a href="../example/pickle3.cpp"><tt>pickle3.cpp</tt></a></h3>
This example is similar to <a
href="../example/pickle2.cpp"><tt>pickle2.cpp</tt></a>. However, the
object's <tt>__dict__</tt> is included in the result of
<tt>__getstate__</tt>. This requires more code but is unavoidable
if the object's <tt>__dict__</tt> is not always empty.
<hr>
&copy; Copyright Ralf W. Grosse-Kunstleve 2001. Permission to copy,
use, modify, sell and distribute this document is granted provided this
copyright notice appears in all copies. This document is provided "as
is" without express or implied warranty, and with no claim as to its
suitability for any purpose.
<p>
Updated: March 21, 2001
</div>

View File

@@ -1,148 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>
Pointers
</title>
<div>
<h1>
<img width="277" height="86" id="_x0000_i1025" align="center"
src="../../../c++boost.gif" alt= "c++boost.gif (8819 bytes)">Pointers
</h1>
<h2><a name="problem">The Problem With Pointers</a></h2>
<p>
In general, raw pointers passed to or returned from functions are problematic
for Boost.Python because pointers have too many potential meanings. Is it an iterator?
A pointer to a single element? An array? When used as a return value, is the
caller expected to manage (delete) the pointed-to object or is the pointer
really just a reference? If the latter, what happens to Python references to the
referent when some C++ code deletes it?
<p>
There are a few cases in which pointers are converted automatically:
<ul>
<li>Both const- and non-const pointers to wrapped class instances can be passed
<i>to</i> C++ functions.
<li>Values of type <code>const char*</code> are interpreted as
null-terminated 'C' strings and when passed to or returned from C++ functions are
converted from/to Python strings.
</ul>
<h3>Can you avoid the problem?</h3>
<p>My first piece of advice to anyone with a case not covered above is
``find a way to avoid the problem.'' For example, if you have just one
or two functions that return a pointer to an individual <code>const
T</code>, and <code>T</code> is a wrapped class, you may be able to write a ``thin
converting wrapper'' over those two functions as follows:
<blockquote><pre>
const Foo* f(); // original function
const Foo& f_wrapper() { return *f(); }
...
my_module.def(f_wrapper, "f");
</pre></blockquote>
<p>
Foo must have a public copy constructor for this technique to work, since Boost.Python
converts <code>const T&</code> values <code>to_python</code> by copying the <code>T</code>
value into a new extension instance.
<h2>Dealing with the problem</h2>
<p>The first step in handling the remaining cases is to figure out what the pointer
means. Several potential solutions are provided in the examples that follow:
<h3>Returning a pointer to a wrapped type</h3>
<h4>Returning a const pointer</h4>
<p>If you have lots of functions returning a <code>const T*</code> for some
wrapped <code>T</code>, you may want to provide an automatic
<code>to_python</code> conversion function so you don't have to write lots of
thin wrappers. You can do this simply as follows:
<blockquote><pre>
BOOST_PYTHON_BEGIN_CONVERSION_NAMESPACE // this is a gcc 2.95.2 bug workaround
PyObject* to_python(const Foo* p) {
return to_python(*p); // convert const Foo* in terms of const Foo&
}
BOOST_PYTHON_END_CONVERSION_NAMESPACE
</pre></blockquote>
<h4>If you can't (afford to) copy the referent, or the pointer is non-const</h4>
<p>If the wrapped type doesn't have a public copy constructor, if copying is
<i>extremely</i> costly (remember, we're dealing with Python here), or if the
pointer is non-const and you really need to be able to modify the referent from
Python, you can use the following dangerous trick. Why dangerous? Because python
can not control the lifetime of the referent, so it may be destroyed by your C++
code before the last Python reference to it disappears:
<blockquote><pre>
BOOST_PYTHON_BEGIN_CONVERSION_NAMESPACE // this is a gcc 2.95.2 bug workaround
PyObject* to_python(Foo* p)
{
return boost::python::python_extension_class_converters&lt;Foo&gt;::smart_ptr_to_python(p);
}
PyObject* to_python(const Foo* p)
{
return to_python(const_cast&lt;Foo*&gt;(p));
}
BOOST_PYTHON_END_CONVERSION_NAMESPACE
</pre></blockquote>
This will cause the Foo* to be treated as though it were an owning smart
pointer, even though it's not. Be sure you don't use the reference for anything
from Python once the pointer becomes invalid, though. Don't worry too much about
the <code>const_cast&lt;&gt;</code> above: Const-correctness is completely lost
to Python anyway!
<h3>[In/]Out Parameters and Immutable Types</h3>
<p>If you have an interface that uses non-const pointers (or references) as
in/out parameters to types which in Python are immutable (e.g. int, string),
there simply is <i>no way</i> to get the same interface in Python. You must
resort to transforming your interface with simple thin wrappers as shown below:
<blockquote><pre>
const void f(int* in_out_x); // original function
const int f_wrapper(int in_x) { f(in_x); return in_x; }
...
my_module.def(f_wrapper, "f");
</pre></blockquote>
<p>Of course, [in/]out parameters commonly occur only when there is already a
return value. You can handle this case by returning a Python tuple:
<blockquote><pre>
typedef unsigned ErrorCode;
const char* f(int* in_out_x); // original function
...
#include &lt;boost/python/objects.hpp&gt;
const boost::python::tuple f_wrapper(int in_x) {
const char* s = f(in_x);
return boost::python::tuple(s, in_x);
}
...
my_module.def(f_wrapper, "f");
</pre></blockquote>
<p>Now, in Python:
<blockquote><pre>
&gt;&gt;&gt; str,out_x = f(3)
</pre></blockquote>
<p>
Previous: <a href="enums.html">Enums</a>
Up: <a href="index.html">Top</a>
<p>
&copy; Copyright David Abrahams 2000. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided "as is" without
express or implied warranty, and with no claim as to its suitability
for any purpose.
<p>
Updated: Nov 26, 2000
</div>

222
doc/polymorphism.txt Normal file
View File

@@ -0,0 +1,222 @@
.. Copyright David Abrahams 2006. Distributed under the Boost
.. Software License, Version 1.0. (See accompanying
.. file LICENSE_1_0.txt or copy at
.. http://www.boost.org/LICENSE_1_0.txt)
How Runtime Polymorphism is expressed in Boost.Python:
-----------------------------------------------------
struct A { virtual std::string f(); virtual ~A(); };
std::string call_f(A& x) { return x.f(); }
struct B { virtual std::string f() { return "B"; } };
struct Bcb : B
{
Bcb(PyObject* self) : m_self(self) {}
virtual std::string f() { return call_method<std::string>(m_sef, "f"); }
static std::string f_default(B& b) { return b.B::f(); }
PyObject* m_self;
};
struct C : B
{
virtual std::string f() { return "C"; }
};
>>> class D(B):
... def f():
... return 'D'
...
>>> class E(B): pass
...
When we write, "invokes B::f non-virtually", we mean:
void g(B& x) { x.B::f(); }
This will call B::f() regardless of the dynamic type of x. Any other
way of invoking B::f, including through a function pointer, is a
"virtual invocation", and will call the most-derived override of f().
Case studies
C++\Python class
\___A_____B_____C_____D____E___
|
A | 1
|
B | 2 3
|
Bcb | 4 5 6
|
C | 7 8
|
1. Simple case
2. Python A holds a B*. Probably won't happen once we have forced
downcasting.
Requires:
x.f() -> 'B'
call_f(x) -> 'B'
Implies: A.f invokes A::f() (virtually or otherwise)
3. Python B holds a B*.
Requires:
x.f() -> 'B'
call_f(x) -> 'B'
Implies: B.f invokes B::f (virtually or otherwise)
4. B constructed from Python
Requires:
x.f() -> 'B'
call_f(x) -> 'B'
Implies: B.f invokes B::f non-virtually. Bcb::f invokes B::f
non-virtually.
Question: Does it help if we arrange for Python B construction to
build a true B object? Then this case doesn't arise.
5. D is a Python class derived from B
Requires:
x.f() -> 'D'
call_f(x) -> 'D'
Implies: Bcb::f must invoke call_method to look up the Python
method override, otherwise call_f wouldn't work.
6. E is like D, but doesn't override f
Requires:
x.f() -> 'B'
call_f(x) -> 'B'
Implies: B.f invokes B::f non-virtually. If it were virtual, x.f()
would cause infinite recursion, because we've already
determined that Bcb::f must invoke call_method to look up
the Python method override.
7. Python B object holds a C*
Requires:
x.f() -> 'C'
call_f(x) -> 'C'
Implies: B.f invokes B::f virtually.
8. C object constructed from Python
Requires:
x.f() -> 'C'
call_f(x) -> 'C'
Implies: nothing new.
------
Total implications:
2: A.f invokes A::f() (virtually or otherwise)
3: B.f invokes B::f (virtually or otherwise)
4: B.f invokes B::f non-virtually. Bcb::f invokes B::f non-virtually
6: B.f invokes B::f non-virtually.
7: B.f invokes B::f virtually.
5: Bcb::f invokes call_method to look up the Python method
Though (4) is avoidable, clearly 6 and 7 are not, and they
conflict. The implication is that B.f must choose its behavior
according to the type of the contained C++ object. If it is Bcb, a
non-virtual call to B::f must occur. Otherwise, a virtual call to B::f
must occur. This is essentially the same scheme we had with
Boost.Python v1.
Note: in early versions of Boost.Python v1, we solved this problem by
introducing a new Python class in the hierarchy, so that D and E
actually derive from a B', and B'.f invokes B::f non-virtually, while
B.f invokes B::f virtually. However, people complained about the
artificial class in the hierarchy, which was revealed when they tried
to do normal kinds of Python introspection.
-------
Assumption: we will have a function which builds a virtual function
dispatch callable Python object.
make_virtual_function(pvmf, default_impl, call_policies, dispatch_type)
Pseudocode:
Get first argument from Python arg tuple
if it contains dispatch_type
call default_impl
else
call through pvmf
Open questions:
1. What about Python multiple inheritance? Do we have the right
check in the if clause above?
A: Not quite. The correct test looks like:
Deduce target type of pvmf, i.e. T in R(T::*)(A1...AN).
Find holder in first argument which holds T
if it holds dispatch_type...
2. Can we make this more efficient?
The current "returning" mechanism will look up a holder for T
again. I don't know if we know how to avoid that.
OK, the solution involves reworking the call mechanism. This is
neccesary anyway in order to enable wrapping of function objects.
It can result in a reduction in the overall amount of source code,
because returning<> won't need to be specialized for every
combination of function and member function... though it will still
need a void specialization. We will still need a way to dispatch to
member functions through a regular function interface. mem_fn is
almost the right tool, but it only goes up to 8
arguments. Forwarding is tricky if you don't want to incur copies.
I think the trick is to use arg_from_python<T>::result_type for each
argument to the forwarder.
Another option would be to use separate function, function object,
and member function dispatchers. Once you know you have a member
function, you don't need cv-qualified overloads to call it.
Hmm, while we're at this, maybe we should solve the write-back
converter problem. Can we do it? Maybe not. Ralf doesn't want to
write special write-back functions here, does he? He wants the
converter to do the work automatically. We could add
cleanup/destructor registration. That would relieve the client from
having accessible destructors for types which are being converted by
rvalue. I'm not sure that this will really save any code,
however. It rather depends on the linker, doesn't it? I wonder if
this can be done in a backwards-compatible fashion by generating the
delete function when it's not supplied?

445
doc/projects.html Normal file
View File

@@ -0,0 +1,445 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Cygwin (vers 1st September 2004), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html">
<link rel="stylesheet" type="text/css" href="boost.css">
<title>Boost.Python - Projects using Boost.Python</title>
</head>
<body link="#0000FF" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="index.html">Boost.Python</a></h1>
<h2 align="center">Projects using Boost.Python</h2>
</td>
</tr>
</table>
<hr>
<h2>Introduction</h2>
<p>This is a partial list of projects using Boost.Python. If you are using
Boost.Python as your Python/C++ binding solution, we'd be proud to list
your project on this page. Just <a href=
"mailto:c++-sig@python.org">post</a> a short description of your project
and how Boost.Python helps you get the job done, and we'll add it to this
page .</p>
<hr>
<h3>Data Analysis</h3>
<dl class="page-index">
<dt><b><a href="http://www.neuralynx.com">NeuraLab</a></b></dt>
<dd>Neuralab is a data analysis environment specifically tailored for
neural data from <a href="http://www.neuralynx.com">Neuralynx</a>
acquisition systems. Neuralab combines presentation quality graphics, a
numerical analysis library, and the <a href=
"http://www.python.org">Python</a> scripting engine in a single
application. With Neuralab, Neuralynx users can perform common analysis
tasks with just a few mouse clicks. More advanced users can create custom
Python scripts, which can optionally be assigned to menus and mouse
clicks.</dd>
</dl>
<dl class="page-index">
<dt><b>TSLib</b> - <a href="http://www.fortressinv.com">Fortress
Investment Group LLC</a></dt>
<dd>
Fortress Investment Group has contracted <a href=
"http://www.boost-consulting.com">Boost Consulting</a> to develop core
internal financial analysis tools in C++ and to prepare Python bindings
for them using Boost.Python.
<p>Tom Barket of Fortress writes:</p>
<blockquote>
We have a large C++ analytical library specialized for research in
finance and economics, built for speed and mission critical
stability. Yet Python offers us the flexibility to test out new ideas
quickly and increase the productivity of our time versus working in
C++. There are several key features which make Python stand out. Its
elegance, stability, and breadth of resources on the web are all
valuable, but the most important is its extensibility, due to its
open source transparency. Boost.Python makes Python extensibility
extremely simple and straightforward, yet preserves a great deal of
power and control.
</blockquote>
</dd>
</dl>
<h3>Educational</h3>
<dl class="page-index">
<dt><a href="http://edu.kde.org/kig"><b>Kig</b></a></dt>
<dd>
<p>KDE Interactive Geometry is a high-school level educational tool,
built for the KDE desktop. It is a nice tool to let students work with
geometrical constructions. It is meant to be the most intuitive, yet
featureful application of its kind.</p>
<p>Versions after 0.6.x (will) support objects built by the user
himself in the Python language. The exporting of the relevant internal
API's were done using Boost.Python, which made the process very
easy.</p>
</dd>
</dl>
<h3>Enterprise Software</h3>
<dl class="page-index">
<dt><b><a href="http://openwbem.sourceforge.net">OpenWBEM</a></b></dt>
<dd>
The OpenWBEM project is an effort to develop an open-source
implementation of Web Based Enterprise Management suitable for
commercial and non-commercial application
<p><a href="mailto:dnuffer@sco.com">Dan Nuffer</a> writes:</p>
<blockquote>
I'm using Boost.Python to wrap the client API of OpenWBEM.This will
make it easier to do rapid prototyping, testing, and scripting when
developing management solutions that use WBEM.
</blockquote>
</dd>
<dt><b><a href="http://www.transversal.com">Metafaq</a></b></dt>
<dd>
Metafaq, from <a href="http://www.transversal.com">Transversal,
Inc.</a>, is an enterprise level online knowledge base management
system.
<p><a href="mailto:ben.young-at-transversal.com">Ben Young</a>
writes:</p>
<blockquote>
Boost.Python is used in an automated process to generate python
bindings to our api which is exposed though multiple backends and
frontends. This allows us to write quick tests and bespoke scripts to
perform one off tasks without having to go through the full
compilation cycle.
</blockquote>
</dd>
</dl>
<h3>Games</h3>
<dl>
<dt><b><a href="http://www.firaxis.com">Civilization IV</a></b></dt>
</dl>
<blockquote>
&ldquo;The fourth game in the PC strategy series that has sold over five
million copies, Sid Meier's Civilization IV is a bold step forward for
the franchise, with spectacular new 3D graphics and all-new single and
multiplayer content. Civilization IV will also set a new standard for
user-modification, allowing gamers to create their own add-ons using
Python and XML.
<p>Sid Meier's Civilization IV will be released for PC in late 2005. For
more information please visit <a href=
"http://www.firaxis.com">http://www.firaxis.com</a> or write <a href=
"mailto:kgilmore@firaxis.com">kgilmore@firaxis.com</a>&rdquo;</p>
</blockquote>
<p>Boost.Python is used as the interface layer between the C++ game code
and Python. Python is used for many purposes in the game, including map
generation, interface screens, game events, tools, tutorials, etc. Most
high-level game operations have been exposed to Python in order to give
modders the power they need to customize the game.</p>
<blockquote>
-Mustafa Thamer, Civ4 Lead Programmer
</blockquote>
<dl class="page-index">
<dt><b><a href="http://vegastrike.sourceforge.net">Vega
Strike</a></b></dt>
<dd>
<a href="http://vegastrike.sourceforge.net">Vega Strike</a> is the 3D
Space Simulator that allows you to trade and bounty hunt in a vast
universe. Players face dangers, decisions, piracy, and aliens.
<p><a href="http://vegastrike.sourceforge.net">Vega Strike</a> has
decided to base its scripting on python, using boost as the layer
between the class hierarchy in python and the class hierarchy in C++.
The result is a very flexible scripting system that treats units as
native python classes when designing missions or writing AI's.</p>
<p>A large economic and planetary simulation is currently being run in
the background in python and the results are returned back into C++ in
the form of various factions' spaceships appearing near worlds that
they are simulated to be near in python if the player is in the general
neighborhood.</p>
</dd>
</dl>
<h3>Graphics</h3>
<dl class="page-index">
<dt><b><a href="http://sourceforge.net/projects/pyosg">OpenSceneGraph
Bindings</a></b></dt>
<dd><a href="mailto:gideon@computer.org">Gideon May</a> has created a set
of bindings for <a href=
"http://www.openscenegraph.org">OpenSceneGraph</a>, a cross-platform
C++/OpenGL library for the real-time visualization.<br>
&nbsp;</dd>
<dt><b><a href=
"http://www.slac.stanford.edu/grp/ek/hippodraw/index.html">HippoDraw</a></b></dt>
<dd>
HippoDraw is a data analysis environment consisting of a canvas upon
which graphs such as histograms, scattter plots, etc, are prsented. It
has a highly interactive GUI interface, but some things you need to do
with scripts. HippoDraw can be run as Python extension module so that
all the manipulation can be done from either Python or the GUI.
<p>Before the web page came online, <a href=
"mailto:Paul_Kunz@SLAC.Stanford.EDU">Paul F. Kunz</a> wrote:</p>
<blockquote>
Don't have a web page for the project, but the organization's is
<a href=
"http://www.slac.stanford.edu">http://www.slac.stanford.edu</a> (the
first web server site in America, I installed it).
</blockquote>Which was just too cool a piece of trivia to omit.<br>
&nbsp;
</dd>
<dt><a href="http://www.iplt.org"><b>IPLT</b></a></dt>
<dd>
<a href="mailto:ansgar.philippsen-at-unibas.ch">Ansgar Philippsen</a>
writes:
<blockquote>
IPLT is an image processing library and toolbox for the structural
biology electron microscopy community. I would call it a
budding/evolving project, since it is currently not in production
stage, but rather under heavy development. Python is used as the main
scripting/interaction level, but also for rapid prototyping, since
the underlying C++ class library is pretty much fully exposed via
boost.python (at least the high-level interface). The combined power
of C++ and Python for this project turned out to be just awesome.
</blockquote><br>
&nbsp;
</dd>
<dt><a href=
"http://www.procoders.net/pythonmagick"><b>PythonMagick</b></a></dt>
<dd>PythonMagick binds the <a href=
"http://www.graphicsmagick.org">GraphicsMagick</a> image manipulation
library to Python.<br>
&nbsp;</dd>
<dt><a href="http://www.vpython.org"><b>VPython</b></a></dt>
<dd>
<a href="mailto:Bruce_Sherwood-at-ncsu.edu">Bruce Sherwood</a> writes:
<blockquote>
VPython is an extension for Python that makes it easy to create
navigable 3D animations, which are generated as a side effect of
computational code. VPython is used in education for various
purposes, including teaching physics and programming, but it has also
been used by research scientists to visualize systems or data in 3D.
</blockquote><br>
&nbsp;
</dd>
</dl>
<h3>Scientific Computing</h3>
<dl class="page index">
<dt><a href="http://camfr.sourceforge.net"><b>CAMFR</b></a></dt>
<dd>
CAMFR is a photonics and electromagnetics modelling tool. Python is
used for computational steering.
<p><a href="mailto:Peter.Bienstman@rug.ac.be">Peter Bienstman</a>
writes:</p>
<blockquote>
Thanks for providing such a great tool!
</blockquote>
</dd>
<dt><a href="http://cctbx.sourceforge.net"><b>cctbx - Computational
Crystallography Toolbox</b></a></dt>
<dd>
Computational Crystallography is concerned with the derivation of
atomic models of crystal structures, given experimental X-ray
diffraction data. The cctbx is an open-source library of fundamental
algorithms for crystallographic computations. The core algorithms are
implemented in C++ and accessed through higher-level Python interfaces.
<p>The cctbx grew together with Boost.Python and is designed from the
ground up as a hybrid Python/C++ system. With one minor exception,
run-time polymorphism is completely handled by Python. C++ compile-time
polymorphism is used to implement performance critical algorithms. The
Python and C++ layers are seamlessly integrated using Boost.Python.</p>
<p>The SourceForge cctbx project is organized in modules to facilitate
use in non-crystallographic applications. The scitbx module implements
a general purpose array family for scientific applications and pure C++
ports of FFTPACK and the L-BFGS quasi-Newton minimizer.</p>
</dd>
<dt><a href="http://www.llnl.gov/CASC/emsolve"><b>EMSolve</b></a></dt>
<dd>EMSolve is a provably stable, charge conserving, and energy
conserving solver for Maxwell's equations.<br>
&nbsp;</dd>
<dt><b><a href="http://cern.ch/gaudi">Gaudi</a></b> and <b><a href=
"http://cern.ch/Gaudi/RootPython/">RootPython</a></b></dt>
<dd>
Gaudi is a framework for particle physics collision data processing
applications developed in the context of the LHCb and ATLAS experiments
at CERN.
<p><a href="mailto:Pere.Mato@cern.ch">Pere Mato Vila</a> writes:</p>
<blockquote>
We are using Boost.Python to provide scripting/interactive capability
to our framework. We have a module called "GaudiPython" implemented
using Boost.Python that allows the interaction with any framework
service or algorithm from python. RootPython also uses Boost.Python
to provide a generic "gateway" between the <a href=
"http://root.cern.ch">ROOT</a> framework and python
<p>Boost.Python is great. We managed very quickly to interface our
framework to python, which is great language. We are trying to
facilitate to our physicists (end-users) a rapid analysis application
development environment based on python. For that, Boost.Python plays
and essential role.</p>
</blockquote>
</dd>
<dt><b><a href="http://www.esss.com.br">ESSS</a></b></dt>
<dd>
ESSS (Engineering Simulation and Scientific Software) is a company that
provides engineering solutions and acts in the brazilian and
south-american market providing products and services related to
Computational Fluid Dynamics and Image Analysis.
<p><a href="mailto:bruno@esss.com.br">Bruno da Silva de Oliveira</a>
writes:</p>
<blockquote>
Recently we moved our work from working exclusively with C++ to an
hybrid-language approach, using Python and C++, with Boost.Python
providing the layer between the two. The results are great so far!
</blockquote>
<p>Two projects have been developed so far with this technology:</p>
<p><b><a href=
"http://www.esss.com.br/index.php?pg=dev_projetos">Simba</a></b>
provides 3D visualization of geological formations gattered from the
simulation of the evolution of oil systems, allowing the user to
analyse various aspects of the simulation, like deformation, pressure
and fluids, along the time of the simulation.</p>
<p><b><a href=
"http://www.esss.com.br/index.php?pg=dev_projetos">Aero</a></b> aims to
construct a CFD with brazilian technology, which involves various
companies and universities. ESSS is responsible for various of the
application modules, including GUI and post-processing of results.</p>
</dd>
<dt><b><a href="http://www.rationaldiscovery.com">Rational Discovery
LLC</a></b></dt>
<dd>
Rational Discovery provides computational modeling, combinatorial
library design and custom software development services to the
pharmaceutical, biotech and chemical industries. We do a substantial
amount of internal research to develop new approaches for applying
machine-learning techniques to solve chemical problems. Because we're a
small organization and chemistry is a large and complex field, it is
essential that we be able to quickly and easily prototype and test new
algorithms.
<p>For our internal software, we implement core data structures in C
and expose them to Python using Boost.Python. Algorithm development is
done in Python and then translated to C if required (often it's not).
This hybrid development approach not only greatly increases our
productivity, but it also allows "non-developers" (people without C
experience) to take part in method development. Learning C is a
daunting task, but "Python fits your brain." (Thanks to Bruce Eckel for
the quote.)</p>
</dd>
</dl>
<h3>Systems Libraries</h3>
<dl>
<dt><a href="http://itamarst.org/software"><b>Fusion</b></a></dt>
<dd>
<p>Fusion is a library that supports implementing protocols in C++ for
use with Twisted, allowing control over memory allocation strategies,
fast method calls internally, etc.. Fusion supports TCP, UDP and
multicast, and is implemented using the Boost.Python python
bindings.</p>
<p>Fusion is licensed under the MIT license, and available for download
from <a href=
"http://itamarst.org/software">http://itamarst.org/software</a>.</p>
</dd>
</dl>
<h3>Tools</h3>
<dl>
<dt><a href="http://www.jayacard.org"><b>Jayacard</b></a></dt>
<dd>
Jayacard aims at developing a secure portable open source operating
system for contactless smart cards and a complete suite of high quality
development tools to ease smart card OS and application development.
<p>The core of the smart card reader management is written in C++ but
all the development tools are written in the friendly Python language.
Boost plays the fundamental role of binding the tools to our core smart
card reader library.</p>
</dd>
</dl>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
15 July, 2003</p>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave
Abrahams</a> 2002-2003.</i></p>
</body>
</html>

View File

@@ -1,106 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<title>Rich Comparisons</title>
<div>
<img src="../../../c++boost.gif"
alt="c++boost.gif (8819 bytes)"
align="center"
width="277" height="86">
<hr>
<h1>Rich Comparisons</h1>
<hr>
In Python versions up to and including Python 2.0, support for
implementing comparisons on user-defined classes and extension types
was quite simple. Classes could implement a <tt>__cmp__</tt> method
that was given two instances of a class as arguments, and could only
return <tt>0</tt> if they were equal or <tt>+1</tt> or <tt>-1</tt> if
they were not. The method could not raise an exception or return
anything other than an integer value.
In Python 2.1, <b>Rich Comparisons</b> were added (see
<a href="http://python.sourceforge.net/peps/pep-0207.html">PEP 207</a>).
Python classes can now individually overload each of the &lt;, &lt;=,
&gt;, &gt;=, ==, and != operations.
<p>
For more detailed information, search for "rich comparison"
<a href="http://www.python.org/doc/current/ref/customization.html"
>here</a>.
<p>
Boost.Python supports both automatic overloading and manual overloading
of the Rich Comparison operators. The <b>compile-time</b> support is
independent of the Python version that is used when compiling
Boost.Python extension modules. That is, <tt>op_lt</tt> for example can
always be used, and the C++ <tt>operator&lt;</tt> will always be bound
to the Python method <tt>__lt__</tt>. However, the <b>run-time</b>
behavior will depend on the Python version.
<p>
With Python versions before 2.1, the Rich Comparison operators will not
be called by Python when any of the six comparison operators
(<tt>&lt;</tt>, <tt>&lt;=</tt>, <tt>==</tt>, <tt>!=</tt>,
<tt>&gt;</tt>, <tt>&gt;=</tt>) is used in an expression. The only way
to access the corresponding methods is to call them explicitly, e.g.
<tt>a.__lt__(b)</tt>. Only with Python versions 2.1 or higher will
expressions like <tt>a &lt; b</tt> work as expected.
<p>
To support Rich Comparisions, the Python C API was modified between
Python versions 2.0 and 2.1. A new slot was introduced in the
<tt>PyTypeObject</tt> structure: <tt>tp_richcompare</tt>. For backwards
compatibility, a flag (<tt>Py_TPFLAGS_HAVE_RICHCOMPARE</tt>) has to be
set to signal to the Python interpreter that Rich Comparisions are
supported by a particular type.
There is only one flag for all the six comparison operators.
When any of the six operators is wrapped automatically or
manually, Boost.Python will set this flag. Attempts to use comparison
operators at the Python level that are not defined at the C++ level
will then lead to an <tt>AttributeError</tt> when the Python 2.1
(or higher) interpreter tries, e.g., <tt>a.__lt__(b)</tt>. That
is, in general all six operators should be supplied. Automatically
wrapped operators and manually wrapped operators can be mixed. For
example:<pre>
boost::python::class_builder&lt;code&gt; py_code(this_module, "code");
py_code.def(boost::python::constructor&lt;&gt;());
py_code.def(boost::python::constructor&lt;int&gt;());
py_code.def(boost::python::operators&lt;( boost::python::op_eq
| boost::python::op_ne)&gt;());
py_code.def(NotImplemented, "__lt__");
py_code.def(NotImplemented, "__le__");
py_code.def(NotImplemented, "__gt__");
py_code.def(NotImplemented, "__ge__");
</pre>
<tt>NotImplemented</tt> is a simple free function that (currently) has
to be provided by the user. For example:<pre>
boost::python::ref
NotImplemented(const code&amp;, const code&amp;) {
return
boost::python::ref(Py_NotImplemented, boost::python::ref::increment_count);
}
</pre>
See also:
<ul>
<li><a href="../example/richcmp1.cpp"><tt>../example/richcmp1.cpp</tt></a>
<li><a href="../example/richcmp2.cpp"><tt>../example/richcmp2.cpp</tt></a>
<li><a href="../example/richcmp3.cpp"><tt>../example/richcmp3.cpp</tt></a>
</ul>
<hr>
&copy; Copyright Nicholas K. Sauter &amp; Ralf W. Grosse-Kunstleve 2001.
Permission to copy, use, modify, sell and distribute this document is
granted provided this copyright notice appears in all copies. This
document is provided "as is" without express or implied warranty, and
with no claim as to its suitability for any purpose.
<p>
Updated: July 2001
</div>

View File

@@ -1,973 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<title>
Special Method and Operator Support
</title>
<div>
<h1>
<img width="277" height="86" id="_x0000_i1025" align="middle" src=
"../../../c++boost.gif" alt="c++boost.gif (8819 bytes)">Special Method and
Operator Support
</h1>
<h2>
Overview
</h2>
<p>
Boost.Python supports all of the standard <a href=
"http://www.python.org/doc/current/ref/specialnames.html">
special method names</a> supported by real Python class instances <em>
except</em> <code>__complex__</code> (more on the reasons <a href=
"#reasons">below</a>). In addition, it can quickly and easily expose
suitable C++ functions and operators as Python operators. The following
categories of special method names are supported:
<ul>
<li><a href="#general">Basic Customization</a>
<li><a href="#numeric">Numeric Operators</a>
<li><a href="#sequence_and_mapping">Sequence and Mapping protocols</a>
<li><a href="#getter_setter">Attribute Getters and Setters</a>
</ul>
<h2><a name="general">Basic Customization</a></h2>
<p>
Python provides a number of special operators for basic customization of a
class. Only a brief description is provided below; more complete
documentation can be found <a
href="http://www.python.org/doc/current/ref/customization.html">here</a>.
<dl>
<dt>
<b><tt class='method'>__init__</tt></b>(<i>self</i>)
<dd>
Initialize the class instance. For extension classes not subclassed in
Python, <code> __init__</code> is defined by
<pre> my_class.def(boost::python::constructor<...>())</pre>
(see section <a href="example1.html">"A Simple Example Using Boost.Python"</a>).<p>
<dt>
<b><tt class='method'>__del__</tt></b>(<i>self</i>)
<dd>
Called when the extension instance is about to be destroyed. For extension classes
not subclassed in Python, <code> __del__</code> is always defined automatically by
means of the class' destructor.
<dt>
<b><tt class='method'>__repr__</tt></b>(<i>self</i>)
<dd>
Create a string representation from which the object can be
reconstructed.
<dt>
<b><tt class='method'>__str__</tt></b>(<i>self</i>)
<dd>
Create a string representation which is suitable for printing.
<dt>
<b><tt class='method'>__lt__</tt></b>(<i>self, other</i>)
<dt>
<b><tt class='method'>__le__</tt></b>(<i>self, other</i>)
<dt>
<b><tt class='method'>__eq__</tt></b>(<i>self, other</i>)
<dt>
<b><tt class='method'>__ne__</tt></b>(<i>self, other</i>)
<dt>
<b><tt class='method'>__gt__</tt></b>(<i>self, other</i>)
<dt>
<b><tt class='method'>__ge__</tt></b>(<i>self, other</i>)
<dd>
Rich Comparison methods.
New in Python 2.1.
See <a href="richcmp.html">Rich Comparisons</a>.
<dt>
<b><tt class='method'>__cmp__</tt></b>(<i>self, other</i>)
<dd>
Three-way compare function.
See <a href="richcmp.html">Rich Comparisons</a>.
<dt>
<b><tt class='method'>__hash__</tt></b>(<i>self</i>)
<dd>
Called for the key object for dictionary operations, and by the
built-in function hash(). Should return a 32-bit integer usable as a
hash value for dictionary operations (only allowed if __cmp__ is also
defined)
<dt>
<b><tt class='method'>__nonzero__</tt></b>(<i>self</i>)
<dd>
called if the object is used as a truth value (e.g. in an if
statement)
<dt>
<b><tt class='method'>__call__</tt></b> (<var>self</var><big>[</big><var>, args...</var><big>]</big>)
<dd>
Called when the instance is ``called'' as a function; if this method
is defined, <code><var>x</var>(arg1, arg2, ...)</code> is a shorthand for
<code><var>x</var>.__call__(arg1, arg2, ...)</code>.
</dl>
If we have a suitable C++ function that supports any of these features,
we can export it like any other function, using its Python special name.
For example, suppose that class <code>Foo</code> provides a string
conversion function:
<blockquote><pre>
std::string to_string(Foo const&amp; f)
{
std::ostringstream s;
s &lt;&lt; f;
return s.str();
}
</pre></blockquote>
This function would be wrapped like this:
<blockquote><pre>
boost::python::class_builder&lt;Foo&gt; foo_class(my_module, "Foo");
foo_class.def(&amp;to_string, "__str__");
</pre></blockquote>
Note that Boost.Python also supports <em>automatic wrapping</em> of
<code>__str__</code> and <code>__cmp__</code>. This is explained in the <a
href="#numeric">next section</a> and the <a href="#numeric_table">Table of
Automatically Wrapped Methods</a>.
<h2><a name="numeric">Numeric Operators</a></h2>
<p>
Numeric operators can be exposed manually, by <code>def</code>ing C++
[member] functions that support the standard Python <a
href="http://www.python.org/doc/current/ref/numeric-types.html">numeric
protocols</a>. This is the same basic technique used to expose
<code>to_string()</code> as <code>__str__()</code> above, and is <a
href="#numeric_manual">covered in detail below</a>. Boost.Python also supports
<i>automatic wrapping</i> of numeric operators whenever they have already
been defined in C++.
<h3><a name="numeric_auto">Exposing C++ Operators Automatically</a></h3>
<p>
Supose we wanted to expose a C++ class
<code>BigNum</code> which supports addition. That is, in C++ we can write:
<blockquote><pre>
BigNum a, b, c;
...
c = a + b;
</pre></blockquote>
<p>
To enable the same functionality in Python, we first wrap the <code>
BigNum</code> class as usual:
<blockquote><pre>
boost::python::class_builder&lt;BigNum&gt; bignum_class(my_module, "BigNum");
bignum_class.def(boost::python::constructor&lt;&gt;());
...
</pre></blockquote>
Then we export the addition operator like this:
<blockquote><pre>
bignum_class.def(boost::python::operators&lt;boost::python::op_add&gt;());
</pre></blockquote>
Since BigNum also supports subtraction, multiplication, and division, we
want to export those also. This can be done in a single command by
``or''ing the operator identifiers together (a complete list of these
identifiers and the corresponding operators can be found in the <a href=
"#numeric_table">Table of Automatically Wrapped Methods</a>):
<blockquote><pre>
bignum_class.def(boost::python::operators&lt;(boost::python::op_sub | boost::python::op_mul | boost::python::op_div)&gt;());
</pre></blockquote>
[Note that the or-expression must be enclosed in parentheses.]
<p>This form of operator definition can be used to wrap unary and
homogeneous binary operators (a <i>homogeneous</i> operator has left and
right operands of the same type). Now suppose that our C++ library also
supports addition of BigNums and plain integers:
<blockquote><pre>
BigNum a, b;
int i;
...
a = b + i;
a = i + b;
</pre></blockquote>
To wrap these heterogeneous operators, we need to specify a different type for
one of the operands. This is done using the <code>right_operand</code>
and <code>left_operand</code> templates:
<blockquote><pre>
bignum_class.def(boost::python::operators&lt;boost::python::op_add&gt;(), boost::python::right_operand&lt;int&gt;());
bignum_class.def(boost::python::operators&lt;boost::python::op_add&gt;(), boost::python::left_operand&lt;int&gt;());
</pre></blockquote>
Boost.Python uses overloading to register several variants of the same
operation (more on this in the context of <a href="#coercion">
coercion</a>). Again, several operators can be exported at once:
<blockquote><pre>
bignum_class.def(boost::python::operators&lt;(boost::python::op_sub | boost::python::op_mul | boost::python::op_div)&gt;(),
boost::python::right_operand&lt;int&gt;());
bignum_class.def(boost::python::operators&lt;(boost::python::op_sub | boost::python::op_mul | boost::python::op_div)&gt;(),
boost::python::left_operand&lt;int&gt;());
</pre></blockquote>
The type of the operand not mentioned is taken from the class being wrapped. In
our example, the class object is <code>bignum_class</code>, and thus the
other operand's type is ``<code>BigNum const&amp;</code>''. You can override
this default by explicitly specifying a type in the <code>
operators</code> template:
<blockquote><pre>
bignum_class.def(boost::python::operators&lt;boost::python::op_add, BigNum&gt;(), boost::python::right_operand&lt;int&gt;());
</pre></blockquote>
<p>
Note that automatic wrapping uses the <em>expression</em>
``<code>left + right</code>'' and can be used uniformly
regardless of whether the C++ operators are supplied as free functions
<blockquote><pre>
BigNum operator+(BigNum, BigNum)
</pre></blockquote>
or as member functions
<blockquote><pre>
BigNum::operator+(BigNum).
</pre></blockquote>
<p>
For the Python built-in functions <code>pow()</code> and
<code>abs()</code>, there is no corresponding C++ operator. Instead,
automatic wrapping attempts to wrap C++ functions of the same name. This
only works if those functions are known in namespace
<code>python</code>. On some compilers (e.g. MSVC) it might be
necessary to add a using declaration prior to wrapping:
<blockquote><pre>
namespace boost { namespace python {
using my_namespace::pow;
using my_namespace::abs;
}
</pre></blockquote>
<h3><a name="numeric_manual">Wrapping Numeric Operators Manually</a></h3>
<p>
In some cases, automatic wrapping of operators may be impossible or
undesirable. Suppose, for example, that the modulo operation for BigNums
is defined by a set of functions called <code>mod()</code>:
<blockquote><pre>
BigNum mod(BigNum const&amp; left, BigNum const&amp; right);
BigNum mod(BigNum const&amp; left, int right);
BigNum mod(int left, BigNum const&amp; right);
</pre></blockquote>
<p>
For automatic wrapping of the modulo function, <code>operator%()</code> would be needed.
Therefore, the <code>mod()</code>-functions must be wrapped manually. That is, we have
to export them explicitly with the Python special name "__mod__":
<blockquote><pre>
bignum_class.def((BigNum (*)(BigNum const&amp;, BigNum const&amp;))&amp;mod, "__mod__");
bignum_class.def((BigNum (*)(BigNum const&amp;, int))&amp;mod, "__mod__");
</pre></blockquote>
<p>
The third form of <code>mod()</code> (with <code>int</code> as left operand) cannot
be wrapped directly. We must first create a function <code>rmod()</code> with the
operands reversed:
<blockquote><pre>
BigNum rmod(BigNum const&amp; right, int left)
{
return mod(left, right);
}
</pre></blockquote>
This function must be wrapped under the name "__rmod__" (standing for "reverse mod"):
<blockquote><pre>
bignum_class.def(&amp;rmod, "__rmod__");
</pre></blockquote>
Many of the possible operator names can be found in the <a href=
"#numeric_table">Table of Automatically Wrapped Methods</a>. Special treatment is
necessary to export the <a href="#ternary_pow">ternary pow</a> operator.
<p>
Automatic and manual wrapping can be mixed arbitrarily. Note that you
cannot overload the same operator for a given extension class on both
``<code>int</code>'' and ``<code>float</code>'', because Python implicitly
converts these types into each other. Thus, the overloaded variant
found first (be it ``<code>int</code>`` or ``<code>float</code>'') will be
used for either of the two types.
<h3><a name="inplace">Inplace Operators</a></h3>
<p>
Boost.Python can also be used to expose inplace numeric operations
(i.e., <code>+=</code> and so forth). These operators must be wrapped
manually, as described in the previous section. For example, suppose
the class BigNum has an <code>operator+=</code>:
<blockquote><pre>
BigNum& operator+= (BigNum const&amp; right);
</pre></blockquote>
This can be exposed by first writing a wrapper function:
<blockquote><pre>
BigNum& iadd (BigNum&amp; self, const BigNum&amp; right)
{
return self += right;
}
</pre></blockquote>
and then exposing the wrapper with
<blockquote><pre>
bignum_class.def(&amp;iadd, "__iadd__");
</pre></blockquote>
<h3><a name="coercion">Coercion</a></h3>
Plain Python can only execute operators with identical types on the left
and right hand side. If it encounters an expression where the types of
the left and right operand differ, it tries to coerce these types to a
common type before invoking the actual operator. Implementing good
coercion functions can be difficult if many type combinations must be
supported.
<p>
Boost.Python solves this problem the same way that C++ does: with <em><a
href="overloading.html">overloading</a></em>. This technique drastically
simplifies the code neccessary to support operators: you just register
operators for all desired type combinations, and Boost.Python automatically
ensures that the correct function is called in each case; there is no
need for user-defined coercion functions. To enable operator
overloading, Boost.Python provides a standard coercion which is <em>implicitly
registered</em> whenever automatic operator wrapping is used.
<p>
If you wrap all operator functions manually, but still want to use
operator overloading, you have to register the standard coercion
function explicitly:
<blockquote><pre>
// this is not necessary if automatic operator wrapping is used
bignum_class.def_standard_coerce();
</pre></blockquote>
If you encounter a situation where you absolutely need a customized
coercion, you can still define the "__coerce__" operator manually. The signature
of a coercion function should look like one of the following (the first is
the safest):
<blockquote><pre>
boost::python::tuple custom_coerce(boost::python::reference left, boost::python::reference right);
boost::python::tuple custom_coerce(PyObject* left, PyObject* right);
PyObject* custom_coerce(PyObject* left, PyObject* right);
</pre></blockquote>
The resulting <code>tuple</code> must contain two elements which
represent the values of <code>left</code> and <code>right</code>
converted to the same type. Such a function is wrapped as usual:
<blockquote><pre>
// this must be called before any use of automatic operator
// wrapping or a call to some_class.def_standard_coerce()
some_class.def(&amp;custom_coerce, "__coerce__");
</pre></blockquote>
Note that the standard coercion (defined by use of automatic
operator wrapping on a <code>class_builder</code> or a call to
<code>class_builder::def_standard_coerce()</code>) will never be applied if
a custom coercion function has been registered. Therefore, in
your coercion function you should call
<blockquote><pre>
boost::python::standard_coerce(left, right);
</pre></blockquote>
for all cases that you don't want to handle yourself.
<h3><a name="ternary_pow">The Ternary <code>pow()</code> Operator</a></h3>
<p>
In addition to the usual binary <code>pow(x, y)</code> operator (meaning
<i>x<sup>y</sup></i>), Python also provides a ternary variant that implements
<i>x<sup>y</sup> <b>mod</b> z</i>, presumably using a more efficient algorithm than
concatenation of power and modulo operators. Automatic operator wrapping
can only be used with the binary variant. Ternary <code>pow()</code> must
always be wrapped manually. For a homgeneous ternary <code>pow()</code>,
this is done as usual:
<blockquote><pre>
BigNum power(BigNum const&amp; first, BigNum const&amp; second, BigNum const&amp; modulus);
typedef BigNum (ternary_function1)(const BigNum&amp;, const BigNum&amp;, const BigNum&amp;);
...
bignum_class.def((ternary_function1)&amp;power, "__pow__");
</pre></blockquote>
If you want to support this function with non-uniform argument
types, wrapping is a little more involved. Suppose you have to wrap:
<blockquote><pre>
BigNum power(BigNum const&amp; first, int second, int modulus);
BigNum power(int first, BigNum const&amp; second, int modulus);
BigNum power(int first, int second, BigNum const&amp; modulus);
</pre></blockquote>
The first variant can be wrapped as usual:
<blockquote><pre>
typedef BigNum (ternary_function2)(const BigNum&amp;, int, int);
bignum_class.def((ternary_function2)&amp;power, "__pow__");
</pre></blockquote>
In the second variant, however, <code>BigNum</code> appears only as second
argument, and in the last one it's the third argument. These functions
must be presented to Boost.Python such that that the <code>BigNum</code>
argument appears in first position:
<blockquote><pre>
BigNum rpower(BigNum const&amp; second, int first, int modulus)
{
return power(first, second, modulus);
}
BigNum rrpower(BigNum const&amp; modulus, int first, int second)
{
return power(first, second, modulus);
}
</pre></blockquote>
<p>These functions must be wrapped under the names "__rpow__" and "__rrpow__"
respectively:
<blockquote><pre>
bignum_class.def((ternary_function2)&amp;rpower, "__rpow__");
bignum_class.def((ternary_function2)&amp;rrpower, "__rrpow__");
</pre></blockquote>
Note that "__rrpow__" is an extension not present in plain Python.
<h2><a name="numeric_table">Table of Automatically Wrapped Methods</a></h2>
<p>
Boost.Python can automatically wrap the following <a href=
"http://www.python.org/doc/current/ref/specialnames.html">
special methods</a>:
<p>
<table summary="special numeric methods" cellpadding="5" border="1"
width="100%">
<tr>
<td align="center">
<b>Python Operator Name</b>
<td align="center">
<b>Python Expression</b>
<td align="center">
<b>C++ Operator Id</b>
<td align="center">
<b>C++ Expression Used For Automatic Wrapping</b><br>
with <code>cpp_left = from_python(left,
type&lt;Left&gt;())</code>,<br>
<code>cpp_right = from_python(right,
type&lt;Right&gt;())</code>,<br>
and <code>cpp_oper = from_python(oper, type&lt;Oper&gt;())</code>
<tr>
<td>
<code>__add__, __radd__</code>
<td>
<code>left + right</code>
<td>
<code>op_add</code>
<td>
<code>cpp_left + cpp_right</code>
<tr>
<td>
<code>__sub__, __rsub__</code>
<td>
<code>left - right</code>
<td>
<code>op_sub</code>
<td>
<code>cpp_left - cpp_right</code>
<tr>
<td>
<code>__mul__, __rmul__</code>
<td>
<code>left * right</code>
<td>
<code>op_mul</code>
<td>
<code>cpp_left * cpp_right</code>
<tr>
<td>
<code>__div__, __rdiv__</code>
<td>
<code>left / right</code>
<td>
<code>op_div</code>
<td>
<code>cpp_left / cpp_right</code>
<tr>
<td>
<code>__mod__, __rmod__</code>
<td>
<code>left % right</code>
<td>
<code>op_mod</code>
<td>
<code>cpp_left % cpp_right</code>
<tr>
<td>
<code>__divmod__, __rdivmod__</code>
<td>
<code>(quotient, remainder)<br>
= divmod(left, right)</code>
<td>
<code>op_divmod</code>
<td>
<code>cpp_left / cpp_right</code>
<br><code>cpp_left % cpp_right</code>
<tr>
<td>
<code>__pow__, __rpow__</code>
<td>
<code>pow(left, right)</code><br>
(binary power)
<td>
<code>op_pow</code>
<td>
<code>pow(cpp_left, cpp_right)</code>
<tr>
<td>
<code>__rrpow__</code>
<td>
<code>pow(left, right, modulo)</code><br>
(ternary power modulo)
<td colspan="2">
no automatic wrapping, <a href="#ternary_pow">special treatment</a>
required
<tr>
<td>
<code>__lshift__, __rlshift__</code>
<td>
<code>left &lt;&lt; right</code>
<td>
<code>op_lshift</code>
<td>
<code>cpp_left &lt;&lt; cpp_right</code>
<tr>
<td>
<code>__rshift__, __rrshift__</code>
<td>
<code>left &gt;&gt; right</code>
<td>
<code>op_rshift</code>
<td>
<code>cpp_left &gt;&gt; cpp_right</code>
<tr>
<td>
<code>__and__, __rand__</code>
<td>
<code>left &amp; right</code>
<td>
<code>op_and</code>
<td>
<code>cpp_left &amp; cpp_right</code>
<tr>
<td>
<code>__xor__, __rxor__</code>
<td>
<code>left ^ right</code>
<td>
<code>op_xor</code>
<td>
<code>cpp_left ^ cpp_right</code>
<tr>
<td>
<code>__or__, __ror__</code>
<td>
<code>left | right</code>
<td>
<code>op_or</code>
<td>
<code>cpp_left | cpp_right</code>
<tr>
<td>
<code>__cmp__, __rcmp__</code>
<td>
<code>cmp(left, right)</code><br>
<br>See <a href="richcmp.html">Rich Comparisons</a>.
<td>
<code>op_cmp</code>
<td>
<code>cpp_left &lt; cpp_right </code>
<br><code>cpp_right &lt; cpp_left</code>
<tr>
<td>
<code>__lt__</code>
<br><code>__le__</code>
<br><code>__eq__</code>
<br><code>__ne__</code>
<br><code>__gt__</code>
<br><code>__ge__</code>
<td>
<code>left &lt; right</code>
<br><code>left &lt;= right</code>
<br><code>left == right</code>
<br><code>left != right</code>
<br><code>left &gt; right</code>
<br><code>left &gt;= right</code>
<br>See <a href="richcmp.html">Rich Comparisons</a>
<td>
<code>op_lt</code>
<br><code>op_le</code>
<br><code>op_eq</code>
<br><code>op_ne</code>
<br><code>op_gt</code>
<br><code>op_ge</code>
<td>
<code>cpp_left &lt; cpp_right </code>
<br><code>cpp_left &lt;= cpp_right </code>
<br><code>cpp_left == cpp_right </code>
<br><code>cpp_left != cpp_right </code>
<br><code>cpp_left &gt; cpp_right </code>
<br><code>cpp_left &gt;= cpp_right </code>
<tr>
<td>
<code>__neg__</code>
<td>
<code>-oper </code> (unary negation)
<td>
<code>op_neg</code>
<td>
<code>-cpp_oper</code>
<tr>
<td>
<code>__pos__</code>
<td>
<code>+oper </code> (identity)
<td>
<code>op_pos</code>
<td>
<code>+cpp_oper</code>
<tr>
<td>
<code>__abs__</code>
<td>
<code>abs(oper) </code> (absolute value)
<td>
<code>op_abs</code>
<td>
<code>abs(cpp_oper)</code>
<tr>
<td>
<code>__invert__</code>
<td>
<code>~oper </code> (bitwise inversion)
<td>
<code>op_invert</code>
<td>
<code>~cpp_oper</code>
<tr>
<td>
<code>__int__</code>
<td>
<code>int(oper) </code> (integer conversion)
<td>
<code>op_int</code>
<td>
<code>long(cpp_oper)</code>
<tr>
<td>
<code>__long__</code>
<td>
<code>long(oper) </code><br>
(infinite precision integer conversion)
<td>
<code>op_long</code>
<td>
<code>PyLong_FromLong(cpp_oper)</code>
<tr>
<td>
<code>__float__</code>
<td>
<code>float(oper) </code> (float conversion)
<td>
<code>op_float</code>
<td>
<code>double(cpp_oper)</code>
<tr>
<td>
<code>__str__</code>
<td>
<code>str(oper) </code> (string conversion)
<td>
<code>op_str</code>
<td>
<code>std::ostringstream s; s &lt;&lt; oper;</code>
<tr>
<td>
<code>__coerce__</code>
<td>
<code>coerce(left, right)</code>
<td colspan="2">
usually defined automatically, otherwise <a href="#coercion">
special treatment</a> required
</table>
<h2><a name="sequence_and_mapping">Sequence and Mapping Operators</a></h2>
<p>
Sequence and mapping operators let wrapped objects behave in accordance
to Python's iteration and access protocols. These protocols differ
considerably from the ones found in C++. For example, Python's typical
iteration idiom looks like
<blockquote><pre>
for i in S:
</pre></blockquote>
while in C++ one writes
<blockquote><pre>
for (iterator i = S.begin(), end = S.end(); i != end; ++i)
</pre></blockquote>
<p>One could try to wrap C++ iterators in order to carry the C++ idiom into
Python. However, this does not work very well because
<ol>
<li>It leads to
non-uniform Python code (wrapped sequences support a usage different from
Python built-in sequences) and
<li>Iterators (e.g. <code>std::vector::iterator</code>) are often implemented as plain C++
pointers which are <a href="pointers.html#problem">problematic</a> for any automatic
wrapping system.
</ol>
<p>
It is a better idea to support the standard <a
href="http://www.python.org/doc/current/ref/sequence-types.html">Python
sequence and mapping protocols</a> for your wrapped containers. These
operators have to be wrapped manually because there are no corresponding
C++ operators that could be used for automatic wrapping. The Python
documentation lists the relevant <a href=
"http://www.python.org/doc/current/ref/sequence-types.html">
container operators</a>. In particular, expose __getitem__, __setitem__
and remember to raise the appropriate Python exceptions
(<code>PyExc_IndexError</code> for sequences,
<code>PyExc_KeyError</code> for mappings) when the requested item is not
present.
<p>
In the following example, we expose <code>std::map&lt;std::size_t,std::string&gt;</code>:
<blockquote>
<pre>
typedef std::map&lt;std::size_t, std::string&gt; StringMap;
// A helper function for dealing with errors. Throw a Python exception
// if p == m.end().
void throw_key_error_if_end(
const StringMap&amp; m,
StringMap::const_iterator p,
std::size_t key)
{
if (p == m.end())
{
PyErr_SetObject(PyExc_KeyError, boost::python::converters::to_python(key));
boost::python::throw_error_already_set();
}
}
// Define some simple wrapper functions which match the Python protocol
// for __getitem__, __setitem__, and __delitem__. Just as in Python, a
// free function with a ``self'' first parameter makes a fine class method.
const std::string&amp; get_item(const StringMap&amp; self, std::size_t key)
{
const StringMap::const_iterator p = self.find(key);
throw_key_error_if_end(self, p, key);
return p-&gt;second;
}
// Sets the item corresponding to key in the map.
void StringMapPythonClass::set_item(StringMap&amp; self, std::size_t key, const std::string&amp; value)
{
self[key] = value;
}
// Deletes the item corresponding to key from the map.
void StringMapPythonClass::del_item(StringMap&amp; self, std::size_t key)
{
const StringMap::iterator p = self.find(key);
throw_key_error_if_end(self, p, key);
self.erase(p);
}
class_builder&lt;StringMap&gt; string_map(my_module, "StringMap");
string_map.def(boost::python::constructor&lt;&gt;());
string_map.def(&amp;StringMap::size, "__len__");
string_map.def(get_item, "__getitem__");
string_map.def(set_item, "__setitem__");
string_map.def(del_item, "__delitem__");
</pre>
</blockquote>
<p>
Then in Python:
<blockquote>
<pre>
&gt;&gt;&gt; m = StringMap()
&gt;&gt;&gt; m[1]
Traceback (innermost last):
File "&lt;stdin&gt;", line 1, in ?
KeyError: 1
&gt;&gt;&gt; m[1] = 'hello'
&gt;&gt;&gt; m[1]
'hello'
&gt;&gt;&gt; del m[1]
&gt;&gt;&gt; m[1] # prove that it's gone
Traceback (innermost last):
File "&lt;stdin&gt;", line 1, in ?
KeyError: 1
&gt;&gt;&gt; del m[2]
Traceback (innermost last):
File "&lt;stdin&gt;", line 1, in ?
KeyError: 2
&gt;&gt;&gt; len(m)
0
&gt;&gt;&gt; m[0] = 'zero'
&gt;&gt;&gt; m[1] = 'one'
&gt;&gt;&gt; m[2] = 'two'
&gt;&gt;&gt; m[3] = 'three'
&gt;&gt;&gt; len(m)
4
</pre>
</blockquote>
<h2><a name="getter_setter">Customized Attribute Access</a></h2>
<p>
Just like built-in Python classes, Boost.Python extension classes support <a
href="http://www.python.org/doc/current/ref/attribute-access.html">special
the usual attribute access methods</a> <code>__getattr__</code>,
<code>__setattr__</code>, and <code>__delattr__</code>.
Because writing these functions can
be tedious in the common case where the attributes being accessed are
known statically, Boost.Python checks the special names
<ul>
<li>
<code>__getattr__<em>&lt;name&gt;</em>__</code>
<li>
<code>__setattr__<em>&lt;name&gt;</em>__</code>
<li>
<code>__delattr__<em>&lt;name&gt;</em>__</code>
</ul>
to provide functional access to the attribute <em>&lt;name&gt;</em>. This
facility can be used from C++ or entirely from Python. For example, the
following shows how we can implement a ``computed attribute'' in Python:
<blockquote>
<pre>
&gt;&gt;&gt; class Range(AnyBoost.PythonExtensionClass):
... def __init__(self, start, end):
... self.start = start
... self.end = end
... def __getattr__length__(self):
... return self.end - self.start
...
&gt;&gt;&gt; x = Range(3, 9)
&gt;&gt;&gt; x.length
6
</pre>
</blockquote>
<h4>
Direct Access to Data Members
</h4>
<p>
Boost.Python uses the special <code>
__xxxattr__<em>&lt;name&gt;</em>__</code> functionality described above
to allow direct access to data members through the following special
functions on <code>class_builder&lt;&gt;</code> and <code>
extension_class&lt;&gt;</code>:
<ul>
<li>
<code>def_getter(<em>pointer-to-member</em>, <em>name</em>)</code> //
read access to the member via attribute <em>name</em>
<li>
<code>def_setter(<em>pointer-to-member</em>, <em>name</em>)</code> //
write access to the member via attribute <em>name</em>
<li>
<code>def_readonly(<em>pointer-to-member</em>, <em>name</em>)</code>
// read-only access to the member via attribute <em>name</em>
<li>
<code>def_read_write(<em>pointer-to-member</em>, <em>
name</em>)</code> // read/write access to the member via attribute
<em>name</em>
</ul>
<p>
Note that the first two functions, used alone, may produce surprising
behavior. For example, when <code>def_getter()</code> is used, the
default functionality for <code>setattr()</code> and <code>
delattr()</code> remains in effect, operating on items in the extension
instance's name-space (i.e., its <code>__dict__</code>). For that
reason, you'll usually want to stick with <code>def_readonly</code> and
<code>def_read_write</code>.
<p>
For example, to expose a <code>std::pair&lt;int,long&gt;</code> we
might write:
<blockquote>
<pre>
typedef std::pair&lt;int,long&gt; Pil;
int first(const Pil&amp; x) { return x.first; }
long second(const Pil&amp; x) { return x.second; }
...
my_module.def(first, "first");
my_module.def(second, "second");
class_builder&lt;Pil&gt; pair_int_long(my_module, "Pair");
pair_int_long.def(boost::python::constructor&lt;&gt;());
pair_int_long.def(boost::python::constructor&lt;int,long&gt;());
pair_int_long.def_read_write(&amp;Pil::first, "first");
pair_int_long.def_read_write(&amp;Pil::second, "second");
</pre>
</blockquote>
<p>
Now your Python class has attributes <code>first</code> and <code>
second</code> which, when accessed, actually modify or reflect the
values of corresponding data members of the underlying C++ object. Now
in Python:
<blockquote>
<pre>
&gt;&gt;&gt; x = Pair(3,5)
&gt;&gt;&gt; x.first
3
&gt;&gt;&gt; x.second
5
&gt;&gt;&gt; x.second = 8
&gt;&gt;&gt; x.second
8
&gt;&gt;&gt; second(x) # Prove that we're not just changing the instance __dict__
8
</pre>
</blockquote>
<h2>
<a name="reasons">And what about <code>__complex__</code>?</a>
</h2>
<p>
That, dear reader, is one problem we don't know how to solve. The
Python source contains the following fragment, indicating the
special-case code really is hardwired:
<blockquote>
<pre>
/* XXX Hack to support classes with __complex__ method */
if (PyInstance_Check(r)) { ...
</pre>
</blockquote>
<p>
Next: <a href="under-the-hood.html">A Peek Under the Hood</a>
Previous: <a href="inheritance.html">Inheritance</a>
Up: <a href= "index.html">Top</a>
<p>
&copy; Copyright David Abrahams and Ullrich K&ouml;the 2000.
Permission to copy, use, modify, sell and distribute this document is
granted provided this copyright notice appears in all copies. This
document is provided ``as is'' without express or implied
warranty, and with no claim as to its suitability for any purpose.
<p>
Updated: Nov 26, 2000
</div>

74
doc/support.html Normal file
View File

@@ -0,0 +1,74 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Cygwin (vers 1st April 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="boost.css">
<title>Boost.Python - Support Resources</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="index.html">Boost.Python</a></h1>
<h2 align="center">Support Resources</h2>
</td>
</tr>
</table>
<hr>
<h2>Synopsis</h2>
<p>This is a list of available resources for support with Boost.Python
problems and feature requests. <b>Please try to resist emailing the
Boost.Python developers directly for support.</b> Use the following
resources instead; the developers are listening!</p>
<hr>
<dl class="page-index">
<dt><b><a href="http://www.boost-consulting.com">Boost
Consulting</a></b> - Commercial support, development, training, and
distribution for all the Boost libraries, from the people who brought
you Boost.Python.<br>
&nbsp;</dt>
<dt><b><a href=
"http://www.boost.org/more/mailing_lists.htm#cplussig">The Python
C++-sig</a></b> mailing list is a forum for discussing Python/C++
interoperability, and Boost.Python in particular. Post your
Boost.Python questions here.<br>
&nbsp;</dt>
<dt>The <b>Boost.Python <a href=
"http://www.python.org/cgi-bin/moinmoin/boost_2epython">Wiki
Pages</a></b> established by Mike Rovner as part of the <a href=
"http://www.python.org/cgi-bin/moinmoin">PythonInfo Wiki</a> serves as
a forum to gather peoples' experience and as a cookbook.<br>
&nbsp;</dt>
</dl>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
12 Sept, 2003 <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave
Abrahams</a> 2003.</i></p>
</body>
</html>

View File

@@ -0,0 +1,16 @@
# Copyright Joel de Guzman 2006. Distributed under the Boost
# Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
project boost/libs/python/doc/tutorial/doc ;
import boostbook : boostbook ;
using quickbook ;
boostbook tutorial
:
tutorial.qbk
:
<xsl:param>boost.root=../../../../../..
<xsl:param>boost.libraries=../../../../../../libs/libraries.htm
<xsl:param>html.stylesheet=../../../../../../doc/html/boostbook.css
;

Binary file not shown.

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

View File

@@ -0,0 +1,154 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Chapter 1. python 1.0</title>
<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="index.html" title="Chapter 1. python 1.0">
<link rel="next" href="python/hello.html" title=" Building Hello World">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../../more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="python/hello.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a></div>
<div class="chapter" lang="en">
<div class="titlepage"><div>
<div><h2 class="title">
<a name="python"></a>Chapter 1. python 1.0</h2></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Joel</span> <span class="surname">de Guzman</span>
</h3></div></div>
<div><div class="author"><h3 class="author">
<span class="firstname">David</span> <span class="surname">Abrahams</span>
</h3></div></div>
<div><p class="copyright">Copyright © 2002-2005 Joel
de Guzman, David Abrahams</p></div>
<div><div class="legalnotice">
<a name="id455917"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">
http://www.boost.org/LICENSE_1_0.txt </a>)
</p>
</div></div>
</div></div>
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="section"><a href="index.html#python.quickstart">QuickStart</a></span></dt>
<dt><span class="section"><a href="python/hello.html"> Building Hello World</a></span></dt>
<dt><span class="section"><a href="python/exposing.html"> Exposing Classes</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="python/exposing.html#python.constructors">Constructors</a></span></dt>
<dt><span class="section"><a href="python/exposing.html#python.class_data_members">Class Data Members</a></span></dt>
<dt><span class="section"><a href="python/exposing.html#python.class_properties">Class Properties</a></span></dt>
<dt><span class="section"><a href="python/exposing.html#python.inheritance">Inheritance</a></span></dt>
<dt><span class="section"><a href="python/exposing.html#python.class_virtual_functions">Class Virtual Functions</a></span></dt>
<dt><span class="section"><a href="python/exposing.html#python.virtual_functions_with_default_implementations">Virtual Functions with Default Implementations</a></span></dt>
<dt><span class="section"><a href="python/exposing.html#python.class_operators_special_functions">Class Operators/Special Functions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="python/functions.html">Functions</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="python/functions.html#python.call_policies">Call Policies</a></span></dt>
<dt><span class="section"><a href="python/functions.html#python.overloading">Overloading</a></span></dt>
<dt><span class="section"><a href="python/functions.html#python.default_arguments">Default Arguments</a></span></dt>
<dt><span class="section"><a href="python/functions.html#python.auto_overloading">Auto-Overloading</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="python/object.html"> Object Interface</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="python/object.html#python.basic_interface">Basic Interface</a></span></dt>
<dt><span class="section"><a href="python/object.html#python.derived_object_types">Derived Object types</a></span></dt>
<dt><span class="section"><a href="python/object.html#python.extracting_c___objects">Extracting C++ objects</a></span></dt>
<dt><span class="section"><a href="python/object.html#python.enums">Enums</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="python/embedding.html">Embedding</a></span></dt>
<dd><dl><dt><span class="section"><a href="python/embedding.html#python.using_the_interpreter">Using the interpreter</a></span></dt></dl></dd>
<dt><span class="section"><a href="python/iterators.html">Iterators</a></span></dt>
<dt><span class="section"><a href="python/exception.html"> Exception Translation</a></span></dt>
<dt><span class="section"><a href="python/techniques.html"> General Techniques</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="python/techniques.html#python.creating_packages">Creating Packages</a></span></dt>
<dt><span class="section"><a href="python/techniques.html#python.extending_wrapped_objects_in_python">Extending Wrapped Objects in Python</a></span></dt>
<dt><span class="section"><a href="python/techniques.html#python.reducing_compiling_time">Reducing Compiling Time</a></span></dt>
</dl></dd>
</dl>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="python.quickstart"></a>QuickStart</h2></div></div></div>
<p>
The Boost Python Library is a framework for interfacing Python and C++. It
allows you to quickly and seamlessly expose C++ classes functions and objects
to Python, and vice-versa, using no special tools -- just your C++ compiler.
It is designed to wrap C++ interfaces non-intrusively, so that you should not
have to change the C++ code at all in order to wrap it, making Boost.Python
ideal for exposing 3rd-party libraries to Python. The library's use of advanced
metaprogramming techniques simplifies its syntax for users, so that wrapping
code takes on the look of a kind of declarative interface definition language
(IDL).
</p>
<a name="quickstart.hello_world"></a><h2>
<a name="id385257"></a>
Hello World
</h2>
<p>
Following C/C++ tradition, let's start with the "hello, world". A
C++ Function:
</p>
<pre class="programlisting">
<span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">greet</span><span class="special">()</span>
<span class="special">{</span>
<span class="keyword">return</span> <span class="string">"hello, world"</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
can be exposed to Python by writing a Boost.Python wrapper:
</p>
<pre class="programlisting">
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">hello_ext</span><span class="special">)</span>
<span class="special">{</span>
<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">python</span><span class="special">;</span>
<span class="identifier">def</span><span class="special">(</span><span class="string">"greet"</span><span class="special">,</span> <span class="identifier">greet</span><span class="special">);</span>
<span class="special">}</span>
</pre>
<p>
That's it. We're done. We can now build this as a shared library. The resulting
DLL is now visible to Python. Here's a sample Python session:
</p>
<p>
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">import</span> <span class="identifier">hello_ext</span>
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">print</span> <span class="identifier">hello</span><span class="special">.</span><span class="identifier">greet</span><span class="special">()</span>
<span class="identifier">hello</span><span class="special">,</span> <span class="identifier">world</span>
</pre>
<p>
</p>
<div class="blockquote"><blockquote class="blockquote">
<p>
</p>
<p>
<span class="emphasis"><em><span class="bold"><b>Next stop... Building your Hello World
module from start to finish...</b></span></em></span>
</p>
<p>
</p>
</blockquote></div>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: November 07, 2007 at 03:34:24 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="python/hello.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a></div>
</body>
</html>

View File

@@ -0,0 +1,284 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Embedding</title>
<link rel="stylesheet" href="../../../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="../index.html" title="Chapter 1. python 1.0">
<link rel="up" href="../index.html" title="Chapter 1. python 1.0">
<link rel="prev" href="object.html" title=" Object Interface">
<link rel="next" href="iterators.html" title="Iterators">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../../../more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="object.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="iterators.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="python.embedding"></a>Embedding</h2></div></div></div>
<div class="toc"><dl><dt><span class="section"><a href="embedding.html#python.using_the_interpreter">Using the interpreter</a></span></dt></dl></div>
<p>
By now you should know how to use Boost.Python to call your C++ code from Python.
However, sometimes you may need to do the reverse: call Python code from the
C++-side. This requires you to <span class="emphasis"><em>embed</em></span> the Python interpreter
into your C++ program.
</p>
<p>
Currently, Boost.Python does not directly support everything you'll need when
embedding. Therefore you'll need to use the <a href="http://www.python.org/doc/current/api/api.html" target="_top">Python/C
API</a> to fill in the gaps. However, Boost.Python already makes embedding
a lot easier and, in a future version, it may become unnecessary to touch the
Python/C API at all. So stay tuned... <span class="inlinemediaobject"><img src="../images/smiley.png" alt="smiley"></span>
</p>
<a name="embedding.building_embedded_programs"></a><h2>
<a name="id471171"></a>
Building embedded programs
</h2>
<p>
To be able to embed python into your programs, you have to link to both Boost.Python's
as well as Python's own runtime library.
</p>
<p>
Boost.Python's library comes in two variants. Both are located in Boost's
<tt class="literal">/libs/python/build/bin-stage</tt> subdirectory. On Windows, the
variants are called <tt class="literal">boost_python.lib</tt> (for release builds)
and <tt class="literal">boost_python_debug.lib</tt> (for debugging). If you can't
find the libraries, you probably haven't built Boost.Python yet. See <a href="../../../../building.html" target="_top">Building and Testing</a> on how to do this.
</p>
<p>
Python's library can be found in the <tt class="literal">/libs</tt> subdirectory
of your Python directory. On Windows it is called pythonXY.lib where X.Y is
your major Python version number.
</p>
<p>
Additionally, Python's <tt class="literal">/include</tt> subdirectory has to be added
to your include path.
</p>
<p>
In a Jamfile, all the above boils down to:
</p>
<pre class="programlisting">projectroot c:\projects\embedded_program ; # location of the program
# bring in the rules for python
SEARCH on python.jam = $(BOOST_BUILD_PATH) ;
include python.jam ;
exe embedded_program # name of the executable
: #sources
embedded_program.cpp
: # requirements
&lt;find-library&gt;boost_python &lt;library-path&gt;c:\boost\libs\python
$(PYTHON_PROPERTIES)
&lt;library-path&gt;$(PYTHON_LIB_PATH)
&lt;find-library&gt;$(PYTHON_EMBEDDED_LIBRARY) ;
</pre>
<a name="embedding.getting_started"></a><h2>
<a name="id471276"></a>
Getting started
</h2>
<p>
Being able to build is nice, but there is nothing to build yet. Embedding the
Python interpreter into one of your C++ programs requires these 4 steps:
</p>
<div class="orderedlist"><ol type="1">
<li>
#include <tt class="literal">&lt;boost/python.hpp&gt;</tt>
</li>
<li>
Call <a href="http://www.python.org/doc/current/api/initialization.html#l2h-652" target="_top">Py_Initialize</a>()
to start the interpreter and create the <tt class="literal"><span class="underline">_main</span>_</tt>
module.
</li>
<li>
Call other Python C API routines to use the interpreter.
</li>
</ol></div>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/html/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td colspan="2" align="left" valign="top"><p>
<span class="bold"><b>Note that at this time you must not call <a href="http://www.python.org/doc/current/api/initialization.html#l2h-656" target="_top">Py_Finalize</a>()
to stop the interpreter. This may be fixed in a future version of boost.python.</b></span>
</p></td></tr>
</table></div>
<p>
(Of course, there can be other C++ code between all of these steps.)
</p>
<div class="blockquote"><blockquote class="blockquote">
<p>
</p>
<p>
<span class="emphasis"><em><span class="bold"><b>Now that we can embed the interpreter in
our programs, lets see how to put it to use...</b></span></em></span>
</p>
<p>
</p>
</blockquote></div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.using_the_interpreter"></a>Using the interpreter</h3></div></div></div>
<p>
As you probably already know, objects in Python are reference-counted. Naturally,
the <tt class="literal">PyObject</tt>s of the Python/C API are also reference-counted.
There is a difference however. While the reference-counting is fully automatic
in Python, the Python<span class="emphasis"><em>C API requires you to do it [@http:</em></span>/www.python.org/doc/current/api/refcounts.html
by hand]. This is messy and especially hard to get right in the presence
of C++ exceptions. Fortunately Boost.Python provides the <a href="../../../../v2/handle.html" target="_top">handle</a>
and <a href="../../../../v2/object.html" target="_top">object</a> class templates to
automate the process.
</p>
<a name="using_the_interpreter.running_python_code"></a><h2>
<a name="id471439"></a>
Running Python code
</h2>
<p>
Boost.python provides three related functions to run Python code from C++.
</p>
<pre class="programlisting">
<span class="identifier">object</span> <span class="identifier">eval</span><span class="special">(</span><span class="identifier">str</span> <span class="identifier">expression</span><span class="special">,</span> <span class="identifier">object</span> <span class="identifier">globals</span> <span class="special">=</span> <span class="identifier">object</span><span class="special">(),</span> <span class="identifier">object</span> <span class="identifier">locals</span> <span class="special">=</span> <span class="identifier">object</span><span class="special">())</span>
<span class="identifier">object</span> <span class="identifier">exec</span><span class="special">(</span><span class="identifier">str</span> <span class="identifier">code</span><span class="special">,</span> <span class="identifier">object</span> <span class="identifier">globals</span> <span class="special">=</span> <span class="identifier">object</span><span class="special">(),</span> <span class="identifier">object</span> <span class="identifier">locals</span> <span class="special">=</span> <span class="identifier">object</span><span class="special">())</span>
<span class="identifier">object</span> <span class="identifier">exec_file</span><span class="special">(</span><span class="identifier">str</span> <span class="identifier">filename</span><span class="special">,</span> <span class="identifier">object</span> <span class="identifier">globals</span> <span class="special">=</span> <span class="identifier">object</span><span class="special">(),</span> <span class="identifier">object</span> <span class="identifier">locals</span> <span class="special">=</span> <span class="identifier">object</span><span class="special">())</span>
</pre>
<p>
eval evaluates the given expression and returns the resulting value. exec
executes the given code (typically a set of statements) returning the result,
and exec_file executes the code contained in the given file.
</p>
<p>
The <tt class="literal">globals</tt> and <tt class="literal">locals</tt> parameters are
Python dictionaries containing the globals and locals of the context in which
to run the code. For most intents and purposes you can use the namespace
dictionary of the <tt class="literal"><span class="underline">_main</span>_</tt>
module for both parameters.
</p>
<p>
Boost.python provides a function to import a module:
</p>
<pre class="programlisting">
<span class="identifier">object</span> <span class="identifier">import</span><span class="special">(</span><span class="identifier">str</span> <span class="identifier">name</span><span class="special">)</span>
</pre>
<p>
import imports a python module (potentially loading it into the running process
first), and returns it.
</p>
<p>
Let's import the <tt class="literal"><span class="underline">_main</span>_</tt>
module and run some Python code in its namespace:
</p>
<pre class="programlisting">
<span class="identifier">object</span> <span class="identifier">main_module</span> <span class="special">=</span> <span class="identifier">import</span><span class="special">(</span><span class="string">"__main__"</span><span class="special">);</span>
<span class="identifier">object</span> <span class="identifier">main_namespace</span> <span class="special">=</span> <span class="identifier">main_module</span><span class="special">.</span><span class="identifier">attr</span><span class="special">(</span><span class="string">"__dict__"</span><span class="special">);</span>
<span class="identifier">object</span> <span class="identifier">ignored</span> <span class="special">=</span> <span class="identifier">exec</span><span class="special">(</span><span class="string">"hello = file('hello.txt', 'w')\n"</span>
<span class="string">"hello.write('Hello world!')\n"</span>
<span class="string">"hello.close()"</span><span class="special">,</span>
<span class="identifier">main_namespace</span><span class="special">);</span>
</pre>
<p>
This should create a file called 'hello.txt' in the current directory containing
a phrase that is well-known in programming circles.
</p>
<a name="using_the_interpreter.manipulating_python_objects"></a><h2>
<a name="id472027"></a>
Manipulating Python objects
</h2>
<p>
Often we'd like to have a class to manipulate Python objects. But we have
already seen such a class above, and in the <a href="object.html" target="_top">previous
section</a>: the aptly named <tt class="literal">object</tt> class and its
derivatives. We've already seen that they can be constructed from a <tt class="literal">handle</tt>.
The following examples should further illustrate this fact:
</p>
<pre class="programlisting">
<span class="identifier">object</span> <span class="identifier">main_module</span> <span class="special">=</span> <span class="identifier">import</span><span class="special">(</span><span class="string">"__main__"</span><span class="special">);</span>
<span class="identifier">object</span> <span class="identifier">main_namespace</span> <span class="special">=</span> <span class="identifier">main_module</span><span class="special">.</span><span class="identifier">attr</span><span class="special">(</span><span class="string">"__dict__"</span><span class="special">);</span>
<span class="identifier">object</span> <span class="identifier">ignored</span> <span class="special">=</span> <span class="identifier">exec</span><span class="special">(</span><span class="string">"result = 5 ** 2"</span><span class="special">,</span> <span class="identifier">main_namespace</span><span class="special">);</span>
<span class="keyword">int</span> <span class="identifier">five_squared</span> <span class="special">=</span> <span class="identifier">extract</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;(</span><span class="identifier">main_namespace</span><span class="special">[</span><span class="string">"result"</span><span class="special">]);</span>
</pre>
<p>
Here we create a dictionary object for the <tt class="literal"><span class="underline">_main</span>_</tt>
module's namespace. Then we assign 5 squared to the result variable and read
this variable from the dictionary. Another way to achieve the same result
is to use eval instead, which returns the result directly:
</p>
<pre class="programlisting">
<span class="identifier">object</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">eval</span><span class="special">(</span><span class="string">"5 ** 2"</span><span class="special">);</span>
<span class="keyword">int</span> <span class="identifier">five_squared</span> <span class="special">=</span> <span class="identifier">extract</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;(</span><span class="identifier">result</span><span class="special">);</span>
</pre>
<a name="using_the_interpreter.exception_handling"></a><h2>
<a name="id472399"></a>
Exception handling
</h2>
<p>
If an exception occurs in the evaluation of the python expression, <a href="../../../../v2/errors.html#error_already_set-spec" target="_top">error_already_set</a>
is thrown:
</p>
<pre class="programlisting">
<span class="keyword">try</span>
<span class="special">{</span>
<span class="identifier">object</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">eval</span><span class="special">(</span><span class="string">"5/0"</span><span class="special">);</span>
<span class="comment">// execution will never get here:
</span> <span class="keyword">int</span> <span class="identifier">five_divided_by_zero</span> <span class="special">=</span> <span class="identifier">extract</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;(</span><span class="identifier">result</span><span class="special">);</span>
<span class="special">}</span>
<span class="keyword">catch</span><span class="special">(</span><span class="identifier">error_already_set</span> <span class="keyword">const</span> <span class="special">&amp;)</span>
<span class="special">{</span>
<span class="comment">// handle the exception in some way
</span><span class="special">}</span>
</pre>
<p>
The <tt class="literal">error_already_set</tt> exception class doesn't carry any
information in itself. To find out more about the Python exception that occurred,
you need to use the <a href="http://www.python.org/doc/api/exceptionHandling.html" target="_top">exception
handling functions</a> of the Python<span class="emphasis"><em>C API in your catch-statement.
This can be as simple as calling [@http:</em></span>/www.python.org/doc/api/exceptionHandling.html#l2h-70
PyErr_Print()] to print the exception's traceback to the console, or comparing
the type of the exception with those of the <a href="http://www.python.org/doc/api/standardExceptions.html" target="_top">standard
exceptions</a>:
</p>
<pre class="programlisting">
<span class="keyword">catch</span><span class="special">(</span><span class="identifier">error_already_set</span> <span class="keyword">const</span> <span class="special">&amp;)</span>
<span class="special">{</span>
<span class="keyword">if</span> <span class="special">(</span><span class="identifier">PyErr_ExceptionMatches</span><span class="special">(</span><span class="identifier">PyExc_ZeroDivisionError</span><span class="special">))</span>
<span class="special">{</span>
<span class="comment">// handle ZeroDivisionError specially
</span> <span class="special">}</span>
<span class="keyword">else</span>
<span class="special">{</span>
<span class="comment">// print all other errors to stderr
</span> <span class="identifier">PyErr_Print</span><span class="special">();</span>
<span class="special">}</span>
<span class="special">}</span>
</pre>
<p>
(To retrieve even more information from the exception you can use some of
the other exception handling functions listed <a href="http://www.python.org/doc/api/exceptionHandling.html" target="_top">here</a>.)
</p>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2002-2005 Joel
de Guzman, David Abrahams<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">
http://www.boost.org/LICENSE_1_0.txt </a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="object.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="iterators.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -0,0 +1,65 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title> Exception Translation</title>
<link rel="stylesheet" href="../../../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="../index.html" title="Chapter 1. python 1.0">
<link rel="up" href="../index.html" title="Chapter 1. python 1.0">
<link rel="prev" href="iterators.html" title="Iterators">
<link rel="next" href="techniques.html" title=" General Techniques">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../../../more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="iterators.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="techniques.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="python.exception"></a> Exception Translation</h2></div></div></div>
<p>
All C++ exceptions must be caught at the boundary with Python code. This boundary
is the point where C++ meets Python. Boost.Python provides a default exception
handler that translates selected standard exceptions, then gives up:
</p>
<pre class="programlisting">
<span class="keyword">raise</span> <span class="identifier">RuntimeError</span><span class="special">,</span> <span class="string">'unidentifiable C++ Exception'</span>
</pre>
<p>
Users may provide custom translation. Here's an example:
</p>
<pre class="programlisting">
<span class="identifier">struct</span> <span class="identifier">PodBayDoorException</span><span class="special">;</span>
<span class="identifier">void</span> <span class="identifier">translator</span><span class="special">(</span><span class="identifier">PodBayDoorException</span> <span class="identifier">const</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">{</span>
<span class="identifier">PyErr_SetString</span><span class="special">(</span><span class="identifier">PyExc_UserWarning</span><span class="special">,</span> <span class="string">"I'm sorry Dave..."</span><span class="special">);</span>
<span class="special">}</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">kubrick</span><span class="special">)</span> <span class="special">{</span>
<span class="identifier">register_exception_translator</span><span class="special">&lt;</span>
<span class="identifier">PodBayDoorException</span><span class="special">&gt;(</span><span class="identifier">translator</span><span class="special">);</span>
<span class="special">...</span>
</pre>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2002-2005 Joel
de Guzman, David Abrahams<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">
http://www.boost.org/LICENSE_1_0.txt </a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="iterators.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="techniques.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -0,0 +1,640 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title> Exposing Classes</title>
<link rel="stylesheet" href="../../../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="../index.html" title="Chapter 1. python 1.0">
<link rel="up" href="../index.html" title="Chapter 1. python 1.0">
<link rel="prev" href="hello.html" title=" Building Hello World">
<link rel="next" href="functions.html" title="Functions">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../../../more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="hello.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="functions.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="python.exposing"></a> Exposing Classes</h2></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="exposing.html#python.constructors">Constructors</a></span></dt>
<dt><span class="section"><a href="exposing.html#python.class_data_members">Class Data Members</a></span></dt>
<dt><span class="section"><a href="exposing.html#python.class_properties">Class Properties</a></span></dt>
<dt><span class="section"><a href="exposing.html#python.inheritance">Inheritance</a></span></dt>
<dt><span class="section"><a href="exposing.html#python.class_virtual_functions">Class Virtual Functions</a></span></dt>
<dt><span class="section"><a href="exposing.html#python.virtual_functions_with_default_implementations">Virtual Functions with Default Implementations</a></span></dt>
<dt><span class="section"><a href="exposing.html#python.class_operators_special_functions">Class Operators/Special Functions</a></span></dt>
</dl></div>
<p>
Now let's expose a C++ class to Python.
</p>
<p>
Consider a C++ class/struct that we want to expose to Python:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">World</span>
<span class="special">{</span>
<span class="keyword">void</span> <span class="identifier">set</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">msg</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">msg</span> <span class="special">=</span> <span class="identifier">msg</span><span class="special">;</span> <span class="special">}</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">greet</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">msg</span><span class="special">;</span> <span class="special">}</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">msg</span><span class="special">;</span>
<span class="special">};</span>
</pre>
<p>
We can expose this to Python by writing a corresponding Boost.Python C++ Wrapper:
</p>
<pre class="programlisting">
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">python</span><span class="special">;</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">hello</span><span class="special">)</span>
<span class="special">{</span>
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">World</span><span class="special">&gt;(</span><span class="string">"World"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"greet"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">World</span><span class="special">::</span><span class="identifier">greet</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"set"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">World</span><span class="special">::</span><span class="identifier">set</span><span class="special">)</span>
<span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
Here, we wrote a C++ class wrapper that exposes the member functions <tt class="literal">greet</tt>
and <tt class="literal">set</tt>. Now, after building our module as a shared library,
we may use our class <tt class="literal">World</tt> in Python. Here's a sample Python
session:
</p>
<p>
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">import</span> <span class="identifier">hello</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">planet</span> <span class="special">=</span> <span class="identifier">hello</span><span class="special">.</span><span class="identifier">World</span><span class="special">()</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">planet</span><span class="special">.</span><span class="identifier">set</span><span class="special">(</span><span class="string">'howdy'</span><span class="special">)</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">planet</span><span class="special">.</span><span class="identifier">greet</span><span class="special">()</span>
<span class="string">'howdy'</span>
</pre>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.constructors"></a>Constructors</h3></div></div></div>
<p>
Our previous example didn't have any explicit constructors. Since <tt class="literal">World</tt>
is declared as a plain struct, it has an implicit default constructor. Boost.Python
exposes the default constructor by default, which is why we were able to
write
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">planet</span> <span class="special">=</span> <span class="identifier">hello</span><span class="special">.</span><span class="identifier">World</span><span class="special">()</span>
</pre>
<p>
We may wish to wrap a class with a non-default constructor. Let us build
on our previous example:
</p>
<p>
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">World</span>
<span class="special">{</span>
<span class="identifier">World</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">msg</span><span class="special">):</span> <span class="identifier">msg</span><span class="special">(</span><span class="identifier">msg</span><span class="special">)</span> <span class="special">{}</span> <span class="comment">// added constructor
</span> <span class="keyword">void</span> <span class="identifier">set</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">msg</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">msg</span> <span class="special">=</span> <span class="identifier">msg</span><span class="special">;</span> <span class="special">}</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">greet</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">msg</span><span class="special">;</span> <span class="special">}</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">msg</span><span class="special">;</span>
<span class="special">};</span>
</pre>
<p>
This time <tt class="literal">World</tt> has no default constructor; our previous
wrapping code would fail to compile when the library tried to expose it.
We have to tell <tt class="literal">class_&lt;World&gt;</tt> about the constructor
we want to expose instead.
</p>
<pre class="programlisting">
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">python</span><span class="special">;</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">hello</span><span class="special">)</span>
<span class="special">{</span>
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">World</span><span class="special">&gt;(</span><span class="string">"World"</span><span class="special">,</span> <span class="identifier">init</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;())</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"greet"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">World</span><span class="special">::</span><span class="identifier">greet</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"set"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">World</span><span class="special">::</span><span class="identifier">set</span><span class="special">)</span>
<span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
<tt class="literal">init&lt;std::string&gt;()</tt> exposes the constructor taking
in a <tt class="literal">std::string</tt> (in Python, constructors are spelled
"<tt class="literal">"<span class="underline">_init</span>_"</tt>").
</p>
<p>
We can expose additional constructors by passing more <tt class="literal">init&lt;...&gt;</tt>s
to the <tt class="literal">def()</tt> member function. Say for example we have
another World constructor taking in two doubles:
</p>
<pre class="programlisting">
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">World</span><span class="special">&gt;(</span><span class="string">"World"</span><span class="special">,</span> <span class="identifier">init</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;())</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">init</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;())</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"greet"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">World</span><span class="special">::</span><span class="identifier">greet</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"set"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">World</span><span class="special">::</span><span class="identifier">set</span><span class="special">)</span>
<span class="special">;</span>
</pre>
<p>
On the other hand, if we do not wish to expose any constructors at all, we
may use <tt class="literal">no_init</tt> instead:
</p>
<pre class="programlisting">
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">Abstract</span><span class="special">&gt;(</span><span class="string">"Abstract"</span><span class="special">,</span> <span class="identifier">no_init</span><span class="special">)</span>
</pre>
<p>
This actually adds an <tt class="literal"><span class="underline">_init</span>_</tt>
method which always raises a Python RuntimeError exception.
</p>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.class_data_members"></a>Class Data Members</h3></div></div></div>
<p>
Data members may also be exposed to Python so that they can be accessed as
attributes of the corresponding Python class. Each data member that we wish
to be exposed may be regarded as <span class="bold"><b>read-only</b></span>
or <span class="bold"><b>read-write</b></span>. Consider this class <tt class="literal">Var</tt>:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">Var</span>
<span class="special">{</span>
<span class="identifier">Var</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">name</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">name</span><span class="special">(</span><span class="identifier">name</span><span class="special">),</span> <span class="identifier">value</span><span class="special">()</span> <span class="special">{}</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span> <span class="identifier">name</span><span class="special">;</span>
<span class="keyword">float</span> <span class="identifier">value</span><span class="special">;</span>
<span class="special">};</span>
</pre>
<p>
Our C++ <tt class="literal">Var</tt> class and its data members can be exposed
to Python:
</p>
<pre class="programlisting">
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">Var</span><span class="special">&gt;(</span><span class="string">"Var"</span><span class="special">,</span> <span class="identifier">init</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;())</span>
<span class="special">.</span><span class="identifier">def_readonly</span><span class="special">(</span><span class="string">"name"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Var</span><span class="special">::</span><span class="identifier">name</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def_readwrite</span><span class="special">(</span><span class="string">"value"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Var</span><span class="special">::</span><span class="identifier">value</span><span class="special">);</span>
</pre>
<p>
Then, in Python, assuming we have placed our Var class inside the namespace
hello as we did before:
</p>
<p>
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">hello</span><span class="special">.</span><span class="identifier">Var</span><span class="special">(</span><span class="string">'pi'</span><span class="special">)</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">value</span> <span class="special">=</span> <span class="number">3.14</span>
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">print</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">name</span><span class="special">,</span> <span class="string">'is around'</span><span class="special">,</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">value</span>
<span class="identifier">pi</span> <span class="keyword">is</span> <span class="identifier">around</span> <span class="number">3.14</span>
</pre>
<p>
Note that <tt class="literal">name</tt> is exposed as <span class="bold"><b>read-only</b></span>
while <tt class="literal">value</tt> is exposed as <span class="bold"><b>read-write</b></span>.
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">name</span> <span class="special">=</span> <span class="string">'e'</span> <span class="comment"># can't change name
</span><span class="identifier">Traceback</span> <span class="special">(</span><span class="identifier">most</span> <span class="identifier">recent</span> <span class="identifier">call</span> <span class="identifier">last</span><span class="special">):</span>
<span class="identifier">File</span> <span class="string">"&lt;stdin&gt;"</span><span class="special">,</span> <span class="identifier">line</span> <span class="number">1</span><span class="special">,</span> <span class="keyword">in</span> #
<span class="identifier">AttributeError</span><span class="special">:</span> <span class="identifier">can</span>#<span class="identifier">t</span> <span class="identifier">set</span> <span class="identifier">attribute</span>
</pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.class_properties"></a>Class Properties</h3></div></div></div>
<p>
In C++, classes with public data members are usually frowned upon. Well designed
classes that take advantage of encapsulation hide the class' data members.
The only way to access the class' data is through access (getter/setter)
functions. Access functions expose class properties. Here's an example:
</p>
<p>
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">Num</span>
<span class="special">{</span>
<span class="identifier">Num</span><span class="special">();</span>
<span class="keyword">float</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
<span class="keyword">void</span> <span class="identifier">set</span><span class="special">(</span><span class="keyword">float</span> <span class="identifier">value</span><span class="special">);</span>
<span class="special">...</span>
<span class="special">};</span>
</pre>
<p>
However, in Python attribute access is fine; it doesn't neccessarily break
encapsulation to let users handle attributes directly, because the attributes
can just be a different syntax for a method call. Wrapping our <tt class="literal">Num</tt>
class using Boost.Python:
</p>
<pre class="programlisting">
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">Num</span><span class="special">&gt;(</span><span class="string">"Num"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">add_property</span><span class="special">(</span><span class="string">"rovalue"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Num</span><span class="special">::</span><span class="identifier">get</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">add_property</span><span class="special">(</span><span class="string">"value"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Num</span><span class="special">::</span><span class="identifier">get</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Num</span><span class="special">::</span><span class="identifier">set</span><span class="special">);</span>
</pre>
<p>
And at last, in Python:
</p>
<p>
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">Num</span><span class="special">()</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">value</span> <span class="special">=</span> <span class="number">3.14</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">rovalue</span>
<span class="special">(</span><span class="number">3.14</span><span class="special">,</span> <span class="number">3.14</span><span class="special">)</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">rovalue</span> <span class="special">=</span> <span class="number">2.17</span> <span class="comment"># error!
</span></pre>
<p>
Take note that the class property <tt class="literal">rovalue</tt> is exposed as
<span class="bold"><b>read-only</b></span> since the <tt class="literal">rovalue</tt>
setter member function is not passed in:
</p>
<p>
</p>
<pre class="programlisting">
<span class="special">.</span><span class="identifier">add_property</span><span class="special">(</span><span class="string">"rovalue"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Num</span><span class="special">::</span><span class="identifier">get</span><span class="special">)</span>
</pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.inheritance"></a>Inheritance</h3></div></div></div>
<p>
In the previous examples, we dealt with classes that are not polymorphic.
This is not often the case. Much of the time, we will be wrapping polymorphic
classes and class hierarchies related by inheritance. We will often have
to write Boost.Python wrappers for classes that are derived from abstract
base classes.
</p>
<p>
Consider this trivial inheritance structure:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">Base</span> <span class="special">{</span> <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">Base</span><span class="special">();</span> <span class="special">};</span>
<span class="keyword">struct</span> <span class="identifier">Derived</span> <span class="special">:</span> <span class="identifier">Base</span> <span class="special">{};</span>
</pre>
<p>
And a set of C++ functions operating on <tt class="literal">Base</tt> and <tt class="literal">Derived</tt>
object instances:
</p>
<pre class="programlisting">
<span class="keyword">void</span> <span class="identifier">b</span><span class="special">(</span><span class="identifier">Base</span><span class="special">*);</span>
<span class="keyword">void</span> <span class="identifier">d</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">*);</span>
<span class="identifier">Base</span><span class="special">*</span> <span class="identifier">factory</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="keyword">new</span> <span class="identifier">Derived</span><span class="special">;</span> <span class="special">}</span>
</pre>
<p>
We've seen how we can wrap the base class <tt class="literal">Base</tt>:
</p>
<pre class="programlisting">
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">&gt;(</span><span class="string">"Base"</span><span class="special">)</span>
<span class="comment">/*...*/</span>
<span class="special">;</span>
</pre>
<p>
Now we can inform Boost.Python of the inheritance relationship between <tt class="literal">Derived</tt>
and its base class <tt class="literal">Base</tt>. Thus:
</p>
<pre class="programlisting">
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">Derived</span><span class="special">,</span> <span class="identifier">bases</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">&gt;</span> <span class="special">&gt;(</span><span class="string">"Derived"</span><span class="special">)</span>
<span class="comment">/*...*/</span>
<span class="special">;</span>
</pre>
<p>
Doing so, we get some things for free:
</p>
<div class="orderedlist"><ol type="1">
<li>
Derived automatically inherits all of Base's Python methods (wrapped C++
member functions)
</li>
<li>
<span class="bold"><b>If</b></span> Base is polymorphic, <tt class="literal">Derived</tt>
objects which have been passed to Python via a pointer or reference to
<tt class="literal">Base</tt> can be passed where a pointer or reference to
<tt class="literal">Derived</tt> is expected.
</li>
</ol></div>
<p>
Now, we will expose the C++ free functions <tt class="literal">b</tt> and <tt class="literal">d</tt>
and <tt class="literal">factory</tt>:
</p>
<pre class="programlisting">
<span class="identifier">def</span><span class="special">(</span><span class="string">"b"</span><span class="special">,</span> <span class="identifier">b</span><span class="special">);</span>
<span class="identifier">def</span><span class="special">(</span><span class="string">"d"</span><span class="special">,</span> <span class="identifier">d</span><span class="special">);</span>
<span class="identifier">def</span><span class="special">(</span><span class="string">"factory"</span><span class="special">,</span> <span class="identifier">factory</span><span class="special">);</span>
</pre>
<p>
Note that free function <tt class="literal">factory</tt> is being used to generate
new instances of class <tt class="literal">Derived</tt>. In such cases, we use
<tt class="literal">return_value_policy&lt;manage_new_object&gt;</tt> to instruct
Python to adopt the pointer to <tt class="literal">Base</tt> and hold the instance
in a new Python <tt class="literal">Base</tt> object until the the Python object
is destroyed. We will see more of Boost.Python <a href="functions.html#python.call_policies" title="Call Policies">call
policies</a> later.
</p>
<pre class="programlisting">
<span class="comment">// Tell Python to take ownership of factory's result
</span><span class="identifier">def</span><span class="special">(</span><span class="string">"factory"</span><span class="special">,</span> <span class="identifier">factory</span><span class="special">,</span>
<span class="identifier">return_value_policy</span><span class="special">&lt;</span><span class="identifier">manage_new_object</span><span class="special">&gt;());</span>
</pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.class_virtual_functions"></a>Class Virtual Functions</h3></div></div></div>
<p>
In this section, we will learn how to make functions behave polymorphically
through virtual functions. Continuing our example, let us add a virtual function
to our <tt class="literal">Base</tt> class:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">Base</span>
<span class="special">{</span>
<span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">Base</span><span class="special">()</span> <span class="special">{}</span>
<span class="keyword">virtual</span> <span class="keyword">int</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
<span class="special">};</span>
</pre>
<p>
One of the goals of Boost.Python is to be minimally intrusive on an existing
C++ design. In principle, it should be possible to expose the interface for
a 3rd party library without changing it. It is not ideal to add anything
to our class <tt class="computeroutput"><span class="identifier">Base</span></tt>. Yet, when
you have a virtual function that's going to be overridden in Python and called
polymorphically <span class="bold"><b>from C++</b></span>, we'll need to
add some scaffoldings to make things work properly. What we'll do is write
a class wrapper that derives from <tt class="computeroutput"><span class="identifier">Base</span></tt>
that will unintrusively hook into the virtual functions so that a Python
override may be called:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">BaseWrap</span> <span class="special">:</span> <span class="identifier">Base</span><span class="special">,</span> <span class="identifier">wrapper</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">&gt;</span>
<span class="special">{</span>
<span class="keyword">int</span> <span class="identifier">f</span><span class="special">()</span>
<span class="special">{</span>
<span class="keyword">return</span> <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_override</span><span class="special">(</span><span class="string">"f"</span><span class="special">)();</span>
<span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
Notice too that in addition to inheriting from <tt class="computeroutput"><span class="identifier">Base</span></tt>,
we also multiply- inherited <tt class="computeroutput"><span class="identifier">wrapper</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">&gt;</span></tt> (See <a href="../../../../v2/wrapper.html" target="_top">Wrapper</a>).
The <tt class="computeroutput"><span class="identifier">wrapper</span></tt> template makes
the job of wrapping classes that are meant to overridden in Python, easier.
</p>
<div class="sidebar">
<p>
<span class="inlinemediaobject"><img src="../images/alert.png" alt="alert"></span> <span class="bold"><b>MSVC6/7 Workaround</b></span>
</p>
<p>
If you are using Microsoft Visual C++ 6 or 7, you have to write <tt class="computeroutput"><span class="identifier">f</span></tt> as:
</p>
<p>
<tt class="computeroutput"><span class="keyword">return</span> <span class="identifier">call</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_override</span><span class="special">(</span><span class="string">"f"</span><span class="special">).</span><span class="identifier">ptr</span><span class="special">());</span></tt>.
</p>
</div>
<p>
BaseWrap's overridden virtual member function <tt class="computeroutput"><span class="identifier">f</span></tt>
in effect calls the corresponding method of the Python object through <tt class="computeroutput"><span class="identifier">get_override</span></tt>.
</p>
<p>
Finally, exposing <tt class="computeroutput"><span class="identifier">Base</span></tt>:
</p>
<pre class="programlisting">
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">BaseWrap</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">noncopyable</span><span class="special">&gt;(</span><span class="string">"Base"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">pure_virtual</span><span class="special">(&amp;</span><span class="identifier">Base</span><span class="special">::</span><span class="identifier">f</span><span class="special">))</span>
<span class="special">;</span>
</pre>
<p>
<tt class="computeroutput"><span class="identifier">pure_virtual</span></tt> signals Boost.Python
that the function <tt class="computeroutput"><span class="identifier">f</span></tt> is a
pure virtual function.
</p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/html/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td colspan="2" align="left" valign="top">
<p>
<span class="bold"><b>member function and methods</b></span>
</p>
<p>
Python, like many object oriented languages uses the term <span class="bold"><b>methods</b></span>.
Methods correspond roughly to C++'s <span class="bold"><b>member functions</b></span>
</p>
</td></tr>
</table></div>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.virtual_functions_with_default_implementations"></a>Virtual Functions with Default Implementations</h3></div></div></div>
<p>
We've seen in the previous section how classes with pure virtual functions
are wrapped using Boost.Python's <a href="../../../../v2/wrapper.html" target="_top">class
wrapper</a> facilities. If we wish to wrap <span class="bold"><b>non</b></span>-pure-virtual
functions instead, the mechanism is a bit different.
</p>
<p>
Recall that in the <a href="exposing.html#python.class_virtual_functions" title="Class Virtual Functions">previous
section</a>, we wrapped a class with a pure virtual function that we then
implemented in C++, or Python classes derived from it. Our base class:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">Base</span>
<span class="special">{</span>
<span class="keyword">virtual</span> <span class="keyword">int</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
<span class="special">};</span>
</pre>
<p>
had a pure virtual function <tt class="literal">f</tt>. If, however, its member
function <tt class="literal">f</tt> was not declared as pure virtual:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">Base</span>
<span class="special">{</span>
<span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">Base</span><span class="special">()</span> <span class="special">{}</span>
<span class="keyword">virtual</span> <span class="keyword">int</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> <span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
We wrap it this way:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">BaseWrap</span> <span class="special">:</span> <span class="identifier">Base</span><span class="special">,</span> <span class="identifier">wrapper</span><span class="special">&lt;</span><span class="identifier">Base</span><span class="special">&gt;</span>
<span class="special">{</span>
<span class="keyword">int</span> <span class="identifier">f</span><span class="special">()</span>
<span class="special">{</span>
<span class="keyword">if</span> <span class="special">(</span><span class="identifier">override</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">get_override</span><span class="special">(</span><span class="string">"f"</span><span class="special">))</span>
<span class="keyword">return</span> <span class="identifier">f</span><span class="special">();</span> <span class="comment">// *note*
</span> <span class="keyword">return</span> <span class="identifier">Base</span><span class="special">::</span><span class="identifier">f</span><span class="special">();</span>
<span class="special">}</span>
<span class="keyword">int</span> <span class="identifier">default_f</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">Base</span><span class="special">::</span><span class="identifier">f</span><span class="special">();</span> <span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
Notice how we implemented <tt class="computeroutput"><span class="identifier">BaseWrap</span><span class="special">::</span><span class="identifier">f</span></tt>. Now,
we have to check if there is an override for <tt class="computeroutput"><span class="identifier">f</span></tt>.
If none, then we call <tt class="computeroutput"><span class="identifier">Base</span><span class="special">::</span><span class="identifier">f</span><span class="special">()</span></tt>.
</p>
<div class="sidebar">
<p>
<span class="inlinemediaobject"><img src="../images/alert.png" alt="alert"></span> <span class="bold"><b>MSVC6/7 Workaround</b></span>
</p>
<p>
If you are using Microsoft Visual C++ 6 or 7, you have to rewrite the line
with the <tt class="computeroutput"><span class="special">*</span><span class="identifier">note</span><span class="special">*</span></tt> as:
</p>
<p>
<tt class="computeroutput"><span class="keyword">return</span> <span class="identifier">call</span><span class="special">&lt;</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*&gt;(</span><span class="identifier">f</span><span class="special">.</span><span class="identifier">ptr</span><span class="special">());</span></tt>.
</p>
</div>
<p>
Finally, exposing:
</p>
<pre class="programlisting">
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">BaseWrap</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">noncopyable</span><span class="special">&gt;(</span><span class="string">"Base"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Base</span><span class="special">::</span><span class="identifier">f</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">BaseWrap</span><span class="special">::</span><span class="identifier">default_f</span><span class="special">)</span>
<span class="special">;</span>
</pre>
<p>
Take note that we expose both <tt class="computeroutput"><span class="special">&amp;</span><span class="identifier">Base</span><span class="special">::</span><span class="identifier">f</span></tt> and <tt class="computeroutput"><span class="special">&amp;</span><span class="identifier">BaseWrap</span><span class="special">::</span><span class="identifier">default_f</span></tt>. Boost.Python needs to keep track
of 1) the dispatch function <tt class="literal">f</tt> and 2) the forwarding function
to its default implementation <tt class="literal">default_f</tt>. There's a special
<tt class="literal">def</tt> function for this purpose.
</p>
<p>
In Python, the results would be as expected:
</p>
<p>
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">base</span> <span class="special">=</span> <span class="identifier">Base</span><span class="special">()</span>
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">class</span> <span class="identifier">Derived</span><span class="special">(</span><span class="identifier">Base</span><span class="special">):</span>
<span class="special">...</span> <span class="keyword">def</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">self</span><span class="special">):</span>
<span class="special">...</span> <span class="keyword">return</span> <span class="number">42</span>
<span class="special">...</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">derived</span> <span class="special">=</span> <span class="identifier">Derived</span><span class="special">()</span>
</pre>
<p>
Calling <tt class="literal">base.f()</tt>:
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">base</span><span class="special">.</span><span class="identifier">f</span><span class="special">()</span>
<span class="number">0</span>
</pre>
<p>
Calling <tt class="literal">derived.f()</tt>:
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">derived</span><span class="special">.</span><span class="identifier">f</span><span class="special">()</span>
<span class="number">42</span>
</pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.class_operators_special_functions"></a>Class Operators/Special Functions</h3></div></div></div>
<a name="class_operators_special_functions.python_operators"></a><h2>
<a name="id461460"></a>
Python Operators
</h2>
<p>
C is well known for the abundance of operators. C++ extends this to the extremes
by allowing operator overloading. Boost.Python takes advantage of this and
makes it easy to wrap C++ operator-powered classes.
</p>
<p>
Consider a file position class <tt class="literal">FilePos</tt> and a set of operators
that take on FilePos instances:
</p>
<p>
</p>
<pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">FilePos</span> <span class="special">{</span> <span class="comment">/*...*/</span> <span class="special">};</span>
<span class="identifier">FilePos</span> <span class="keyword">operator</span><span class="special">+(</span><span class="identifier">FilePos</span><span class="special">,</span> <span class="keyword">int</span><span class="special">);</span>
<span class="identifier">FilePos</span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">FilePos</span><span class="special">);</span>
<span class="keyword">int</span> <span class="keyword">operator</span><span class="special">-(</span><span class="identifier">FilePos</span><span class="special">,</span> <span class="identifier">FilePos</span><span class="special">);</span>
<span class="identifier">FilePos</span> <span class="keyword">operator</span><span class="special">-(</span><span class="identifier">FilePos</span><span class="special">,</span> <span class="keyword">int</span><span class="special">);</span>
<span class="identifier">FilePos</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="identifier">FilePos</span><span class="special">&amp;,</span> <span class="keyword">int</span><span class="special">);</span>
<span class="identifier">FilePos</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="identifier">FilePos</span><span class="special">&amp;,</span> <span class="keyword">int</span><span class="special">);</span>
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span><span class="identifier">FilePos</span><span class="special">,</span> <span class="identifier">FilePos</span><span class="special">);</span>
</pre>
<p>
The class and the various operators can be mapped to Python rather easily
and intuitively:
</p>
<pre class="programlisting">
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">FilePos</span><span class="special">&gt;(</span><span class="string">"FilePos"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">+</span> <span class="keyword">int</span><span class="special">())</span> <span class="comment">// __add__
</span> <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="keyword">int</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">self</span><span class="special">)</span> <span class="comment">// __radd__
</span> <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">-</span> <span class="identifier">self</span><span class="special">)</span> <span class="comment">// __sub__
</span> <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">-</span> <span class="keyword">int</span><span class="special">())</span> <span class="comment">// __sub__
</span> <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">+=</span> <span class="keyword">int</span><span class="special">())</span> <span class="comment">// __iadd__
</span> <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">-=</span> <span class="identifier">other</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;())</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">&lt;</span> <span class="identifier">self</span><span class="special">);</span> <span class="comment">// __lt__
</span></pre>
<p>
The code snippet above is very clear and needs almost no explanation at all.
It is virtually the same as the operators' signatures. Just take note that
<tt class="literal">self</tt> refers to FilePos object. Also, not every class
<tt class="literal">T</tt> that you might need to interact with in an operator
expression is (cheaply) default-constructible. You can use <tt class="literal">other&lt;T&gt;()</tt>
in place of an actual <tt class="literal">T</tt> instance when writing "self
expressions".
</p>
<a name="class_operators_special_functions.special_methods"></a><h2>
<a name="id462216"></a>
Special Methods
</h2>
<p>
Python has a few more <span class="emphasis"><em>Special Methods</em></span>. Boost.Python
supports all of the standard special method names supported by real Python
class instances. A similar set of intuitive interfaces can also be used to
wrap C++ functions that correspond to these Python <span class="emphasis"><em>special functions</em></span>.
Example:
</p>
<pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">Rational</span>
<span class="special">{</span> <span class="keyword">public</span><span class="special">:</span> <span class="keyword">operator</span> <span class="keyword">double</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> <span class="special">};</span>
<span class="identifier">Rational</span> <span class="identifier">pow</span><span class="special">(</span><span class="identifier">Rational</span><span class="special">,</span> <span class="identifier">Rational</span><span class="special">);</span>
<span class="identifier">Rational</span> <span class="identifier">abs</span><span class="special">(</span><span class="identifier">Rational</span><span class="special">);</span>
<span class="identifier">ostream</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">ostream</span><span class="special">&amp;,</span><span class="identifier">Rational</span><span class="special">);</span>
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">Rational</span><span class="special">&gt;(</span><span class="string">"Rational"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">float_</span><span class="special">(</span><span class="identifier">self</span><span class="special">))</span> <span class="comment">// __float__
</span> <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">pow</span><span class="special">(</span><span class="identifier">self</span><span class="special">,</span> <span class="identifier">other</span><span class="special">&lt;</span><span class="identifier">Rational</span><span class="special">&gt;))</span> <span class="comment">// __pow__
</span> <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">abs</span><span class="special">(</span><span class="identifier">self</span><span class="special">))</span> <span class="comment">// __abs__
</span> <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">str</span><span class="special">(</span><span class="identifier">self</span><span class="special">))</span> <span class="comment">// __str__
</span> <span class="special">;</span>
</pre>
<p>
Need we say more?
</p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/html/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td colspan="2" align="left" valign="top"><p>
What is the business of <tt class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;&lt;</span></tt>? Well, the method <tt class="computeroutput"><span class="identifier">str</span></tt> requires the <tt class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;&lt;</span></tt> to do its work (i.e. <tt class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;&lt;</span></tt>
is used by the method defined by <tt class="computeroutput"><span class="identifier">def</span><span class="special">(</span><span class="identifier">str</span><span class="special">(</span><span class="identifier">self</span><span class="special">))</span></tt>.
</p></td></tr>
</table></div>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2002-2005 Joel
de Guzman, David Abrahams<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">
http://www.boost.org/LICENSE_1_0.txt </a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="hello.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="functions.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -0,0 +1,621 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Functions</title>
<link rel="stylesheet" href="../../../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="../index.html" title="Chapter 1. python 1.0">
<link rel="up" href="../index.html" title="Chapter 1. python 1.0">
<link rel="prev" href="exposing.html" title=" Exposing Classes">
<link rel="next" href="object.html" title=" Object Interface">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../../../more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="exposing.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="object.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="python.functions"></a>Functions</h2></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="functions.html#python.call_policies">Call Policies</a></span></dt>
<dt><span class="section"><a href="functions.html#python.overloading">Overloading</a></span></dt>
<dt><span class="section"><a href="functions.html#python.default_arguments">Default Arguments</a></span></dt>
<dt><span class="section"><a href="functions.html#python.auto_overloading">Auto-Overloading</a></span></dt>
</dl></div>
<p>
In this chapter, we'll look at Boost.Python powered functions in closer detail.
We will see some facilities to make exposing C++ functions to Python safe from
potential pifalls such as dangling pointers and references. We will also see
facilities that will make it even easier for us to expose C++ functions that
take advantage of C++ features such as overloading and default arguments.
</p>
<div class="blockquote"><blockquote class="blockquote">
<p>
</p>
<p>
<span class="emphasis"><em>Read on...</em></span>
</p>
<p>
</p>
</blockquote></div>
<p>
But before you do, you might want to fire up Python 2.2 or later and type
<tt class="literal">&gt;&gt;&gt; import this</tt>.
</p>
<pre class="programlisting">&gt;&gt;&gt; import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than <span class="bold"><b>right</b></span> now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
</pre>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.call_policies"></a>Call Policies</h3></div></div></div>
<p>
In C++, we often deal with arguments and return types such as pointers and
references. Such primitive types are rather, ummmm, low level and they really
don't tell us much. At the very least, we don't know the owner of the pointer
or the referenced object. No wonder languages such as Java and Python never
deal with such low level entities. In C++, it's usually considered a good
practice to use smart pointers which exactly describe ownership semantics.
Still, even good C++ interfaces use raw references and pointers sometimes,
so Boost.Python must deal with them. To do this, it may need your help. Consider
the following C++ function:
</p>
<pre class="programlisting">
<span class="identifier">X</span><span class="special">&amp;</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">Y</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">Z</span><span class="special">*</span> <span class="identifier">z</span><span class="special">);</span>
</pre>
<p>
How should the library wrap this function? A naive approach builds a Python
X object around result reference. This strategy might or might not work out.
Here's an example where it didn't
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">y</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)</span> <span class="preprocessor"># x</span> <span class="identifier">refers</span> <span class="identifier">to</span> <span class="identifier">some</span> <span class="identifier">C</span><span class="special">++</span> <span class="identifier">X</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">del</span> <span class="identifier">y</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">some_method</span><span class="special">()</span> <span class="preprocessor"># CRASH</span><span class="special">!</span>
</pre>
<p>
What's the problem?
</p>
<p>
Well, what if f() was implemented as shown below:
</p>
<pre class="programlisting">
<span class="identifier">X</span><span class="special">&amp;</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">Y</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">Z</span><span class="special">*</span> <span class="identifier">z</span><span class="special">)</span>
<span class="special">{</span>
<span class="identifier">y</span><span class="special">.</span><span class="identifier">z</span> <span class="special">=</span> <span class="identifier">z</span><span class="special">;</span>
<span class="keyword">return</span> <span class="identifier">y</span><span class="special">.</span><span class="identifier">x</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
The problem is that the lifetime of result X&amp; is tied to the lifetime
of y, because the f() returns a reference to a member of the y object. This
idiom is is not uncommon and perfectly acceptable in the context of C++.
However, Python users should not be able to crash the system just by using
our C++ interface. In this case deleting y will invalidate the reference
to X. We have a dangling reference.
</p>
<p>
Here's what's happening:
</p>
<div class="orderedlist"><ol type="1">
<li>
<tt class="literal">f</tt> is called passing in a reference to <tt class="literal">y</tt>
and a pointer to <tt class="literal">z</tt>
</li>
<li>
A reference to <tt class="literal">y.x</tt> is returned
</li>
<li>
<tt class="literal">y</tt> is deleted. <tt class="literal">x</tt> is a dangling reference
</li>
<li>
<tt class="literal">x.some_method()</tt> is called
</li>
<li><span class="bold"><b>BOOM!</b></span></li>
</ol></div>
<p>
We could copy result into a new object:
</p>
<p>
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">y</span><span class="special">,</span> <span class="identifier">z</span><span class="special">).</span><span class="identifier">set</span><span class="special">(</span><span class="number">42</span><span class="special">)</span> <span class="comment"># Result disappears
</span><span class="special">&gt;&gt;&gt;</span> <span class="identifier">y</span><span class="special">.</span><span class="identifier">x</span><span class="special">.</span><span class="identifier">get</span><span class="special">()</span> <span class="comment"># No crash, but still bad
</span><span class="number">3.14</span>
</pre>
<p>
This is not really our intent of our C++ interface. We've broken our promise
that the Python interface should reflect the C++ interface as closely as
possible.
</p>
<p>
Our problems do not end there. Suppose Y is implemented as follows:
</p>
<p>
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">Y</span>
<span class="special">{</span>
<span class="identifier">X</span> <span class="identifier">x</span><span class="special">;</span> <span class="identifier">Z</span><span class="special">*</span> <span class="identifier">z</span><span class="special">;</span>
<span class="keyword">int</span> <span class="identifier">z_value</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">z</span><span class="special">-&gt;</span><span class="identifier">value</span><span class="special">();</span> <span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
Notice that the data member <tt class="literal">z</tt> is held by class Y using
a raw pointer. Now we have a potential dangling pointer problem inside Y:
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">y</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)</span> <span class="preprocessor"># y</span> <span class="identifier">refers</span> <span class="identifier">to</span> <span class="identifier">z</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">del</span> <span class="identifier">z</span> <span class="preprocessor"># Kill</span> <span class="identifier">the</span> <span class="identifier">z</span> <span class="identifier">object</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">y</span><span class="special">.</span><span class="identifier">z_value</span><span class="special">()</span> <span class="preprocessor"># CRASH</span><span class="special">!</span>
</pre>
<p>
For reference, here's the implementation of <tt class="literal">f</tt> again:
</p>
<pre class="programlisting">
<span class="identifier">X</span><span class="special">&amp;</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">Y</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">Z</span><span class="special">*</span> <span class="identifier">z</span><span class="special">)</span>
<span class="special">{</span>
<span class="identifier">y</span><span class="special">.</span><span class="identifier">z</span> <span class="special">=</span> <span class="identifier">z</span><span class="special">;</span>
<span class="keyword">return</span> <span class="identifier">y</span><span class="special">.</span><span class="identifier">x</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
Here's what's happening:
</p>
<div class="orderedlist"><ol type="1">
<li>
<tt class="literal">f</tt> is called passing in a reference to <tt class="literal">y</tt>
and a pointer to <tt class="literal">z</tt>
</li>
<li>
A pointer to <tt class="literal">z</tt> is held by <tt class="literal">y</tt>
</li>
<li>
A reference to <tt class="literal">y.x</tt> is returned
</li>
<li>
<tt class="literal">z</tt> is deleted. <tt class="literal">y.z</tt> is a dangling pointer
</li>
<li>
<tt class="literal">y.z_value()</tt> is called
</li>
<li>
<tt class="literal">z-&gt;value()</tt> is called
</li>
<li><span class="bold"><b>BOOM!</b></span></li>
</ol></div>
<a name="call_policies.call_policies"></a><h2>
<a name="id464076"></a>
Call Policies
</h2>
<p>
Call Policies may be used in situations such as the example detailed above.
In our example, <tt class="literal">return_internal_reference</tt> and <tt class="literal">with_custodian_and_ward</tt>
are our friends:
</p>
<pre class="programlisting">
<span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span>
<span class="identifier">return_internal_reference</span><span class="special">&lt;</span><span class="number">1</span><span class="special">,</span>
<span class="identifier">with_custodian_and_ward</span><span class="special">&lt;</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</span> <span class="special">&gt;());</span>
</pre>
<p>
What are the <tt class="literal">1</tt> and <tt class="literal">2</tt> parameters, you
ask?
</p>
<pre class="programlisting">
<span class="identifier">return_internal_reference</span><span class="special">&lt;</span><span class="number">1</span>
</pre>
<p>
Informs Boost.Python that the first argument, in our case <tt class="literal">Y&amp;
y</tt>, is the owner of the returned reference: <tt class="literal">X&amp;</tt>.
The "<tt class="literal">1</tt>" simply specifies the first argument.
In short: "return an internal reference <tt class="literal">X&amp;</tt> owned
by the 1st argument <tt class="literal">Y&amp; y</tt>".
</p>
<pre class="programlisting">
<span class="identifier">with_custodian_and_ward</span><span class="special">&lt;</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</span>
</pre>
<p>
Informs Boost.Python that the lifetime of the argument indicated by ward
(i.e. the 2nd argument: <tt class="literal">Z* z</tt>) is dependent on the lifetime
of the argument indicated by custodian (i.e. the 1st argument: <tt class="literal">Y&amp;
y</tt>).
</p>
<p>
It is also important to note that we have defined two policies above. Two
or more policies can be composed by chaining. Here's the general syntax:
</p>
<pre class="programlisting">
<span class="identifier">policy1</span><span class="special">&lt;</span><span class="identifier">args</span><span class="special">...,</span>
<span class="identifier">policy2</span><span class="special">&lt;</span><span class="identifier">args</span><span class="special">...,</span>
<span class="identifier">policy3</span><span class="special">&lt;</span><span class="identifier">args</span><span class="special">...&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
</pre>
<p>
Here is the list of predefined call policies. A complete reference detailing
these can be found <a href="../../../../v2/reference.html#models_of_call_policies" target="_top">here</a>.
</p>
<div class="itemizedlist"><ul type="disc">
<li>
<span class="bold"><b>with_custodian_and_ward</b></span>: Ties lifetimes
of the arguments
</li>
<li>
<span class="bold"><b>with_custodian_and_ward_postcall</b></span>: Ties
lifetimes of the arguments and results
</li>
<li>
<span class="bold"><b>return_internal_reference</b></span>: Ties lifetime
of one argument to that of result
</li>
<li>
<span class="bold"><b>return_value_policy&lt;T&gt; with T one of:</b></span><div class="itemizedlist"><ul type="circle">
<li>
<span class="bold"><b>reference_existing_object</b></span>: naive (dangerous)
approach
</li>
<li>
<span class="bold"><b>copy_const_reference</b></span>: Boost.Python
v1 approach
</li>
<li>
<span class="bold"><b>copy_non_const_reference</b></span>:
</li>
<li>
<span class="bold"><b>manage_new_object</b></span>: Adopt a pointer
and hold the instance
</li>
</ul></div>
</li>
</ul></div>
<div class="sidebar">
<p>
<span class="inlinemediaobject"><img src="../images/smiley.png" alt="smiley"></span> <span class="bold"><b>Remember the Zen, Luke:</b></span>
</p>
<p>
"Explicit is better than implicit"
</p>
<p>
"In the face of ambiguity, refuse the temptation to guess"
</p>
</div>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.overloading"></a>Overloading</h3></div></div></div>
<p>
The following illustrates a scheme for manually wrapping an overloaded member
functions. Of course, the same technique can be applied to wrapping overloaded
non-member functions.
</p>
<p>
We have here our C++ class:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">X</span>
<span class="special">{</span>
<span class="keyword">bool</span> <span class="identifier">f</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">a</span><span class="special">)</span>
<span class="special">{</span>
<span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span>
<span class="special">}</span>
<span class="keyword">bool</span> <span class="identifier">f</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">b</span><span class="special">)</span>
<span class="special">{</span>
<span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span>
<span class="special">}</span>
<span class="keyword">bool</span> <span class="identifier">f</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">char</span> <span class="identifier">c</span><span class="special">)</span>
<span class="special">{</span>
<span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span>
<span class="special">}</span>
<span class="keyword">int</span> <span class="identifier">f</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">c</span><span class="special">)</span>
<span class="special">{</span>
<span class="keyword">return</span> <span class="identifier">a</span> <span class="special">+</span> <span class="identifier">b</span> <span class="special">+</span> <span class="identifier">c</span><span class="special">;</span>
<span class="special">};</span>
<span class="special">};</span>
</pre>
<p>
Class X has 4 overloaded functions. We will start by introducing some member
function pointer variables:
</p>
<pre class="programlisting">
<span class="keyword">bool</span> <span class="special">(</span><span class="identifier">X</span><span class="special">::*</span><span class="identifier">fx1</span><span class="special">)(</span><span class="keyword">int</span><span class="special">)</span> <span class="special">=</span> <span class="special">&amp;</span><span class="identifier">X</span><span class="special">::</span><span class="identifier">f</span><span class="special">;</span>
<span class="keyword">bool</span> <span class="special">(</span><span class="identifier">X</span><span class="special">::*</span><span class="identifier">fx2</span><span class="special">)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">double</span><span class="special">)</span> <span class="special">=</span> <span class="special">&amp;</span><span class="identifier">X</span><span class="special">::</span><span class="identifier">f</span><span class="special">;</span>
<span class="keyword">bool</span> <span class="special">(</span><span class="identifier">X</span><span class="special">::*</span><span class="identifier">fx3</span><span class="special">)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">double</span><span class="special">,</span> <span class="keyword">char</span><span class="special">)=</span> <span class="special">&amp;</span><span class="identifier">X</span><span class="special">::</span><span class="identifier">f</span><span class="special">;</span>
<span class="keyword">int</span> <span class="special">(</span><span class="identifier">X</span><span class="special">::*</span><span class="identifier">fx4</span><span class="special">)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">)</span> <span class="special">=</span> <span class="special">&amp;</span><span class="identifier">X</span><span class="special">::</span><span class="identifier">f</span><span class="special">;</span>
</pre>
<p>
With these in hand, we can proceed to define and wrap this for Python:
</p>
<pre class="programlisting">
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">fx1</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">fx2</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">fx3</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">fx4</span><span class="special">)</span>
</pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.default_arguments"></a>Default Arguments</h3></div></div></div>
<p>
Boost.Python wraps (member) function pointers. Unfortunately, C++ function
pointers carry no default argument info. Take a function <tt class="literal">f</tt>
with default arguments:
</p>
<pre class="programlisting">
<span class="keyword">int</span> <span class="identifier">f</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">double</span> <span class="special">=</span> <span class="number">3.14</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="special">=</span> <span class="string">"hello"</span><span class="special">);</span>
</pre>
<p>
But the type of a pointer to the function <tt class="literal">f</tt> has no information
about its default arguments:
</p>
<pre class="programlisting">
<span class="keyword">int</span><span class="special">(*</span><span class="identifier">g</span><span class="special">)(</span><span class="keyword">int</span><span class="special">,</span><span class="keyword">double</span><span class="special">,</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*)</span> <span class="special">=</span> <span class="identifier">f</span><span class="special">;</span> <span class="comment">// defaults lost!
</span></pre>
<p>
When we pass this function pointer to the <tt class="literal">def</tt> function,
there is no way to retrieve the default arguments:
</p>
<pre class="programlisting">
<span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">f</span><span class="special">);</span> <span class="comment">// defaults lost!
</span></pre>
<p>
Because of this, when wrapping C++ code, we had to resort to manual wrapping
as outlined in the <a href="functions.html#python.overloading" title="Overloading">previous section</a>,
or writing thin wrappers:
</p>
<pre class="programlisting">
<span class="comment">// write "thin wrappers"
</span><span class="keyword">int</span> <span class="identifier">f1</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> <span class="special">}</span>
<span class="keyword">int</span> <span class="identifier">f2</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">y</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span><span class="identifier">y</span><span class="special">);</span> <span class="special">}</span>
<span class="comment">/*...*/</span>
<span class="comment">// in module init
</span> <span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">f</span><span class="special">);</span> <span class="comment">// all arguments
</span> <span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">f2</span><span class="special">);</span> <span class="comment">// two arguments
</span> <span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">f1</span><span class="special">);</span> <span class="comment">// one argument
</span></pre>
<p>
When you want to wrap functions (or member functions) that either:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
have default arguments, or
</li>
<li>
are overloaded with a common sequence of initial arguments
</li>
</ul></div>
<a name="default_arguments.boost_python_function_overloads"></a><h2>
<a name="id466117"></a>
BOOST_PYTHON_FUNCTION_OVERLOADS
</h2>
<p>
Boost.Python now has a way to make it easier. For instance, given a function:
</p>
<pre class="programlisting">
<span class="keyword">int</span> <span class="identifier">foo</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">char</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">3</span><span class="special">)</span>
<span class="special">{</span>
<span class="comment">/*...*/</span>
<span class="special">}</span>
</pre>
<p>
The macro invocation:
</p>
<pre class="programlisting">
<span class="identifier">BOOST_PYTHON_FUNCTION_OVERLOADS</span><span class="special">(</span><span class="identifier">foo_overloads</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">4</span><span class="special">)</span>
</pre>
<p>
will automatically create the thin wrappers for us. This macro will create
a class <tt class="literal">foo_overloads</tt> that can be passed on to <tt class="literal">def(...)</tt>.
The third and fourth macro argument are the minimum arguments and maximum
arguments, respectively. In our <tt class="literal">foo</tt> function the minimum
number of arguments is 1 and the maximum number of arguments is 4. The <tt class="literal">def(...)</tt>
function will automatically add all the foo variants for us:
</p>
<pre class="programlisting">
<span class="identifier">def</span><span class="special">(</span><span class="string">"foo"</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">,</span> <span class="identifier">foo_overloads</span><span class="special">());</span>
</pre>
<a name="default_arguments.boost_python_member_function_overloads"></a><h2>
<a name="id466436"></a>
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS
</h2>
<p>
Objects here, objects there, objects here there everywhere. More frequently
than anything else, we need to expose member functions of our classes to
Python. Then again, we have the same inconveniences as before when default
arguments or overloads with a common sequence of initial arguments come into
play. Another macro is provided to make this a breeze.
</p>
<p>
Like <tt class="literal">BOOST_PYTHON_FUNCTION_OVERLOADS</tt>, <tt class="literal">BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS</tt>
may be used to automatically create the thin wrappers for wrapping member
functions. Let's have an example:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">george</span>
<span class="special">{</span>
<span class="keyword">void</span>
<span class="identifier">wack_em</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="keyword">char</span> <span class="identifier">c</span> <span class="special">=</span> <span class="char">'x'</span><span class="special">)</span>
<span class="special">{</span>
<span class="comment">/*...*/</span>
<span class="special">}</span>
<span class="special">};</span>
</pre>
<p>
The macro invocation:
</p>
<pre class="programlisting">
<span class="identifier">BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS</span><span class="special">(</span><span class="identifier">george_overloads</span><span class="special">,</span> <span class="identifier">wack_em</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">3</span><span class="special">)</span>
</pre>
<p>
will generate a set of thin wrappers for george's <tt class="literal">wack_em</tt>
member function accepting a minimum of 1 and a maximum of 3 arguments (i.e.
the third and fourth macro argument). The thin wrappers are all enclosed
in a class named <tt class="literal">george_overloads</tt> that can then be used
as an argument to <tt class="literal">def(...)</tt>:
</p>
<pre class="programlisting">
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"wack_em"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">george</span><span class="special">::</span><span class="identifier">wack_em</span><span class="special">,</span> <span class="identifier">george_overloads</span><span class="special">());</span>
</pre>
<p>
See the <a href="../../../../v2/overloads.html#BOOST_PYTHON_FUNCTION_OVERLOADS-spec" target="_top">overloads
reference</a> for details.
</p>
<a name="default_arguments.init_and_optional"></a><h2>
<a name="id466799"></a>
init and optional
</h2>
<p>
A similar facility is provided for class constructors, again, with default
arguments or a sequence of overloads. Remember <tt class="literal">init&lt;...&gt;</tt>?
For example, given a class X with a constructor:
</p>
<pre class="programlisting">
<span class="keyword">struct</span> <span class="identifier">X</span>
<span class="special">{</span>
<span class="identifier">X</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">char</span> <span class="identifier">b</span> <span class="special">=</span> <span class="char">'D'</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">c</span> <span class="special">=</span> <span class="string">"constructor"</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">);</span>
<span class="comment">/*...*/</span>
<span class="special">}</span>
</pre>
<p>
You can easily add this constructor to Boost.Python in one shot:
</p>
<pre class="programlisting">
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">init</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;</span> <span class="special">&gt;())</span>
</pre>
<p>
Notice the use of <tt class="literal">init&lt;...&gt;</tt> and <tt class="literal">optional&lt;...&gt;</tt>
to signify the default (optional arguments).
</p>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.auto_overloading"></a>Auto-Overloading</h3></div></div></div>
<p>
It was mentioned in passing in the previous section that <tt class="literal">BOOST_PYTHON_FUNCTION_OVERLOADS</tt>
and <tt class="literal">BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS</tt> can also be
used for overloaded functions and member functions with a common sequence
of initial arguments. Here is an example:
</p>
<pre class="programlisting">
<span class="keyword">void</span> <span class="identifier">foo</span><span class="special">()</span>
<span class="special">{</span>
<span class="comment">/*...*/</span>
<span class="special">}</span>
<span class="keyword">void</span> <span class="identifier">foo</span><span class="special">(</span><span class="keyword">bool</span> <span class="identifier">a</span><span class="special">)</span>
<span class="special">{</span>
<span class="comment">/*...*/</span>
<span class="special">}</span>
<span class="keyword">void</span> <span class="identifier">foo</span><span class="special">(</span><span class="keyword">bool</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">b</span><span class="special">)</span>
<span class="special">{</span>
<span class="comment">/*...*/</span>
<span class="special">}</span>
<span class="keyword">void</span> <span class="identifier">foo</span><span class="special">(</span><span class="keyword">bool</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">char</span> <span class="identifier">c</span><span class="special">)</span>
<span class="special">{</span>
<span class="comment">/*...*/</span>
<span class="special">}</span>
</pre>
<p>
Like in the previous section, we can generate thin wrappers for these overloaded
functions in one-shot:
</p>
<pre class="programlisting">
<span class="identifier">BOOST_PYTHON_FUNCTION_OVERLOADS</span><span class="special">(</span><span class="identifier">foo_overloads</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="number">3</span><span class="special">)</span>
</pre>
<p>
Then...
</p>
<pre class="programlisting">
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"foo"</span><span class="special">,</span> <span class="special">(</span><span class="keyword">void</span><span class="special">(*)(</span><span class="keyword">bool</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">))</span><span class="number">0</span><span class="special">,</span> <span class="identifier">foo_overloads</span><span class="special">());</span>
</pre>
<p>
Notice though that we have a situation now where we have a minimum of zero
(0) arguments and a maximum of 3 arguments.
</p>
<a name="auto_overloading.manual_wrapping"></a><h2>
<a name="id467581"></a>
Manual Wrapping
</h2>
<p>
It is important to emphasize however that <span class="bold"><b>the overloaded
functions must have a common sequence of initial arguments</b></span>. Otherwise,
our scheme above will not work. If this is not the case, we have to wrap
our functions <a href="functions.html#python.overloading" title="Overloading">manually</a>.
</p>
<p>
Actually, we can mix and match manual wrapping of overloaded functions and
automatic wrapping through <tt class="literal">BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS</tt>
and its sister, <tt class="literal">BOOST_PYTHON_FUNCTION_OVERLOADS</tt>. Following
up on our example presented in the section <a href="functions.html#python.overloading" title="Overloading">on
overloading</a>, since the first 4 overload functins have a common sequence
of initial arguments, we can use <tt class="literal">BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS</tt>
to automatically wrap the first three of the <tt class="literal">def</tt>s and
manually wrap just the last. Here's how we'll do this:
</p>
<pre class="programlisting">
<span class="identifier">BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS</span><span class="special">(</span><span class="identifier">xf_overloads</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">4</span><span class="special">)</span>
</pre>
<p>
Create a member function pointers as above for both X::f overloads:
</p>
<pre class="programlisting">
<span class="keyword">bool</span> <span class="special">(</span><span class="identifier">X</span><span class="special">::*</span><span class="identifier">fx1</span><span class="special">)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">double</span><span class="special">,</span> <span class="keyword">char</span><span class="special">)</span> <span class="special">=</span> <span class="special">&amp;</span><span class="identifier">X</span><span class="special">::</span><span class="identifier">f</span><span class="special">;</span>
<span class="keyword">int</span> <span class="special">(</span><span class="identifier">X</span><span class="special">::*</span><span class="identifier">fx2</span><span class="special">)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">)</span> <span class="special">=</span> <span class="special">&amp;</span><span class="identifier">X</span><span class="special">::</span><span class="identifier">f</span><span class="special">;</span>
</pre>
<p>
Then...
</p>
<pre class="programlisting">
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">fx1</span><span class="special">,</span> <span class="identifier">xf_overloads</span><span class="special">());</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"f"</span><span class="special">,</span> <span class="identifier">fx2</span><span class="special">)</span>
</pre>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2002-2005 Joel
de Guzman, David Abrahams<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">
http://www.boost.org/LICENSE_1_0.txt </a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="exposing.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="object.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -0,0 +1,208 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title> Building Hello World</title>
<link rel="stylesheet" href="../../../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="../index.html" title="Chapter 1. python 1.0">
<link rel="up" href="../index.html" title="Chapter 1. python 1.0">
<link rel="prev" href="../index.html" title="Chapter 1. python 1.0">
<link rel="next" href="exposing.html" title=" Exposing Classes">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../../../more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="exposing.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="python.hello"></a> Building Hello World</h2></div></div></div>
<a name="hello.from_start_to_finish"></a><h2>
<a name="id387672"></a>
From Start To Finish
</h2>
<p>
Now the first thing you'd want to do is to build the Hello World module and
try it for yourself in Python. In this section, we will outline the steps necessary
to achieve that. We will use the build tool that comes bundled with every boost
distribution: <span class="bold"><b>bjam</b></span>.
</p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/html/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td colspan="2" align="left" valign="top">
<p>
<span class="bold"><b>Building without bjam</b></span>
</p>
<p>
Besides bjam, there are of course other ways to get your module built. What's
written here should not be taken as "the one and only way". There
are of course other build tools apart from <tt class="literal">bjam</tt>.
</p>
<p>
Take note however that the preferred build tool for Boost.Python is bjam.
There are so many ways to set up the build incorrectly. Experience shows
that 90% of the "I can't build Boost.Python" problems come from
people who had to use a different tool.
</p>
</td></tr>
</table></div>
<p>
We will skip over the details. Our objective will be to simply create the hello
world module and run it in Python. For a complete reference to building Boost.Python,
check out: <a href="../../../../building.html" target="_top">building.html</a>. After
this brief <span class="emphasis"><em>bjam</em></span> tutorial, we should have built the DLLs
and run a python program using the extension.
</p>
<p>
The tutorial example can be found in the directory: <tt class="literal">libs/python/example/tutorial</tt>.
There, you can find:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
hello.cpp
</li>
<li>
hello.py
</li>
<li>
Jamroot
</li>
</ul></div>
<p>
The <tt class="literal">hello.cpp</tt> file is our C++ hello world example. The
<tt class="literal">Jamroot</tt> is a minimalist <span class="emphasis"><em>bjam</em></span> script
that builds the DLLs for us. Finally, <tt class="literal">hello.py</tt> is our Python
program that uses the extension in <tt class="literal">hello.cpp</tt>.
</p>
<p>
Before anything else, you should have the bjam executable in your boost directory
or somewhere in your path such that <tt class="literal">bjam</tt> can be executed
in the command line. Pre-built Boost.Jam executables are available for most
platforms. The complete list of Bjam executables can be found <a href="http://sourceforge.net/project/showfiles.php?group_id=7586" target="_top">here</a>.
</p>
<a name="hello.let_s_jam_"></a><h2>
<a name="id386265"></a>
Let's Jam!
</h2>
<p>
<span class="inlinemediaobject"><img src="../images/jam.png" alt="jam"></span>
</p>
<p>
<a href="../../../../../example/tutorial/Jamroot" target="_top">Here</a> is our minimalist
Jamroot file. Simply copy the file and tweak <tt class="literal">use-project boost</tt>
to where your boost root directory is and your OK.
</p>
<p>
The comments contained in the Jamrules file above should be sufficient to get
you going.
</p>
<a name="hello.running_bjam"></a><h2>
<a name="id386322"></a>
Running bjam
</h2>
<p>
<span class="emphasis"><em>bjam</em></span> is run using your operating system's command line
interpreter.
</p>
<div class="blockquote"><blockquote class="blockquote">
<p>
</p>
<p>
Start it up.
</p>
<p>
</p>
</blockquote></div>
<p>
A file called user-config.jam in your home directory is used to configure your
tools. In Windows, your home directory can be found by typing:
</p>
<pre class="programlisting">ECHO %HOMEDRIVE%%HOMEPATH%
</pre>
<p>
into a command prompt window. Your file should at least have the rules for
your compiler and your python installation. A specific example of this on Windows
would be:
</p>
<pre class="programlisting"># MSVC configuration
using msvc : 8.0 ;
# Python configuration
using python : 2.4 : C:/dev/tools<span class="emphasis"><em>Python</em></span> ;
</pre>
<p>
The first rule tells Bjam to use the MSVC 8.0 compiler and associated tools.
The second rule provides information on Python, its version and where it is
located. The above assumes that the Python installation is in <tt class="literal">C:/dev/tools/Python/</tt>.
If you have one fairly "standard" python installation for your platform,
you might not need to do this.
</p>
<p>
Now we are ready... Be sure to <tt class="literal">cd</tt> to <tt class="literal">libs/python/example/tutorial</tt>
where the tutorial <tt class="literal">"hello.cpp"</tt> and the <tt class="literal">"Jamroot"</tt>
is situated.
</p>
<p>
Finally:
</p>
<pre class="programlisting">
<span class="identifier">bjam</span>
</pre>
<p>
It should be building now:
</p>
<pre class="programlisting">cd C:\dev\boost\libs\python\example\tutorial
bjam
...patience...
...found 1101 targets...
...updating 35 targets...
</pre>
<p>
And so on... Finally:
</p>
<pre class="programlisting">Creating library <span class="emphasis"><em>path-to-boost_python.dll</em></span>
Creating library <span class="emphasis"><em>path-to-'''hello_ext'''.exp</em></span>
**passed** ... hello.test
...updated 35 targets...
</pre>
<p>
Or something similar. If all is well, you should now have built the DLLs and
run the Python program.
</p>
<div class="blockquote"><blockquote class="blockquote">
<p>
</p>
<p>
<span class="bold"><b>There you go... Have fun!</b></span>
</p>
<p>
</p>
</blockquote></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2002-2005 Joel
de Guzman, David Abrahams<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">
http://www.boost.org/LICENSE_1_0.txt </a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="exposing.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -0,0 +1,206 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Iterators</title>
<link rel="stylesheet" href="../../../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="../index.html" title="Chapter 1. python 1.0">
<link rel="up" href="../index.html" title="Chapter 1. python 1.0">
<link rel="prev" href="embedding.html" title="Embedding">
<link rel="next" href="exception.html" title=" Exception Translation">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../../../more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="embedding.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="exception.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="python.iterators"></a>Iterators</h2></div></div></div>
<p>
In C++, and STL in particular, we see iterators everywhere. Python also has
iterators, but these are two very different beasts.
</p>
<p>
<span class="bold"><b>C++ iterators:</b></span>
</p>
<div class="itemizedlist"><ul type="disc">
<li>
C++ has 5 type categories (random-access, bidirectional, forward, input,
output)
</li>
<li>
There are 2 Operation categories: reposition, access
</li>
<li>
A pair of iterators is needed to represent a (first/last) range.
</li>
</ul></div>
<p>
<span class="bold"><b>Python Iterators:</b></span>
</p>
<div class="itemizedlist"><ul type="disc">
<li>
1 category (forward)
</li>
<li>
1 operation category (next())
</li>
<li>
Raises StopIteration exception at end
</li>
</ul></div>
<p>
The typical Python iteration protocol: <tt class="literal"><span class="bold"><b>for y
in x...</b></span></tt> is as follows:
</p>
<p>
</p>
<pre class="programlisting">
<span class="identifier">iter</span> <span class="special">=</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">__iter__</span><span class="special">()</span> <span class="comment"># get iterator
</span><span class="keyword">try</span><span class="special">:</span>
<span class="keyword">while</span> <span class="number">1</span><span class="special">:</span>
<span class="identifier">y</span> <span class="special">=</span> <span class="identifier">iter</span><span class="special">.</span><span class="identifier">next</span><span class="special">()</span> <span class="comment"># get each item
</span> <span class="special">...</span> <span class="comment"># process y
</span><span class="keyword">except</span> <span class="identifier">StopIteration</span><span class="special">:</span> <span class="keyword">pass</span> <span class="comment"># iterator exhausted
</span></pre>
<p>
Boost.Python provides some mechanisms to make C++ iterators play along nicely
as Python iterators. What we need to do is to produce appropriate <tt class="computeroutput"><span class="identifier">__iter__</span></tt> function from C++ iterators that
is compatible with the Python iteration protocol. For example:
</p>
<p>
</p>
<pre class="programlisting">
<span class="identifier">object</span> <span class="identifier">get_iterator</span> <span class="special">=</span> <span class="identifier">iterator</span><span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;();</span>
<span class="identifier">object</span> <span class="identifier">iter</span> <span class="special">=</span> <span class="identifier">get_iterator</span><span class="special">(</span><span class="identifier">v</span><span class="special">);</span>
<span class="identifier">object</span> <span class="identifier">first</span> <span class="special">=</span> <span class="identifier">iter</span><span class="special">.</span><span class="identifier">next</span><span class="special">();</span>
</pre>
<p>
Or for use in class_&lt;&gt;:
</p>
<pre class="programlisting">
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"__iter__"</span><span class="special">,</span> <span class="identifier">iterator</span><span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;())</span>
</pre>
<p>
<span class="bold"><b>range</b></span>
</p>
<p>
We can create a Python savvy iterator using the range function:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
range(start, finish)
</li>
<li>
range&lt;Policies,Target&gt;(start, finish)
</li>
</ul></div>
<p>
Here, start/finish may be one of:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
member data pointers
</li>
<li>
member function pointers
</li>
<li>
adaptable function object (use Target parameter)
</li>
</ul></div>
<p>
<span class="bold"><b>iterator</b></span>
</p>
<div class="itemizedlist"><ul type="disc"><li>
iterator&lt;T, Policies&gt;()
</li></ul></div>
<p>
Given a container <tt class="literal">T</tt>, iterator is a shortcut that simply
calls <tt class="literal">range</tt> with &amp;T::begin, &amp;T::end.
</p>
<p>
Let's put this into action... Here's an example from some hypothetical bogon
Particle accelerator code:
</p>
<p>
</p>
<pre class="programlisting">
<span class="identifier">f</span> <span class="special">=</span> <span class="identifier">Field</span><span class="special">()</span>
<span class="keyword">for</span> <span class="identifier">x</span> <span class="keyword">in</span> <span class="identifier">f</span><span class="special">.</span><span class="identifier">pions</span><span class="special">:</span>
<span class="identifier">smash</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span>
<span class="keyword">for</span> <span class="identifier">y</span> <span class="keyword">in</span> <span class="identifier">f</span><span class="special">.</span><span class="identifier">bogons</span><span class="special">:</span>
<span class="identifier">count</span><span class="special">(</span><span class="identifier">y</span><span class="special">)</span>
</pre>
<p>
Now, our C++ Wrapper:
</p>
<p>
</p>
<pre class="programlisting">
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">&gt;(</span><span class="string">"Field"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">property</span><span class="special">(</span><span class="string">"pions"</span><span class="special">,</span> <span class="identifier">range</span><span class="special">(&amp;</span><span class="identifier">F</span><span class="special">::</span><span class="identifier">p_begin</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">F</span><span class="special">::</span><span class="identifier">p_end</span><span class="special">))</span>
<span class="special">.</span><span class="identifier">property</span><span class="special">(</span><span class="string">"bogons"</span><span class="special">,</span> <span class="identifier">range</span><span class="special">(&amp;</span><span class="identifier">F</span><span class="special">::</span><span class="identifier">b_begin</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">F</span><span class="special">::</span><span class="identifier">b_end</span><span class="special">));</span>
</pre>
<p>
<span class="bold"><b>stl_input_iterator</b></span>
</p>
<p>
So far, we have seen how to expose C++ iterators and ranges to Python. Sometimes
we wish to go the other way, though: we'd like to pass a Python sequence to
an STL algorithm or use it to initialize an STL container. We need to make
a Python iterator look like an STL iterator. For that, we use <tt class="computeroutput"><span class="identifier">stl_input_iterator</span><span class="special">&lt;&gt;</span></tt>.
Consider how we might implement a function that exposes <tt class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;::</span><span class="identifier">assign</span><span class="special">()</span></tt> to Python:
</p>
<p>
</p>
<pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
<span class="keyword">void</span> <span class="identifier">list_assign</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">object</span> <span class="identifier">o</span><span class="special">)</span> <span class="special">{</span>
<span class="comment">// Turn a Python sequence into an STL input range
</span> <span class="identifier">stl_input_iterator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">begin</span><span class="special">(</span><span class="identifier">o</span><span class="special">),</span> <span class="identifier">end</span><span class="special">;</span>
<span class="identifier">l</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">begin</span><span class="special">,</span> <span class="identifier">end</span><span class="special">);</span>
<span class="special">}</span>
<span class="comment">// Part of the wrapper for list&lt;int&gt;
</span><span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;(</span><span class="string">"list_int"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"assign"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">list_assign</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;)</span>
<span class="comment">// ...
</span> <span class="special">;</span>
</pre>
<p>
Now in Python, we can assign any integer sequence to <tt class="computeroutput"><span class="identifier">list_int</span></tt>
objects:
</p>
<p>
</p>
<pre class="programlisting">
<span class="identifier">x</span> <span class="special">=</span> <span class="identifier">list_int</span><span class="special">();</span>
<span class="identifier">x</span><span class="special">.</span><span class="identifier">assign</span><span class="special">([</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">,</span><span class="number">4</span><span class="special">,</span><span class="number">5</span><span class="special">])</span>
</pre>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2002-2005 Joel
de Guzman, David Abrahams<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">
http://www.boost.org/LICENSE_1_0.txt </a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="embedding.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="exception.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -0,0 +1,357 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title> Object Interface</title>
<link rel="stylesheet" href="../../../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="../index.html" title="Chapter 1. python 1.0">
<link rel="up" href="../index.html" title="Chapter 1. python 1.0">
<link rel="prev" href="functions.html" title="Functions">
<link rel="next" href="embedding.html" title="Embedding">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../../../more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="functions.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="embedding.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="python.object"></a> Object Interface</h2></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="object.html#python.basic_interface">Basic Interface</a></span></dt>
<dt><span class="section"><a href="object.html#python.derived_object_types">Derived Object types</a></span></dt>
<dt><span class="section"><a href="object.html#python.extracting_c___objects">Extracting C++ objects</a></span></dt>
<dt><span class="section"><a href="object.html#python.enums">Enums</a></span></dt>
</dl></div>
<p>
Python is dynamically typed, unlike C++ which is statically typed. Python variables
may hold an integer, a float, list, dict, tuple, str, long etc., among other
things. In the viewpoint of Boost.Python and C++, these Pythonic variables
are just instances of class <tt class="literal">object</tt>. We will see in this
chapter how to deal with Python objects.
</p>
<p>
As mentioned, one of the goals of Boost.Python is to provide a bidirectional
mapping between C++ and Python while maintaining the Python feel. Boost.Python
C++ <tt class="literal">object</tt>s are as close as possible to Python. This should
minimize the learning curve significantly.
</p>
<p>
<span class="inlinemediaobject"><img src="../images/python.png" alt="python"></span>
</p>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.basic_interface"></a>Basic Interface</h3></div></div></div>
<p>
Class <tt class="literal">object</tt> wraps <tt class="literal">PyObject*</tt>. All the
intricacies of dealing with <tt class="literal">PyObject</tt>s such as managing
reference counting are handled by the <tt class="literal">object</tt> class. C++
object interoperability is seamless. Boost.Python C++ <tt class="literal">object</tt>s
can in fact be explicitly constructed from any C++ object.
</p>
<p>
To illustrate, this Python code snippet:
</p>
<p>
</p>
<pre class="programlisting">
<span class="keyword">def</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">):</span>
<span class="keyword">if</span> <span class="special">(</span><span class="identifier">y</span> <span class="special">==</span> <span class="string">'foo'</span><span class="special">):</span>
<span class="identifier">x</span><span class="special">[</span><span class="number">3</span><span class="special">:</span><span class="number">7</span><span class="special">]</span> <span class="special">=</span> <span class="string">'bar'</span>
<span class="keyword">else</span><span class="special">:</span>
<span class="identifier">x</span><span class="special">.</span><span class="identifier">items</span> <span class="special">+=</span> <span class="identifier">y</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="identifier">x</span><span class="special">)</span>
<span class="keyword">return</span> <span class="identifier">x</span>
<span class="keyword">def</span> <span class="identifier">getfunc</span><span class="special">():</span>
<span class="keyword">return</span> <span class="identifier">f</span><span class="special">;</span>
</pre>
<p>
Can be rewritten in C++ using Boost.Python facilities this way:
</p>
<p>
</p>
<pre class="programlisting">
<span class="identifier">object</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">object</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">object</span> <span class="identifier">y</span><span class="special">)</span> <span class="special">{</span>
<span class="keyword">if</span> <span class="special">(</span><span class="identifier">y</span> <span class="special">==</span> <span class="string">"foo"</span><span class="special">)</span>
<span class="identifier">x</span><span class="special">.</span><span class="identifier">slice</span><span class="special">(</span><span class="number">3</span><span class="special">,</span><span class="number">7</span><span class="special">)</span> <span class="special">=</span> <span class="string">"bar"</span><span class="special">;</span>
<span class="keyword">else</span>
<span class="identifier">x</span><span class="special">.</span><span class="identifier">attr</span><span class="special">(</span><span class="string">"items"</span><span class="special">)</span> <span class="special">+=</span> <span class="identifier">y</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="identifier">x</span><span class="special">);</span>
<span class="keyword">return</span> <span class="identifier">x</span><span class="special">;</span>
<span class="special">}</span>
<span class="identifier">object</span> <span class="identifier">getfunc</span><span class="special">()</span> <span class="special">{</span>
<span class="keyword">return</span> <span class="identifier">object</span><span class="special">(</span><span class="identifier">f</span><span class="special">);</span>
<span class="special">}</span>
</pre>
<p>
Apart from cosmetic differences due to the fact that we are writing the code
in C++, the look and feel should be immediately apparent to the Python coder.
</p>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.derived_object_types"></a>Derived Object types</h3></div></div></div>
<p>
Boost.Python comes with a set of derived <tt class="literal">object</tt> types
corresponding to that of Python's:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
list
</li>
<li>
dict
</li>
<li>
tuple
</li>
<li>
str
</li>
<li>
long_
</li>
<li>
enum
</li>
</ul></div>
<p>
These derived <tt class="literal">object</tt> types act like real Python types.
For instance:
</p>
<pre class="programlisting">
<span class="identifier">str</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">==&gt;</span> <span class="string">"1"</span>
</pre>
<p>
Wherever appropriate, a particular derived <tt class="literal">object</tt> has
corresponding Python type's methods. For instance, <tt class="literal">dict</tt>
has a <tt class="literal">keys()</tt> method:
</p>
<pre class="programlisting">
<span class="identifier">d</span><span class="special">.</span><span class="identifier">keys</span><span class="special">()</span>
</pre>
<p>
<tt class="literal">make_tuple</tt> is provided for declaring <span class="emphasis"><em>tuple literals</em></span>.
Example:
</p>
<pre class="programlisting">
<span class="identifier">make_tuple</span><span class="special">(</span><span class="number">123</span><span class="special">,</span> <span class="char">'D'</span><span class="special">,</span> <span class="string">"Hello, World"</span><span class="special">,</span> <span class="number">0.0</span><span class="special">);</span>
</pre>
<p>
In C++, when Boost.Python <tt class="literal">object</tt>s are used as arguments
to functions, subtype matching is required. For example, when a function
<tt class="literal">f</tt>, as declared below, is wrapped, it will only accept
instances of Python's <tt class="literal">str</tt> type and subtypes.
</p>
<pre class="programlisting">
<span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">str</span> <span class="identifier">name</span><span class="special">)</span>
<span class="special">{</span>
<span class="identifier">object</span> <span class="identifier">n2</span> <span class="special">=</span> <span class="identifier">name</span><span class="special">.</span><span class="identifier">attr</span><span class="special">(</span><span class="string">"upper"</span><span class="special">)();</span> <span class="comment">// NAME = name.upper()
</span> <span class="identifier">str</span> <span class="identifier">NAME</span> <span class="special">=</span> <span class="identifier">name</span><span class="special">.</span><span class="identifier">upper</span><span class="special">();</span> <span class="comment">// better
</span> <span class="identifier">object</span> <span class="identifier">msg</span> <span class="special">=</span> <span class="string">"%s is bigger than %s"</span> <span class="special">%</span> <span class="identifier">make_tuple</span><span class="special">(</span><span class="identifier">NAME</span><span class="special">,</span><span class="identifier">name</span><span class="special">);</span>
<span class="special">}</span>
</pre>
<p>
In finer detail:
</p>
<pre class="programlisting">
<span class="identifier">str</span> <span class="identifier">NAME</span> <span class="special">=</span> <span class="identifier">name</span><span class="special">.</span><span class="identifier">upper</span><span class="special">();</span>
</pre>
<p>
Illustrates that we provide versions of the str type's methods as C++ member
functions.
</p>
<pre class="programlisting">
<span class="identifier">object</span> <span class="identifier">msg</span> <span class="special">=</span> <span class="string">"%s is bigger than %s"</span> <span class="special">%</span> <span class="identifier">make_tuple</span><span class="special">(</span><span class="identifier">NAME</span><span class="special">,</span><span class="identifier">name</span><span class="special">);</span>
</pre>
<p>
Demonstrates that you can write the C++ equivalent of <tt class="literal">"format"
% x,y,z</tt> in Python, which is useful since there's no easy way to
do that in std C++.
</p>
<div class="sidebar"><p>
<span class="inlinemediaobject"><img src="../images/alert.png" alt="alert"></span> <span class="bold"><b>Beware</b></span> the common pitfall
of forgetting that the constructors of most of Python's mutable types make
copies, just as in Python.
</p></div>
<p>
Python:
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">d</span> <span class="special">=</span> <span class="identifier">dict</span><span class="special">(</span><span class="identifier">x</span><span class="special">.</span><span class="identifier">__dict__</span><span class="special">)</span> <span class="comment"># copies x.__dict__
</span><span class="special">&gt;&gt;&gt;</span> <span class="identifier">d</span><span class="special">[</span><span class="string">'whatever'</span><span class="special">]</span> <span class="special">=</span> <span class="number">3</span> <span class="comment"># modifies the copy
</span></pre>
<p>
C++:
</p>
<pre class="programlisting">
<span class="identifier">dict</span> <span class="identifier">d</span><span class="special">(</span><span class="identifier">x</span><span class="special">.</span><span class="identifier">attr</span><span class="special">(</span><span class="string">"__dict__"</span><span class="special">));</span> <span class="comment">// copies x.__dict__
</span><span class="identifier">d</span><span class="special">[</span><span class="char">'whatever'</span><span class="special">]</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span> <span class="comment">// modifies the copy
</span></pre>
<a name="derived_object_types.class__lt_t_gt__as_objects"></a><h2>
<a name="id469586"></a>
class_&lt;T&gt; as objects
</h2>
<p>
Due to the dynamic nature of Boost.Python objects, any <tt class="literal">class_&lt;T&gt;</tt>
may also be one of these types! The following code snippet wraps the class
(type) object.
</p>
<p>
We can use this to create wrapped instances. Example:
</p>
<pre class="programlisting">
<span class="identifier">object</span> <span class="identifier">vec345</span> <span class="special">=</span> <span class="special">(</span>
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">Vec2</span><span class="special">&gt;(</span><span class="string">"Vec2"</span><span class="special">,</span> <span class="identifier">init</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;())</span>
<span class="special">.</span><span class="identifier">def_readonly</span><span class="special">(</span><span class="string">"length"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Point</span><span class="special">::</span><span class="identifier">length</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def_readonly</span><span class="special">(</span><span class="string">"angle"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Point</span><span class="special">::</span><span class="identifier">angle</span><span class="special">)</span>
<span class="special">)(</span><span class="number">3.0</span><span class="special">,</span> <span class="number">4.0</span><span class="special">);</span>
<span class="identifier">assert</span><span class="special">(</span><span class="identifier">vec345</span><span class="special">.</span><span class="identifier">attr</span><span class="special">(</span><span class="string">"length"</span><span class="special">)</span> <span class="special">==</span> <span class="number">5.0</span><span class="special">);</span>
</pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.extracting_c___objects"></a>Extracting C++ objects</h3></div></div></div>
<p>
At some point, we will need to get C++ values out of object instances. This
can be achieved with the <tt class="literal">extract&lt;T&gt;</tt> function. Consider
the following:
</p>
<pre class="programlisting">
<span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="identifier">o</span><span class="special">.</span><span class="identifier">attr</span><span class="special">(</span><span class="string">"length"</span><span class="special">);</span> <span class="comment">// compile error
</span></pre>
<p>
In the code above, we got a compiler error because Boost.Python <tt class="literal">object</tt>
can't be implicitly converted to <tt class="literal">double</tt>s. Instead, what
we wanted to do above can be achieved by writing:
</p>
<pre class="programlisting">
<span class="keyword">double</span> <span class="identifier">l</span> <span class="special">=</span> <span class="identifier">extract</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;(</span><span class="identifier">o</span><span class="special">.</span><span class="identifier">attr</span><span class="special">(</span><span class="string">"length"</span><span class="special">));</span>
<span class="identifier">Vec2</span><span class="special">&amp;</span> <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">extract</span><span class="special">&lt;</span><span class="identifier">Vec2</span><span class="special">&amp;&gt;(</span><span class="identifier">o</span><span class="special">);</span>
<span class="identifier">assert</span><span class="special">(</span><span class="identifier">l</span> <span class="special">==</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">length</span><span class="special">());</span>
</pre>
<p>
The first line attempts to extract the "length" attribute of the
Boost.Python <tt class="literal">object</tt>. The second line attempts to <span class="emphasis"><em>extract</em></span>
the <tt class="literal">Vec2</tt> object from held by the Boost.Python <tt class="literal">object</tt>.
</p>
<p>
Take note that we said "attempt to" above. What if the Boost.Python
<tt class="literal">object</tt> does not really hold a <tt class="literal">Vec2</tt>
type? This is certainly a possibility considering the dynamic nature of Python
<tt class="literal">object</tt>s. To be on the safe side, if the C++ type can't
be extracted, an appropriate exception is thrown. To avoid an exception,
we need to test for extractibility:
</p>
<pre class="programlisting">
<span class="identifier">extract</span><span class="special">&lt;</span><span class="identifier">Vec2</span><span class="special">&amp;&gt;</span> <span class="identifier">x</span><span class="special">(</span><span class="identifier">o</span><span class="special">);</span>
<span class="keyword">if</span> <span class="special">(</span><span class="identifier">x</span><span class="special">.</span><span class="identifier">check</span><span class="special">())</span> <span class="special">{</span>
<span class="identifier">Vec2</span><span class="special">&amp;</span> <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">x</span><span class="special">();</span> <span class="special">...</span>
</pre>
<p>
<span class="inlinemediaobject"><img src="../images/tip.png" alt="tip"></span> The astute reader might have noticed that the <tt class="literal">extract&lt;T&gt;</tt>
facility in fact solves the mutable copying problem:
</p>
<pre class="programlisting">
<span class="identifier">dict</span> <span class="identifier">d</span> <span class="special">=</span> <span class="identifier">extract</span><span class="special">&lt;</span><span class="identifier">dict</span><span class="special">&gt;(</span><span class="identifier">x</span><span class="special">.</span><span class="identifier">attr</span><span class="special">(</span><span class="string">"__dict__"</span><span class="special">));</span>
<span class="identifier">d</span><span class="special">[</span><span class="string">"whatever"</span><span class="special">]</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span> <span class="comment">// modifies x.__dict__ !
</span></pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.enums"></a>Enums</h3></div></div></div>
<p>
Boost.Python has a nifty facility to capture and wrap C++ enums. While Python
has no <tt class="literal">enum</tt> type, we'll often want to expose our C++ enums
to Python as an <tt class="literal">int</tt>. Boost.Python's enum facility makes
this easy while taking care of the proper conversions from Python's dynamic
typing to C++'s strong static typing (in C++, ints cannot be implicitly converted
to enums). To illustrate, given a C++ enum:
</p>
<pre class="programlisting">
<span class="keyword">enum</span> <span class="identifier">choice</span> <span class="special">{</span> <span class="identifier">red</span><span class="special">,</span> <span class="identifier">blue</span> <span class="special">};</span>
</pre>
<p>
the construct:
</p>
<pre class="programlisting">
<span class="identifier">enum_</span><span class="special">&lt;</span><span class="identifier">choice</span><span class="special">&gt;(</span><span class="string">"choice"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="string">"red"</span><span class="special">,</span> <span class="identifier">red</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="string">"blue"</span><span class="special">,</span> <span class="identifier">blue</span><span class="special">)</span>
<span class="special">;</span>
</pre>
<p>
can be used to expose to Python. The new enum type is created in the current
<tt class="literal">scope()</tt>, which is usually the current module. The snippet
above creates a Python class derived from Python's <tt class="literal">int</tt>
type which is associated with the C++ type passed as its first parameter.
</p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/html/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td colspan="2" align="left" valign="top">
<p>
<span class="bold"><b>what is a scope?</b></span>
</p>
<p>
The scope is a class that has an associated global Python object which
controls the Python namespace in which new extension classes and wrapped
functions will be defined as attributes. Details can be found <a href="../../../../v2/scope.html" target="_top">here</a>.
</p>
</td></tr>
</table></div>
<p>
You can access those values in Python as
</p>
<p>
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">my_module</span><span class="special">.</span><span class="identifier">choice</span><span class="special">.</span><span class="identifier">red</span>
<span class="identifier">my_module</span><span class="special">.</span><span class="identifier">choice</span><span class="special">.</span><span class="identifier">red</span>
</pre>
<p>
where my_module is the module where the enum is declared. You can also create
a new scope around a class:
</p>
<p>
</p>
<pre class="programlisting">
<span class="identifier">scope</span> <span class="identifier">in_X</span> <span class="special">=</span> <span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">X</span><span class="special">&gt;(</span><span class="string">"X"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span> <span class="special">...</span> <span class="special">)</span>
<span class="special">.</span><span class="identifier">def</span><span class="special">(</span> <span class="special">...</span> <span class="special">)</span>
<span class="special">;</span>
<span class="comment">// Expose X::nested as X.nested
</span><span class="identifier">enum_</span><span class="special">&lt;</span><span class="identifier">X</span><span class="special">::</span><span class="identifier">nested</span><span class="special">&gt;(</span><span class="string">"nested"</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="string">"red"</span><span class="special">,</span> <span class="identifier">red</span><span class="special">)</span>
<span class="special">.</span><span class="identifier">value</span><span class="special">(</span><span class="string">"blue"</span><span class="special">,</span> <span class="identifier">blue</span><span class="special">)</span>
<span class="special">;</span>
</pre>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2002-2005 Joel
de Guzman, David Abrahams<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">
http://www.boost.org/LICENSE_1_0.txt </a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="functions.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="embedding.html"><img src="../../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@@ -0,0 +1,472 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title> General Techniques</title>
<link rel="stylesheet" href="../../../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="../index.html" title="Chapter 1. python 1.0">
<link rel="up" href="../index.html" title="Chapter 1. python 1.0">
<link rel="prev" href="exception.html" title=" Exception Translation">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../../../more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="exception.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="python.techniques"></a> General Techniques</h2></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="techniques.html#python.creating_packages">Creating Packages</a></span></dt>
<dt><span class="section"><a href="techniques.html#python.extending_wrapped_objects_in_python">Extending Wrapped Objects in Python</a></span></dt>
<dt><span class="section"><a href="techniques.html#python.reducing_compiling_time">Reducing Compiling Time</a></span></dt>
</dl></div>
<p>
Here are presented some useful techniques that you can use while wrapping code
with Boost.Python.
</p>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.creating_packages"></a>Creating Packages</h3></div></div></div>
<p>
A Python package is a collection of modules that provide to the user a certain
functionality. If you're not familiar on how to create packages, a good introduction
to them is provided in the <a href="http://www.python.org/doc/current/tut/node8.html" target="_top">Python
Tutorial</a>.
</p>
<p>
But we are wrapping C++ code, using Boost.Python. How can we provide a nice
package interface to our users? To better explain some concepts, let's work
with an example.
</p>
<p>
We have a C++ library that works with sounds: reading and writing various
formats, applying filters to the sound data, etc. It is named (conveniently)
<tt class="literal">sounds</tt>. Our library already has a neat C++ namespace hierarchy,
like so:
</p>
<pre class="programlisting">
<span class="identifier">sounds</span><span class="special">::</span><span class="identifier">core</span>
<span class="identifier">sounds</span><span class="special">::</span><span class="identifier">io</span>
<span class="identifier">sounds</span><span class="special">::</span><span class="identifier">filters</span>
</pre>
<p>
We would like to present this same hierarchy to the Python user, allowing
him to write code like this:
</p>
<pre class="programlisting">
<span class="keyword">import</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">filters</span>
<span class="identifier">sounds</span><span class="special">.</span><span class="identifier">filters</span><span class="special">.</span><span class="identifier">echo</span><span class="special">(...)</span> <span class="comment"># echo is a C++ function
</span></pre>
<p>
The first step is to write the wrapping code. We have to export each module
separately with Boost.Python, like this:
</p>
<pre class="programlisting">
<span class="special">/*</span> <span class="identifier">file</span> <span class="identifier">core</span><span class="special">.</span><span class="identifier">cpp</span> <span class="special">*/</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">core</span><span class="special">)</span>
<span class="special">{</span>
<span class="special">/*</span> <span class="identifier">export</span> <span class="identifier">everything</span> <span class="keyword">in</span> <span class="identifier">the</span> <span class="identifier">sounds</span><span class="special">::</span><span class="identifier">core</span> <span class="identifier">namespace</span> <span class="special">*/</span>
<span class="special">...</span>
<span class="special">}</span>
<span class="special">/*</span> <span class="identifier">file</span> <span class="identifier">io</span><span class="special">.</span><span class="identifier">cpp</span> <span class="special">*/</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">io</span><span class="special">)</span>
<span class="special">{</span>
<span class="special">/*</span> <span class="identifier">export</span> <span class="identifier">everything</span> <span class="keyword">in</span> <span class="identifier">the</span> <span class="identifier">sounds</span><span class="special">::</span><span class="identifier">io</span> <span class="identifier">namespace</span> <span class="special">*/</span>
<span class="special">...</span>
<span class="special">}</span>
<span class="special">/*</span> <span class="identifier">file</span> <span class="identifier">filters</span><span class="special">.</span><span class="identifier">cpp</span> <span class="special">*/</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">filters</span><span class="special">)</span>
<span class="special">{</span>
<span class="special">/*</span> <span class="identifier">export</span> <span class="identifier">everything</span> <span class="keyword">in</span> <span class="identifier">the</span> <span class="identifier">sounds</span><span class="special">::</span><span class="identifier">filters</span> <span class="identifier">namespace</span> <span class="special">*/</span>
<span class="special">...</span>
<span class="special">}</span>
</pre>
<p>
Compiling these files will generate the following Python extensions: <tt class="literal">core.pyd</tt>,
<tt class="literal">io.pyd</tt> and <tt class="literal">filters.pyd</tt>.
</p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/html/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td colspan="2" align="left" valign="top"><p>
The extension <tt class="literal">.pyd</tt> is used for python extension modules,
which are just shared libraries. Using the default for your system, like
<tt class="literal">.so</tt> for Unix and <tt class="literal">.dll</tt> for Windows,
works just as well.
</p></td></tr>
</table></div>
<p>
Now, we create this directory structure for our Python package:
</p>
<pre class="programlisting">sounds/
__init__.py
core.pyd
filters.pyd
io.pyd
</pre>
<p>
The file <tt class="literal">__init__.py</tt> is what tells Python that the directory
<tt class="literal">sounds/</tt> is actually a Python package. It can be a empty
file, but can also perform some magic, that will be shown later.
</p>
<p>
Now our package is ready. All the user has to do is put <tt class="literal">sounds</tt>
into his <a href="http://www.python.org/doc/current/tut/node8.html#SECTION008110000000000000000" target="_top">PYTHONPATH</a>
and fire up the interpreter:
</p>
<p>
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">import</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">io</span>
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">import</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">filters</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">sound</span> <span class="special">=</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">io</span><span class="special">.</span><span class="identifier">open</span><span class="special">(</span><span class="string">'file.mp3'</span><span class="special">)</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">new_sound</span> <span class="special">=</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">filters</span><span class="special">.</span><span class="identifier">echo</span><span class="special">(</span><span class="identifier">sound</span><span class="special">,</span> <span class="number">1.0</span><span class="special">)</span>
</pre>
<p>
Nice heh?
</p>
<p>
This is the simplest way to create hierarchies of packages, but it is not
very flexible. What if we want to add a <span class="emphasis"><em>pure</em></span> Python
function to the filters package, for instance, one that applies 3 filters
in a sound object at once? Sure, you can do this in C++ and export it, but
why not do so in Python? You don't have to recompile the extension modules,
plus it will be easier to write it.
</p>
<p>
If we want this flexibility, we will have to complicate our package hierarchy
a little. First, we will have to change the name of the extension modules:
</p>
<p>
</p>
<pre class="programlisting">
<span class="comment">/* file core.cpp */</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">_core</span><span class="special">)</span>
<span class="special">{</span>
<span class="special">...</span>
<span class="comment">/* export everything in the sounds::core namespace */</span>
<span class="special">}</span>
</pre>
<p>
Note that we added an underscore to the module name. The filename will have
to be changed to <tt class="literal">_core.pyd</tt> as well, and we do the same
to the other extension modules. Now, we change our package hierarchy like
so:
</p>
<pre class="programlisting">sounds/
__init__.py
core/
__init__.py
<span class="underline">core.pyd
filters/
\</span>_init__.py
<span class="underline">filters.pyd
io/
\</span>_init__.py
_io.pyd
</pre>
<p>
Note that we created a directory for each extension module, and added a __init__.py
to each one. But if we leave it that way, the user will have to access the
functions in the core module with this syntax:
</p>
<p>
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">import</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">core</span><span class="special">.</span><span class="identifier">_core</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">core</span><span class="special">.</span><span class="identifier">_core</span><span class="special">.</span><span class="identifier">foo</span><span class="special">(...)</span>
</pre>
<p>
which is not what we want. But here enters the <tt class="literal">__init__.py</tt>
magic: everything that is brought to the <tt class="literal">__init__.py</tt> namespace
can be accessed directly by the user. So, all we have to do is bring the
entire namespace from <tt class="literal">_core.pyd</tt> to <tt class="literal">core/__init__.py</tt>.
So add this line of code to <tt class="literal">sounds<span class="emphasis"><em>core</em></span>__init__.py</tt>:
</p>
<pre class="programlisting">
<span class="keyword">from</span> <span class="identifier">_core</span> <span class="keyword">import</span> <span class="special">*</span>
</pre>
<p>
We do the same for the other packages. Now the user accesses the functions
and classes in the extension modules like before:
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">import</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">filters</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">filters</span><span class="special">.</span><span class="identifier">echo</span><span class="special">(...)</span>
</pre>
<p>
with the additional benefit that we can easily add pure Python functions
to any module, in a way that the user can't tell the difference between a
C++ function and a Python function. Let's add a <span class="emphasis"><em>pure</em></span>
Python function, <tt class="literal">echo_noise</tt>, to the <tt class="literal">filters</tt>
package. This function applies both the <tt class="literal">echo</tt> and <tt class="literal">noise</tt>
filters in sequence in the given <tt class="literal">sound</tt> object. We create
a file named <tt class="literal">sounds/filters/echo_noise.py</tt> and code our
function:
</p>
<pre class="programlisting">
<span class="keyword">import</span> <span class="identifier">_filters</span>
<span class="keyword">def</span> <span class="identifier">echo_noise</span><span class="special">(</span><span class="identifier">sound</span><span class="special">):</span>
<span class="identifier">s</span> <span class="special">=</span> <span class="identifier">_filters</span><span class="special">.</span><span class="identifier">echo</span><span class="special">(</span><span class="identifier">sound</span><span class="special">)</span>
<span class="identifier">s</span> <span class="special">=</span> <span class="identifier">_filters</span><span class="special">.</span><span class="identifier">noise</span><span class="special">(</span><span class="identifier">sound</span><span class="special">)</span>
<span class="keyword">return</span> <span class="identifier">s</span>
</pre>
<p>
Next, we add this line to <tt class="literal">sounds<span class="emphasis"><em>filters</em></span>__init__.py</tt>:
</p>
<pre class="programlisting">
<span class="keyword">from</span> <span class="identifier">echo_noise</span> <span class="keyword">import</span> <span class="identifier">echo_noise</span>
</pre>
<p>
And that's it. The user now accesses this function like any other function
from the <tt class="literal">filters</tt> package:
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">import</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">filters</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">sounds</span><span class="special">.</span><span class="identifier">filters</span><span class="special">.</span><span class="identifier">echo_noise</span><span class="special">(...)</span>
</pre>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.extending_wrapped_objects_in_python"></a>Extending Wrapped Objects in Python</h3></div></div></div>
<p>
Thanks to Python's flexibility, you can easily add new methods to a class,
even after it was already created:
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">class</span> <span class="identifier">C</span><span class="special">(</span><span class="identifier">object</span><span class="special">):</span> <span class="keyword">pass</span>
<span class="special">&gt;&gt;&gt;</span>
<span class="special">&gt;&gt;&gt;</span> <span class="comment"># a regular function
</span><span class="special">&gt;&gt;&gt;</span> <span class="keyword">def</span> <span class="identifier">C_str</span><span class="special">(</span><span class="identifier">self</span><span class="special">):</span> <span class="keyword">return</span> <span class="string">'A C instance!'</span>
<span class="special">&gt;&gt;&gt;</span>
<span class="special">&gt;&gt;&gt;</span> <span class="comment"># now we turn it in a member function
</span><span class="special">&gt;&gt;&gt;</span> <span class="identifier">C</span><span class="special">.</span><span class="identifier">__str__</span> <span class="special">=</span> <span class="identifier">C_str</span>
<span class="special">&gt;&gt;&gt;</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">c</span> <span class="special">=</span> <span class="identifier">C</span><span class="special">()</span>
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">print</span> <span class="identifier">c</span>
<span class="identifier">A</span> <span class="identifier">C</span> <span class="identifier">instance</span><span class="special">!</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">C_str</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span>
<span class="identifier">A</span> <span class="identifier">C</span> <span class="identifier">instance</span><span class="special">!</span>
</pre>
<p>
Yes, Python rox. <span class="inlinemediaobject"><img src="../images/smiley.png" alt="smiley"></span>
</p>
<p>
We can do the same with classes that were wrapped with Boost.Python. Suppose
we have a class <tt class="literal">point</tt> in C++:
</p>
<p>
</p>
<pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">point</span> <span class="special">{...};</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">_geom</span><span class="special">)</span>
<span class="special">{</span>
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</span><span class="string">"point"</span><span class="special">)...;</span>
<span class="special">}</span>
</pre>
<p>
If we are using the technique from the previous session, <a href="techniques.html#python.creating_packages" title="Creating Packages">Creating
Packages</a>, we can code directly into <tt class="literal">geom/__init__.py</tt>:
</p>
<p>
</p>
<pre class="programlisting">
<span class="keyword">from</span> <span class="identifier">_geom</span> <span class="keyword">import</span> <span class="special">*</span>
<span class="comment"># a regular function
</span><span class="keyword">def</span> <span class="identifier">point_str</span><span class="special">(</span><span class="identifier">self</span><span class="special">):</span>
<span class="keyword">return</span> <span class="identifier">str</span><span class="special">((</span><span class="identifier">self</span><span class="special">.</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">self</span><span class="special">.</span><span class="identifier">y</span><span class="special">))</span>
<span class="comment"># now we turn it into a member function
</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">__str__</span> <span class="special">=</span> <span class="identifier">point_str</span>
</pre>
<p>
<span class="bold"><b>All</b></span> point instances created from C++ will
also have this member function! This technique has several advantages:
</p>
<div class="itemizedlist"><ul type="disc">
<li>
Cut down compile times to zero for these additional functions
</li>
<li>
Reduce the memory footprint to virtually zero
</li>
<li>
Minimize the need to recompile
</li>
<li>
Rapid prototyping (you can move the code to C++ if required without changing
the interface)
</li>
</ul></div>
<p>
You can even add a little syntactic sugar with the use of metaclasses. Let's
create a special metaclass that "injects" methods in other classes.
</p>
<pre class="programlisting">
<span class="comment"># The one Boost.Python uses for all wrapped classes.
</span><span class="comment"># You can use here any class exported by Boost instead of "point"
</span><span class="identifier">BoostPythonMetaclass</span> <span class="special">=</span> <span class="identifier">point</span><span class="special">.</span><span class="identifier">__class__</span>
<span class="keyword">class</span> <span class="identifier">injector</span><span class="special">(</span><span class="identifier">object</span><span class="special">):</span>
<span class="keyword">class</span> <span class="identifier">__metaclass__</span><span class="special">(</span><span class="identifier">BoostPythonMetaclass</span><span class="special">):</span>
<span class="keyword">def</span> <span class="identifier">__init__</span><span class="special">(</span><span class="identifier">self</span><span class="special">,</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">bases</span><span class="special">,</span> <span class="identifier">dict</span><span class="special">):</span>
<span class="keyword">for</span> <span class="identifier">b</span> <span class="keyword">in</span> <span class="identifier">bases</span><span class="special">:</span>
<span class="keyword">if</span> <span class="identifier">type</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="keyword">not</span> <span class="keyword">in</span> <span class="special">(</span><span class="identifier">self</span><span class="special">,</span> <span class="identifier">type</span><span class="special">):</span>
<span class="keyword">for</span> <span class="identifier">k</span><span class="special">,</span><span class="identifier">v</span> <span class="keyword">in</span> <span class="identifier">dict</span><span class="special">.</span><span class="identifier">items</span><span class="special">():</span>
<span class="identifier">setattr</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">k</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span>
<span class="keyword">return</span> <span class="identifier">type</span><span class="special">.</span><span class="identifier">__init__</span><span class="special">(</span><span class="identifier">self</span><span class="special">,</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">bases</span><span class="special">,</span> <span class="identifier">dict</span><span class="special">)</span>
<span class="comment"># inject some methods in the point foo
</span><span class="keyword">class</span> <span class="identifier">more_point</span><span class="special">(</span><span class="identifier">injector</span><span class="special">,</span> <span class="identifier">point</span><span class="special">):</span>
<span class="keyword">def</span> <span class="identifier">__repr__</span><span class="special">(</span><span class="identifier">self</span><span class="special">):</span>
<span class="keyword">return</span> <span class="string">'Point(x=%s, y=%s)'</span> <span class="special">%</span> <span class="special">(</span><span class="identifier">self</span><span class="special">.</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">self</span><span class="special">.</span><span class="identifier">y</span><span class="special">)</span>
<span class="keyword">def</span> <span class="identifier">foo</span><span class="special">(</span><span class="identifier">self</span><span class="special">):</span>
<span class="keyword">print</span> <span class="string">'foo!'</span>
</pre>
<p>
Now let's see how it got:
</p>
<pre class="programlisting">
<span class="special">&gt;&gt;&gt;</span> <span class="keyword">print</span> <span class="identifier">point</span><span class="special">()</span>
<span class="identifier">Point</span><span class="special">(</span><span class="identifier">x</span><span class="special">=</span><span class="number">10</span><span class="special">,</span> <span class="identifier">y</span><span class="special">=</span><span class="number">10</span><span class="special">)</span>
<span class="special">&gt;&gt;&gt;</span> <span class="identifier">point</span><span class="special">().</span><span class="identifier">foo</span><span class="special">()</span>
<span class="identifier">foo</span><span class="special">!</span>
</pre>
<p>
Another useful idea is to replace constructors with factory functions:
</p>
<pre class="programlisting">
<span class="identifier">_point</span> <span class="special">=</span> <span class="identifier">point</span>
<span class="keyword">def</span> <span class="identifier">point</span><span class="special">(</span><span class="identifier">x</span><span class="special">=</span><span class="number">0</span><span class="special">,</span> <span class="identifier">y</span><span class="special">=</span><span class="number">0</span><span class="special">):</span>
<span class="keyword">return</span> <span class="identifier">_point</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">)</span>
</pre>
<p>
In this simple case there is not much gained, but for constructurs with many
overloads and/or arguments this is often a great simplification, again with
virtually zero memory footprint and zero compile-time overhead for the keyword
support.
</p>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="python.reducing_compiling_time"></a>Reducing Compiling Time</h3></div></div></div>
<p>
If you have ever exported a lot of classes, you know that it takes quite
a good time to compile the Boost.Python wrappers. Plus the memory consumption
can easily become too high. If this is causing you problems, you can split
the class_ definitions in multiple files:
</p>
<p>
</p>
<pre class="programlisting">
<span class="comment">/* file point.cpp */</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
<span class="keyword">void</span> <span class="identifier">export_point</span><span class="special">()</span>
<span class="special">{</span>
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</span><span class="string">"point"</span><span class="special">)...;</span>
<span class="special">}</span>
<span class="comment">/* file triangle.cpp */</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">triangle</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
<span class="keyword">void</span> <span class="identifier">export_triangle</span><span class="special">()</span>
<span class="special">{</span>
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">triangle</span><span class="special">&gt;(</span><span class="string">"triangle"</span><span class="special">)...;</span>
<span class="special">}</span>
</pre>
<p>
Now you create a file <tt class="literal">main.cpp</tt>, which contains the <tt class="literal">BOOST_PYTHON_MODULE</tt>
macro, and call the various export functions inside it.
</p>
<pre class="programlisting">
<span class="keyword">void</span> <span class="identifier">export_point</span><span class="special">();</span>
<span class="keyword">void</span> <span class="identifier">export_triangle</span><span class="special">();</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">_geom</span><span class="special">)</span>
<span class="special">{</span>
<span class="identifier">export_point</span><span class="special">();</span>
<span class="identifier">export_triangle</span><span class="special">();</span>
<span class="special">}</span>
</pre>
<p>
Compiling and linking together all this files produces the same result as
the usual approach:
</p>
<pre class="programlisting">
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">triangle</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">_geom</span><span class="special">)</span>
<span class="special">{</span>
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">point</span><span class="special">&gt;(</span><span class="string">"point"</span><span class="special">)...;</span>
<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">triangle</span><span class="special">&gt;(</span><span class="string">"triangle"</span><span class="special">)...;</span>
<span class="special">}</span>
</pre>
<p>
but the memory is kept under control.
</p>
<p>
This method is recommended too if you are developing the C++ library and
exporting it to Python at the same time: changes in a class will only demand
the compilation of a single cpp, instead of the entire wrapper code.
</p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/html/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td colspan="2" align="left" valign="top"><p>
If you're exporting your classes with <a href="../../../../../pyste/index.html" target="_top">Pyste</a>,
take a look at the <tt class="literal">--multiple</tt> option, that generates
the wrappers in various files as demonstrated here.
</p></td></tr>
</table></div>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/html/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td colspan="2" align="left" valign="top"><p>
This method is useful too if you are getting the error message <span class="emphasis"><em>"fatal
error C1204:Compiler limit:internal structure overflow"</em></span>
when compiling a large source file, as explained in the <a href="../../../../v2/faq.html#c1204" target="_top">FAQ</a>.
</p></td></tr>
</table></div>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2002-2005 Joel
de Guzman, David Abrahams<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">
http://www.boost.org/LICENSE_1_0.txt </a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="exception.html"><img src="../../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../../../doc/html/images/home.png" alt="Home"></a>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

18
doc/tutorial/index.html Normal file
View File

@@ -0,0 +1,18 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="refresh" content="0; URL=doc/html/index.html">
</head>
<body>
Automatic redirection failed, click this
<a href="doc/html/index.html">link</a> &nbsp;<hr>
<p>© Copyright Beman Dawes, 2001</p>
<p>Distributed under the Boost Software License, Version 1.0. (See
accompanying file <a href="../../../LICENSE_1_0.txt">
LICENSE_1_0.txt</a> or copy at
<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
</body>
</html>

View File

@@ -1,61 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>
A Peek Under the Hood
</title>
<h1>
<img src="../../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align="center"
width="277" height="86">
</h1>
<h1>
A Peek Under the Hood
</h1>
<p>
Declaring a <code>class_builder&lt;T&gt;</code> causes the instantiation
of an <code>extension_class&lt;T&gt;</code> to which it forwards all
member function calls and which is doing most of the real work.
<code>extension_class&lt;T&gt;</code> is a subclass of <code>
PyTypeObject</code>, the <code> struct</code> which Python's 'C' API uses
to describe a type. <a href="example1.html#world_class">An instance of the
<code>extension_class&lt;&gt;</code></a> becomes the Python type object
corresponding to <code>hello::world</code>. When we <a href=
"example1.html#add_world_class">add it to the module</a> it goes into the
module's dictionary to be looked up under the name "world".
<p>
Boost.Python uses C++'s template argument deduction mechanism to determine the
types of arguments to functions (except constructors, for which we must
<a href="example1.html#Constructor_example">provide an argument list</a>
because they can't be named in C++). Then, it calls the appropriate
overloaded functions <code>PyObject*
to_python(</code><em>S</em><code>)</code> and <em>
S'</em><code>from_python(PyObject*,
type&lt;</code><em>S</em><code>&gt;)</code> which convert between any C++
type <em>S</em> and a <code>PyObject*</code>, the type which represents a
reference to any Python object in its 'C' API. The <a href=
"example1.html#world_class"><code>extension_class&lt;T&gt;</code></a>
template defines a whole raft of these conversions (for <code>T, T*,
T&amp;, std::auto_ptr&lt;T&gt;</code>, etc.), using the same inline
friend function technique employed by <a href="../../utility/operators.htm">the boost operators
library</a>.
<p>
Because the <code>to_python</code> and <code>from_python</code> functions
for a user-defined class are defined by <code>
extension_class&lt;T&gt;</code>, it is important that an instantiation of
<code> extension_class&lt;T&gt;</code> is visible to any code which wraps
a C++ function with a <code>T, T*, const T&amp;</code>, etc. parameter or
return value. In particular, you may want to create all of the classes at
the top of your module's init function, then <code>def</code> the member
functions later to avoid problems with inter-class dependencies.
<p>
Next: <a href="building.html">Building a Module with Boost.Python</a>
Previous: <a href="special.html">Special Method and Operator Support</a>
Up: <a href="index.html">Top</a>
<p>
&copy; Copyright David Abrahams 2000. Permission to copy, use, modify,
sell and distribute this document is granted provided this copyright
notice appears in all copies. This document is provided "as is" without
express or implied warranty, and with no claim as to its suitability for
any purpose.
<p>
Updated: Nov 26, 2000

View File

@@ -1,3 +1,6 @@
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -10,10 +13,10 @@
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
"C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">April 2002 Progress Report</h2>
</td>
</tr>
@@ -45,7 +48,7 @@ of work got done...
<h3><a name="arity">Arbitrary Arity Support</a></h3>
I began using the <a
href="../../../preprocessor/doc/index.htm">Boost.Preprocessor</a>
href="../../../preprocessor/doc/index.html">Boost.Preprocessor</a>
metaprogramming library to generate support for functions and member
functions of arbitrary arity, which was, to say the least, quite an
adventure. The feedback cycle resulting from my foray into
@@ -154,10 +157,10 @@ documentation).
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
3 May, 2002
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a>
2002. </i></p>
</body>
</html>

View File

@@ -1,124 +1,165 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../../../boost.css">
<title>Boost.Python - CallPolicies Concept</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../../../../boost.css">
<title>Boost.Python - CallPolicies Concept</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h2 align="center">CallPolicies Concept</h2>
</td>
</tr>
</table>
<hr>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#composition">CallPolicies Composition</a></dt>
<dt><a href="#concept-requirements">Concept Requirements</a></dt>
<dl class="page-index">
<dt><a href="#CallPolicies-concept">CallPolicies Concept</a></dt>
</dl>
</dl>
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<h2><a name="introduction"></a>Introduction</h2>
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<p>Models of the CallPolicies concept are used to specialize the
behavior of Python callable objects generated by Boost.Python to
wrapped C++ objects like function and member function
pointers, providing three behaviors:
<ol>
<li> <code>precall</code> - Python argument tuple management before
the wrapped object is invoked
<li> <code>result_converter</code> - C++ return value handling
<li> <code>postcall</code> - Python argument tuple and result
management after the wrapped object is invoked
</ol>
<h2 align="center">CallPolicies Concept</h2>
</td>
</tr>
</table>
<hr>
<h2><a name="composition"></a>CallPolicies Composition</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
In order to allow the use of multiple models of CallPolicies in the
same callable object, Boost.Python's CallPolicies class templates
provide a chaining interface which allows them to be recursively
composed. This interface takes the form of an optional template
parameter, <code>Base</code> which defaults to <a
href="default_call_policies.html#default_call_policies-spec">
<code>default_call_policies</code></a>. By convention, the
<code>precall</code> function of the
<code>Base</code> is invoked <i>after</i> the <code>precall</code>
function supplied by the outer template, and the <code>postcall</code>
function of the <code>Base</code> is invoked <i>before</i> the
<code>postcall</code> function of the outer template. If a
<code>result_converter</code> is supplied by the outer template, it
<i>replaces</i> any <code>result_converter</code> supplied by the
<code>Base</code>. For an example, see <a
href="return_internal_reference.html#return_internal_reference-spec">
<code>return_internal_reference</code></a>.
<dt><a href="#composition">CallPolicies Composition</a></dt>
<h2><a name="concept-requirements"></a>Concept Requirements</h2>
<h3><a name="CallPolicies-concept"></a>CallPolicies Concept</h3>
<dt><a href="#concept-requirements">Concept Requirements</a></dt>
<p>In the table below, <code><b>x</b></code> denotes an object whose
type <code><b>P</b></code> is a model of CallPolicies,
<code><b>a</b></code> denotes a <code>PyObject*</code> pointing to
a Python argument tuple object, and <code><b>r</b></code> denotes a
<code>PyObject*</code> referring to a &quot;preliminary&quot; result
object.
<dd>
<dl class="page-index">
<dt><a href="#CallPolicies-concept">CallPolicies Concept</a></dt>
</dl>
</dd>
</dl>
<table summary="CallPolicies expressions" border="1" cellpadding="5">
<h2><a name="introduction"></a>Introduction</h2>
<tr>
<td><b>Expression</b></td>
<td><b>Type</b></td>
<td><b>Result/Semantics</b></td>
</tr>
<p>Models of the CallPolicies concept are used to specialize the behavior
of Python callable objects generated by Boost.Python to wrapped C++
objects like function and member function pointers, providing three
behaviors:</p>
<tr>
<td valign="top"><code>x.precall(a)</code></td>
<td>convertible to <code>bool</code>
<td>returns <code>false</code> and <code><a
href="http://www.python.org/doc/2.2/api/exceptionHandling.html#l2h-71">PyErr_Occurred</a>()&nbsp;!=&nbsp;0</code>
upon failure, <code>true</code> otherwise.
<ol>
<li><code>precall</code> - Python argument tuple management before the
wrapped object is invoked</li>
<tr>
<td valign="top"><code>P::result_converter</code></td>
<td>A model of <a href="ResultConverter.html#ResultConverterGenerator-concept">ResultConverterGenerator</a>.
<td>An MPL unarymetafunction object used produce the
&quot;preliminary&quot result object.
<li><code>result_converter</code> - C++ return value handling</li>
<tr>
<td valign="top"><code>x.postcall(a, r)</code></td>
<td>convertible to <code>PyObject*</code>
<td>0 <code>0</code> and <code><a
href="http://www.python.org/doc/2.2/api/exceptionHandling.html#l2h-71">PyErr_Occurred</a>()&nbsp;!=&nbsp;0</code>
upon failure. Must &quot;conserve references&quot; even in the
event of an exception. In other words, if <code>r</code> is not
returned, its reference count must be decremented; if another
existing object is returned, its reference count must be
incremented.
</table>
<li><code>postcall</code> - Python argument tuple and result management
after the wrapped object is invoked</li>
<li><code>extract_return_type</code> - metafunction for extracting the return type from a given signature type sequence</li>
</ol>
Models of CallPolicies are required to be <a
href="../../../utility/CopyConstructible.html">CopyConstructible</a>.
<h2><a name="composition"></a>CallPolicies Composition</h2>
In order to allow the use of multiple models of CallPolicies in the same
callable object, Boost.Python's CallPolicies class templates provide a
chaining interface which allows them to be recursively composed. This
interface takes the form of an optional template parameter,
<code>Base</code> which defaults to <a href=
"default_call_policies.html#default_call_policies-spec"><code>default_call_policies</code></a>.
By convention, the <code>precall</code> function of the <code>Base</code>
is invoked <i>after</i> the <code>precall</code> function supplied by the
outer template, and the <code>postcall</code> function of the
<code>Base</code> is invoked <i>before</i> the <code>postcall</code>
function of the outer template. If a <code>result_converter</code> is
supplied by the outer template, it <i>replaces</i> any
<code>result_converter</code> supplied by the <code>Base</code>. For an
example, see <a href=
"return_internal_reference.html#return_internal_reference-spec"><code>return_internal_reference</code></a>.
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
19 May, 2002
<h2><a name="concept-requirements"></a>Concept Requirements</h2>
<h3><a name="CallPolicies-concept"></a>CallPolicies Concept</h3>
<p>In the table below, <code><b>x</b></code> denotes an object whose type
<code><b>P</b></code> is a model of CallPolicies, <code><b>a</b></code>
denotes a <code>PyObject*</code> pointing to a Python argument tuple
object, and <code><b>r</b></code> denotes a <code>PyObject*</code>
referring to a "preliminary" result object.</p>
<table summary="CallPolicies expressions" border="1" cellpadding="5">
<tr>
<td><b>Expression</b></td>
<td><b>Type</b></td>
<td><b>Result/Semantics</b></td>
</tr>
<tr>
<td valign="top"><code>x.precall(a)</code></td>
<td>convertible to <code>bool</code></td>
<td>returns <code>false</code> and <code><a href=
"http://www.python.org/doc/2.2/api/exceptionHandling.html#l2h-71">PyErr_Occurred</a>()&nbsp;!=&nbsp;0</code>
upon failure, <code>true</code> otherwise.</td>
</tr>
<tr>
<td valign="top"><code>P::result_converter</code></td>
<td>A model of <a href=
"ResultConverter.html#ResultConverterGenerator-concept">ResultConverterGenerator</a>.</td>
<td>An MPL unary <a href=
"../../../mpl/doc/refmanual/metafunction-class.html">Metafunction
Class</a> used produce the "preliminary" result object.</td>
</tr>
<tr>
<td valign="top"><code>x.postcall(a, r)</code></td>
<td>convertible to <code>PyObject*</code></td>
<td>0 <code>0</code> and <code><a href=
"http://www.python.org/doc/2.2/api/exceptionHandling.html#l2h-71">PyErr_Occurred</a>()&nbsp;!=&nbsp;0</code>
upon failure. Must "conserve references" even in the event of an
exception. In other words, if <code>r</code> is not returned, its
reference count must be decremented; if another existing object is
returned, its reference count must be incremented.</td>
</tr>
<tr>
<td valign="top"><code>P::extract_return_type</code></td>
<td>A model of <a href=
"../../../doc/refmanual/metafunction.html">Metafunction</a>.</td>
<td>An MPL unary <a href=
"../../../mpl/doc/refmanual/metafunction.html">Metafunction</a> used extract the return type from a given signature. By default it is derived from mpl::front.</td>
</tr>
</table>
Models of CallPolicies are required to be <a href=
"../../../utility/CopyConstructible.html">CopyConstructible</a>.
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave
Abrahams</a> 2002. All Rights Reserved.</i>
</p>
<p>Permission to copy, use, modify, sell
and distribute this software is granted provided this copyright notice appears
in all copies. This software is provided "as is" without express or implied
warranty, and with no claim as to its suitability for any purpose.
</body>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
<p>Permission to copy, use, modify, sell and distribute this software is
granted provided this copyright notice appears in all copies. This
software is provided "as is" without express or implied warranty, and
with no claim as to its suitability for any purpose.</p>
</body>
</html>

View File

@@ -1,7 +1,10 @@
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../../../boost.css">
<link rel="stylesheet" type="text/css" href=../../../../boost.css>
<title>Boost.Python - Dereferenceable Concept</title>
</head>
<body link="#0000ff" vlink="#800080">
@@ -9,10 +12,10 @@
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
<h3><a href="../../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Dereferenceable Concept</h2>
</td>
</tr>
@@ -28,35 +31,40 @@
<h2><a name="introduction"></a>Introduction</h2>
<p>Instances of a dereferenceable type can be used like a pointer to access an lvalue.
<p>Instances of a Dereferenceable type can be used like a pointer to access an lvalue.
<h2><a name="concept-requirements"></a>Concept Requirements</h2>
<h3><a name="Dereferenceable-concept"></a>Dereferenceable Concept</h3>
<p>In the table below, <code><b>x</b></code> denotes an object whose
type is a model of Dereferenceable.
<p>In the table below, <code><b>T</b></code> is a model of
Dereferenceable, and <code><b>x</b></code> denotes an object of
type <code>T</code>. In addition, all pointers are Dereferenceable.
<table summary="Dereferenceable expressions" border="1" cellpadding="5">
<tr>
<td><b>Expression</b></td>
<td><b>Requirements</b></td>
<td><b>Result</b></td>
<td><b>Operational Semantics</b></td>
</tr>
<tr>
<td valign="top"><code>*x</code></td>
<td>An lvalue
<td><code>get_pointer(x)</code></td>
<td>convertible to <code><a href="pointee.html#pointee-spec">pointee</a>&lt;T&gt;::type*</code>
<td><code>&amp;*x</code>, or a null pointer
</tr>
<tr>
</table>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
10 May, 2002
18 December, 2003
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave
Abrahams</a> 2002. All Rights Reserved.</i>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave
Abrahams</a> 2002-2003. </i>
<p>Permission to copy, use, modify, sell
and distribute this software is granted provided this copyright notice appears

View File

@@ -1,7 +1,10 @@
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../../../boost.css">
<link rel="stylesheet" type="text/css" href=../../../../boost.css>
<title>Boost.Python - Extractor Concept</title>
</head>
<body link="#0000ff" vlink="#800080">
@@ -9,10 +12,10 @@
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
<h3><a href="../../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Extractor Concept</h2>
</td>
</tr>
@@ -79,11 +82,11 @@ are layout-compatible with PyObject.
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
22 May, 2002
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave
Abrahams</a> 2002. All Rights Reserved.</i>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave
Abrahams</a> 2002. </i>
<p>Permission to copy, use, modify, sell
and distribute this software is granted provided this copyright notice appears

View File

@@ -1,7 +1,10 @@
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../../../boost.css">
<link rel="stylesheet" type="text/css" href=../../../../boost.css>
<title>Boost.Python - Holder Concept</title>
</head>
<body link="#0000ff" vlink="#800080">
@@ -9,10 +12,10 @@
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
<h3><a href="../../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">HolderGenerator Concept</h2>
</td>
</tr>
@@ -57,11 +60,11 @@ type.
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
20 May, 2002
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave
Abrahams</a> 2002. All Rights Reserved.</i>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave
Abrahams</a> 2002. </i>
<p>Permission to copy, use, modify, sell
and distribute this software is granted provided this copyright notice appears

View File

@@ -1,3 +1,6 @@
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -10,10 +13,10 @@
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
"C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">June 2002 Progress Report</h2>
</td>
</tr>
@@ -217,10 +220,10 @@ you'll just have to wait till next month (hopefully the beginning).
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
19 July, 2002
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a>
2002. </i></p>
</body>
</html>

View File

@@ -1,3 +1,6 @@
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -10,10 +13,10 @@
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
"C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">March 2002 Progress Report</h2>
</td>
</tr>
@@ -225,10 +228,10 @@ worth doing anything about it.
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
1 April, 2002
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a>
2002. </i></p>
</body>
</html>

View File

@@ -1,3 +1,6 @@
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -10,10 +13,10 @@
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
"C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">May 2002 Progress Report</h2>
</td>
</tr>
@@ -54,7 +57,7 @@ focused on reducing the support burden. In recent weeks, responding to
requests for support, espcially surrounding building the library, had
begun to impede progress on development. There was a major push to
release a stable 1.28.0 of Boost, including documentation of <a
href="../../../../tools/build/index.html">Boost.Build</a> and specific
href="../../../../tools/build/v1/build_system.htm">Boost.Build</a> and specific
<a href="../building.html">instructions</a> for building Boost.Python
v1. The documentation for Boost.Python v2 was also updated as
described <a href="#documentation">here</a>.
@@ -70,7 +73,7 @@ described <a href="#documentation">here</a>.
Martin Casado which uncovered the key mechanism required to allow
shared libraries to use functions from the Python executable. The
current solution used in Boost.Build relies on a <a
href="../../../../tools/build/gen_aix_import_file.py">Python
href="../../../../tools/build/v1/gen_aix_import_file.py">Python
Script</a> as part of the build process. This is not a problem for
Boost.Python, as Python will be available. However, the commands
issued by the script are so simple that a 100%-pure-Boost.Jam
@@ -84,8 +87,7 @@ described <a href="#documentation">here</a>.
Support for exposing C++ operators and functions as the corresponding
Python special methods was added. Thinking that the Boost.Python
<a href="../special.html#numeric">v1 interface</a> was a little too
esoteric (especially the use of
v1 interface was a little too esoteric (especially the use of
<code>left_operand&lt;...&gt;/right_operand&lt;...&gt;</code> for
asymmetric operands), I introduced a simple form of <a
href="http://osl.iu.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html">expression
@@ -155,7 +157,7 @@ This forced the exposure of the <a
href="http://www.python.org/2.2/descrintro.html#property"><code>property</code></a>
interface used internally to implement the data member exposure
facility described in <a
href="Mar2002#data_members">March</a>. Properties are an
href="Mar2002.html#data_members">March</a>. Properties are an
incredibly useful idiom, so it's good to be able to provide them
at little new development cost.
@@ -212,7 +214,7 @@ Major updates were made to the following pages:
<blockquote>
<dl>
<dt><a href="call.html">call.html</a><dd> <dt><a href="updated">updated</a><dd>
<dt><a href="call.html">call.html</a><dd> <dt>updated<dd>
<dt><a href="class.html">class.html</a><dd>
<dt><a href="reference.html">reference.html</a><dd>
</dl>
@@ -300,10 +302,10 @@ to these issues will probably have to be formalized before long.
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
11 June, 2002
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a>
2002. </i></p>
</body>
</html>

153
doc/v2/ObjectWrapper.html Normal file
View File

@@ -0,0 +1,153 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - ObjectWrapper Concept</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">ObjectWrapper and TypeWrapper Concepts</h2>
</td>
</tr>
</table>
<hr>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#concept-requirements">Concept Requirements</a></dt>
<dd>
<dl class="page-index">
<dt><a href="#ObjectWrapper-concept">ObjectWrapper Concept</a></dt>
<dt><a href="#TypeWrapper-concept">TypeWrapper Concept</a></dt>
</dl>
</dd>
<dt><a href="#caveat">Caveat</a></dt>
</dl>
<h2><a name="introduction"></a>Introduction</h2>
<p>This page defines two concepts used to describe classes which manage a
Python objects, and which are intended to support usage with a
Python-like syntax.</p>
<h2><a name="concept-requirements"></a>Concept Requirements</h2>
<h3><a name="ObjectWrapper-concept"></a>ObjectWrapper Concept</h3>
Models of the ObjectWrapper concept have <a href=
"object.html#object-spec">object</a> as a publicly-accessible base class,
and are used to supply special construction behavior and/or additional
convenient functionality through (often templated) member functions.
Except when the return type <code>R</code> is itself an <a href=
"#TypeWrapper-concept">TypeWrapper</a>, a member function invocation of
the form
<pre>
x.<i>some_function</i>(<i>a<small>1</small>, a<small>2</small>,...a<small>n</small></i>)
</pre>
always has semantics equivalent to:
<pre>
<a href=
"extract.html#extract-spec">extract</a>&lt;R&gt;(x.attr("<i>some_function</i>")(<a
href=
"object.html#object-spec-ctors">object</a>(<i>a<small>1</small></i>), <a
href=
"object.html#object-spec-ctors">object</a>(<i>a<small>2</small></i>),...<a
href="object.html#object-spec-ctors">object</a>(<i>a<small>n</small></i>)))()
</pre>
When the <code>R</code> is an <a href=
"#TypeWrapper-concept">TypeWrapper</a>, the result type may be
constructed by taking direct posession of:
<pre>
x.attr("<i>some_function</i>")(<a href=
"object.html#object-spec-ctors">object</a>(<i>a<small>1</small></i>), <a
href=
"object.html#object-spec-ctors">object</a>(<i>a<small>2</small></i>),...<a
href=
"object.html#object-spec-ctors">object</a>(<i>a<small>n</small></i>)).ptr()
</pre>
[see <a href="#caveat">caveat</a> below]
<h3><a name="TypeWrapper-concept"></a>TypeWrapper Concept</h3>
TypeWrapper is a refinement of ObjectWrapper which is associated with a
particular Python type <code>X</code>. For a given TypeWrapper
<code>T</code>, a valid constructor expression
<pre>
T(<i>a<small>1</small>, a<small>2</small>,...a<small>n</small></i>)
</pre>
builds a new <code>T</code> object managing the result of invoking
<code>X</code> with arguments corresponding to
<pre>
<a href=
"object.html#object-spec-ctors">object</a>(<i>a<small>1</small></i>), <a
href=
"object.html#object-spec-ctors">object</a>(<i>a<small>2</small></i>),...<a
href=
"object.html#object-spec-ctors">object</a>(<i>a<small>n</small></i>)
</pre>
When used as arguments to wrapped C++ functions, or as the template
parameter to <code><a
href="extract.html#extract-spec">extract</a>&lt;&gt;</code>, only
instances of the associated Python type will be considered a match.
<h3><a name="caveat">Caveat</a></h3>
The upshot of the special member function invocation rules when the
return type is a TypeWrapper is that it is possible for the returned
object to manage a Python object of an inappropriate type. This is not
usually a serious problem; the worst-case result is that errors will be
detected at runtime a little later than they might otherwise be. For an
example of how this can occur, note that the <code><a href=
"dict.html#dict-spec">dict</a></code> member function <code>items</code>
returns an object of type <code><a href=
"list.html#list-spec">list</a></code>. Now suppose the user defines this
<code>dict</code> subclass in Python:
<pre>
&gt;&gt;&gt; class mydict(dict):
... def items(self):
... return tuple(dict.items(self)) # return a tuple
</pre>
Since an instance of <code>mydict</code> is also an instance of
<code>dict</code>, when used as an argument to a wrapped C++ function,
<code><a href="dict.html#dict-spec">boost::python::dict</a></code> can
accept objects of Python type <code>mydict</code>. Invoking
<code>items()</code> on this object can result in an instance of <code><a
href="list.html#list-spec">boost::python::list</a></code> which actually
holds a Python tuple. Subsequent attempts to use list methods (e.g.
<code>append</code>, or any other mutating operation) on this object will
raise the same exception that would occur if you tried to do it from
Python.
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

View File

@@ -1,7 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../../../boost.css">
<link rel="stylesheet" type="text/css" href="../../../../boost.css">
<title>Boost.Python - ResultConverter Concept</title>
</head>
<body link="#0000ff" vlink="#800080">
@@ -9,10 +14,10 @@
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
<h3><a href="../../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">ResultConverter Concept</h2>
</td>
</tr>
@@ -21,10 +26,12 @@
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#concept-requirements">Concept Requirements</a></dt>
<dl class="page-index">
<dt><a href="#ResultConverter-concept">ResultConverter Concept</a></dt>
<dt><a href="#ResultConverterGenerator-concept">ResultConverterGenerator Concept</a></dt>
</dl>
<dd>
<dl class="page-index">
<dt><a href="#ResultConverter-concept">ResultConverter Concept</a></dt>
<dt><a href="#ResultConverterGenerator-concept">ResultConverterGenerator Concept</a></dt>
</dl>
</dd>
</dl>
<h2><a name="introduction"></a>Introduction</h2>
@@ -76,6 +83,13 @@ denotes an object of type <code><b>R</b></code>.
href="http://www.python.org/doc/current/api/exceptionHandling.html#l2h-71">PyErr_Occurred</a>
should return non-zero.</td>
</tr>
<tr>
<td valign="top"><code>c.get_pytype()</code></td>
<td><code>PyTypeObject const*</code></td>
<td>A pointer to a Python Type object corresponding to result of the conversion,
or <code>0</code>. Used for documentation generation. If <code>0</code> is returned
the generated type in the documentation will be <b>object</b> .</td>
</tr>
</table>
<h3><a name="ResultConverterGenerator-concept"></a>ResultConverterGenerator Concept</h3>
@@ -99,8 +113,8 @@ C++ function return type.
09 May, 2002 <!--Luann's birthday! -->
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave
Abrahams</a> 2002. All Rights Reserved.</i>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave
Abrahams</a> 2002. </i>
<p>Permission to copy, use, modify, sell
and distribute this software is granted provided this copyright notice appears

View File

@@ -1,32 +1,135 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - Acknowledgments</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - Acknowledgments</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h2 align="center">Acknowledgments</h2>
</td>
</tr>
</table>
<hr>
{{text}}
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
05 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
</body>
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Acknowledgments</h2>
</td>
</tr>
</table>
<hr>
<p><a href="http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> is
the architect, designer, and implementor of <b>Boost.Python</b>.</p>
<p><a href="mailto:brett.calcott@paradise.net.nz">Brett Calcott</a>
contributed and maintains the Visual Studio project files and
documentation.</p>
<p><a href="mailto:Gottfried.Ganssauge-at-haufe.de">Gottfried
Ganßauge</a> supplied support for opaque pointer conversions,
complete with documentation and a regression test (and I didn't
even have to ask him for those)!
<p>Joel de Guzman implemented the <a href="overloads.html">default
argument support</a> and wrote the excellent <a href=
"../tutorial/index.html">tutorial documentation</a>.</p>
<p><a href="http://www.boost.org/people/ralf_w_grosse_kunstleve.htm">Ralf W.
Grosse-Kunstleve</a> implemented the <a href="pickle.html">pickle
support</a>, and has enthusiastically supported the library since its
birth, contributing to design decisions and providing invaluable
real-world insight into user requirements. Ralf has written some <a href=
"faq.html#question2">extensions</a> for converting C++ containers that I
hope will be incorporated into the library soon. He also implemented the
cross-module support in the first version of Boost.Python. More
importantly, Ralf makes sure nobody forgets the near-perfect synergy of
C++ and Python for solving the problems of large-scale software
construction.</p>
<p><a href="http://www.boost.org/people/aleksey_gurtovoy.htm">Aleksey Gurtovoy</a>
wrote an incredible C++ <a href="http://www.mywikinet.com/mpl">Template
Metaprogramming Library</a> which allows Boost.Python to perform much of
its compile-time magic. In addition, Aleksey very generously contributed
his time and deep knowledge of the quirks of various buggy compilers to
help us get around problems at crucial moments.</p>
<p><a href="http://www.boost.org/people/paul_mensonides.htm">Paul Mensonides</a>,
building on the work <a href="http://www.boost.org/people/vesa_karvonen.htm">Vesa
Karvonen</a>, wrote a similarly amazing <a href=
"../../../preprocessor/doc/index.html">Preprocessor Metaprogramming
Library</a>, and generously contributed the time and expertise to get it
working in the Boost.Python library, rewriting much of Boost.Python to
use the new preproccessor metaprogramming constructs and helping us to
work around buggy and slow C++ preprocessors.</p>
<p><a href="mailto:nicodemus-at-globalite.com.br">Bruno da Silva de
Oliveira</a> contributed the ingenious <a
href="../../pyste/index.html">Pyste</a> (&quot;Pie-Steh&quot;)
code generator.
<p><a href="mailto:nickm@sitius.com">Nikolay Mladenov</a> contributed
<code>staticmethod</code> support.</p>
<p>Martin Casado solved some sticky problems which allow us to build the
Boost.Python shared library for AIX's crazy dynamic linking model.</p>
<p><a href="mailto:achim@procoders.net">Achim Domma</a> contributed some
of the <a href="reference.html#object_wrappers">Object Wrappers</a> and
HTML templates for this documentation. Dave Hawkes contributed
inspiration for the use of the <code><a href=
"scope.html#scope-spec">scope</a></code> class to simplify module
definition syntax. Pearu Pearson wrote some of the test cases that are in
the current test suite.</p>
<p>The development of this version of Boost.Python was funded in part by
the <a href="http://www.llnl.gov/">Lawrence Livermore National
Laboratories</a> and by the <a href="http://cci.lbl.gov/">Computational
Crystallography Initiative</a> at Lawrence Berkeley National
Laboratories.</p>
<p><a href="http://kogs-www.informatik.uni-hamburg.de/~koethe/">Ullrich
Koethe</a> had independently developed a similar system. When he
discovered Boost.Python v1, he generously contributed countless hours of
coding and much insight into improving it. He is responsible for an early
version of the support for function overloading and wrote the support for
reflecting C++ inheritance relationships. He has helped to improve
error-reporting from both Python and C++ (we hope to do as well in v2
again soon), and has designed the original support for exposing numeric
operators, including a way to avoid explicit coercion by means of
overloading.</p>
<p>The members of the boost mailing list and the Python community
supplied invaluable early feedback. In particular, Ron Clarke, Mark
Evans, Anton Gluck, Chuck Ingold, Prabhu Ramachandran, and Barry Scott
took the brave step of trying to use Boost.Python while it was still in
early stages of development.</p>
<p>The first version of Boost.Python would not have been possible without
the support of Dragon Systems, which supported its development and
release as a Boost library.</p>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
26 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

199
doc/v2/args.html Normal file
View File

@@ -0,0 +1,199 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Cygwin (vers 1st April 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - &lt;boost/python/args.hpp&gt;</title>
</head>
<body>
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Header &lt;boost/python/args.hpp&gt;</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#keyword-expression"><i>keyword-expressions</i></a></dt>
<dt><a href="#classes">Classes</a></dt>
<dd>
<dl class="page-index">
<dt><a href="#arg-spec">class <code>arg</code></a></dt>
<dd>
<dl class="page-index">
<dt><a href="#arg-synopsis">class <code>arg</code>
synopsis</a></dt>
<dt><a href="#arg-ctor">class <code>arg</code>
constructor</a></dt>
<dt><a href="#arg-operator">class <code>arg</code> template
<code>operator =</code></a></dt>
</dl>
</dd>
</dl>
</dd>
<dt><a href="#keyword-expression-operators"><i>Keyword-expression</i>
operator <code>,</code></a></dt>
<dt><a href="#functions">Functions (deprecated)</a></dt>
<dd>
<dl class="page-index">
<dt><code><a href=
"#args-spec">args</a>(</code>...<code>)</code></dt>
</dl>
</dd>
<dt><a href="#examples">Example(s)</a></dt>
</dl>
<hr>
<h2><a name="introduction"></a>Introduction</h2>
<p>Supplies a family of overloaded functions for specifying argument
keywords for wrapped C++ functions.</p>
<h2><a name="keyword-expression"></a><i>keyword-expressions</i></h2>
<p>A <b>keyword-expression</b> results in an object which holds a
sequence of <a href="definitions.html#ntbs">ntbs</a>es, and whose type
encodes the number of keywords specified. The <b>keyword-expression</b>
may contain default values for some or all of the keywords it holds</p>
<h2><a name="classes"></a>Classes</h2>
<h3><a name="arg-spec"></a><code>class arg;</code></h3>
<p>The objects of class arg are keyword-expressions holding one keyword (
size one )</p>
<h4><a name="arg-synopsis"></a>Class <code>arg</code> synopsis</h4>
<pre>
namespace boost { namespace python
{
struct arg
{
template &lt;class T&gt;
arg &amp;perator = (T const &amp;value);
explicit arg (char const *name){elements[0].name = name;}
};
}}
</pre>
<h4><a name="arg-ctor"></a>Class <code>arg</code> constructor</h4>
<pre>
arg(char const* name);
</pre>
<dl class="function-semantics">
<dt><b>Requires:</b> The argument must be a <a href=
"definitions.html#ntbs">ntbs</a>.</dt>
<dt><b>Effects:</b> Constructs an <code>arg</code> object holding a
keyword with name <code>name</code>.</dt>
</dl>
<h4><a name="arg-operator"></a>Class <code>arg</code> operator =</h4>
<pre>
template &lt;class T&gt; arg &amp;operator = (T const &amp;value);
</pre>
<dl class="function-semantics">
<dt><b>Requires:</b> The argument must convertible to python.</dt>
<dt><b>Effects:</b> Assigns default value for the keyword.</dt>
<dt><b>Returns:</b> Reference to <code>this</code>.</dt>
</dl>
<h2><a name="keyword-expression-operators"><i>Keyword-expression</i>
operator <code>,</code></a></h2>
<pre>
<i>keyword-expression</i> operator , (<i>keyword-expression</i>, const arg &amp;kw) const
<i>keyword-expression</i> operator , (<i>keyword-expression</i>, const char *name) const;
</pre>
<dl class="function-semantics">
<dt><b>Requires:</b> The argument <code>name</code> must be a <a href=
"definitions.html#ntbs">ntbs</a>.</dt>
<dt><b>Effects:</b> Extends the <i>keyword-expression</i> argument with
one more keyword.</dt>
<dt><b>Returns:</b> The extended <i>keyword-expression</i>.</dt>
</dl>
<h2><font color="#7F7F7F"><a name="functions"></a>Functions
(deprecated)</font></h2>
<h3><a name="args-spec"></a><code><font color=
"#7F7F7F">args</font>(</code>...<code>)</code></h3>
<pre>
<font color="#7F7F7F"> <i>unspecified1</i> args(char const*);
<i>unspecified2</i> args(char const*, char const*);
.
.
.
<i>unspecifiedN</i> args(char const*, char const*, ... char const*);
</font>
</pre>
<dl class="function-semantics">
<dt><font color="#7F7F7F"><b>Requires:</b> Every argument must be a <a
href="definitions.html#ntbs">ntbs</a>.</font></dt>
<dt><font color="#7F7F7F"><b>Returns:</b> an object representing a <a
href="#keyword-expression"><i>keyword-expression</i></a> encapsulating
the arguments passed.</font></dt>
</dl>
<h2><a name="examples"></a>Example</h2>
<pre>
#include &lt;boost/python/def.hpp&gt;
using namespace boost::python;
int f(double x, double y, double z=0.0, double w=1.0);
BOOST_PYTHON_MODULE(xxx)
{
def("f", f
, ( arg("x"), "y", arg("z")=0.0, arg("w")=1.0 )
);
}
</pre>
<p>Revised 01 August, 2003</p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002-2003.</i></p>
</body>
</html>

View File

@@ -1,32 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - Bibliography</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h2 align="center">Bibliography</h2>
</td>
</tr>
</table>
<hr>
{{bibliographical information}}
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
05 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
</body>
</html>

View File

@@ -1,3 +1,6 @@
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -10,10 +13,10 @@
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
"C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Header &lt;call.hpp&gt;</h2>
</td>
</tr>
@@ -76,7 +79,7 @@ double apply2(PyObject* func, double x, double y)
9 May, 2002 <!-- Luann's birthday! -->
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a>
2002. </i></p>
</body>
</html>

View File

@@ -1,74 +1,92 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - &lt;call_method.hpp&gt;</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - &lt;call_method.hpp&gt;</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h2 align="center">Header &lt;call_method.hpp&gt;</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#functions">Functions</a></dt>
<dl class="page-index">
<dt><a href="#call_method-spec">call_method</a></dt>
</dl>
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<dt><a href="#examples">Example(s)</a></dt>
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
</dl>
<hr>
<h2><a name="introduction"></a>Introduction</h2>
<p>
<code>&lt;boost/python/call_method.hpp&gt;</code> defines the <a
href="#call_method-spec"><code>call_method</code></a> family of overloaded function
templates, used to invoke callable attributes of Python objects from C++.
<h2 align="center">Header &lt;call_method.hpp&gt;</h2>
</td>
</tr>
</table>
<hr>
<h2><a name="functions"></a>Functions</h2>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#functions">Functions</a></dt>
<dd>
<dl class="page-index">
<dt><a href="#call_method-spec">call_method</a></dt>
</dl>
</dd>
<dt><a href="#examples">Example(s)</a></dt>
</dl>
<hr>
<h2><a name="introduction"></a>Introduction</h2>
<p><code>&lt;boost/python/call_method.hpp&gt;</code> defines the <a href=
"#call_method-spec"><code>call_method</code></a> family of overloaded
function templates, used to invoke callable attributes of Python objects
from C++.</p>
<h2><a name="functions"></a>Functions</h2>
<pre>
<a name="call_method-spec">template &lt;class R, class A1, class A2, ... class A<i>n</i>&gt;</a>
<a name=
"call_method-spec">template &lt;class R, class A1, class A2, ... class A<i>n</i>&gt;</a>
R call_method(PyObject* self, char const* method, A1 const&amp;, A2 const&amp;, ... A<i>n</i> const&amp;)
</pre>
<dl class="function-semantics">
<dt><b>Requires:</b> <code>R</code> is a pointer type, reference
type, or a complete type with an accessible copy constructor</dt>
<dt><b>Effects:</b> Invokes <code>self.<i>method</i>(a1,&nbsp;a2,&nbsp;...a<i>n</i>)</code> in
Python, where <code>a1</code>...<code>a<i>n</i></code> are the arguments to
<code>call_method()</code>, converted to Python objects. For a
complete semantic description, see <a href="callbacks.html">this
page</a>.
<dl class="function-semantics">
<dt><b>Requires:</b> <code>R</code> is a pointer type, reference type,
or a complete type with an accessible copy constructor</dt>
<dt><b>Returns:</b> The result of the Python call, converted to the
C++ type <code>R</code>.</dt>
<dt><b>Effects:</b> Invokes
<code>self.<i>method</i>(a1,&nbsp;a2,&nbsp;...a<i>n</i>)</code> in
Python, where <code>a1</code>...<code>a<i>n</i></code> are the
arguments to <code>call_method()</code>, converted to Python objects.
For a complete semantic description, see <a href="callbacks.html">this
page</a>.</dt>
</dt>
<dt><b>Rationale:</b> <code>call_method</code> is critical to
implementing C++ virtual functions which are overridable in Python,
as shown by the example below.
</dt>
</dl>
<dt><b>Returns:</b> The result of the Python call, converted to the C++
type <code>R</code>.</dt>
<h2><a name="examples"></a>Example(s)</h2>
<dt><b>Rationale:</b> <code>call_method</code> is critical to
implementing C++ virtual functions which are overridable in Python, as
shown by the example below.</dt>
</dl>
The following C++ illustrates the use of <code>call_method</code> in
wrapping a class with a virtual function that can be overridden in
Python:
<h2><a name="examples"></a>Example(s)</h2>
The following C++ illustrates the use of <code>call_method</code> in
wrapping a class with a virtual function that can be overridden in
Python:
<h3>C++ Module Definition</h3>
<h3>C++ Module Definition</h3>
<pre>
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/class.hpp&gt;
@@ -79,13 +97,13 @@ Python:
class Base
{
public:
virtual char const* class_name() const { return &quot;Base&quot;; }
virtual char const* class_name() const { return "Base"; }
virtual ~Base();
};
bool is_base(Base* b)
{
return !std::strcmp(b-&gt;class_name(), &quot;Base&quot;);
return !std::strcmp(b-&gt;class_name(), "Base");
}
// Wrapper code begins here
@@ -97,26 +115,25 @@ class Base_callback : public Base
public:
Base_callback(PyObject* self) : m_self(self) {}
char const* class_name() const { return <b>call_method</b>(m_self, &quot;class_name&quot;); }
char const* class_name() const { return <b>call_method</b>&lt;char const*&gt;(m_self, "class_name"); }
char const* Base_name() const { return Base::class_name(); }
private:
PyObject* m_self;
PyObject* const m_self;
};
using namespace boost::python;
BOOST_PYTHON_MODULE_INIT(my_module)
BOOST_PYTHON_MODULE(my_module)
{
module("my_module")
.def(&quot;is_base&quot;, is_base)
.add(
class_&lt;Base,Base_callback, noncopyable&gt;(&quot;Base&quot;)
.def(&quot;class_name&quot;, &#24;Base_callback::Base_name);
)
;
def("is_base", is_base);
class_&lt;Base,Base_callback, noncopyable&gt;("Base")
.def("class_name", &amp;Base_callback::Base_name)
;
}
</pre>
<h3>Python Code</h3>
<h3>Python Code</h3>
<pre>
&gt;&gt;&gt; from my_module import *
&gt;&gt;&gt; class Derived(Base):
@@ -130,12 +147,15 @@ BOOST_PYTHON_MODULE_INIT(my_module)
&gt;&gt;&gt; is_base(Derived())
0
</pre>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
10 May, 2002
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
</body>
</p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

View File

@@ -1,62 +1,88 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - Calling Python Functions and Methods</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - Calling Python Functions and Methods</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h2 align="center">Calling Python Functions and Methods</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#argument_handling">Argument Handling</a></dt>
<dt><a href="#result_handling">Result Handling</a></dt>
<dt><a href="#result_handling">Rationale</a></dt>
</dl>
<hr>
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<h2><a name="introduction">Introduction</a></h2>
<p>
Boost.Python provides two families of function templates,
<code><a href="call.html#call-spec">call</a></code> and <code><a
href="call_method.html#call_method-spec">call_method</a></code>, for
invoking Python functions and methods respectively. The interface for
calling a Python function object (or any Python callable object) looks
like:
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Calling Python Functions and Methods</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#argument_handling">Argument Handling</a></dt>
<dt><a href="#result_handling">Result Handling</a></dt>
<dt><a href="#result_handling">Rationale</a></dt>
</dl>
<hr>
<h2><a name="introduction">Introduction</a></h2>
The simplest way to call a Python function from C++, given an <code><a
href="object.html#object-spec">object</a></code> instance <code>f</code>
holding the function, is simply to invoke its function call operator.
<pre>
f("tea", 4, 2) // In Python: f('tea', 4, 2)
</pre>
And of course, a method of an <code><a href=
"object.html#object-spec">object</a></code> instance <code>x</code> can
be invoked by using the function-call operator of the corresponding
attribute:
<pre>
x.attr("tea")(4, 2); // In Python: x.tea(4, 2)
</pre>
<p>If you don't have an <code>object</code> instance, Boost.Python
provides two families of function templates, <code><a href=
"call.html#call-spec">call</a></code> and <code><a href=
"call_method.html#call_method-spec">call_method</a></code>, for invoking
Python functions and methods respectively on <code>PyObject*</code>s. The
interface for calling a Python function object (or any Python callable
object) looks like:</p>
<pre>
call&lt;ResultType&gt;(callable_object, a1, a2... a<i>N</i>);
</pre>
Calling a method of a Python object is similarly easy:
Calling a method of a Python object is similarly easy:
<pre>
call_method&lt;ResultType&gt;(self_object, &quot;<i>method-name</i>&quot;, a1, a2... a<i>N</i>);
call_method&lt;ResultType&gt;(self_object, "<i>method-name</i>", a1, a2... a<i>N</i>);
</pre>
This comparitively low-level interface is the one you'll use when
implementing C++ virtual functions that can be overridden in Python.
<h2><a name="argument_handling">Argument Handling</a></h2>
<h2><a name="argument_handling">Argument Handling</a></h2>
<p>
Arguments are converted to Python according to their type. By default,
the arguments <code>a1</code>...<code>a<i>N</i></code> are copied into
new Python objects, but this behavior can be overridden by the use of
<code><a href="ptr.html#ptr-spec">ptr()</a></code> and <a
href="../../../bind/ref.html#reference_wrapper">ref()</a>:
<p>Arguments are converted to Python according to their type. By default,
the arguments <code>a1</code>...<code>a<i>N</i></code> are copied into
new Python objects, but this behavior can be overridden by the use of
<code><a href="ptr.html#ptr-spec">ptr()</a></code> and <a href=
"../../../bind/ref.html">ref()</a>:</p>
<pre>
class X : boost::noncopyable
{
@@ -69,178 +95,160 @@ void apply(PyObject* callable, X&amp; x)
boost::python::call&lt;void&gt;(callable, boost::ref(x));
}
</pre>
In the table below, <code><b>x</b></code> denotes the actual argument
object and <code><b>cv</b></code> denotes an optional
<i>cv-qualification</i>: &quot;<code>const</code>&quot;,
&quot;<code>volatile</code>&quot;, or &quot;<code>const
volatile</code>&quot;.
In the table below, <code><b>x</b></code> denotes the actual argument
object and <code><b>cv</b></code> denotes an optional
<i>cv-qualification</i>: "<code>const</code>", "<code>volatile</code>",
or "<code>const volatile</code>".
<table border="1" summary="class_ template parameters">
<tr>
<th>Argument Type
<th>Argument Type</th>
<th>Behavior
<th>Behavior</th>
</tr>
<tr>
<td><code>T cv&amp;</code><br>
<code>T cv</code>
<code>T cv</code></td>
<td>The Python argument is created by the same means used
for the return value of a wrapped C++ function returning
<code>T</code>. When
<code>T</code> is a class type, that normally means
<code>*x</code> is copy-constructed into the new Python
object.
<td>The Python argument is created by the same means used for the
return value of a wrapped C++ function returning <code>T</code>. When
<code>T</code> is a class type, that normally means <code>*x</code>
is copy-constructed into the new Python object.</td>
</tr>
<tr>
<td><code>T*</code>
<td><code>T*</code></td>
<td>If <code>x&nbsp;==&nbsp;0</code>, the Python argument will
be <code><a
href="http://www.python.org/doc/current/lib/bltin-null-object.html">None</a></code>. Otherwise,
the Python argument is created by the same means used for the
return value of a wrapped C++ function returning
<code>T</code>. When
<code>T</code> is a class type, that normally means
<code>*x</code> is copy-constructed into the new Python
object.
<td>If <code>x&nbsp;==&nbsp;0</code>, the Python argument will be
<code><a href=
"http://www.python.org/doc/current/lib/bltin-null-object.html">None</a></code>.
Otherwise, the Python argument is created by the same means used for
the return value of a wrapped C++ function returning <code>T</code>.
When <code>T</code> is a class type, that normally means
<code>*x</code> is copy-constructed into the new Python object.</td>
</tr>
<tr>
<td><code><a
href="../../../bind/ref.html#reference_wrapper">boost::reference_wrapper</a>&lt;T&gt; </code>
<td><code><a href=
"../../../bind/ref.html">boost::reference_wrapper</a>&lt;T&gt;</code></td>
<td>The Python argument contains a pointer to, rather than a
copy of, <code>x.get()</code>. Note: failure to ensure that no
Python code holds a reference to the resulting object beyond
the lifetime of <code>*x.get()</code> <b>may result in a
crash!</b>
<td>The Python argument contains a pointer to, rather than a copy of,
<code>x.get()</code>. Note: failure to ensure that no Python code
holds a reference to the resulting object beyond the lifetime of
<code>*x.get()</code> <b>may result in a crash!</b></td>
</tr>
<tr>
<td><code><a
href="ptr.html#pointer_wrapper-spec">pointer_wrapper</a>&lt;T&gt;</code>
<td>If <code>x.get()&nbsp;==&nbsp;0</code>, the Python
argument will be <code><a
href="http://www.python.org/doc/current/lib/bltin-null-object.html">None</a></code>.
Otherwise, the Python argument contains a pointer to, rather
than a copy of, <code>*x.get()</code>. Note: failure to ensure
that no Python code holds a reference to the resulting object
beyond the lifetime of <code>*x.get()</code> <b>may result in
a crash!</b>
<td><code><a href=
"ptr.html#pointer_wrapper-spec">pointer_wrapper</a>&lt;T&gt;</code></td>
<td>If <code>x.get()&nbsp;==&nbsp;0</code>, the Python argument will
be <code><a href=
"http://www.python.org/doc/current/lib/bltin-null-object.html">None</a></code>.
Otherwise, the Python argument contains a pointer to, rather than a
copy of, <code>*x.get()</code>. Note: failure to ensure that no
Python code holds a reference to the resulting object beyond the
lifetime of <code>*x.get()</code> <b>may result in a crash!</b></td>
</tr>
</table>
<h2><a name="result_handling">Result Handling</a></h2>
<h2><a name="result_handling">Result Handling</a></h2>
In general, <code>call&lt;ResultType&gt;()</code> and
<code>call_method&lt;ResultType&gt;()</code> return
<code>ResultType</code> by exploiting all lvalue and rvalue
<code>from_python</code> converters registered for ResultType and
returning a copy of the result. However, when <code>ResultType</code> is
a pointer or reference type, Boost.Python searches only for lvalue
converters. To prevent dangling pointers and references, an exception
will be thrown if the Python result object has only a single reference
count.
In general, <code>call&lt;ResultType&gt;()</code> and
<code>call_method&lt;ResultType&gt;()</code> return
<code>ResultType</code> by exploiting all lvalue and rvalue
<code>from_python</code> converters registered for ResultType and
returning a copy of the result. However, when
<code>ResultType</code> is a pointer or reference type, Boost.Python
searches only for lvalue converters. To prevent dangling pointers and
references, an exception will be thrown if the Python result object
has only a single reference count.
<h2><a name="rationale">Rationale</a></h2>
In general, to get Python arguments corresponding to
<code>a1</code>...<code>a<i>N</i></code>, a new Python object must be
created for each one; should the C++ object be copied into that Python
object, or should the Python object simply hold a reference/pointer to
the C++ object? In general, the latter approach is unsafe, since the
called function may store a reference to the Python object somewhere. If
the Python object is used after the C++ object is destroyed, we'll crash
Python.
<h2><a name="rationale">Rationale</a></h2>
<p>In keeping with the philosophy that users on the Python side shouldn't
have to worry about crashing the interpreter, the default behavior is to
copy the C++ object, and to allow a non-copying behavior only if the user
writes <code><a href="../../../bind/ref.html">boost::ref</a>(a1)</code>
instead of a1 directly. At least this way, the user doesn't get dangerous
behavior "by accident". It's also worth noting that the non-copying
("by-reference") behavior is in general only available for class types,
and will fail at runtime with a Python exception if used otherwise[<a
href="#1">1</a>].</p>
In general, to get Python arguments corresponding to
<code>a1</code>...<code>a<i>N</i></code>, a new Python object must be
created for each one; should the C++ object be copied into that Python
object, or should the Python object simply hold a reference/pointer to
the C++ object? In general, the latter approach is unsafe, since the
called function may store a reference to the Python object
somewhere. If the Python object is used after the C++ object is
destroyed, we'll crash Python.
<p>However, pointer types present a problem: one approach is to refuse to
compile if any aN has pointer type: after all, a user can always pass
<code>*aN</code> to pass "by-value" or <code>ref(*aN)</code> to indicate
a pass-by-reference behavior. However, this creates a problem for the
expected null pointer to <code>None</code> conversion: it's illegal to
dereference a null pointer value.</p>
<p>In keeping with the philosophy that users on the Python side
shouldn't have to worry about crashing the interpreter, the default
behavior is to copy the C++ object, and to allow a non-copying
behavior only if the user writes <code><a
href="../../../bind/ref.html">boost::ref</a>(a1)</code> instead of a1
directly. At least this way, the user doesn't get dangerous behavior
&quot;by accident&quot;. It's also worth noting that the non-copying
(&quot;by-reference&quot;) behavior is in general only available for
class types, and will fail at runtime with a Python exception if used
otherwise[<a href="#1">1</a>].
<p>The compromise I've settled on is this:</p>
<p>
However, pointer types present a problem: one approach is to refuse
to compile if any aN has pointer type: after all, a user can always pass
<code>*aN</code> to pass &quot;by-value&quot; or <code>ref(*aN)</code>
to indicate a pass-by-reference behavior. However, this creates a
problem for the expected null pointer to
<code>None</code> conversion: it's illegal to dereference a null
pointer value.
<ol>
<li>The default behavior is pass-by-value. If you pass a non-null
pointer, the pointee is copied into a new Python object; otherwise the
corresponding Python argument will be None.</li>
<p>
<li>if you want by-reference behavior, use <code>ptr(aN)</code> if
<code>aN</code> is a pointer and <code>ref(aN)</code> otherwise. If a
null pointer is passed to <code>ptr(aN)</code>, the corresponding
Python argument will be <code>None</code>.</li>
</ol>
The compromise I've settled on is this:
<p>As for results, we have a similar problem: if <code>ResultType</code>
is allowed to be a pointer or reference type, the lifetime of the object
it refers to is probably being managed by a Python object. When that
Python object is destroyed, our pointer dangles. The problem is
particularly bad when the <code>ResultType</code> is char const* - the
corresponding Python String object is typically uniquely-referenced,
meaning that the pointer dangles as soon as <code>call&lt;char
const*&gt;(...)</code> returns.</p>
<ol>
<li>The default behavior is pass-by-value. If you pass a non-null
pointer, the pointee is copied into a new Python object; otherwise
the corresponding Python argument will be None.
<p>The old Boost.Python v1 deals with this issue by refusing to compile
any uses of <code>call&lt;char const*&gt;()</code>, but this goes both
too far and not far enough. It goes too far because there are cases where
the owning Python string object survives beyond the call (just for
instance, when it's the name of a Python class), and it goes not far
enough because we might just as well have the same problem with a
returned pointer or reference of any other type.</p>
<li>if you want by-reference behavior, use <code>ptr(aN)</code> if
<code>aN</code> is a pointer and <code>ref(aN)</code> otherwise. If
a null pointer is passed to <code>ptr(aN)</code>, the corresponding
Python argument will be <code>None</code>.
</ol>
<p>In Boost.Python v2 this is dealt with by:</p>
<p>
As for results, we have a similar problem: if <code>ResultType</code>
is allowed to be a pointer or reference type, the lifetime of the
object it refers to is probably being managed by a Python object. When
that Python object is destroyed, our pointer dangles. The problem is
particularly bad when the <code>ResultType</code> is char const* - the
corresponding Python String object is typically uniquely-referenced,
meaning that the pointer dangles as soon as <code>call&lt;char
const*&gt;(...)</code> returns.
<ol>
<li>lifting the compile-time restriction on const char* callback
returns</li>
<p>
The old Boost.Python v1 deals with this issue by refusing to compile
any uses of <code>call&lt;char const*&gt;()</code>, but this goes both
too far and not far enough. It goes too far because there are cases
where the owning Python string object survives beyond the call (just
for instance, when it's the name of a Python class), and it goes not
far enough because we might just as well have the same problem with a
returned pointer or reference of any other type.
<li>detecting the case when the reference count on the result Python
object is 1 and throwing an exception inside of
<code>call&lt;U&gt;(...)</code> when <code>U</code> is a pointer or
reference type.</li>
</ol>
This should be acceptably safe because users have to explicitly specify a
pointer/reference for <code>U</code> in <code>call&lt;U&gt;</code>, and
they will be protected against dangles at runtime, at least long enough
to get out of the <code>call&lt;U&gt;(...)</code> invocation.
<hr>
<a name="1">[1]</a> It would be possible to make it fail at compile-time
for non-class types such as int and char, but I'm not sure it's a good
idea to impose this restriction yet.
<p>
In Boost.Python v2 this is dealt with by:
<ol>
<li> lifting the compile-time restriction on const
char* callback returns
<li> detecting the case when the reference count on the result
Python object is 1 and throwing an exception inside of
<code>call&lt;U&gt;(...)</code> when <code>U</code> is a pointer
or reference type.
</ol>
This should be acceptably safe because users have to explicitly
specify a pointer/reference for <code>U</code> in
<code>call&lt;U&gt;</code>, and they will be protected against dangles
at runtime, at least long enough to get out of the
<code>call&lt;U&gt;(...)</code> invocation.
<hr>
<a name="1">[1]</a> It would be possible to make it fail at compile-time for non-class
types such as int and char, but I'm not sure it's a good idea to impose
this restriction yet.
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
17 April, 2002
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
</body>
</p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

View File

@@ -1,3 +1,7 @@
.. Copyright David Abrahams 2006. Distributed under the Boost
.. Software License, Version 1.0. (See accompanying
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Here's the plan:
I aim to provide an interface similar to that of Boost.Python v1's

File diff suppressed because it is too large Load Diff

View File

@@ -1,91 +1,190 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - Configuration</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - Configuration</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h2 align="center">Configuration</h2>
</td>
</tr>
</table>
<hr>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#app-defined">Application Defined Macros</a></dt>
<dt><a href="#lib-defined-public">Public Library Defined Macros</a></dt>
<dt><a href="#lib-defined-impl">Library Defined Implementation Macros</a></dt>
</dl>
<h2><a name="introduction"></a>Introduction</h2>
<p>Boost.Python uses several configuration macros in <a href="http://www.boost.org/libs/config/config.htm">&lt;boost/config.hpp&gt;</a>,
as well as configuration macros meant to be supplied by the application. These
macros are documented here.</p>
<h2><a name="app-defined"></a>Application Defined Macros</h2>
<p>These are the macros that may be defined by an application using Boost.Python.</p>
<table summary="application defined macros" cellspacing="10" width="100%">
<tr>
<td><b>Macro</b></td>
<td><b>Meaning</b></td>
</tr>
<tr>
<td>{{macro}}</td>
<td>{{meaning}}</td>
</tr>
<tr>
<td>{{macro}}</td>
<td>{{meaning}}</td>
</tr>
</table>
<h2><a name="lib-defined-public"></a>Public Library Defined Macros</h2>
<p>These macros are defined by Boost.Python but are expected to be used by application
code.</p>
<table summary="public library defined macros" cellspacing="10" width="100%">
<tr>
<td><b>Macro</b></td>
<td><b>Meaning</b></td>
</tr>
<tr>
<td>{{macro}}</td>
<td>{{meaning}}</td>
</tr>
<tr>
<td>{{macro}}</td>
<td>{{meaning}}</td>
</tr>
</table>
<h2><a name="lib-defined-impl"></a>Library Defined Implementation Macros</h2>
<p>These macros are defined by Boost.Python and are implementation details of interest
only to implementers.</p>
<table summary="library defined implementation macros" cellspacing="10" width="100%">
<tr>
<td><b>Macro</b></td>
<td><b>Meaning</b></td>
</tr>
<tr>
<td>{{macro}}</td>
<td>{{meaning}}</td>
</tr>
<tr>
<td>{{macro}}</td>
<td>{{meaning}}</td>
</tr>
</table>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
05 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
</body>
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Configuration</h2>
</td>
</tr>
</table>
<hr>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#app-defined">Application Defined Macros</a></dt>
<dt><a href="#lib-defined-impl">Library Defined Implementation
Macros</a></dt>
</dl>
<h2><a name="introduction"></a>Introduction</h2>
<p><b>Boost.Python</b> uses several configuration macros in <a href=
"http://www.boost.org/libs/config/config.htm">&lt;boost/config.hpp&gt;</a>,
as well as configuration macros meant to be supplied by the application.
These macros are documented here.</p>
<h2><a name="app-defined"></a>Application Defined Macros</h2>
<p>These are the macros that may be defined by an application using
<b>Boost.Python</b>. Note that if you extend a strict interpretation of
the C++ standard to cover dynamic libraries, using different values of
these macros when compiling different libraries (including extension
modules and the <b>Boost.Python</b> library itself) is a violation of the
<a href="definitions.html#ODR">ODR</a>. However, we know of no C++
implementations on which this particular violation is detectable or
causes any problems.</p>
<table summary="application defined macros" width="100%" cellpadding=
"10">
<tr>
<th align="left"><b>Macro</b></th>
<th><b>Default</b></th>
<th align="left"><b>Meaning</b></th>
</tr>
<tr>
<td valign="top"><code>BOOST_PYTHON_MAX_ARITY</code></td>
<td valign="top" align="center">15</td>
<td valign="top">The maximum <a href=
"definitions.html#arity">arity</a> of any function, member function,
or constructor to be wrapped, invocation of a <b>Boost.Python</b>
function wich is specified as taking arguments
<code>x1,&nbsp;x2,</code>...<code>X</code><i>n</i>. This includes, in
particular, callback mechanisms such as <code><a href=
"object.html#object-spec">object</a>::operator()(</code>...<code>)</code>
or <code><a href=
"call_method.html#call_method-spec">call_method</a>&lt;R&gt;(</code>...
<code>)</code>.</td>
</tr>
<tr>
<td valign="top"><code>BOOST_PYTHON_MAX_BASES</code></td>
<td valign="top" align="center">10</td>
<td valign="top">The maximum number of template arguments to the
<code><a href=
"class.html#bases-spec">bases</a>&lt;</code>...<code>&gt;</code>
class template, which is used to specify the bases of a wrapped C++
class..</td>
</tr>
<tr>
<td valign="top"><code>BOOST_PYTHON_STATIC_MODULE</code></td>
<td valign="top" align="center"><i>not&nbsp;defined</i></td>
<td valign="top">If defined, prevents your module initialization
function from being treated as an exported symbol on platforms which
support that distinction in-code</td>
</tr>
</table>
<h2><a name="lib-defined-impl"></a>Library Defined Implementation
Macros</h2>
<p>These macros are defined by <b>Boost.Python</b> and are implementation
details of interest only to implementors and those porting to new
platforms.</p>
<table summary="library defined implementation macros" width="100%"
cellpadding="10">
<tr>
<th align="left"><b>Macro</b></th>
<th><b>Default</b></th>
<th align="left"><b>Meaning</b></th>
</tr>
<tr>
<td valign="top"><code>BOOST_PYTHON_TYPE_ID_NAME</code></td>
<td valign="top" align="center"><i>not&nbsp;defined</i></td>
<td valign="top">If defined, this indicates that the type_info
comparison across shared library boundaries does not work on this
platform. In other words, if shared-lib-1 passes
<code>typeid(T)</code> to a function in shared-lib-2 which compares
it to <code>typeid(T)</code>, that comparison may return
<code>false</code>. If this macro is #defined, Boost.Python uses and
compares <code>typeid(T).name()</code> instead of using and comparing
the <code>std::type_info</code> objects directly.</td>
</tr>
<tr>
<td valign="top"><code>BOOST_PYTHON_NO_PY_SIGNATURES</code></td>
<td valign="top" align="center"><i>not&nbsp;defined</i></td>
<td valign="top">If defined for a module no pythonic signatures are generated
for the docstrings of the module functions, and no python type is associated with any
of the converters registered by the module. This also reduces the binary size of the
module by about 14% (gcc compiled).<br>
If defined for the boost_python runtime library, the default for the
<code>docstring_options.enable_py_signatures()</code> is set to <code>false</code>.
</td>
</tr>
<tr>
<td valign="top"><code>BOOST_PYTHON_SUPPORTS_PY_SIGNATURES</code></td>
<td valign="top" align="center"><i>defined if <code>BOOST_PYTHON_NO_PY_SIGNATURES</code> is undefined</i></td>
<td valign="top">This macro is defined to enable a smooth transition from older Boost.Python versions
which do not support pythonic signatures. For example usage see
<a href="pytype_function.html#examples">here</a>.
</td>
</tr>
<tr>
<td valign="top"><code>BOOST_PYTHON_PY_SIGNATURES_PROPER_INIT_SELF_TYPE</code></td>
<td valign="top" align="center"><i>not&nbsp;defined</i></td>
<td valign="top">If defined the python type of <code>__init__</code> method "self" parameters
is properly generated, otherwise <code><b>object</b></code> is used. It is undefined
by default because it increases the binary size of the module by about 14% (gcc compiled).</td>
</tr>
</table>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
7 January, 2003
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

View File

@@ -1,46 +1,61 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<meta name="generator" content="HTML Tidy, see www.w3.org">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - &lt;boost/python/copy_const_reference.hpp&gt;</title>
<title>Boost.Python -
&lt;boost/python/copy_const_reference.hpp&gt;</title>
</head>
<body>
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Header
&lt;boost/python/copy_const_reference.hpp&gt;</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#classes">Classes</a>
<dt><a href="#classes">Classes</a></dt>
<dd>
<dl class="page-index">
<dt><a href="#copy_const_reference-spec">Class
<code>copy_const_reference</code></a>
<code>copy_const_reference</code></a></dt>
<dd>
<dl class="page-index">
<dt><a href="#copy_const_reference-spec-synopsis">Class
<code>copy_const_reference</code> synopsis</a>
<code>copy_const_reference</code> synopsis</a></dt>
<dt><a href="#copy_const_reference-spec-metafunctions">Class
<code>copy_const_reference</code> metafunctions</a>
<code>copy_const_reference</code> metafunctions</a></dt>
</dl>
</dd>
</dl>
</dd>
<dt><a href="#examples">Example</a>
<dt><a href="#examples">Example</a></dt>
</dl>
<hr>
@@ -50,9 +65,10 @@
<code>copy_const_reference</code></h3>
<p><code>copy_const_reference</code> is a model of <a href=
"ResultConverter.html#ResultConverterGenerator-concept">ResultConverterGenerator</a> which can be
used to wrap C++ functions returning a reference-to-const type such that
the referenced value is copied into a new Python object.
"ResultConverter.html#ResultConverterGenerator-concept">ResultConverterGenerator</a>
which can be used to wrap C++ functions returning a reference-to-const
type such that the referenced value is copied into a new Python
object.</p>
<h4><a name="copy_const_reference-spec-synopsis"></a>Class
<code>copy_const_reference</code> synopsis</h4>
@@ -73,17 +89,17 @@ template &lt;class T&gt; struct apply
</pre>
<dl class="metafunction-semantics">
<dt><b>Requires:</b> <code>T</code> is <code>U const&amp;</code> for some
<code>U</code>.
<dt><b>Requires:</b> <code>T</code> is <code>U const&amp;</code> for
some <code>U</code>.</dt>
<dt><b>Returns:</b> <code>typedef <a href=
"to_python_value.html#to_python_value-spec">to_python_value</a>&lt;T&gt;
type;</code>
type;</code></dt>
</dl>
<h2><a name="examples"></a>Example</h2>
<h3>C++ Module Definition</h3>
<h3>C++ Module Definition</h3>
<pre>
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/class.hpp&gt;
@@ -102,22 +118,18 @@ struct Foo {
// Wrapper code
using namespace boost::python;
BOOST_PYTHON_MODULE_INIT(my_module)
BOOST_PYTHON_MODULE(my_module)
{
module m("my_module")
.add(
class_&lt;Bar&gt;()
)
.add(
class_&lt;Foo&gt;()
.def_init(args&lt;int&gt;())
.def("get_bar", &amp;Foo::get_bar
, return_value_policy&lt;copy_const_reference&gt;())
)
class_&lt;Bar&gt;("Bar");
class_&lt;Foo&gt;("Foo", init&lt;int&gt;())
.def("get_bar", &amp;Foo::get_bar
, return_value_policy&lt;copy_const_reference&gt;())
;
}
</pre>
<h3>Python Code</h3>
<h3>Python Code</h3>
<pre>
&gt;&gt;&gt; from my_module import *
&gt;&gt;&gt; f = Foo(3) # create a Foo object
@@ -126,10 +138,12 @@ BOOST_PYTHON_MODULE_INIT(my_module)
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
15 February, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave
Abrahams</a> 2002. All Rights Reserved.</i>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

View File

@@ -1,47 +1,62 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<meta name="generator" content="HTML Tidy, see www.w3.org">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python -
&lt;boost/python/copy_non_const_reference.hpp&gt;</title>
</head>
<body>
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Header
&lt;boost/python/copy_non_const_reference.hpp&gt;</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#classes">Classes</a>
<dt><a href="#classes">Classes</a></dt>
<dd>
<dl class="page-index">
<dt><a href="#copy_non_const_reference-spec">Class
<code>copy_non_const_reference</code></a>
<code>copy_non_const_reference</code></a></dt>
<dd>
<dl class="page-index">
<dt><a href="#copy_non_const_reference-spec-synopsis">Class
<code>copy_non_const_reference</code> synopsis</a>
<code>copy_non_const_reference</code> synopsis</a></dt>
<dt><a href="#copy_non_const_reference-spec-metafunctions">Class
<code>copy_non_const_reference</code> metafunctions</a>
<dt><a href=
"#copy_non_const_reference-spec-metafunctions">Class
<code>copy_non_const_reference</code> metafunctions</a></dt>
</dl>
</dd>
</dl>
</dd>
<dt><a href="#examples">Example</a>
<dt><a href="#examples">Example</a></dt>
</dl>
<hr>
@@ -51,9 +66,10 @@
<code>copy_non_const_reference</code></h3>
<p><code>copy_non_const_reference</code> is a model of <a href=
"ResultConverter.html#ResultConverterGenerator-concept">ResultConverterGenerator</a> which can be
used to wrap C++ functions returning a reference-to-non-const type such
that the referenced value is copied into a new Python object.
"ResultConverter.html#ResultConverterGenerator-concept">ResultConverterGenerator</a>
which can be used to wrap C++ functions returning a
reference-to-non-const type such that the referenced value is copied into
a new Python object.</p>
<h4><a name="copy_non_const_reference-spec-synopsis"></a>Class
<code>copy_non_const_reference</code> synopsis</h4>
@@ -75,16 +91,16 @@ template &lt;class T&gt; struct apply
<dl class="metafunction-semantics">
<dt><b>Requires:</b> <code>T</code> is <code>U&amp;</code> for some
non-const <code>U</code>.
non-const <code>U</code>.</dt>
<dt><b>Returns:</b> <code>typedef <a href=
"to_python_value.html#to_python_value-spec">to_python_value</a>&lt;T&gt;
type;</code>
type;</code></dt>
</dl>
<h2><a name="examples"></a>Example</h2>
<p>C++ code:
<p>C++ code:</p>
<pre>
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/class.hpp&gt;
@@ -103,18 +119,14 @@ struct Foo {
// Wrapper code
using namespace boost::python;
BOOST_PYTHON_MODULE_INIT(my_module)
BOOST_PYTHON_MODULE(my_module)
{
module("my_module")
.add(
class_&lt;Bar&gt;()
)
.add(
class_&lt;Foo&gt;()
.def_init(args&lt;int&gt;())
.def("get_bar", &amp;Foo::get_bar
, return_value_policy&lt;copy_non_const_reference&gt;())
);
class_&lt;Bar&gt;("Bar");
class_&lt;Foo&gt;("Foo", init&lt;int&gt;())
.def("get_bar", &amp;Foo::get_bar
, return_value_policy&lt;copy_non_const_reference&gt;())
;
}
</pre>
Python Code:
@@ -126,10 +138,12 @@ BOOST_PYTHON_MODULE_INIT(my_module)
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
05 November, 2001
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave
Abrahams</a> 2002. All Rights Reserved.</i>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

View File

@@ -1,109 +1,190 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<meta name="generator" content="HTML Tidy, see www.w3.org">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Cygwin (vers 1st April 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - &lt;boost/python/data_members.hpp&gt;</title>
</head>
<body>
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Header &lt;boost/python/data_members.hpp&gt;</h2>
<h2 align="center">Header
&lt;boost/python/data_members.hpp&gt;</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a>
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#functions">Functions</a>
<dt><a href="#functions">Functions</a></dt>
<dd>
<dl class="page-index">
<dt><a href="#make_getter-spec">make_getter</a>
<dt><a href="#make_getter-spec">make_getter</a></dt>
<dt><a href="#make_setter-spec">make_setter</a>
<dt><a href="#make_setter-spec">make_setter</a></dt>
</dl>
</dd>
<dt><a href="#examples">Example</a>
<dt><a href="#examples">Example</a></dt>
</dl>
<hr>
<h2><a name="introduction"></a>Introduction</h2>
<p><code><a href="#make_getter-spec">make_getter</a>()</code> and
<code><a href="#make_setter-spec">make_setter</a>()</code> are
the functions used internally by <code>class_&lt;&gt;::<a href=
<code><a href="#make_setter-spec">make_setter</a>()</code> are the
functions used internally by <code>class_&lt;&gt;::<a href=
"class.html#class_-spec-modifiers">def_readonly</a></code> and
<code>class_&lt;&gt;::<a href=
"class.html#class_-spec-modifiers">def_readwrite</a></code> to
produce Python callable objects which wrap C++ data members.
"class.html#class_-spec-modifiers">def_readwrite</a></code> to produce
Python callable objects which wrap C++ data members.</p>
<h2><a name="functions"></a>Functions</h2>
<pre>
<a name="make_getter-spec">template &lt;class C, class D&gt;</a>
objects::function* make_getter(D C::*pm);
<a href="object.html#object-spec">object</a> make_getter(D C::*pm);
template &lt;class C, class D, class Policies&gt;
objects::function* make_getter(D C::*pm, Policies const&amp; policies);
<a href=
"object.html#object-spec">object</a> make_getter(D C::*pm, Policies const&amp; policies);
</pre>
<dl class="function-semantics">
<dt><b>Requires:</b> <code>Policies</code> is a model of <a
href="CallPolicies.html">CallPolicies</a>.
<dt><b>Requires:</b> <code>Policies</code> is a model of <a href=
"CallPolicies.html">CallPolicies</a>.</dt>
<dt><b>Effects:</b> Creates a Python callable object which
accepts a single argument that can be converted
<code>from_python</code> to <code>C*</code>, and returns the
corresponding member <code>D</code> member of the <code>C</code>
object, converted <code>to_python</code>. If
<code>policies</code> is supplied, it will be applied to the
function as described <a href=
"CallPolicies.html">here</a>.
<dt><b>Effects:</b> Creates a Python callable object which accepts a
single argument that can be converted <code>from_python</code> to
<code>C*</code>, and returns the corresponding member <code>D</code>
member of the <code>C</code> object, converted <code>to_python</code>.
If <code>policies</code> is supplied, it will be applied to the
function as described <a href="CallPolicies.html">here</a>. Otherwise,
the library attempts to determine whether <code>D</code> is a
user-defined class type, and if so uses <code><a href=
"return_internal_reference.html#return_internal_reference-spec">return_internal_reference</a>&lt;&gt;</code></dt>
<dt><b>Returns:</b> A pointer convertible to <code>PyObject*</code> which
refers to the new Python callable object.
<dt>for <code>Policies</code>. Note that this test may inappropriately
choose <code>return_internal_reference&lt;&gt;</code> in some cases
when <code>D</code> is a smart pointer type. This is a known
defect.</dt>
<dt><b>Returns:</b> An instance of <a href=
"object.html#object-spec">object</a> which holds the new Python
callable object.</dt>
</dl>
<pre>
template &lt;class D&gt;
<a href="object.html#object-spec">object</a> make_getter(D const&amp; d);
template &lt;class D, class Policies&gt;
<a href=
"object.html#object-spec">object</a> make_getter(D const&amp; d, Policies const&amp; policies);
template &lt;class D&gt;
<a href="object.html#object-spec">object</a> make_getter(D const* p);
template &lt;class D, class Policies&gt;
<a href=
"object.html#object-spec">object</a> make_getter(D const* p, Policies const&amp; policies);
</pre>
<dl class="function-semantics">
<dt><b>Requires:</b> <code>Policies</code> is a model of <a href=
"CallPolicies.html">CallPolicies</a>.</dt>
<dt><b>Effects:</b> Creates a Python callable object which accepts no
arguments and returns <code>d</code> or <code>*p</code>, converted
<code>to_python</code> on demand. If <code>policies</code> is supplied,
it will be applied to the function as described <a href=
"CallPolicies.html">here</a>. Otherwise, the library attempts to
determine whether <code>D</code> is a user-defined class type, and if
so uses <code><a href=
"reference_existing_object.html#reference_existing_object-spec">reference_existing_object</a></code></dt>
<dt>for <code>Policies</code>.</dt>
<dt><b>Returns:</b> An instance of <a href=
"object.html#object-spec">object</a> which holds the new Python
callable object.</dt>
</dl>
<pre>
<a name="make_setter-spec">template &lt;class C, class D&gt;</a>
objects::function* make_setter(D C::*pm);
<a href="object.html#object-spec">object</a> make_setter(D C::*pm);
template &lt;class C, class D, class Policies&gt;
objects::function* make_setter(D C::*pm, Policies const&amp; policies);
<a href=
"object.html#object-spec">object</a> make_setter(D C::*pm, Policies const&amp; policies);
</pre>
<dl class="function*-semantics">
<dt><b>Requires:</b> <code>Policies</code> is a model of <a
href="CallPolicies.html">CallPolicies</a>.
<dt><b>Requires:</b> <code>Policies</code> is a model of <a href=
"CallPolicies.html">CallPolicies</a>.</dt>
<dt><b>Effects:</b> Creates a Python callable object which, when
called from Python, expects two arguments which can be converted
<dt><b>Effects:</b> Creates a Python callable object which, when called
from Python, expects two arguments which can be converted
<code>from_python</code> to <code>C*</code> and
<code>D&nbsp;const&amp;</code>, respectively, and sets the
corresponding <code>D</code> member of the <code>C</code>
object. If <code>policies</code> is supplied, it will be applied
to the function as described <a
href="CallPolicies.html">here</a>.
corresponding <code>D</code> member of the <code>C</code> object. If
<code>policies</code> is supplied, it will be applied to the function
as described <a href="CallPolicies.html">here</a>.</dt>
<dt><b>Returns:</b> A pointer convertible to
<code>PyObject*</code> which refers to the new Python callable
object.
<dt><b>Returns:</b> An instance of <a href=
"object.html#object-spec">object</a> which holds the new Python
callable object.</dt>
</dl>
<pre>
template &lt;class D&gt;
<a href="object.html#object-spec">object</a> make_setter(D&amp; d);
template &lt;class D, class Policies&gt;
<a href=
"object.html#object-spec">object</a> make_setter(D&amp; d, Policies const&amp; policies);
template &lt;class D&gt;
<a href="object.html#object-spec">object</a> make_setter(D* p);
template &lt;class D, class Policies&gt;
<a href=
"object.html#object-spec">object</a> make_setter(D* p, Policies const&amp; policies);
</pre>
<dl class="function-semantics">
<dt><b>Requires:</b> <code>Policies</code> is a model of <a href=
"CallPolicies.html">CallPolicies</a>.</dt>
<dt><b>Effects:</b> Creates a Python callable object which accepts one
argument, which is converted from Python to <code>D const&amp;</code>
and written into <code>d</code> or <code>*p</code>, respectively. If
<code>policies</code> is supplied, it will be applied to the function
as described <a href="CallPolicies.html">here</a>.</dt>
<dt><b>Returns:</b> An instance of <a href=
"object.html#object-spec">object</a> which holds the new Python
callable object.</dt>
</dl>
<h2><a name="examples"></a>Example</h2>
<p>The code below uses make_getter and make_setter to expose a
data member as functions:
<p>The code below uses make_getter and make_setter to expose a data
member as functions:</p>
<pre>
#include &lt;boost/python/data_members.hpp&gt;
#include &lt;boost/python/module.hpp&gt;
@@ -119,14 +200,10 @@ using namespace boost::python;
BOOST_PYTHON_MODULE_INIT(data_members_example)
{
module("data_members_example")
.add(
class_&lt;X&gt;(&quot;X&quot;)
.def_init(args&lt;int&gt;())
.def(&quot;get&quot;, make_getter(&amp;X::y))
.def(&quot;set&quot;, make_setter(&amp;X::y))
)
;
class_&lt;X&gt;("X", init&lt;int&gt;())
.def("get", make_getter(&amp;X::y))
.def("set", make_setter(&amp;X::y))
;
}
</pre>
It can be used this way in Python:
@@ -142,9 +219,11 @@ BOOST_PYTHON_MODULE_INIT(data_members_example)
<p>
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
8 May 2002 <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
5 August, 2003 <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave
Abrahams</a> 2002. All Rights Reserved.</i>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

191
doc/v2/def.html Normal file
View File

@@ -0,0 +1,191 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Cygwin (vers 1st April 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - &lt;boost/python/def.hpp&gt;</title>
</head>
<body>
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Header &lt;boost/python/def.hpp&gt;</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#functions">Functions</a></dt>
<dd>
<dl class="page-index">
<dt><a href="#def-spec">def</a></dt>
</dl>
</dd>
<dt><a href="#examples">Example</a></dt>
</dl>
<hr>
<h2><a name="introduction"></a>Introduction</h2>
<p><code><a href="#def-spec">def</a>()</code> is the function which can
be used to expose C++ functions and callable objects as Python functions
in the current <code><a href="scope.html">scope</a></code>.</p>
<h2><a name="functions"></a>Functions</h2>
<a name="def-spec"></a>def
<pre>
template &lt;class F&gt;
void def(char const* name, F f);
template &lt;class Fn, class A1&gt;
void def(char const* name, Fn fn, A1 const&amp;);
template &lt;class Fn, class A1, class A2&gt;
void def(char const* name, Fn fn, A1 const&amp;, A2 const&amp;);
template &lt;class Fn, class A1, class A2, class A3&gt;
void def(char const* name, Fn fn, A1 const&amp;, A2 const&amp;, A3 const&amp;);
</pre>
<dl class="function-semantics">
<dt><b>Requires:</b> <code>name</code> is an <a href=
"definitions.html#ntbs">ntbs</a> which conforms to Python's <a href=
"http://www.python.org/doc/current/ref/identifiers.html">identifier
naming rules</a>.</dt>
<dd>
<ul>
<li>If <code>Fn</code> is [derived from] <code><a href=
"object.html#object-spec">object</a></code>, it will be added to
the current scope as a single overload. To be useful,
<code>fn</code> should be <a href=
"http://www.python.org/doc/current/lib/built-in-funcs.html#l2h-6">callable</a>.</li>
<li>
If <code>a1</code> is the result of an <a href=
"overloads.html#overload-dispatch-expression"><em>overload-dispatch-expression</em></a>,
only the second form is allowed and fn must be a pointer to
function or pointer to member function whose <a href=
"definitions.html#arity">arity</a> is the same as A1's <a href=
"overloads.html#overload-dispatch-expression"><em>maximum
arity</em></a>.
<dl>
<dt><b>Effects:</b> For each prefix <em>P</em> of
<code>Fn</code>'s sequence of argument types, beginning with
the one whose length is <code>A1</code>'s <a href=
"overloads.html#overload-dispatch-expression"><em>minimum
arity</em></a>, adds a
<code><em>name</em>(</code>...<code>)</code> function overload
to the <a href="scope.html">current scope</a>. Each overload
generated invokes <code>a1</code>'s call-expression with
<em>P</em>, using a copy of <code>a1</code>'s <a href=
"CallPolicies.html">call policies</a>. If the longest valid
prefix of <code>A1</code> contains <em>N</em> types and
<code>a1</code> holds <em>M</em> keywords, an initial sequence
of the keywords are used for all but the first
<em>N</em>&nbsp;-&nbsp;<em>M</em> arguments of each
overload.<br>
</dt>
</dl>
</li>
<li>Otherwise, fn must be a non-null function or member function
pointer, and a single function overload built around fn is added to
the <a href="scope.html">current scope</a>. If any of
<code>a1</code>-<code>a3</code> are supplied, they may be selected
in any order from the table below.</li>
</ul>
<table border="1" summary="def() optional arguments">
<tr>
<th>Memnonic Name</th>
<th>Requirements/Type properties</th>
<th>Effects</th>
</tr>
<tr>
<td>docstring</td>
<td>Any <a href="definitions.html#ntbs">ntbs</a>.</td>
<td>Value will be bound to the <code>__doc__</code> attribute of
the resulting method overload.</td>
</tr>
<tr>
<td>policies</td>
<td>A model of <a href="CallPolicies.html">CallPolicies</a></td>
<td>A copy will be used as the call policies of the resulting
method overload.</td>
</tr>
<tr>
<td>keywords</td>
<td>The result of a <a href=
"args.html#keyword-expression"><em>keyword-expression</em></a>
specifying no more arguments than the <a href=
"definitions.html#arity">arity</a> of <code>fn</code>.</td>
<td>A copy will be used as the call policies of the resulting
method overload.</td>
</tr>
</table>
</dd>
</dl>
<h2><a name="examples"></a>Example</h2>
<pre>
#include &lt;boost/python/def.hpp&gt;
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/args.hpp&gt;
using namespace boost::python;
char const* foo(int x, int y) { return "foo"; }
BOOST_PYTHON_MODULE(def_test)
{
def("foo", foo, args("x", "y"), "foo's docstring");
}
</pre>
<p>
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
7 March, 2003
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

137
doc/v2/def_visitor.html Normal file
View File

@@ -0,0 +1,137 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<meta name="generator" content="Microsoft FrontPage 5.0">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - &lt;boost/python/def_visitor.hpp&gt;</title>
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../boost.png" border="0"></a></h3>
<td valign="top">
<h1 align="center"><a href="../index.html"><font size="7">Boost.Python</font></a></h1>
<h2 align="center">Header &lt;boost/python/def_visitor.hpp&gt;</h2>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a>
<dt><a href="#classes">Classes</a>
<dd>
<dl class="page-index">
<dt><a href="#def_visitor-spec">Class <code>def_visitor</code></a>
<dd> <a href="#def_visitor-synopsis">Class <code>def_visitor</code>
synopsis</a></dd>
<dd> <a href="#def_visitor-requirements">Class <code>def_visitor</code>
requirements</a></dd>
</dl>
<dt><a href="#examples">Example</a>
</dl>
<hr>
<h2><a name="introduction"></a>Introduction</h2>
<p><code>&lt;boost/python/def_visitor.hpp&gt;</code> provides a generic visitation
interface through which the <a href="class.html">class_</a> <b>def</b> member
functionality can be extended non-intrusively to avoid cluttering the <a href="class.html">class_</a>
interface. It declares the <code>def_visitor&lt;T&gt; </code>class template,
which is parameterized on the derived type <tt>DerivedVisitor</tt>, which provides
the actual <b>def</b> functionality through its <b>visit</b> member functions.
<h2><a name="classes"></a>Classes</h2>
<h3><a name="def_visitor-spec"></a>Class template <code>def_visitor&lt;DerivedVisitor&gt;</code></h3>
<p>The class def_visitor is a base class paramaterized by its derived class. The
def_visitor class is a protocol class. Its derived class, DerivedVisitor, is
expected to have a member function visit. The def_visitor class is never instantiated
directly. Instead, an instance of its subclass, DerivedVisitor,&nbsp; is passed
on as an argument to the <a href="class.html">class_</a> def member function.
<h4>
<a name="def_visitor-synopsis" id="def_visitor-synopsis"></a>Class <code>def_visitor </code>synopsis</h4>
<pre>namespace boost { namespace python {
template &lt;class DerivedVisitor&gt;
class def_visitor {};
}</pre>
<h3><a name="def_visitor-requirements"></a><code>def_visitor </code>requirements</h3>
<p>The <span class="pre">client supplied class </span><span class="pre"></span><tt class="literal"><span class="pre">DerivedVisitor</span></tt>
template parameter is expected to:
<ul>
<li>be privately derived from def_visitor</li>
<li>grant friend access to class def_visitor_access</li>
<li>define either or both visit member functions listed in the table below:</li>
</ul>
<table border class="table">
<tr>
<td width="181" nowrap><b>Expression</b></td>
<td width="85"><b>Return Type</b></td>
<td width="330"><b>Requirements</b></td>
<td width="259"><b>Effects</b></td>
</tr>
<tr>
<td nowrap>visitor.visit(cls)</td>
<td>void</td>
<td>cls is an instance of a <a href="class.html">class_</a>&nbsp; being wrapped
to Python. visitor is a def_visitor derived class.</td>
<td>A call to cls.def(visitor) forwards to this member function.</td>
</tr>
<tr>
<td nowrap>visitor.visit(cls, name, options)</td>
<td>void</td>
<td>cls is a class_ instance, name is a C string. visitor is a def_visitor
derived class. options is a context specific optional argument.</td>
<td>A call to cls.def(name, visitor) or cls.def(name, visitor, options) forwards
to this member function. </td>
</tr>
</table>
<h2><a name="examples"></a>Example</h2>
<pre>class X {/*...*/};<br>
class my_def_visitor : boost::python::def_visitor&lt;my_def_visitor&gt;
{
friend class def_visitor_access;
template &lt;class classT&gt;
void visit(classT&amp; c) const
{
c
.def(&quot;foo&quot;, &amp;my_def_visitor::foo)
.def(&quot;bar&quot;, &amp;my_def_visitor::bar)
;
}
static void foo(X&amp; self);
static void bar(X&amp; self);
};
BOOST_PYTHON_MODULE(my_ext)
{
class_&lt;X&gt;(&quot;X&quot;)
.def(my_def_visitor())
;
}
</pre>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->27 August, 2003<!--webbot bot="Timestamp" endspan i-checksum="34484" -->
</p>
<p><i>&copy; Copyright Joel de Guzman 2003. </i> Distributed under the Boost
Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

View File

@@ -11,10 +11,10 @@
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
"C++ Boost" src="../../../../boost.png" border="0"></a></h3>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Header
&lt;boost/python/default_call_policies.hpp&gt;</h2>
@@ -82,6 +82,7 @@ namespace boost { namespace python
static PyObject* postcall(PyObject*, PyObject* result);
typedef <a href=
"#default_result_converter-spec">default_result_converter</a> result_converter;
template &lt;class Sig&gt; struct extract_return_type : mpl::front&lt;Sig&gt;{};
};
}}
</pre>
@@ -161,10 +162,12 @@ struct return_value_policy : Base
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
05 November, 2001
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
11 June, 2007
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave
Abrahams</a> 2002. All Rights Reserved.</i>
<p><i>&copy; Copyright <a href="http://www.boost.org/people/dave_abrahams.htm">Dave
Abrahams</a> 2002.</i> Distributed under the Boost Software License,
Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)</p>

View File

@@ -1,35 +1,102 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - Definitions</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - Definitions</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277" alt=
"C++ Boost" src="../../../../c++boost.gif" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center">Boost.Python</h1>
<h2 align="center">Definitions</h2>
</td>
</tr>
</table>
<hr>
<dl class="definitions">
<dt><b>{{term}}:</b> {{definition}}</dt>
<dt><b>{{term}}:</b> {{definition}}</dt>
</dl>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
05 November, 2002
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Definitions</h2>
</td>
</tr>
</table>
<hr>
<dl class="definitions">
<dt><b><a name="arity">arity</a>:</b> The number of arguments accepted
by a function or member function. Unless otherwise specified, the
hidden "<code>this</code>" argument to member functions is not counted
when specifying arity</dt>
<dd><br>
</dd>
<dt><b><a name="ntbs">ntbs</a>:</b> Null-Terminated Byte String, or
`C'-string. C++ string literals are <strong>ntbs</strong>es. An
<strong>ntbs</strong> must never be null.</dt>
<dd><br>
</dd>
<dt><b><a name="raise">raise</a>:</b> Exceptions in Python are
"raised", not "thrown", as they are in C++. When this documentation
says that some Python exception is "raised" in the context of C++ code,
it means that the corresponding Python exception is set via the <a
href=
"http://www.python.org/doc/current/api/exceptionHandling.html">Python/'C'
API</a>, and <code><a href=
"errors.html#throw_error_already_set-spec">throw_error_already_set</a>()</code>
is called.</dt>
<dd><br>
</dd>
<dt><b><a name="POD">POD</a>:</b> A technical term from the C++
standard. Short for "Plain Ol'Data": A POD-struct is an aggregate class
that has no non-static data members of type pointer to member,
non-POD-struct, non-POD-union (or array of such types) or reference,
and has no user-defined copy assign- ment operator and no user-defined
destructor. Similarly, a POD-union is an aggregate union that has no
non-static data members of type pointer to member, non-POD-struct,
non-POD-union (or array of such types) or reference, and has no
user-defined copy assignment operator and no user-defined destructor. A
POD class is a class that is either a POD-struct or a POD-union. An
aggregate is an array or a class (clause 9) with no user-declared
constructors (12.1), no private or protected non-static data members
(clause 11), no base classes (clause 10), and no virtual functions
(10.3).</dt>
<dd><br>
</dd>
<dt><b><a name="ODR">ODR</a>:</b> The &quot;One Definition
Rule&quot;, which says that any entity in a C++ program must have the same definition in all translation units (object files) which make up a program.
</dt>
<dd><br>
</dd>
</dl>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
13 November, 2002
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href="../../../../people/dave_abrahams.htm">Dave Abrahams</a>
2002. All Rights Reserved.</i></p>
</body>
</p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

152
doc/v2/dict.html Normal file
View File

@@ -0,0 +1,152 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - &lt;boost/python/dict.hpp&gt;</title>
</head>
<body>
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Header &lt;boost/python/dict.hpp&gt;</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#classes">Classes</a></dt>
<dd>
<dl class="page-index">
<dt><a href="#dict-spec">Class <code>dict</code></a></dt>
<dd>
<dl class="page-index">
<dt><a href="#dict-spec-synopsis">Class <code>dict</code>
synopsis</a></dt>
</dl>
</dd>
</dl>
</dd>
<dt><a href="#examples">Example(s)</a></dt>
</dl>
<hr>
<h2><a name="introduction"></a>Introduction</h2>
<p>Exposes a <a href=
"ObjectWrapper.html#TypeWrapper-concept">TypeWrapper</a> for the Python
<a href=
"http://www.python.org/dev/doc/devel/lib/typesmapping.html">dict</a>
type.</p>
<h2><a name="classes"></a>Classes</h2>
<h3><a name="dict-spec"></a>Class <code>dict</code></h3>
<p>Exposes the <a href=
"http://www.python.org/dev/doc/devel/lib/typesmapping.html">mapping
protocol</a> of Python's built-in <code>dict</code> type. The semantics
of the constructors and member functions defined below can be fully
understood by reading the <a href=
"ObjectWrapper.html#TypeWrapper-concept">TypeWrapper</a> concept
definition. Since <code>dict</code> is publicly derived from <code><a
href="object.html#object-spec">object</a></code>, the public object
interface applies to <code>dict</code> instances as well.</p>
<h4><a name="dict-spec-synopsis"></a>Class <code>dict</code>
synopsis</h4>
<pre>
namespace boost { namespace python
{
class dict : public object
{
dict();
template&lt; class T &gt;
dict(T const &amp; data);
// modifiers
void clear();
dict copy();
template &lt;class T1, class T2&gt;
tuple popitem();
template &lt;class T&gt;
object setdefault(T const &amp;k);
template &lt;class T1, class T2&gt;
object setdefault(T1 const &amp; k, T2 const &amp; d);
void update(object_cref E);
template&lt; class T &gt;
void update(T const &amp; E);
// observers
list values() const;
object get(object_cref k) const;
template&lt;class T&gt;
object get(T const &amp; k) const;
object get(object_cref k, object_cref d) const;
object get(T1 const &amp; k, T2 const &amp; d) const;
bool has_key(object_cref k) const;
template&lt; class T &gt;
bool has_key(T const &amp; k) const;
list items() const;
object iteritems() const;
object iterkeys() const;
object itervalues() const;
list keys() const;
};
}}
</pre>
<h2><a name="examples"></a>Example</h2>
<pre>
using namespace boost::python;
dict swap_object_dict(object target, dict d)
{
dict result = extract&lt;dict&gt;(target.attr("__dict__"));
target.attr("__dict__") = d;
return result;
}
</pre>
<p>Revised 30 September, 2002</p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>

View File

@@ -0,0 +1,386 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Linux/x86 (vers 1st September 2004), see www.w3.org">
<meta http-equiv="Content-Type" content=
"text/html; charset=us-ascii">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python -
&lt;boost/python/docstring_options.hpp&gt;</title>
</head>
<body>
<table border="0" cellpadding="7" cellspacing="0" width="100%"
summary="header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width=
"277" alt="C++ Boost" src="../../../../boost.png" border=
"0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href=
"../index.html">Boost.Python</a></h1>
<h2 align="center">Header
&lt;boost/python/docstring_options.hpp&gt;</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href="#classes">Classes</a></dt>
<dd>
<dl class="page-index">
<dt><a href="#docstring_options-spec">Class
<code>docstring_options</code></a></dt>
<dd>
<dl class="page-index">
<dt><a href="#docstring_options-spec-synopsis">Class
<code>docstring_options</code> synopsis</a></dt>
<dt><a href="#docstring_options-spec-ctors">Class
<code>docstring_options</code> constructors</a></dt>
<dt><a href="#docstring_options-spec-dtors">Class
<code>docstring_options</code> destructors</a></dt>
<dt><a href="#docstring_options-spec-modifiers">Class
<code>docstring_options</code> modifiers</a></dt>
</dl>
</dd>
</dl>
</dd>
<dt><a href="#examples">Examples</a></dt>
</dl>
<hr>
<h2><a name="introduction" id=
"introduction"></a>Introduction</h2>
<p>Boost.Python supports user-defined docstrings with automatic
appending of C++ signatures. These features are enabled by
default. The <code>class docstring_options</code> is available to
selectively suppress the user-defined docstrings, signatures, or
both.</p>
<h2><a name="classes" id="classes"></a>Classes</h2>
<h3><a name="docstring_options-spec" id=
"docstring_options-spec"></a>Class
<code>docstring_options</code></h3>
<p>Controls the appearance of docstrings of wrapped functions and
member functions for the life-time of the instance. The instances
are noncopyable to eliminate the possibility of surprising side
effects.</p>
<h4><a name="docstring_options-spec-synopsis" id=
"docstring_options-spec-synopsis"></a>Class
<code>docstring_options</code> synopsis</h4>
<pre>
namespace boost { namespace python {
class docstring_options : boost::noncopyable
{
public:
docstring_options(bool show_all=true);
docstring_options(bool show_user_defined, bool show_signatures);
docstring_options(bool show_user_defined, bool show_py_signatures, bool show_cpp_signatures);
~docstring_options();
void
disable_user_defined();
void
enable_user_defined();
void
disable_signatures();
void
enable_signatures();
void
disable_py_signatures();
void
enable_py_signatures();
void
disable_cpp_signatures();
void
enable_cpp_signatures();
void
disable_all();
void
enable_all();
};
}}
</pre>
<h4><a name="docstring_options-spec-ctors" id=
"docstring_options-spec-ctors"></a>Class
<code>docstring_options</code> constructors</h4>
<pre>
docstring_options(bool show_all=true);
</pre>
<dl class="function-semantics">
<dt><b>Effects:</b> Constructs a <code>docstring_options</code>
object which controls the appearance of function and
member-function docstrings defined in the code that follows. If
<code>show_all</code> is <code>true</code>, both the
user-defined docstrings and the automatically generated Python and C++
signatures are shown. If <code>show_all</code> is
<code>false</code> the <code>__doc__</code> attributes are
<code>None</code>.</dt>
</dl>
<pre>
docstring_options(bool show_user_defined, bool show_signatures);
</pre>
<dl class="function-semantics">
<dt><b>Effects:</b> Constructs a <code>docstring_options</code>
object which controls the appearance of function and
member-function docstrings defined in the code that follows.
Iff <code>show_user_defined</code> is <code>true</code>, the
user-defined docstrings are shown. Iff
<code>show_signatures</code> is <code>true</code>, Python and C++
signatures are automatically added. If both
<code>show_user_defined</code> and <code>show_signatures</code>
are <code>false</code>, the <code>__doc__</code> attributes are
<code>None</code>.</dt>
</dl>
<pre>
docstring_options(bool show_user_defined, bool show_py_signatures, bool show_cpp_signatures);
</pre>
<dl class="function-semantics">
<dt><b>Effects:</b> Constructs a <code>docstring_options</code>
object which controls the appearance of function and
member-function docstrings defined in the code that follows.
Iff <code>show_user_defined</code> is <code>true</code>, the
user-defined docstrings are shown. Iff
<code>show_py_signatures</code> is <code>true</code>, Python
signatures are automatically added. Iff
<code>show_cpp_signatures</code> is <code>true</code>, C++
signatures are automatically added. If all parameters are
<code>false</code>, the <code>__doc__</code> attributes are
<code>None</code>.</dt>
</dl>
<h4><a name="docstring_options-spec-dtors" id=
"docstring_options-spec-dtors"></a>Class
<code>docstring_options</code> destructors</h4>
<pre>
~docstring_options();
</pre>
<dl class="function-semantics">
<dt><b>Effects:</b> Restores the previous state of the
docstring options. In particular, if
<code>docstring_options</code> instances are in nested C++
scopes the settings effective in the enclosing scope are
restored. If the last <code>docstring_options</code> instance
goes out of scope the default "all on" settings are
restored.</dt>
</dl>
<h4><a name="docstring_options-spec-modifiers" id=
"docstring_options-spec-modifiers"></a>Class
<code>docstring_options</code> modifier functions</h4>
<pre>
void disable_user_defined();
void enable_user_defined();
void disable_signatures();
void enable_signatures();
void disable_py_signatures();
void enable_py_signatures();
void disable_cpp_signatures();
void enable_cpp_signatures();
void disable_all();
void enable_all();
</pre>
<dl class="function-semantics">
<dt>These member functions dynamically change the appearance of
docstrings in the code that follows. The
<code>*_user_defined()</code> and <code>*_signatures()</code>
member functions are provided for fine-grained control. The
<code>*_all()</code> member functions are convenient shortcuts
to manipulate all settings simultaneously.</dt>
</dl>
<h2><a name="examples" id="examples"></a>Examples</h2>
<h4>Docstring options defined at compile time</h4>
<pre>
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/def.hpp&gt;
#include &lt;boost/python/docstring_options.hpp&gt;
void foo() {}
BOOST_PYTHON_MODULE(demo)
{
using namespace boost::python;
docstring_options doc_options(DEMO_DOCSTRING_SHOW_ALL);
def("foo", foo, "foo doc");
}
</pre>If compiled with <code>-DDEMO_DOCSTRING_SHOW_ALL=true</code>:
<pre>
&gt;&gt;&gt; import demo
&gt;&gt;&gt; print demo.foo.__doc__
foo() -&gt; None : foo doc
C++ signature:
foo(void) -&gt; void
</pre>If compiled with
<code>-DDEMO_DOCSTRING_SHOW_ALL=false</code>:
<pre>
&gt;&gt;&gt; import demo
&gt;&gt;&gt; print demo.foo.__doc__
None
</pre>
<h4>Selective suppressions</h4>
<pre>
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/def.hpp&gt;
#include &lt;boost/python/args.hpp&gt;
#include &lt;boost/python/docstring_options.hpp&gt;
int foo1(int i) { return i; }
int foo2(long l) { return static_cast&lt;int&gt;(l); }
int foo3(float f) { return static_cast&lt;int&gt;(f); }
int foo4(double d) { return static_cast&lt;int&gt;(d); }
BOOST_PYTHON_MODULE(demo)
{
using namespace boost::python;
docstring_options doc_options;
def("foo1", foo1, arg("i"), "foo1 doc");
doc_options.disable_user_defined();
def("foo2", foo2, arg("l"), "foo2 doc");
doc_options.disable_signatures();
def("foo3", foo3, arg("f"), "foo3 doc");
doc_options.enable_user_defined();
def("foo4", foo4, arg("d"), "foo4 doc");
doc_options.enable_py_signatures();
def("foo5", foo4, arg("d"), "foo5 doc");
doc_options.disable_py_signatures();
doc_options.enable_cpp_signatures();
def("foo6", foo4, arg("d"), "foo6 doc");
}
</pre>Python code:
<pre>
&gt;&gt;&gt; import demo
&gt;&gt;&gt; print demo.foo1.__doc__
foo1( (int)i) -&gt; int : foo1 doc
C++ signature:
foo1(int i) -&gt; int
&gt;&gt;&gt; print demo.foo2.__doc__
foo2( (int)l) -&gt; int :
C++ signature:
foo2(long l) -&gt; int
&gt;&gt;&gt; print demo.foo3.__doc__
None
&gt;&gt;&gt; print demo.foo4.__doc__
foo4 doc
&gt;&gt;&gt; print demo.foo5.__doc__
foo5( (float)d) -&gt; int : foo5 doc
&gt;&gt;&gt; print demo.foo6.__doc__
foo6 doc
C++ signature:
foo6(double d) -&gt; int
</pre>
<h4>Wrapping from multiple C++ scopes</h4>
<pre>
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/def.hpp&gt;
#include &lt;boost/python/args.hpp&gt;
#include &lt;boost/python/docstring_options.hpp&gt;
int foo1(int i) { return i; }
int foo2(long l) { return static_cast&lt;int&gt;(l); }
int bar1(int i) { return i; }
int bar2(long l) { return static_cast&lt;int&gt;(l); }
namespace {
void wrap_foos()
{
using namespace boost::python;
// no docstring_options here
// -&gt; settings from outer C++ scope are in effect
def("foo1", foo1, arg("i"), "foo1 doc");
def("foo2", foo2, arg("l"), "foo2 doc");
}
void wrap_bars()
{
using namespace boost::python;
bool show_user_defined = true;
bool show_signatures = false;
docstring_options doc_options(show_user_defined, show_signatures);
def("bar1", bar1, arg("i"), "bar1 doc");
def("bar2", bar2, arg("l"), "bar2 doc");
}
}
BOOST_PYTHON_MODULE(demo)
{
boost::python::docstring_options doc_options(false);
wrap_foos();
wrap_bars();
}
</pre>Python code:
<pre>
&gt;&gt;&gt; import demo
&gt;&gt;&gt; print demo.foo1.__doc__
None
&gt;&gt;&gt; print demo.foo2.__doc__
None
&gt;&gt;&gt; print demo.bar1.__doc__
bar1 doc
&gt;&gt;&gt; print demo.bar2.__doc__
bar2 doc
</pre>
<h4>See also: <code>boost/libs/python/test/docstring.cpp</code>
and <code>docstring.py</code></h4>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
16 January, 2006
<!--webbot bot="Timestamp" endspan i-checksum="39359" --></p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/ralf_w_grosse_kunstleve.htm">Ralf W.
Grosse-Kunstleve</a> 2006.</i></p>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More