![]() |
Boost-Commit : |
From: bdawes_at_[hidden]
Date: 2007-11-15 11:31:29
Author: bemandawes
Date: 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
New Revision: 41109
URL: http://svn.boost.org/trac/boost/changeset/41109
Log:
Merged tools, system, filesystem from trunk at 41106
Added:
branches/release/boost/cerrno.hpp
- copied unchanged from r41103, /trunk/boost/cerrno.hpp
branches/release/boost/system/
- copied from r41103, /trunk/boost/system/
branches/release/libs/filesystem/doc/reference.html
- copied unchanged from r41096, /trunk/libs/filesystem/doc/reference.html
branches/release/libs/system/
- copied from r41103, /trunk/libs/system/
branches/release/tools/boostbook/xsl/callout.xsl
- copied unchanged from r41096, /trunk/tools/boostbook/xsl/callout.xsl
branches/release/tools/boostbook/xsl/xhtml.xsl
- copied unchanged from r41096, /trunk/tools/boostbook/xsl/xhtml.xsl
branches/release/tools/build/v2/boost_build.png
- copied unchanged from r41096, /trunk/tools/build/v2/boost_build.png
branches/release/tools/build/v2/doc/src/standalone.xml
- copied unchanged from r41096, /trunk/tools/build/v2/doc/src/standalone.xml
branches/release/tools/build/v2/example/qt/qt4/hello/
- copied from r41096, /trunk/tools/build/v2/example/qt/qt4/hello/
branches/release/tools/build/v2/example/qt/qt4/hello/Jamroot (props changed)
- copied unchanged from r41096, /trunk/tools/build/v2/example/qt/qt4/hello/Jamroot
branches/release/tools/build/v2/example/qt/qt4/hello/arrow.cpp
- copied unchanged from r41096, /trunk/tools/build/v2/example/qt/qt4/hello/arrow.cpp
branches/release/tools/build/v2/example/qt/qt4/hello/arrow.h
- copied unchanged from r41096, /trunk/tools/build/v2/example/qt/qt4/hello/arrow.h
branches/release/tools/build/v2/example/qt/qt4/hello/main.cpp
- copied unchanged from r41096, /trunk/tools/build/v2/example/qt/qt4/hello/main.cpp
branches/release/tools/build/v2/test/example_customization.py
- copied unchanged from r41096, /trunk/tools/build/v2/test/example_customization.py
branches/release/tools/build/v2/test/example_gettext.py
- copied unchanged from r41096, /trunk/tools/build/v2/test/example_gettext.py
branches/release/tools/build/v2/test/example_libraries.py
- copied unchanged from r41096, /trunk/tools/build/v2/test/example_libraries.py
branches/release/tools/build/v2/test/example_make.py
- copied unchanged from r41096, /trunk/tools/build/v2/test/example_make.py
branches/release/tools/build/v2/test/example_qt4.py
- copied unchanged from r41096, /trunk/tools/build/v2/test/example_qt4.py
branches/release/tools/build/v2/test/free_features_request.py
- copied unchanged from r41096, /trunk/tools/build/v2/test/free_features_request.py
branches/release/tools/build/v2/tools/mipspro.jam
- copied unchanged from r41096, /trunk/tools/build/v2/tools/mipspro.jam
branches/release/tools/build/v2/tools/pathscale.jam
- copied unchanged from r41096, /trunk/tools/build/v2/tools/pathscale.jam
branches/release/tools/build/v2/tools/pgi.jam
- copied unchanged from r41096, /trunk/tools/build/v2/tools/pgi.jam
branches/release/tools/build/v2/tools/qt.jam
- copied unchanged from r41096, /trunk/tools/build/v2/tools/qt.jam
branches/release/tools/build/v2/tools/qt3.jam
- copied unchanged from r41096, /trunk/tools/build/v2/tools/qt3.jam
branches/release/tools/buildbot/
- copied from r41096, /trunk/tools/buildbot/
branches/release/tools/buildbot/config/
- copied from r41096, /trunk/tools/buildbot/config/
branches/release/tools/buildbot/config/master/
- copied from r41096, /trunk/tools/buildbot/config/master/
branches/release/tools/buildbot/config/master/alpha/
- copied from r41096, /trunk/tools/buildbot/config/master/alpha/
branches/release/tools/buildbot/config/master/alpha/master.cfg
- copied unchanged from r41096, /trunk/tools/buildbot/config/master/alpha/master.cfg
branches/release/tools/buildbot/src/
- copied from r41096, /trunk/tools/buildbot/src/
branches/release/tools/buildbot/src/boost/
- copied from r41096, /trunk/tools/buildbot/src/boost/
branches/release/tools/buildbot/src/boost/__init__.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/__init__.py
branches/release/tools/buildbot/src/boost/bot/
- copied from r41096, /trunk/tools/buildbot/src/boost/bot/
branches/release/tools/buildbot/src/boost/bot/__init__.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/bot/__init__.py
branches/release/tools/buildbot/src/boost/bot/char_translation_table.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/bot/char_translation_table.py
branches/release/tools/buildbot/src/boost/bot/factory.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/bot/factory.py
branches/release/tools/buildbot/src/boost/bot/remote.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/bot/remote.py
branches/release/tools/buildbot/src/boost/bot/step.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/bot/step.py
branches/release/tools/buildbot/src/boost/buildbot/
- copied from r41096, /trunk/tools/buildbot/src/boost/buildbot/
branches/release/tools/buildbot/src/boost/buildbot/__init__.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/__init__.py
branches/release/tools/buildbot/src/boost/buildbot/char_translation_table.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/char_translation_table.py
branches/release/tools/buildbot/src/boost/buildbot/factory.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/factory.py
branches/release/tools/buildbot/src/boost/buildbot/remote.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/remote.py
branches/release/tools/buildbot/src/boost/buildbot/script.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/script.py
branches/release/tools/buildbot/src/boost/buildbot/server.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/server.py
branches/release/tools/buildbot/src/boost/buildbot/step.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/buildbot/step.py
branches/release/tools/buildbot/src/boost/patchwork.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/boost/patchwork.py
branches/release/tools/buildbot/src/buildbot.py
- copied unchanged from r41096, /trunk/tools/buildbot/src/buildbot.py
branches/release/tools/common/
- copied from r41096, /trunk/tools/common/
branches/release/tools/common/time_string.hpp
- copied unchanged from r41096, /trunk/tools/common/time_string.hpp
branches/release/tools/inspect/doc/
- copied from r41096, /trunk/tools/inspect/doc/
branches/release/tools/inspect/doc/build.jam
- copied unchanged from r41096, /trunk/tools/inspect/doc/build.jam
branches/release/tools/inspect/doc/inspect.qbk
- copied unchanged from r41096, /trunk/tools/inspect/doc/inspect.qbk
branches/release/tools/inspect/run_inspect.sh
- copied unchanged from r41096, /trunk/tools/inspect/run_inspect.sh
branches/release/tools/inspect/unnamed_namespace_check.cpp
- copied unchanged from r41096, /trunk/tools/inspect/unnamed_namespace_check.cpp
branches/release/tools/inspect/unnamed_namespace_check.hpp
- copied unchanged from r41096, /trunk/tools/inspect/unnamed_namespace_check.hpp
branches/release/tools/jam/doc/history.qbk
- copied unchanged from r41096, /trunk/tools/jam/doc/history.qbk
branches/release/tools/jam/src/boehm_gc/
- copied from r41096, /trunk/tools/jam/src/boehm_gc/
branches/release/tools/jam/src/boehm_gc/AmigaOS.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/AmigaOS.c
branches/release/tools/jam/src/boehm_gc/BCC_MAKEFILE
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/BCC_MAKEFILE
branches/release/tools/jam/src/boehm_gc/ChangeLog
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/ChangeLog
branches/release/tools/jam/src/boehm_gc/EMX_MAKEFILE
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/EMX_MAKEFILE
branches/release/tools/jam/src/boehm_gc/MacOS.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/MacOS.c
branches/release/tools/jam/src/boehm_gc/MacProjects.sit.hqx
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/MacProjects.sit.hqx
branches/release/tools/jam/src/boehm_gc/Mac_files/
- copied from r41096, /trunk/tools/jam/src/boehm_gc/Mac_files/
branches/release/tools/jam/src/boehm_gc/Mac_files/MacOS_Test_config.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Mac_files/MacOS_Test_config.h
branches/release/tools/jam/src/boehm_gc/Mac_files/MacOS_config.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Mac_files/MacOS_config.h
branches/release/tools/jam/src/boehm_gc/Mac_files/dataend.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Mac_files/dataend.c
branches/release/tools/jam/src/boehm_gc/Mac_files/datastart.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Mac_files/datastart.c
branches/release/tools/jam/src/boehm_gc/Makefile.DLLs
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Makefile.DLLs
branches/release/tools/jam/src/boehm_gc/Makefile.am
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Makefile.am
branches/release/tools/jam/src/boehm_gc/Makefile.direct
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Makefile.direct
branches/release/tools/jam/src/boehm_gc/Makefile.dj
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Makefile.dj
branches/release/tools/jam/src/boehm_gc/Makefile.in
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/Makefile.in
branches/release/tools/jam/src/boehm_gc/NT_MAKEFILE
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/NT_MAKEFILE
branches/release/tools/jam/src/boehm_gc/NT_STATIC_THREADS_MAKEFILE
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/NT_STATIC_THREADS_MAKEFILE
branches/release/tools/jam/src/boehm_gc/NT_THREADS_MAKEFILE
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/NT_THREADS_MAKEFILE
branches/release/tools/jam/src/boehm_gc/NT_X64_STATIC_THREADS_MAKEFILE
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/NT_X64_STATIC_THREADS_MAKEFILE
branches/release/tools/jam/src/boehm_gc/OS2_MAKEFILE
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/OS2_MAKEFILE
branches/release/tools/jam/src/boehm_gc/PCR-Makefile
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/PCR-Makefile
branches/release/tools/jam/src/boehm_gc/README.QUICK
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/README.QUICK
branches/release/tools/jam/src/boehm_gc/SMakefile.amiga
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/SMakefile.amiga
branches/release/tools/jam/src/boehm_gc/WCC_MAKEFILE
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/WCC_MAKEFILE
branches/release/tools/jam/src/boehm_gc/acinclude.m4
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/acinclude.m4
branches/release/tools/jam/src/boehm_gc/aclocal.m4
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/aclocal.m4
branches/release/tools/jam/src/boehm_gc/add_gc_prefix.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/add_gc_prefix.c
branches/release/tools/jam/src/boehm_gc/allchblk.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/allchblk.c
branches/release/tools/jam/src/boehm_gc/alloc.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/alloc.c
branches/release/tools/jam/src/boehm_gc/alpha_mach_dep.S
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/alpha_mach_dep.S
branches/release/tools/jam/src/boehm_gc/backgraph.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/backgraph.c
branches/release/tools/jam/src/boehm_gc/bdw-gc.pc
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/bdw-gc.pc
branches/release/tools/jam/src/boehm_gc/bdw-gc.pc.in
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/bdw-gc.pc.in
branches/release/tools/jam/src/boehm_gc/blacklst.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/blacklst.c
branches/release/tools/jam/src/boehm_gc/callprocs
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/callprocs
branches/release/tools/jam/src/boehm_gc/checksums.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/checksums.c
branches/release/tools/jam/src/boehm_gc/compile
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/compile
branches/release/tools/jam/src/boehm_gc/config.guess
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/config.guess
branches/release/tools/jam/src/boehm_gc/config.sub
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/config.sub
branches/release/tools/jam/src/boehm_gc/configure
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/configure
branches/release/tools/jam/src/boehm_gc/configure.ac
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/configure.ac
branches/release/tools/jam/src/boehm_gc/configure.host
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/configure.host
branches/release/tools/jam/src/boehm_gc/configure_atomic_ops.sh
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/configure_atomic_ops.sh
branches/release/tools/jam/src/boehm_gc/cord/
- copied from r41096, /trunk/tools/jam/src/boehm_gc/cord/
branches/release/tools/jam/src/boehm_gc/cord/cord.am
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/cord.am
branches/release/tools/jam/src/boehm_gc/cord/cordbscs.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/cordbscs.c
branches/release/tools/jam/src/boehm_gc/cord/cordprnt.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/cordprnt.c
branches/release/tools/jam/src/boehm_gc/cord/cordtest.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/cordtest.c
branches/release/tools/jam/src/boehm_gc/cord/cordxtra.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/cordxtra.c
branches/release/tools/jam/src/boehm_gc/cord/de.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de.c
branches/release/tools/jam/src/boehm_gc/cord/de_cmds.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de_cmds.h
branches/release/tools/jam/src/boehm_gc/cord/de_win.ICO
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de_win.ICO
branches/release/tools/jam/src/boehm_gc/cord/de_win.RC
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de_win.RC
branches/release/tools/jam/src/boehm_gc/cord/de_win.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de_win.c
branches/release/tools/jam/src/boehm_gc/cord/de_win.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/cord/de_win.h
branches/release/tools/jam/src/boehm_gc/darwin_stop_world.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/darwin_stop_world.c
branches/release/tools/jam/src/boehm_gc/dbg_mlc.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/dbg_mlc.c
branches/release/tools/jam/src/boehm_gc/depcomp
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/depcomp
branches/release/tools/jam/src/boehm_gc/digimars.mak
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/digimars.mak
branches/release/tools/jam/src/boehm_gc/doc/
- copied from r41096, /trunk/tools/jam/src/boehm_gc/doc/
branches/release/tools/jam/src/boehm_gc/doc/README
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README
branches/release/tools/jam/src/boehm_gc/doc/README.DGUX386
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.DGUX386
branches/release/tools/jam/src/boehm_gc/doc/README.Mac
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.Mac
branches/release/tools/jam/src/boehm_gc/doc/README.MacOSX
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.MacOSX
branches/release/tools/jam/src/boehm_gc/doc/README.OS2
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.OS2
branches/release/tools/jam/src/boehm_gc/doc/README.amiga
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.amiga
branches/release/tools/jam/src/boehm_gc/doc/README.arm.cross
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.arm.cross
branches/release/tools/jam/src/boehm_gc/doc/README.autoconf
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.autoconf
branches/release/tools/jam/src/boehm_gc/doc/README.changes
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.changes
branches/release/tools/jam/src/boehm_gc/doc/README.contributors
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.contributors
branches/release/tools/jam/src/boehm_gc/doc/README.cords
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.cords
branches/release/tools/jam/src/boehm_gc/doc/README.darwin
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.darwin
branches/release/tools/jam/src/boehm_gc/doc/README.dj
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.dj
branches/release/tools/jam/src/boehm_gc/doc/README.environment
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.environment
branches/release/tools/jam/src/boehm_gc/doc/README.ews4800
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.ews4800
branches/release/tools/jam/src/boehm_gc/doc/README.hp
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.hp
branches/release/tools/jam/src/boehm_gc/doc/README.linux
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.linux
branches/release/tools/jam/src/boehm_gc/doc/README.macros
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.macros
branches/release/tools/jam/src/boehm_gc/doc/README.rs6000
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.rs6000
branches/release/tools/jam/src/boehm_gc/doc/README.sgi
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.sgi
branches/release/tools/jam/src/boehm_gc/doc/README.solaris2
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.solaris2
branches/release/tools/jam/src/boehm_gc/doc/README.uts
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.uts
branches/release/tools/jam/src/boehm_gc/doc/README.win32
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.win32
branches/release/tools/jam/src/boehm_gc/doc/README.win64
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/README.win64
branches/release/tools/jam/src/boehm_gc/doc/barrett_diagram
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/barrett_diagram
branches/release/tools/jam/src/boehm_gc/doc/debugging.html
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/debugging.html
branches/release/tools/jam/src/boehm_gc/doc/doc.am
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/doc.am
branches/release/tools/jam/src/boehm_gc/doc/gc.man
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/gc.man
branches/release/tools/jam/src/boehm_gc/doc/gcdescr.html
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/gcdescr.html
branches/release/tools/jam/src/boehm_gc/doc/gcinterface.html
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/gcinterface.html
branches/release/tools/jam/src/boehm_gc/doc/leak.html
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/leak.html
branches/release/tools/jam/src/boehm_gc/doc/overview.html
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/overview.html
branches/release/tools/jam/src/boehm_gc/doc/porting.html
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/porting.html
branches/release/tools/jam/src/boehm_gc/doc/scale.html
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/scale.html
branches/release/tools/jam/src/boehm_gc/doc/simple_example.html
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/simple_example.html
branches/release/tools/jam/src/boehm_gc/doc/tree.html
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/doc/tree.html
branches/release/tools/jam/src/boehm_gc/dyn_load.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/dyn_load.c
branches/release/tools/jam/src/boehm_gc/finalize.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/finalize.c
branches/release/tools/jam/src/boehm_gc/gc.mak
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gc.mak
branches/release/tools/jam/src/boehm_gc/gc_cpp.cc
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gc_cpp.cc
branches/release/tools/jam/src/boehm_gc/gc_cpp.cpp
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gc_cpp.cpp
branches/release/tools/jam/src/boehm_gc/gc_dlopen.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gc_dlopen.c
branches/release/tools/jam/src/boehm_gc/gcj_mlc.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gcj_mlc.c
branches/release/tools/jam/src/boehm_gc/gcname.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/gcname.c
branches/release/tools/jam/src/boehm_gc/headers.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/headers.c
branches/release/tools/jam/src/boehm_gc/hpux_test_and_clear.s
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/hpux_test_and_clear.s
branches/release/tools/jam/src/boehm_gc/ia64_save_regs_in_stack.s
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/ia64_save_regs_in_stack.s
branches/release/tools/jam/src/boehm_gc/if_mach.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/if_mach.c
branches/release/tools/jam/src/boehm_gc/if_not_there.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/if_not_there.c
branches/release/tools/jam/src/boehm_gc/include/
- copied from r41096, /trunk/tools/jam/src/boehm_gc/include/
branches/release/tools/jam/src/boehm_gc/include/cord.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/cord.h
branches/release/tools/jam/src/boehm_gc/include/ec.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/ec.h
branches/release/tools/jam/src/boehm_gc/include/gc.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc.h
branches/release/tools/jam/src/boehm_gc/include/gc_allocator.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_allocator.h
branches/release/tools/jam/src/boehm_gc/include/gc_amiga_redirects.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_amiga_redirects.h
branches/release/tools/jam/src/boehm_gc/include/gc_backptr.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_backptr.h
branches/release/tools/jam/src/boehm_gc/include/gc_config_macros.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_config_macros.h
branches/release/tools/jam/src/boehm_gc/include/gc_cpp.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_cpp.h
branches/release/tools/jam/src/boehm_gc/include/gc_gcj.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_gcj.h
branches/release/tools/jam/src/boehm_gc/include/gc_inline.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_inline.h
branches/release/tools/jam/src/boehm_gc/include/gc_mark.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_mark.h
branches/release/tools/jam/src/boehm_gc/include/gc_pthread_redirects.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_pthread_redirects.h
branches/release/tools/jam/src/boehm_gc/include/gc_tiny_fl.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_tiny_fl.h
branches/release/tools/jam/src/boehm_gc/include/gc_typed.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/gc_typed.h
branches/release/tools/jam/src/boehm_gc/include/include.am
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/include.am
branches/release/tools/jam/src/boehm_gc/include/javaxfc.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/javaxfc.h
branches/release/tools/jam/src/boehm_gc/include/leak_detector.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/leak_detector.h
branches/release/tools/jam/src/boehm_gc/include/new_gc_alloc.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/new_gc_alloc.h
branches/release/tools/jam/src/boehm_gc/include/private/
- copied from r41096, /trunk/tools/jam/src/boehm_gc/include/private/
branches/release/tools/jam/src/boehm_gc/include/private/cord_pos.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/cord_pos.h
branches/release/tools/jam/src/boehm_gc/include/private/darwin_semaphore.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/darwin_semaphore.h
branches/release/tools/jam/src/boehm_gc/include/private/darwin_stop_world.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/darwin_stop_world.h
branches/release/tools/jam/src/boehm_gc/include/private/dbg_mlc.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/dbg_mlc.h
branches/release/tools/jam/src/boehm_gc/include/private/gc_hdrs.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/gc_hdrs.h
branches/release/tools/jam/src/boehm_gc/include/private/gc_locks.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/gc_locks.h
branches/release/tools/jam/src/boehm_gc/include/private/gc_pmark.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/gc_pmark.h
branches/release/tools/jam/src/boehm_gc/include/private/gc_priv.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/gc_priv.h
branches/release/tools/jam/src/boehm_gc/include/private/gcconfig.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/gcconfig.h
branches/release/tools/jam/src/boehm_gc/include/private/msvc_dbg.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/msvc_dbg.h
branches/release/tools/jam/src/boehm_gc/include/private/pthread_stop_world.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/pthread_stop_world.h
branches/release/tools/jam/src/boehm_gc/include/private/pthread_support.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/pthread_support.h
branches/release/tools/jam/src/boehm_gc/include/private/specific.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/specific.h
branches/release/tools/jam/src/boehm_gc/include/private/thread_local_alloc.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/private/thread_local_alloc.h
branches/release/tools/jam/src/boehm_gc/include/weakpointer.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/include/weakpointer.h
branches/release/tools/jam/src/boehm_gc/install-sh
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/install-sh
branches/release/tools/jam/src/boehm_gc/libtool.m4
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/libtool.m4
branches/release/tools/jam/src/boehm_gc/ltmain.sh
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/ltmain.sh
branches/release/tools/jam/src/boehm_gc/mach_dep.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mach_dep.c
branches/release/tools/jam/src/boehm_gc/malloc.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/malloc.c
branches/release/tools/jam/src/boehm_gc/mallocx.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mallocx.c
branches/release/tools/jam/src/boehm_gc/mark.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mark.c
branches/release/tools/jam/src/boehm_gc/mark_rts.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mark_rts.c
branches/release/tools/jam/src/boehm_gc/mips_sgi_mach_dep.s
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mips_sgi_mach_dep.s
branches/release/tools/jam/src/boehm_gc/mips_ultrix_mach_dep.s
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mips_ultrix_mach_dep.s
branches/release/tools/jam/src/boehm_gc/misc.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/misc.c
branches/release/tools/jam/src/boehm_gc/missing
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/missing
branches/release/tools/jam/src/boehm_gc/mkinstalldirs
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/mkinstalldirs
branches/release/tools/jam/src/boehm_gc/msvc_dbg.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/msvc_dbg.c
branches/release/tools/jam/src/boehm_gc/new_hblk.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/new_hblk.c
branches/release/tools/jam/src/boehm_gc/obj_map.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/obj_map.c
branches/release/tools/jam/src/boehm_gc/os_dep.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/os_dep.c
branches/release/tools/jam/src/boehm_gc/pcr_interface.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/pcr_interface.c
branches/release/tools/jam/src/boehm_gc/pthread_stop_world.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/pthread_stop_world.c
branches/release/tools/jam/src/boehm_gc/pthread_support.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/pthread_support.c
branches/release/tools/jam/src/boehm_gc/ptr_chck.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/ptr_chck.c
branches/release/tools/jam/src/boehm_gc/real_malloc.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/real_malloc.c
branches/release/tools/jam/src/boehm_gc/reclaim.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/reclaim.c
branches/release/tools/jam/src/boehm_gc/rs6000_mach_dep.s
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/rs6000_mach_dep.s
branches/release/tools/jam/src/boehm_gc/setjmp_t.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/setjmp_t.c
branches/release/tools/jam/src/boehm_gc/sparc_mach_dep.S
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/sparc_mach_dep.S
branches/release/tools/jam/src/boehm_gc/sparc_netbsd_mach_dep.s
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/sparc_netbsd_mach_dep.s
branches/release/tools/jam/src/boehm_gc/sparc_sunos4_mach_dep.s
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/sparc_sunos4_mach_dep.s
branches/release/tools/jam/src/boehm_gc/specific.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/specific.c
branches/release/tools/jam/src/boehm_gc/stubborn.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/stubborn.c
branches/release/tools/jam/src/boehm_gc/tests/
- copied from r41096, /trunk/tools/jam/src/boehm_gc/tests/
branches/release/tools/jam/src/boehm_gc/tests/leak_test.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/leak_test.c
branches/release/tools/jam/src/boehm_gc/tests/middle.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/middle.c
branches/release/tools/jam/src/boehm_gc/tests/test.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/test.c
branches/release/tools/jam/src/boehm_gc/tests/test_cpp.cc
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/test_cpp.cc
branches/release/tools/jam/src/boehm_gc/tests/tests.am
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/tests.am
branches/release/tools/jam/src/boehm_gc/tests/thread_leak_test.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/tests/thread_leak_test.c
branches/release/tools/jam/src/boehm_gc/thread_local_alloc.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/thread_local_alloc.c
branches/release/tools/jam/src/boehm_gc/threadlibs.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/threadlibs.c
branches/release/tools/jam/src/boehm_gc/typd_mlc.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/typd_mlc.c
branches/release/tools/jam/src/boehm_gc/version.h
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/version.h
branches/release/tools/jam/src/boehm_gc/win32_threads.c
- copied unchanged from r41096, /trunk/tools/jam/src/boehm_gc/win32_threads.c
branches/release/tools/jam/src/mem.c
- copied unchanged from r41096, /trunk/tools/jam/src/mem.c
branches/release/tools/jam/src/mem.h
- copied unchanged from r41096, /trunk/tools/jam/src/mem.h
branches/release/tools/jam/src/output.c
- copied unchanged from r41096, /trunk/tools/jam/src/output.c
branches/release/tools/jam/src/output.h
- copied unchanged from r41096, /trunk/tools/jam/src/output.h
branches/release/tools/jam/test/builtin_w32_getregnames.jam
- copied unchanged from r41096, /trunk/tools/jam/test/builtin_w32_getregnames.jam
branches/release/tools/jam/test/option_d2.jam
- copied unchanged from r41096, /trunk/tools/jam/test/option_d2.jam
branches/release/tools/jam/test/option_l.jam
- copied unchanged from r41096, /trunk/tools/jam/test/option_l.jam
branches/release/tools/jam/test/option_n.jam
- copied unchanged from r41096, /trunk/tools/jam/test/option_n.jam
branches/release/tools/jam/test/parallel_actions.jam
- copied unchanged from r41096, /trunk/tools/jam/test/parallel_actions.jam
branches/release/tools/jam/test/parallel_multifile_actions.jam
- copied unchanged from r41096, /trunk/tools/jam/test/parallel_multifile_actions.jam
branches/release/tools/jam/test/stress_var_expand.jam
- copied unchanged from r41096, /trunk/tools/jam/test/stress_var_expand.jam
branches/release/tools/jam/test/target_var.jam
- copied unchanged from r41096, /trunk/tools/jam/test/target_var.jam
branches/release/tools/jam/test/test.jam
- copied unchanged from r41096, /trunk/tools/jam/test/test.jam
branches/release/tools/jam/test/var_expand.jam
- copied unchanged from r41096, /trunk/tools/jam/test/var_expand.jam
branches/release/tools/litre/
- copied from r41096, /trunk/tools/litre/
branches/release/tools/litre/cplusplus.py
- copied unchanged from r41096, /trunk/tools/litre/cplusplus.py
branches/release/tools/litre/litre.py
- copied unchanged from r41096, /trunk/tools/litre/litre.py
branches/release/tools/litre/tool.py
- copied unchanged from r41096, /trunk/tools/litre/tool.py
branches/release/tools/quickbook/code_snippet.hpp
- copied unchanged from r41096, /trunk/tools/quickbook/code_snippet.hpp
branches/release/tools/quickbook/detail/actions_class.cpp
- copied unchanged from r41096, /trunk/tools/quickbook/detail/actions_class.cpp
branches/release/tools/quickbook/detail/actions_class.hpp
- copied unchanged from r41096, /trunk/tools/quickbook/detail/actions_class.hpp
branches/release/tools/quickbook/detail/collector.cpp
- copied unchanged from r41096, /trunk/tools/quickbook/detail/collector.cpp
branches/release/tools/quickbook/detail/collector.hpp
- copied unchanged from r41096, /trunk/tools/quickbook/detail/collector.hpp
branches/release/tools/quickbook/detail/markups.hpp
- copied unchanged from r41096, /trunk/tools/quickbook/detail/markups.hpp
branches/release/tools/quickbook/detail/template_stack.cpp
- copied unchanged from r41096, /trunk/tools/quickbook/detail/template_stack.cpp
branches/release/tools/quickbook/detail/template_stack.hpp
- copied unchanged from r41096, /trunk/tools/quickbook/detail/template_stack.hpp
branches/release/tools/quickbook/doc/html/images/callouts/
- copied from r41096, /trunk/tools/quickbook/doc/html/images/callouts/
branches/release/tools/quickbook/doc/html/images/callouts/1.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/1.png
branches/release/tools/quickbook/doc/html/images/callouts/10.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/10.png
branches/release/tools/quickbook/doc/html/images/callouts/11.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/11.png
branches/release/tools/quickbook/doc/html/images/callouts/12.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/12.png
branches/release/tools/quickbook/doc/html/images/callouts/13.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/13.png
branches/release/tools/quickbook/doc/html/images/callouts/14.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/14.png
branches/release/tools/quickbook/doc/html/images/callouts/15.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/15.png
branches/release/tools/quickbook/doc/html/images/callouts/2.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/2.png
branches/release/tools/quickbook/doc/html/images/callouts/3.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/3.png
branches/release/tools/quickbook/doc/html/images/callouts/4.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/4.png
branches/release/tools/quickbook/doc/html/images/callouts/5.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/5.png
branches/release/tools/quickbook/doc/html/images/callouts/6.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/6.png
branches/release/tools/quickbook/doc/html/images/callouts/7.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/7.png
branches/release/tools/quickbook/doc/html/images/callouts/8.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/8.png
branches/release/tools/quickbook/doc/html/images/callouts/9.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/callouts/9.png
branches/release/tools/quickbook/doc/html/images/caution.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/caution.png
branches/release/tools/quickbook/doc/html/images/extra/
- copied from r41096, /trunk/tools/quickbook/doc/html/images/extra/
branches/release/tools/quickbook/doc/html/images/extra/katepart/
- copied from r41096, /trunk/tools/quickbook/doc/html/images/extra/katepart/
branches/release/tools/quickbook/doc/html/images/extra/katepart/boost.hs.logo.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/extra/katepart/boost.hs.logo.png
branches/release/tools/quickbook/doc/html/images/extra/katepart/table.boost.hs.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/extra/katepart/table.boost.hs.png
branches/release/tools/quickbook/doc/html/images/extra/katepart/table.text.editor.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/extra/katepart/table.text.editor.png
branches/release/tools/quickbook/doc/html/images/important.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/important.png
branches/release/tools/quickbook/doc/html/images/warning.png
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/images/warning.png
branches/release/tools/quickbook/doc/html/quickbook/editors/
- copied from r41096, /trunk/tools/quickbook/doc/html/quickbook/editors/
branches/release/tools/quickbook/doc/html/quickbook/editors.html
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/editors.html
branches/release/tools/quickbook/doc/html/quickbook/editors/kde_support.html
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/editors/kde_support.html
branches/release/tools/quickbook/doc/html/quickbook/editors/scite.html
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/editors/scite.html
branches/release/tools/quickbook/doc/html/quickbook/faq.html
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/faq.html
branches/release/tools/quickbook/doc/html/quickbook/install/
- copied from r41096, /trunk/tools/quickbook/doc/html/quickbook/install/
branches/release/tools/quickbook/doc/html/quickbook/install.html
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/install.html
branches/release/tools/quickbook/doc/html/quickbook/install/linux.html
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/install/linux.html
branches/release/tools/quickbook/doc/html/quickbook/install/macosx.html
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/install/macosx.html
branches/release/tools/quickbook/doc/html/quickbook/install/windows.html
- copied unchanged from r41096, /trunk/tools/quickbook/doc/html/quickbook/install/windows.html
branches/release/tools/quickbook/extra/
- copied from r41096, /trunk/tools/quickbook/extra/
branches/release/tools/quickbook/extra/katepart/
- copied from r41096, /trunk/tools/quickbook/extra/katepart/
branches/release/tools/quickbook/extra/katepart/install.sh
- copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/install.sh
branches/release/tools/quickbook/extra/katepart/katepart.qbk
- copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/katepart.qbk
branches/release/tools/quickbook/extra/katepart/syntax/
- copied from r41096, /trunk/tools/quickbook/extra/katepart/syntax/
branches/release/tools/quickbook/extra/katepart/syntax/boost_hs_boost.xml
- copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/syntax/boost_hs_boost.xml
branches/release/tools/quickbook/extra/katepart/syntax/boost_hs_cpp.xml
- copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/syntax/boost_hs_cpp.xml
branches/release/tools/quickbook/extra/katepart/syntax/boost_hs_quickbook.xml
- copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/syntax/boost_hs_quickbook.xml
branches/release/tools/quickbook/extra/katepart/syntax/boost_hs_std.xml
- copied unchanged from r41096, /trunk/tools/quickbook/extra/katepart/syntax/boost_hs_std.xml
branches/release/tools/quickbook/test/import.gold (contents, props changed)
- copied, changed from r41096, /trunk/tools/quickbook/test/import.gold
branches/release/tools/quickbook/test/import.quickbook (contents, props changed)
- copied, changed from r41096, /trunk/tools/quickbook/test/import.quickbook
branches/release/tools/quickbook/test/stub.cpp
- copied unchanged from r41096, /trunk/tools/quickbook/test/stub.cpp
branches/release/tools/quickbook/test/stub.xml
- copied unchanged from r41096, /trunk/tools/quickbook/test/stub.xml
branches/release/tools/quickbook/test/templates.gold (contents, props changed)
- copied, changed from r41096, /trunk/tools/quickbook/test/templates.gold
branches/release/tools/quickbook/test/templates.quickbook (contents, props changed)
- copied, changed from r41096, /trunk/tools/quickbook/test/templates.quickbook
branches/release/tools/quickbook/test/xinclude.gold (contents, props changed)
- copied, changed from r41096, /trunk/tools/quickbook/test/xinclude.gold
branches/release/tools/quickbook/test/xinclude.quickbook (contents, props changed)
- copied, changed from r41096, /trunk/tools/quickbook/test/xinclude.quickbook
branches/release/tools/regression/build/Jamroot.jam
- copied unchanged from r41096, /trunk/tools/regression/build/Jamroot.jam
branches/release/tools/regression/build/vcide/compiler_status.vcproj
- copied unchanged from r41096, /trunk/tools/regression/build/vcide/compiler_status.vcproj
branches/release/tools/regression/build/vcide/library_status.vcproj
- copied unchanged from r41096, /trunk/tools/regression/build/vcide/library_status.vcproj
branches/release/tools/regression/build/vcide/regression.sln
- copied unchanged from r41096, /trunk/tools/regression/build/vcide/regression.sln
branches/release/tools/regression/doc/
- copied from r41096, /trunk/tools/regression/doc/
branches/release/tools/regression/library_status.html
- copied unchanged from r41096, /trunk/tools/regression/library_status.html
branches/release/tools/regression/src/
- copied from r41096, /trunk/tools/regression/src/
branches/release/tools/regression/src/boost_svn_export_archive.sh
- copied unchanged from r41096, /trunk/tools/regression/src/boost_svn_export_archive.sh
branches/release/tools/regression/src/collect_and_upload_logs.py
- copied unchanged from r41096, /trunk/tools/regression/src/collect_and_upload_logs.py
branches/release/tools/regression/src/compiler_status.cpp
- copied unchanged from r41096, /trunk/tools/regression/src/compiler_status.cpp
branches/release/tools/regression/src/detail/
- copied from r41096, /trunk/tools/regression/src/detail/
branches/release/tools/regression/src/detail/tiny_xml.cpp
- copied unchanged from r41096, /trunk/tools/regression/src/detail/tiny_xml.cpp
branches/release/tools/regression/src/detail/tiny_xml.hpp
- copied unchanged from r41096, /trunk/tools/regression/src/detail/tiny_xml.hpp
branches/release/tools/regression/src/detail/tiny_xml_test.cpp
- copied unchanged from r41096, /trunk/tools/regression/src/detail/tiny_xml_test.cpp
branches/release/tools/regression/src/detail/tiny_xml_test.txt
- copied unchanged from r41096, /trunk/tools/regression/src/detail/tiny_xml_test.txt
branches/release/tools/regression/src/library_status.cpp
- copied unchanged from r41096, /trunk/tools/regression/src/library_status.cpp
branches/release/tools/regression/src/library_test.bat
- copied unchanged from r41096, /trunk/tools/regression/src/library_test.bat
branches/release/tools/regression/src/library_test.sh
- copied unchanged from r41096, /trunk/tools/regression/src/library_test.sh
branches/release/tools/regression/src/library_test_all.sh
- copied unchanged from r41096, /trunk/tools/regression/src/library_test_all.sh
branches/release/tools/regression/src/process_jam_log.cpp
- copied unchanged from r41096, /trunk/tools/regression/src/process_jam_log.cpp
branches/release/tools/regression/src/regression-logs.pl
- copied unchanged from r41096, /trunk/tools/regression/src/regression-logs.pl
branches/release/tools/regression/src/regression.py
- copied unchanged from r41096, /trunk/tools/regression/src/regression.py
branches/release/tools/regression/src/run.py
- copied unchanged from r41096, /trunk/tools/regression/src/run.py
branches/release/tools/regression/src/run_tests.sh
- copied unchanged from r41096, /trunk/tools/regression/src/run_tests.sh
branches/release/tools/regression/src/smoke.py
- copied unchanged from r41096, /trunk/tools/regression/src/smoke.py
branches/release/tools/regression/test/Jamfile.v2
- copied unchanged from r41096, /trunk/tools/regression/test/Jamfile.v2
branches/release/tools/regression/test/test-boost-build/
- copied from r41096, /trunk/tools/regression/test/test-boost-build/
branches/release/tools/regression/test/test-boost-build/ignored_rc/
- copied from r41096, /trunk/tools/regression/test/test-boost-build/ignored_rc/
branches/release/tools/regression/test/test-boost-build/ignored_rc/ignored_rc.jam
- copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/ignored_rc/ignored_rc.jam
branches/release/tools/regression/test/test-boost-build/ignored_rc/recognized_rc.jam
- copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/ignored_rc/recognized_rc.jam
branches/release/tools/regression/test/test-boost-build/missing_dependencies/
- copied from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/
branches/release/tools/regression/test/test-boost-build/missing_dependencies/Jamfile.v2
- copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/Jamfile.v2
branches/release/tools/regression/test/test-boost-build/missing_dependencies/lib/
- copied from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/lib/
branches/release/tools/regression/test/test-boost-build/missing_dependencies/lib/Jamfile.v2
- copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/lib/Jamfile.v2
branches/release/tools/regression/test/test-boost-build/missing_dependencies/lib/lib.cpp
- copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/lib/lib.cpp
branches/release/tools/regression/test/test-boost-build/missing_dependencies/test.cpp
- copied unchanged from r41096, /trunk/tools/regression/test/test-boost-build/missing_dependencies/test.cpp
branches/release/tools/regression/test/test-cases/Huber2629/ (props changed)
- copied from r41096, /trunk/tools/regression/test/test-cases/Huber2629/
branches/release/tools/regression/test/test-cases/Huber2629/bjam.log (props changed)
- copied unchanged from r41096, /trunk/tools/regression/test/test-cases/Huber2629/bjam.log
branches/release/tools/regression/test/test-cases/Huber2629/expected/
- copied from r41096, /trunk/tools/regression/test/test-cases/Huber2629/expected/
branches/release/tools/regression/test/test-cases/Huber2629/expected/results.xml
- copied unchanged from r41096, /trunk/tools/regression/test/test-cases/Huber2629/expected/results.xml
branches/release/tools/regression/xsl_reports/boostbook_report.py
- copied unchanged from r41096, /trunk/tools/regression/xsl_reports/boostbook_report.py
branches/release/tools/regression/xsl_reports/build_results.sh
- copied unchanged from r41096, /trunk/tools/regression/xsl_reports/build_results.sh
branches/release/tools/regression/xsl_reports/utils/rename.py
- copied unchanged from r41096, /trunk/tools/regression/xsl_reports/utils/rename.py
branches/release/tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl
- copied unchanged from r41096, /trunk/tools/regression/xsl_reports/xsl/v2/boostbook_log.xsl
branches/release/tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl
- copied unchanged from r41096, /trunk/tools/regression/xsl_reports/xsl/v2/dump_toolsets.xsl
Removed:
branches/release/boost/filesystem/cerrno.hpp
branches/release/libs/filesystem/doc/tr2_proposal.html
branches/release/tools/quickbook/doc/html/boostbook.css
branches/release/tools/quickbook/doc/quickbook.xml
branches/release/tools/regression/build/Jamfile.v2
branches/release/tools/regression/compiler_status.cpp
branches/release/tools/regression/detail/
branches/release/tools/regression/process_jam_log.cpp
branches/release/tools/regression/regression-logs.pl
branches/release/tools/regression/run_tests.sh
branches/release/tools/regression/test/test-cases/borland/
branches/release/tools/regression/test/test-cases/libs/
branches/release/tools/regression/xsl_reports/db/
branches/release/tools/regression/xsl_reports/runner/instructions.rst
branches/release/tools/regression/xsl_reports/test/test-components/
branches/release/tools/release/user-config.jam
Properties modified:
branches/release/tools/build/v2/example/customization/inline_file.py (props changed)
branches/release/tools/build/v2/nightly.sh (contents, props changed)
branches/release/tools/build/v2/roll.sh (contents, props changed)
branches/release/tools/jam/build_dist.bat (contents, props changed)
branches/release/tools/jam/build_dist.sh (contents, props changed)
branches/release/tools/jam/src/build.sh (contents, props changed)
branches/release/tools/jam/test/test.sh (contents, props changed)
branches/release/tools/regression/xsl_reports/runner/regression.py (contents, props changed)
Text files modified:
branches/release/boost/filesystem/config.hpp | 9
branches/release/boost/filesystem/convenience.hpp | 95
branches/release/boost/filesystem/operations.hpp | 276 +
branches/release/boost/filesystem/path.hpp | 223
branches/release/libs/filesystem/build/Jamfile.v2 | 26
branches/release/libs/filesystem/doc/faq.htm | 421 +-
branches/release/libs/filesystem/doc/index.htm | 161
branches/release/libs/filesystem/example/Jamfile.v2 | 6
branches/release/libs/filesystem/example/mbpath.cpp | 7
branches/release/libs/filesystem/src/operations.cpp | 438 +-
branches/release/libs/filesystem/src/path.cpp | 58
branches/release/libs/filesystem/src/portability.cpp | 2
branches/release/libs/filesystem/src/utf8_codecvt_facet.hpp | 9
branches/release/libs/filesystem/test/Jamfile.v2 | 31
branches/release/libs/filesystem/test/convenience_test.cpp | 114
branches/release/libs/filesystem/test/fstream_test.cpp | 10
branches/release/libs/filesystem/test/lpath.hpp | 2
branches/release/libs/filesystem/test/operations_test.cpp | 300 +
branches/release/libs/filesystem/test/path_test.cpp | 19
branches/release/libs/filesystem/test/wide_test.cpp | 14
branches/release/tools/bcp/add_path.cpp | 4
branches/release/tools/bcp/bcp.hpp | 1
branches/release/tools/bcp/bcp.html | 20
branches/release/tools/bcp/bcp_imp.cpp | 12
branches/release/tools/bcp/bcp_imp.hpp | 3
branches/release/tools/bcp/file_types.cpp | 2
branches/release/tools/bcp/main.cpp | 4
branches/release/tools/bcp/scan_cvs_path.cpp | 86
branches/release/tools/boostbook/doc/boostbook.xml | 12
branches/release/tools/boostbook/doc/reference.dtdxml | 151
branches/release/tools/boostbook/doc/reference.xml | 228
branches/release/tools/boostbook/dtd/boostbook.dtd | 78
branches/release/tools/boostbook/setup_boostbook.py | 35
branches/release/tools/boostbook/setup_boostbook.sh | 27
branches/release/tools/boostbook/xsl/caramel/concept2docbook.xsl | 424 +-
branches/release/tools/boostbook/xsl/chunk-common.xsl | 2
branches/release/tools/boostbook/xsl/docbook.xsl | 25
branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl | 92
branches/release/tools/boostbook/xsl/fo.xsl | 92
branches/release/tools/boostbook/xsl/function.xsl | 119
branches/release/tools/boostbook/xsl/html.xsl | 60
branches/release/tools/boostbook/xsl/library.xsl | 2
branches/release/tools/boostbook/xsl/lookup.xsl | 163
branches/release/tools/boostbook/xsl/navbar.xsl | 4
branches/release/tools/boostbook/xsl/reference.xsl | 20
branches/release/tools/boostbook/xsl/template.xsl | 2
branches/release/tools/boostbook/xsl/type.xsl | 536 ++-
branches/release/tools/boostbook/xsl/utility.xsl | 36
branches/release/tools/build/v2/build-system.jam | 12
branches/release/tools/build/v2/build/feature.jam | 5
branches/release/tools/build/v2/build/modifiers.jam | 79
branches/release/tools/build/v2/build/project.jam | 9
branches/release/tools/build/v2/build/property.jam | 32
branches/release/tools/build/v2/build/targets.jam | 50
branches/release/tools/build/v2/build/toolset.jam | 23
branches/release/tools/build/v2/build/version.jam | 2
branches/release/tools/build/v2/changes.txt | 38
branches/release/tools/build/v2/doc/src/faq.xml | 12
branches/release/tools/build/v2/doc/src/reference.xml | 20
branches/release/tools/build/v2/doc/src/tasks.xml | 8
branches/release/tools/build/v2/doc/src/tutorial.xml | 4
branches/release/tools/build/v2/example/generator/soap.jam | 3
branches/release/tools/build/v2/index.html | 155
branches/release/tools/build/v2/kernel/errors.jam | 2
branches/release/tools/build/v2/nightly.sh | 2
branches/release/tools/build/v2/release_procedure.txt | 20
branches/release/tools/build/v2/roll.sh | 20
branches/release/tools/build/v2/test/BoostBuild.py | 170
branches/release/tools/build/v2/test/TestCmd.py | 6
branches/release/tools/build/v2/test/boostbook.py | 8
branches/release/tools/build/v2/test/boostbook/Jamroot | 2
branches/release/tools/build/v2/test/boostbook/docs.xml | 2
branches/release/tools/build/v2/test/build_dir.py | 4
branches/release/tools/build/v2/test/gcc_runtime.py | 2
branches/release/tools/build/v2/test/library_chain.py | 3
branches/release/tools/build/v2/test/project_glob.py | 33
branches/release/tools/build/v2/test/railsys/program/Jamfile | 1
branches/release/tools/build/v2/test/rebuilds.py | 3
branches/release/tools/build/v2/test/regression.py | 2
branches/release/tools/build/v2/test/remove_requirement.py | 4
branches/release/tools/build/v2/test/searched_lib.py | 2
branches/release/tools/build/v2/test/test-config-example.jam | 4
branches/release/tools/build/v2/test/test_all.py | 18
branches/release/tools/build/v2/test/tree.py | 10
branches/release/tools/build/v2/tools/acc.jam | 19
branches/release/tools/build/v2/tools/boostbook.jam | 106
branches/release/tools/build/v2/tools/borland.jam | 2
branches/release/tools/build/v2/tools/builtin.jam | 22
branches/release/tools/build/v2/tools/common.jam | 11
branches/release/tools/build/v2/tools/darwin.jam | 4
branches/release/tools/build/v2/tools/doxproc.py | 342 ++
branches/release/tools/build/v2/tools/doxygen.jam | 149
branches/release/tools/build/v2/tools/fortran.jam | 23
branches/release/tools/build/v2/tools/gcc.jam | 108
branches/release/tools/build/v2/tools/intel-win.jam | 5
branches/release/tools/build/v2/tools/intel.jam | 2
branches/release/tools/build/v2/tools/mpi.jam | 75
branches/release/tools/build/v2/tools/msvc.jam | 19
branches/release/tools/build/v2/tools/python.jam | 31
branches/release/tools/build/v2/tools/qcc.jam | 6
branches/release/tools/build/v2/tools/qt4.jam | 74
branches/release/tools/build/v2/tools/quickbook.jam | 7
branches/release/tools/build/v2/tools/stlport.jam | 27
branches/release/tools/build/v2/tools/sun.jam | 17
branches/release/tools/build/v2/tools/types/lib.jam | 4
branches/release/tools/build/v2/tools/xsltproc.jam | 6
branches/release/tools/build/v2/user-config.jam | 42
branches/release/tools/build/v2/util/path.jam | 11
branches/release/tools/inspect/build/Jamfile.v2 | 5
branches/release/tools/inspect/index.html | 4
branches/release/tools/inspect/inspect.cpp | 43
branches/release/tools/inspect/link_check.cpp | 30
branches/release/tools/inspect/link_check.hpp | 5
branches/release/tools/jam/build_dist.bat | 35
branches/release/tools/jam/build_dist.sh | 28
branches/release/tools/jam/doc/bjam.qbk | 539 ++-
branches/release/tools/jam/doc/build.jam | 6
branches/release/tools/jam/src/Jambase | 2
branches/release/tools/jam/src/boost-jam.spec | 128
branches/release/tools/jam/src/build.bat | 253
branches/release/tools/jam/src/build.jam | 209 +
branches/release/tools/jam/src/build.sh | 30
branches/release/tools/jam/src/builtins.c | 119
branches/release/tools/jam/src/builtins.h | 6
branches/release/tools/jam/src/command.c | 17
branches/release/tools/jam/src/compile.c | 118
branches/release/tools/jam/src/debug.c | 16
branches/release/tools/jam/src/execcmd.h | 6
branches/release/tools/jam/src/execmac.c | 2
branches/release/tools/jam/src/execnt.c | 1384 ++++----
branches/release/tools/jam/src/execunix.c | 498 ++
branches/release/tools/jam/src/execvms.c | 6
branches/release/tools/jam/src/expand.c | 46
branches/release/tools/jam/src/filent.c | 5
branches/release/tools/jam/src/fileunix.c | 7
branches/release/tools/jam/src/frames.c | 1
branches/release/tools/jam/src/frames.h | 8
branches/release/tools/jam/src/hash.c | 213
branches/release/tools/jam/src/hcache.c | 2
branches/release/tools/jam/src/jam.c | 59
branches/release/tools/jam/src/jam.h | 37
branches/release/tools/jam/src/jambase.c | 2
branches/release/tools/jam/src/lists.c | 5
branches/release/tools/jam/src/lists.h | 1
branches/release/tools/jam/src/make.c | 6
branches/release/tools/jam/src/make1.c | 89
branches/release/tools/jam/src/modules.c | 1
branches/release/tools/jam/src/modules/order.c | 23
branches/release/tools/jam/src/modules/regex.c | 6
branches/release/tools/jam/src/newstr.c | 17
branches/release/tools/jam/src/parse.c | 7
branches/release/tools/jam/src/patchlevel.h | 6
branches/release/tools/jam/src/regexp.c | 6
branches/release/tools/jam/src/rules.c | 50
branches/release/tools/jam/src/rules.h | 2
branches/release/tools/jam/src/scan.c | 7
branches/release/tools/jam/src/strings.c | 10
branches/release/tools/jam/src/timestamp.c | 1
branches/release/tools/jam/src/variable.c | 16
branches/release/tools/jam/src/w32_getreg.c | 127
branches/release/tools/jam/test/builtin_shell.jam | 29
branches/release/tools/jam/test/test.bat | 5
branches/release/tools/jam/test/test.sh | 2
branches/release/tools/quickbook/Jamfile.v2 | 8
branches/release/tools/quickbook/block.hpp | 170
branches/release/tools/quickbook/detail/actions.cpp | 1092 +++++--
branches/release/tools/quickbook/detail/actions.hpp | 702 ++--
branches/release/tools/quickbook/detail/post_process.cpp | 206
branches/release/tools/quickbook/detail/post_process.hpp | 2
branches/release/tools/quickbook/detail/quickbook.cpp | 95
branches/release/tools/quickbook/detail/utils.cpp | 191
branches/release/tools/quickbook/detail/utils.hpp | 46
branches/release/tools/quickbook/doc/Jamfile.v2 | 14
branches/release/tools/quickbook/doc/html/index.html | 51
branches/release/tools/quickbook/doc/html/quickbook/change_log.html | 103
branches/release/tools/quickbook/doc/html/quickbook/intro.html | 76
branches/release/tools/quickbook/doc/html/quickbook/ref.html | 1080 +++++-
branches/release/tools/quickbook/doc/html/quickbook/syntax.html | 38
branches/release/tools/quickbook/doc/html/quickbook/syntax/block.html | 1302 +++++++-
branches/release/tools/quickbook/doc/html/quickbook/syntax/comments.html | 40
branches/release/tools/quickbook/doc/html/quickbook/syntax/phrase.html | 621 ++-
branches/release/tools/quickbook/doc/quickbook.qbk | 1075 +++++++
branches/release/tools/quickbook/doc_info.hpp | 4
branches/release/tools/quickbook/index.html | 11
branches/release/tools/quickbook/phrase.hpp | 242 +
branches/release/tools/quickbook/syntax_highlight.hpp | 20
branches/release/tools/quickbook/test/Jamfile.v2 | 3
branches/release/tools/quickbook/test/code-block-1.gold | 48
branches/release/tools/quickbook/test/code-block-1.quickbook | 32
branches/release/tools/quickbook/test/code-block-2.gold | 52
branches/release/tools/quickbook/test/code-block-2.quickbook | 36
branches/release/tools/quickbook/test/code-snippet.gold | 40
branches/release/tools/quickbook/test/code-snippet.quickbook | 20
branches/release/tools/quickbook/test/escape.gold | 33
branches/release/tools/quickbook/test/escape.quickbook | 24
branches/release/tools/quickbook/test/import.gold | 80
branches/release/tools/quickbook/test/import.quickbook | 12
branches/release/tools/quickbook/test/link-side-by-side.gold | 36
branches/release/tools/quickbook/test/link-side-by-side.quickbook | 26
branches/release/tools/quickbook/test/preformatted.gold | 58
branches/release/tools/quickbook/test/preformatted.quickbook | 44
branches/release/tools/quickbook/test/quickbook-manual.gold | 5741 ++++++++++++++++++++++++++-------------
branches/release/tools/quickbook/test/quickbook-manual.quickbook | 3206 +++++++++++++--------
branches/release/tools/quickbook/test/templates.gold | 140
branches/release/tools/quickbook/test/templates.quickbook | 192
branches/release/tools/quickbook/test/xinclude.gold | 18
branches/release/tools/quickbook/test/xinclude.quickbook | 8
branches/release/tools/regression/build/vcide/process_jam_log.vcproj | 28
branches/release/tools/regression/index.htm | 18
branches/release/tools/regression/xsl_reports/boost_wide_report.py | 68
branches/release/tools/regression/xsl_reports/email_maintainers.py | 52
branches/release/tools/regression/xsl_reports/make_snapshot.py | 71
branches/release/tools/regression/xsl_reports/report.py | 4
branches/release/tools/regression/xsl_reports/runner/collect_and_upload_logs.py | 183 +
branches/release/tools/regression/xsl_reports/runner/default.css | 6
branches/release/tools/regression/xsl_reports/runner/instructions.html | 625 ---
branches/release/tools/regression/xsl_reports/runner/regression.py | 180
branches/release/tools/regression/xsl_reports/test/common.py | 8
branches/release/tools/regression/xsl_reports/test/generate_test_results.py | 10
branches/release/tools/regression/xsl_reports/test/test.py | 2
branches/release/tools/regression/xsl_reports/utils/__init__.py | 1
branches/release/tools/regression/xsl_reports/utils/libxslt.py | 16
branches/release/tools/regression/xsl_reports/xsl/v2/add_expected_results.xsl | 9
branches/release/tools/regression/xsl_reports/xsl/v2/common.xsl | 13
branches/release/tools/regression/xsl_reports/xsl/v2/html/master.css | 5
branches/release/tools/regression/xsl_reports/xsl/v2/issues_page.xsl | 4
branches/release/tools/regression/xsl_reports/xsl/v2/links_page.xsl | 38
branches/release/tools/regression/xsl_reports/xsl/v2/result_page.xsl | 8
branches/release/tools/wave/build/Jamfile.v2 | 14
branches/release/tools/wave/cpp.cpp | 129
branches/release/tools/wave/cpp_version.hpp | 4
branches/release/tools/wave/trace_macro_expansion.hpp | 506 ++
232 files changed, 19306 insertions(+), 10362 deletions(-)
Deleted: branches/release/boost/filesystem/cerrno.hpp
==============================================================================
--- branches/release/boost/filesystem/cerrno.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
+++ (empty file)
@@ -1,23 +0,0 @@
-// Boost Filesystem cerrno.hpp header --------------------------------------//
-
-// Copyright Beman Dawes 2005.
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-#ifndef BOOST_FILESYSTEM_CERRNO_HPP
-#define BOOST_FILESYSTEM_CERRNO_HPP
-
-#include <cerrno>
-
-#if defined __BORLANDC__
-#define ENOSYS 9997
-#endif
-
-#define EBADHANDLE 9998 // bad handle
-#define EOTHER 9999 // Other error not translatable
- // to a POSIX errno value
-
-#endif // include guard
Modified: branches/release/boost/filesystem/config.hpp
==============================================================================
--- branches/release/boost/filesystem/config.hpp (original)
+++ branches/release/boost/filesystem/config.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,9 +1,9 @@
// boost/filesystem/config.hpp ---------------------------------------------//
// Copyright Beman Dawes 2003
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
+
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See library home page at http://www.boost.org/libs/filesystem
@@ -23,6 +23,7 @@
// http://www.boost.org/more/separate_compilation.html
#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
// determine platform ------------------------------------------------------//
@@ -59,7 +60,7 @@
// narrow support only for badly broken compilers or libraries -------------//
-# if defined(BOOST_NO_STD_WSTRING) || defined(BOOST_NO_SFINAE) || defined(BOOST_NO_STD_LOCALE)
+# if defined(BOOST_NO_STD_WSTRING) || defined(BOOST_NO_SFINAE) || defined(BOOST_NO_STD_LOCALE) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
# define BOOST_FILESYSTEM_NARROW_ONLY
# endif
Modified: branches/release/boost/filesystem/convenience.hpp
==============================================================================
--- branches/release/boost/filesystem/convenience.hpp (original)
+++ branches/release/boost/filesystem/convenience.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -14,6 +14,7 @@
#define BOOST_FILESYSTEM_CONVENIENCE_HPP
#include <boost/filesystem/operations.hpp>
+#include <boost/system/error_code.hpp>
#include <vector>
#include <stack>
@@ -28,7 +29,7 @@
# else
# define BOOST_FS_FUNC(BOOST_FS_TYPE) inline BOOST_FS_TYPE
typedef boost::filesystem::path Path;
-# define BOOST_FS_FUNC_STRING std::string
+# define BOOST_FS_FUNC_STRING inline std::string
# define BOOST_FS_TYPENAME
# endif
@@ -43,7 +44,8 @@
{
if ( !ph.empty() && !is_directory(ph) )
boost::throw_exception( basic_filesystem_error<Path>(
- "boost::filesystem::create_directories", ph, -1 ) );
+ "boost::filesystem::create_directories", ph,
+ make_error_code( boost::system::posix::file_exists ) ) );
return false;
}
@@ -138,7 +140,8 @@
basic_recursive_directory_iterator(){} // creates the "end" iterator
explicit basic_recursive_directory_iterator( const Path & dir_path );
- basic_recursive_directory_iterator( const Path & dir_path, system_error_type & ec );
+ basic_recursive_directory_iterator( const Path & dir_path,
+ system::error_code & ec );
int level() const { return m_imp->m_level; }
@@ -185,6 +188,7 @@
bool equal( const basic_recursive_directory_iterator & rhs ) const
{ return m_imp == rhs.m_imp; }
+
};
typedef basic_recursive_directory_iterator<path> recursive_directory_iterator;
@@ -201,15 +205,20 @@
: m_imp( new detail::recur_dir_itr_imp<Path> )
{
m_imp->m_stack.push( basic_directory_iterator<Path>( dir_path ) );
+ if ( m_imp->m_stack.top () == basic_directory_iterator<Path>() )
+ { m_imp.reset (); }
}
template<class Path>
basic_recursive_directory_iterator<Path>::
- basic_recursive_directory_iterator( const Path & dir_path, system_error_type & ec )
+ basic_recursive_directory_iterator( const Path & dir_path,
+ system::error_code & ec )
: m_imp( new detail::recur_dir_itr_imp<Path> )
{
- m_imp->m_stack.push( basic_directory_iterator<Path>( dir_path, std::nothrow ) );
m_imp->m_no_throw = true;
+ m_imp->m_stack.push( basic_directory_iterator<Path>( dir_path, ec ) );
+ if ( m_imp->m_stack.top () == basic_directory_iterator<Path>() )
+ { m_imp.reset (); }
}
// increment
@@ -220,15 +229,15 @@
static const basic_directory_iterator<Path> end_itr;
- if ( m_imp->m_no_push ) m_imp->m_no_push = false;
+ if ( m_imp->m_no_push )
+ { m_imp->m_no_push = false; }
else if ( is_directory( m_imp->m_stack.top()->status() ) )
{
- system_error_type ec;
+ system::error_code ec;
m_imp->m_stack.push(
m_imp->m_no_throw
? basic_directory_iterator<Path>( *m_imp->m_stack.top(), ec )
- : basic_directory_iterator<Path>( *m_imp->m_stack.top() )
- );
+ : basic_directory_iterator<Path>( *m_imp->m_stack.top() ) );
if ( m_imp->m_stack.top() != end_itr )
{
++m_imp->m_level;
@@ -254,71 +263,17 @@
BOOST_ASSERT( m_imp.get() && "pop on end iterator" );
BOOST_ASSERT( m_imp->m_level > 0 && "pop with level < 1" );
- m_imp->m_stack.pop();
- --m_imp->m_level;
- }
-
- // what() basic_filesystem_error_decoder -------------------------------//
-
- namespace detail
- {
-
-# if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x581))
- using boost::filesystem::system_message;
-# endif
-
- inline void decode_system_message( system_error_type ec, std::string & target )
- {
- system_message( ec, target );
- }
-
-# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_NARROW_ONLY)
- inline void decode_system_message( system_error_type ec, std::wstring & target )
- {
- system_message( ec, target );
- }
-# endif
-
- template<class String>
- void decode_system_message( system_error_type ec, String & target )
- {
- std::string temp;
- system_message( ec, temp );
- for ( const char * p = temp.c_str(); *p != 0; ++p )
- { target += static_cast<typename String::value_type>( *p ); }
- }
- }
-
- template<class Path>
- typename Path::string_type what( const basic_filesystem_error<Path> & ex )
- {
- typename Path::string_type s;
- for ( const char * p = ex.what(); *p != 0; ++p )
- { s += static_cast<typename Path::string_type::value_type>( *p ); }
+ static const basic_directory_iterator<Path> end_itr;
- if ( !ex.path1().empty() )
- {
- s += static_cast<typename Path::string_type::value_type>( ':' );
- s += static_cast<typename Path::string_type::value_type>( ' ' );
- s += static_cast<typename Path::string_type::value_type>( '\"' );
- s += ex.path1().file_string();
- s += static_cast<typename Path::string_type::value_type>( '\"' );
- }
- if ( !ex.path2().empty() )
+ do
{
- s += static_cast<typename Path::string_type::value_type>( ',' );
- s += static_cast<typename Path::string_type::value_type>( ' ' );
- s += static_cast<typename Path::string_type::value_type>( '\"' );
- s += ex.path2().file_string();
- s += static_cast<typename Path::string_type::value_type>( '\"' );
+ m_imp->m_stack.pop();
+ --m_imp->m_level;
}
- if ( ex.system_error() )
- {
- s += static_cast<typename Path::string_type::value_type>( ' ' );
+ while ( !m_imp->m_stack.empty()
+ && ++m_imp->m_stack.top() == end_itr );
- detail::decode_system_message( ex.system_error(), s );
- }
- return s;
+ if ( m_imp->m_stack.empty() ) m_imp.reset(); // done, so make end iterator
}
} // namespace filesystem
Modified: branches/release/boost/filesystem/operations.hpp
==============================================================================
--- branches/release/boost/filesystem/operations.hpp (original)
+++ branches/release/boost/filesystem/operations.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -4,9 +4,8 @@
// Copyright 2002 Jan Langer
// Copyright 2001 Dietmar Kuehl
//
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
-// at http://www.boost.org/LICENSE_1_0.txt)
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See library home page at http://www.boost.org/libs/filesystem
@@ -15,7 +14,7 @@
#ifndef BOOST_FILESYSTEM_OPERATIONS_HPP
#define BOOST_FILESYSTEM_OPERATIONS_HPP
-#include <boost/filesystem/path.hpp> // includes <boost/filesystem/config.hpp>
+#include <boost/filesystem/path.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/utility/enable_if.hpp>
@@ -81,7 +80,8 @@
character_file,
fifo_file,
socket_file,
- type_unknown // file does exist, but isn't one of the above types
+ type_unknown // file does exist, but isn't one of the above types or
+ // we don't have strong enough permission to find its type
};
class file_status
@@ -117,22 +117,22 @@
namespace detail
{
- typedef std::pair< boost::filesystem::system_error_type, bool >
+ typedef std::pair< system::error_code, bool >
query_pair;
- typedef std::pair< boost::filesystem::system_error_type, boost::uintmax_t >
+ typedef std::pair< system::error_code, boost::uintmax_t >
uintmax_pair;
- typedef std::pair< boost::filesystem::system_error_type, std::time_t >
+ typedef std::pair< system::error_code, std::time_t >
time_pair;
- typedef std::pair< boost::filesystem::system_error_type, space_info >
+ typedef std::pair< system::error_code, space_info >
space_pair;
template< class Path >
struct directory_pair
{
- typedef std::pair< boost::filesystem::system_error_type,
+ typedef std::pair< system::error_code,
typename Path::external_string_type > type;
};
@@ -142,10 +142,10 @@
# endif
BOOST_FILESYSTEM_DECL file_status
- status_api( const std::string & ph, system_error_type & ec );
+ status_api( const std::string & ph, system::error_code & ec );
# ifndef BOOST_WINDOWS_API
BOOST_FILESYSTEM_DECL file_status
- symlink_status_api( const std::string & ph, system_error_type & ec );
+ symlink_status_api( const std::string & ph, system::error_code & ec );
# endif
BOOST_FILESYSTEM_DECL query_pair
is_empty_api( const std::string & ph );
@@ -157,34 +157,36 @@
space_api( const std::string & ph );
BOOST_FILESYSTEM_DECL time_pair
last_write_time_api( const std::string & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
last_write_time_api( const std::string & ph, std::time_t new_value );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
get_current_path_api( std::string & ph );
+ BOOST_FILESYSTEM_DECL system::error_code
+ set_current_path_api( const std::string & ph );
BOOST_FILESYSTEM_DECL query_pair
create_directory_api( const std::string & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
create_hard_link_api( const std::string & to_ph,
const std::string & from_ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
create_symlink_api( const std::string & to_ph,
const std::string & from_ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
remove_api( const std::string & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
rename_api( const std::string & from, const std::string & to );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
copy_file_api( const std::string & from, const std::string & to );
# if defined(BOOST_WINDOWS_API)
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
get_full_path_name_api( const std::string & ph, std::string & target );
# if !defined(BOOST_FILESYSTEM_NARROW_ONLY)
BOOST_FILESYSTEM_DECL boost::filesystem::file_status
- status_api( const std::wstring & ph, system_error_type & ec );
+ status_api( const std::wstring & ph, system::error_code & ec );
BOOST_FILESYSTEM_DECL query_pair
is_empty_api( const std::wstring & ph );
BOOST_FILESYSTEM_DECL query_pair
@@ -193,29 +195,31 @@
file_size_api( const std::wstring & ph );
BOOST_FILESYSTEM_DECL space_pair
space_api( const std::wstring & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
get_full_path_name_api( const std::wstring & ph, std::wstring & target );
BOOST_FILESYSTEM_DECL time_pair
last_write_time_api( const std::wstring & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
last_write_time_api( const std::wstring & ph, std::time_t new_value );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
get_current_path_api( std::wstring & ph );
+ BOOST_FILESYSTEM_DECL system::error_code
+ set_current_path_api( const std::wstring & ph );
BOOST_FILESYSTEM_DECL query_pair
create_directory_api( const std::wstring & ph );
# ifdef BOOST_FS_HARD_LINK
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
create_hard_link_api( const std::wstring & existing_ph,
const std::wstring & new_ph );
# endif
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
create_symlink_api( const std::wstring & to_ph,
const std::wstring & from_ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
remove_api( const std::wstring & ph );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
rename_api( const std::wstring & from, const std::wstring & to );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
copy_file_api( const std::wstring & from, const std::wstring & to );
# endif
@@ -235,13 +239,13 @@
// query functions ---------------------------------------------------------//
BOOST_INLINE_FS_FUNC(file_status)
- status( const Path & ph, system_error_type & ec )
+ status( const Path & ph, system::error_code & ec )
{ return detail::status_api( ph.external_file_string(), ec ); }
BOOST_FS_FUNC(file_status)
status( const Path & ph )
{
- system_error_type ec;
+ system::error_code ec;
file_status result( detail::status_api( ph.external_file_string(), ec ) );
if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
@@ -250,7 +254,7 @@
}
BOOST_INLINE_FS_FUNC(file_status)
- symlink_status( const Path & ph, system_error_type & ec )
+ symlink_status( const Path & ph, system::error_code & ec )
# ifdef BOOST_WINDOWS_API
{ return detail::status_api( ph.external_file_string(), ec ); }
# else
@@ -260,7 +264,7 @@
BOOST_FS_FUNC(file_status)
symlink_status( const Path & ph )
{
- system_error_type ec;
+ system::error_code ec;
file_status result( symlink_status( ph, ec ) );
if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
@@ -275,7 +279,7 @@
BOOST_FS_FUNC(bool) exists( const Path & ph )
{
- system_error_type ec;
+ system::error_code ec;
file_status result( detail::status_api( ph.external_file_string(), ec ) );
if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
@@ -285,7 +289,7 @@
BOOST_FS_FUNC(bool) is_directory( const Path & ph )
{
- system_error_type ec;
+ system::error_code ec;
file_status result( detail::status_api( ph.external_file_string(), ec ) );
if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
@@ -295,7 +299,7 @@
BOOST_FS_FUNC(bool) is_regular( const Path & ph )
{
- system_error_type ec;
+ system::error_code ec;
file_status result( detail::status_api( ph.external_file_string(), ec ) );
if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
@@ -305,7 +309,7 @@
BOOST_FS_FUNC(bool) is_other( const Path & ph )
{
- system_error_type ec;
+ system::error_code ec;
file_status result( detail::status_api( ph.external_file_string(), ec ) );
if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
@@ -321,7 +325,7 @@
# else
const Path & ph)
{
- system_error_type ec;
+ system::error_code ec;
file_status result( detail::symlink_status_api( ph.external_file_string(), ec ) );
if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
@@ -340,8 +344,9 @@
BOOST_FS_FUNC(bool) _is_empty( const Path & ph )
# endif
{
- detail::query_pair result = detail::is_empty_api( ph.external_file_string() );
- if ( result.first != 0 )
+ detail::query_pair result(
+ detail::is_empty_api( ph.external_file_string() ) );
+ if ( result.first )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::is_empty", ph, result.first ) );
return result.second;
@@ -349,9 +354,9 @@
BOOST_FS_FUNC(bool) equivalent( const Path & ph1, const Path & ph2 )
{
- detail::query_pair result = detail::equivalent_api(
- ph1.external_file_string(), ph2.external_file_string() );
- if ( result.first != 0 )
+ detail::query_pair result( detail::equivalent_api(
+ ph1.external_file_string(), ph2.external_file_string() ) );
+ if ( result.first )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::equivalent", ph1, ph2, result.first ) );
return result.second;
@@ -360,8 +365,8 @@
BOOST_FS_FUNC(boost::uintmax_t) file_size( const Path & ph )
{
detail::uintmax_pair result
- = detail::file_size_api( ph.external_file_string() );
- if ( result.first != 0 )
+ ( detail::file_size_api( ph.external_file_string() ) );
+ if ( result.first )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::file_size", ph, result.first ) );
return result.second;
@@ -370,8 +375,8 @@
BOOST_FS_FUNC(space_info) space( const Path & ph )
{
detail::space_pair result
- = detail::space_api( ph.external_file_string() );
- if ( result.first != 0 )
+ ( detail::space_api( ph.external_file_string() ) );
+ if ( result.first )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::space", ph, result.first ) );
return result.second;
@@ -380,8 +385,8 @@
BOOST_FS_FUNC(std::time_t) last_write_time( const Path & ph )
{
detail::time_pair result
- = detail::last_write_time_api( ph.external_file_string() );
- if ( result.first != 0 )
+ ( detail::last_write_time_api( ph.external_file_string() ) );
+ if ( result.first )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::last_write_time", ph, result.first ) );
return result.second;
@@ -394,7 +399,7 @@
{
detail::query_pair result(
detail::create_directory_api( dir_ph.external_directory_string() ) );
- if ( result.first != 0 )
+ if ( result.first )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::create_directory",
dir_ph, result.first ) );
@@ -405,19 +410,19 @@
BOOST_FS_FUNC(void)
create_hard_link( const Path & to_ph, const Path & from_ph )
{
- system_error_type result(
+ system::error_code ec(
detail::create_hard_link_api(
to_ph.external_file_string(),
from_ph.external_file_string() ) );
- if ( result != 0 )
+ if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::create_hard_link",
- to_ph, from_ph, result ) );
+ to_ph, from_ph, ec ) );
}
- BOOST_FS_FUNC(system_error_type)
+ BOOST_FS_FUNC(system::error_code)
create_hard_link( const Path & to_ph, const Path & from_ph,
- system_error_type & ec )
+ system::error_code & ec )
{
ec = detail::create_hard_link_api(
to_ph.external_file_string(),
@@ -429,19 +434,19 @@
BOOST_FS_FUNC(void)
create_symlink( const Path & to_ph, const Path & from_ph )
{
- system_error_type result(
+ system::error_code ec(
detail::create_symlink_api(
to_ph.external_file_string(),
from_ph.external_file_string() ) );
- if ( result )
+ if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::create_symlink",
- to_ph, from_ph, result ) );
+ to_ph, from_ph, ec ) );
}
- BOOST_FS_FUNC(system_error_type)
+ BOOST_FS_FUNC(system::error_code)
create_symlink( const Path & to_ph, const Path & from_ph,
- system_error_type & ec )
+ system::error_code & ec )
{
ec = detail::create_symlink_api(
to_ph.external_file_string(),
@@ -457,11 +462,10 @@
// the link rather than what it points to is deleted. Windows behavior
// doesn't matter; is_symlink() is always false on Windows.
{
- system_error_type result = detail::remove_api( ph.external_file_string() );
- if ( result != 0 )
+ system::error_code ec( detail::remove_api( ph.external_file_string() ) );
+ if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
- "boost::filesystem::remove",
- ph, result ) );
+ "boost::filesystem::remove", ph, ec ) );
return true;
}
return false;
@@ -475,37 +479,46 @@
BOOST_FS_FUNC(void) rename( const Path & from_path, const Path & to_path )
{
- system_error_type result = detail::rename_api(
+ system::error_code ec( detail::rename_api(
from_path.external_directory_string(),
- to_path.external_directory_string() );
- if ( result != 0 )
+ to_path.external_directory_string() ) );
+ if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::rename",
- from_path, to_path, result ) );
+ from_path, to_path, ec ) );
}
BOOST_FS_FUNC(void) copy_file( const Path & from_path, const Path & to_path )
{
- system_error_type result = detail::copy_file_api(
+ system::error_code ec( detail::copy_file_api(
from_path.external_directory_string(),
- to_path.external_directory_string() );
- if ( result != 0 )
+ to_path.external_directory_string() ) );
+ if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::copy_file",
- from_path, to_path, result ) );
+ from_path, to_path, ec ) );
}
template< class Path >
Path current_path()
{
typename Path::external_string_type ph;
- boost::filesystem::system_error_type result;
- if ( (result = detail::get_current_path_api( ph )) != 0 )
+ system::error_code ec( detail::get_current_path_api( ph ) );
+ if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
- "boost::filesystem::current_path", result ) );
+ "boost::filesystem::current_path", ec ) );
return Path( Path::traits_type::to_internal( ph ) );
}
+ BOOST_FS_FUNC(void) current_path( const Path & ph )
+ {
+ system::error_code ec( detail::set_current_path_api(
+ ph.external_directory_string() ) );
+ if ( ec )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::current_path", ph, ec ) );
+ }
+
template< class Path >
const Path & initial_path()
{
@@ -527,11 +540,11 @@
# ifdef BOOST_WINDOWS_API
if ( ph.empty() ) return ph;
BOOST_FS_TYPENAME Path::external_string_type sys_ph;
- boost::filesystem::system_error_type result;
- if ( (result = detail::get_full_path_name_api( ph.external_file_string(),
- sys_ph )) != 0 )
+ system::error_code ec( detail::get_full_path_name_api( ph.external_file_string(),
+ sys_ph ) );
+ if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
- "boost::filesystem::system_complete", ph, result ) );
+ "boost::filesystem::system_complete", ph, ec ) );
return Path( Path::traits_type::to_internal( sys_ph ) );
# else
return (ph.empty() || ph.is_complete())
@@ -566,11 +579,11 @@
BOOST_FS_FUNC(void)
last_write_time( const Path & ph, const std::time_t new_time )
{
- boost::filesystem::system_error_type result;
- if ( (result = detail::last_write_time_api( ph.external_file_string(),
- new_time )) != 0 )
+ system::error_code ec( detail::last_write_time_api( ph.external_file_string(),
+ new_time ) );
+ if ( ec )
boost::throw_exception( basic_filesystem_error<Path>(
- "boost::filesystem::last_write_time", ph, result ) );
+ "boost::filesystem::last_write_time", ph, ec ) );
}
# ifndef BOOST_FILESYSTEM_NARROW_ONLY
@@ -582,9 +595,9 @@
inline file_status status( const wpath & ph )
{ return status<wpath>( ph ); }
- inline file_status status( const path & ph, system_error_type & ec )
+ inline file_status status( const path & ph, system::error_code & ec )
{ return status<path>( ph, ec ); }
- inline file_status status( const wpath & ph, system_error_type & ec )
+ inline file_status status( const wpath & ph, system::error_code & ec )
{ return status<wpath>( ph, ec ); }
inline file_status symlink_status( const path & ph )
@@ -592,9 +605,9 @@
inline file_status symlink_status( const wpath & ph )
{ return symlink_status<wpath>( ph ); }
- inline file_status symlink_status( const path & ph, system_error_type & ec )
+ inline file_status symlink_status( const path & ph, system::error_code & ec )
{ return symlink_status<path>( ph, ec ); }
- inline file_status symlink_status( const wpath & ph, system_error_type & ec )
+ inline file_status symlink_status( const wpath & ph, system::error_code & ec )
{ return symlink_status<wpath>( ph, ec ); }
inline bool exists( const path & ph ) { return exists<path>( ph ); }
@@ -658,11 +671,11 @@
const wpath & from_ph )
{ return create_hard_link<wpath>( to_ph, from_ph ); }
- inline system_error_type create_hard_link( const path & to_ph,
- const path & from_ph, system_error_type & ec )
+ inline system::error_code create_hard_link( const path & to_ph,
+ const path & from_ph, system::error_code & ec )
{ return create_hard_link<path>( to_ph, from_ph, ec ); }
- inline system_error_type create_hard_link( const wpath & to_ph,
- const wpath & from_ph, system_error_type & ec )
+ inline system::error_code create_hard_link( const wpath & to_ph,
+ const wpath & from_ph, system::error_code & ec )
{ return create_hard_link<wpath>( to_ph, from_ph, ec ); }
#endif
@@ -673,11 +686,11 @@
const wpath & from_ph )
{ return create_symlink<wpath>( to_ph, from_ph ); }
- inline system_error_type create_symlink( const path & to_ph,
- const path & from_ph, system_error_type & ec )
+ inline system::error_code create_symlink( const path & to_ph,
+ const path & from_ph, system::error_code & ec )
{ return create_symlink<path>( to_ph, from_ph, ec ); }
- inline system_error_type create_symlink( const wpath & to_ph,
- const wpath & from_ph, system_error_type & ec )
+ inline system::error_code create_symlink( const wpath & to_ph,
+ const wpath & from_ph, system::error_code & ec )
{ return create_symlink<wpath>( to_ph, from_ph, ec ); }
inline bool remove( const path & ph )
@@ -722,7 +735,12 @@
inline void last_write_time( const wpath & ph, const std::time_t new_time )
{ last_write_time<wpath>( ph, new_time ); }
-# endif // BOOST_FILESYSTEM_NARROW_ONLY
+ inline void current_path( const path & ph )
+ { current_path<path>( ph ); }
+ inline void current_path( const wpath & ph )
+ { current_path<wpath>( ph ); }
+
+# endif // ifndef BOOST_FILESYSTEM_NARROW_ONLY
namespace detail
{
@@ -757,7 +775,7 @@
// basic_directory_iterator, and so avoid iterator_facade DLL template
// problems. They also overload to the proper external path character type.
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
dir_itr_first( void *& handle,
#if defined(BOOST_POSIX_API)
void *& buffer,
@@ -766,7 +784,7 @@
std::string & target, file_status & fs, file_status & symlink_fs );
// eof: return==0 && handle==0
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
dir_itr_increment( void *& handle,
#if defined(BOOST_POSIX_API)
void *& buffer,
@@ -774,7 +792,7 @@
std::string & target, file_status & fs, file_status & symlink_fs );
// eof: return==0 && handle==0
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
dir_itr_close( void *& handle
#if defined(BOOST_POSIX_API)
, void *& buffer
@@ -783,10 +801,10 @@
// Effects: none if handle==0, otherwise close handle, set handle=0
# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_NARROW_ONLY)
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
dir_itr_first( void *& handle, const std::wstring & ph,
std::wstring & target, file_status & fs, file_status & symlink_fs );
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL system::error_code
dir_itr_increment( void *& handle, std::wstring & target,
file_status & fs, file_status & symlink_fs );
# endif
@@ -813,7 +831,8 @@
); }
};
- BOOST_FILESYSTEM_DECL extern system_error_type not_found_error;
+ BOOST_FILESYSTEM_DECL system::error_code not_found_error();
+
} // namespace detail
// basic_directory_iterator ------------------------------------------------//
@@ -831,7 +850,7 @@
basic_directory_iterator(){} // creates the "end" iterator
explicit basic_directory_iterator( const Path & dir_path );
- basic_directory_iterator( const Path & dir_path, system_error_type & ec );
+ basic_directory_iterator( const Path & dir_path, system::error_code & ec );
private:
@@ -855,7 +874,7 @@
bool equal( const basic_directory_iterator & rhs ) const
{ return m_imp == rhs.m_imp; }
- system_error_type m_init( const Path & dir_path );
+ system::error_code m_init( const Path & dir_path );
};
typedef basic_directory_iterator< path > directory_iterator;
@@ -866,27 +885,27 @@
// basic_directory_iterator implementation ---------------------------//
template<class Path>
- system_error_type basic_directory_iterator<Path>::m_init(
+ system::error_code basic_directory_iterator<Path>::m_init(
const Path & dir_path )
{
if ( dir_path.empty() )
{
m_imp.reset();
- return detail::not_found_error;
+ return detail::not_found_error();
}
- system_error_type sys_err;
typename Path::external_string_type name;
file_status fs, symlink_fs;
-
- if ( (sys_err = detail::dir_itr_first( m_imp->m_handle,
+ system::error_code ec( detail::dir_itr_first( m_imp->m_handle,
#if defined(BOOST_POSIX_API)
m_imp->m_buffer,
#endif
dir_path.external_directory_string(),
- name, fs, symlink_fs )) != 0 )
+ name, fs, symlink_fs ) );
+
+ if ( ec )
{
m_imp.reset();
- return sys_err;
+ return ec;
}
if ( m_imp->m_handle == 0 ) m_imp.reset(); // eof, so make end iterator
@@ -900,7 +919,7 @@
&& name.size() == 2)) )
{ increment(); }
}
- return 0;
+ return boost::system::error_code();
}
template<class Path>
@@ -908,10 +927,10 @@
const Path & dir_path )
: m_imp( new detail::dir_itr_imp<Path> )
{
- system_error_type ec( m_init(dir_path) );
- if ( ec != 0 )
+ system::error_code ec( m_init(dir_path) );
+ if ( ec )
{
- boost::throw_exception( basic_filesystem_error<Path>(
+ boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::basic_directory_iterator constructor",
dir_path, ec ) );
}
@@ -919,7 +938,7 @@
template<class Path>
basic_directory_iterator<Path>::basic_directory_iterator(
- const Path & dir_path, system_error_type & ec )
+ const Path & dir_path, system::error_code & ec )
: m_imp( new detail::dir_itr_imp<Path> )
{
ec = m_init(dir_path);
@@ -931,21 +950,22 @@
BOOST_ASSERT( m_imp.get() && "attempt to increment end iterator" );
BOOST_ASSERT( m_imp->m_handle != 0 && "internal program error" );
- system_error_type sys_err(0);
typename Path::external_string_type name;
file_status fs, symlink_fs;
+ system::error_code ec;
for (;;)
{
- if ( (sys_err = detail::dir_itr_increment( m_imp->m_handle,
+ ec = detail::dir_itr_increment( m_imp->m_handle,
#if defined(BOOST_POSIX_API)
m_imp->m_buffer,
#endif
- name, fs, symlink_fs )) != 0 )
+ name, fs, symlink_fs );
+ if ( ec )
{
boost::throw_exception( basic_filesystem_error<Path>(
"boost::filesystem::basic_directory_iterator increment",
- m_imp->m_directory_entry.path().branch_path(), sys_err ) );
+ m_imp->m_directory_entry.path().branch_path(), ec ) );
}
if ( m_imp->m_handle == 0 ) { m_imp.reset(); return; } // eof, make end
if ( !(name[0] == dot<Path>::value // !(dot or dot-dot)
@@ -990,11 +1010,11 @@
m_symlink_status = symlink_st;
}
- const Path & path() const { return m_path; }
+ const Path & path() const { return m_path; }
file_status status() const;
- file_status status( system_error_type & ec ) const;
+ file_status status( system::error_code & ec ) const;
file_status symlink_status() const;
- file_status symlink_status( system_error_type & ec ) const;
+ file_status symlink_status( system::error_code & ec ) const;
// conversion simplifies the most common use of basic_directory_entry
operator const path_type &() const { return m_path; }
@@ -1046,20 +1066,20 @@
template<class Path>
file_status
- basic_directory_entry<Path>::status( system_error_type & ec ) const
+ basic_directory_entry<Path>::status( system::error_code & ec ) const
{
if ( !status_known( m_status ) )
{
# ifndef BOOST_WINDOWS_API
if ( status_known( m_symlink_status )
&& !is_symlink( m_symlink_status ) )
- { ec = 0; m_status = m_symlink_status; }
+ { ec = boost::system::error_code();; m_status = m_symlink_status; }
else { m_status = boost::filesystem::status( m_path, ec ); }
# else
m_status = boost::filesystem::status( m_path, ec );
# endif
}
- else ec = 0;
+ else ec = boost::system::error_code();;
return m_status;
}
@@ -1078,12 +1098,12 @@
template<class Path>
file_status
- basic_directory_entry<Path>::symlink_status( system_error_type & ec ) const
+ basic_directory_entry<Path>::symlink_status( system::error_code & ec ) const
{
# ifndef BOOST_WINDOWS_API
if ( !status_known( m_symlink_status ) )
{ m_symlink_status = boost::filesystem::symlink_status( m_path, ec ); }
- else ec = 0;
+ else ec = boost::system::error_code();;
return m_symlink_status;
# else
return status( ec );
Modified: branches/release/boost/filesystem/path.hpp
==============================================================================
--- branches/release/boost/filesystem/path.hpp (original)
+++ branches/release/boost/filesystem/path.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,9 +1,9 @@
// boost/filesystem/path.hpp -----------------------------------------------//
// Copyright Beman Dawes 2002-2005
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
+
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See library home page at http://www.boost.org/libs/filesystem
@@ -13,6 +13,7 @@
#define BOOST_FILESYSTEM_PATH_HPP
#include <boost/filesystem/config.hpp>
+#include <boost/system/system_error.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <boost/throw_exception.hpp>
#include <boost/shared_ptr.hpp>
@@ -54,11 +55,11 @@
# ifndef BOOST_FILESYSTEM_NARROW_ONLY
- struct wpath_traits;
+ struct BOOST_FILESYSTEM_DECL wpath_traits;
typedef basic_path< std::wstring, wpath_traits > wpath;
- struct wpath_traits
+ struct BOOST_FILESYSTEM_DECL wpath_traits
{
typedef std::wstring internal_string_type;
# ifdef BOOST_WINDOWS_API
@@ -80,102 +81,6 @@
# endif // ifndef BOOST_FILESYSTEM_NARROW_ONLY
-// error reporting support -------------------------------------------------//
-
- typedef int errno_type; // determined by C standard
-
-# ifdef BOOST_WINDOWS_API
- typedef unsigned system_error_type;
-
- BOOST_FILESYSTEM_DECL
- errno_type lookup_errno( system_error_type sys_err_code );
-# else
- typedef int system_error_type;
-
- inline errno_type lookup_errno( system_error_type sys_err_code )
- { return sys_err_code; }
-# endif
-
- // deprecated support for legacy function name
- inline errno_type lookup_error_code( system_error_type sys_err_code )
- { return lookup_errno( sys_err_code ); }
-
- BOOST_FILESYSTEM_DECL
- void system_message( system_error_type sys_err_code, std::string & target );
- // Effects: appends error message to target
-
-# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_NARROW_ONLY)
- BOOST_FILESYSTEM_DECL void
- system_message( system_error_type sys_err_code, std::wstring & target );
-# endif
-
- // filesystem_error ----------------------------------------------------//
-
- class filesystem_error : public std::runtime_error
- // see http://www.boost.org/more/error_handling.html for design rationale
- {
- public:
- filesystem_error()
- : std::runtime_error("filesystem error"), m_sys_err(0) {}
- explicit filesystem_error(
- const std::string & what_arg, system_error_type sys_ec = 0 )
- : std::runtime_error(what_arg), m_sys_err(sys_ec) {}
-
- system_error_type system_error() const { return m_sys_err; }
- // Note: system_error() == 0 implies a library (rather than system) error
-
- private:
- system_error_type m_sys_err;
- };
-
- // basic_filesystem_error ----------------------------------------------//
-
- template<class Path>
- class basic_filesystem_error : public filesystem_error
- {
- // see http://www.boost.org/more/error_handling.html for design rationale
- public:
- // compiler generates copy constructor and copy assignment
-
- typedef Path path_type;
-
- basic_filesystem_error( const std::string & what,
- system_error_type sys_err_code );
-
- basic_filesystem_error( const std::string & what,
- const path_type & path1, system_error_type sys_err_code );
-
- basic_filesystem_error( const std::string & what, const path_type & path1,
- const path_type & path2, system_error_type sys_err_code );
-
- ~basic_filesystem_error() throw() {}
-
- const path_type & path1() const
- {
- static const path_type empty_path;
- return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path ;
- }
- const path_type & path2() const
- {
- static const path_type empty_path;
- return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path ;
- }
-
- private:
- struct m_imp
- {
- path_type m_path1; // may be empty()
- path_type m_path2; // may be empty()
- };
- boost::shared_ptr<m_imp> m_imp_ptr;
- };
-
- typedef basic_filesystem_error<path> filesystem_path_error;
-
-# ifndef BOOST_FILESYSTEM_NARROW_ONLY
- typedef basic_filesystem_error<wpath> filesystem_wpath_error;
-# endif
-
// path traits ---------------------------------------------------------//
template<class Path> struct is_basic_path
@@ -661,6 +566,110 @@
}
# endif
+ // basic_filesystem_error helpers --------------------------------------//
+
+ // Originally choice of implementation was done via specialization of
+ // basic_filesystem_error::what(). Several compilers (GCC, aCC, etc.)
+ // couldn't handle that, so the choice is now accomplished by overloading.
+
+ namespace detail
+ {
+ // BOOST_FILESYSTEM_DECL version works for VC++ but not GCC. Go figure!
+ inline
+ const char * what( const char * sys_err_what,
+ const path & path1, const path & path2, std::string & target )
+ {
+ try
+ {
+ if ( target.empty() )
+ {
+ target = sys_err_what;
+ if ( !path1.empty() )
+ {
+ target += ": \"";
+ target += path1.file_string();
+ target += "\"";
+ }
+ if ( !path2.empty() )
+ {
+ target += ", \"";
+ target += path2.file_string();
+ target += "\"";
+ }
+ }
+ return target.c_str();
+ }
+ catch (...)
+ {
+ return sys_err_what;
+ }
+ }
+
+ template<class Path>
+ const char * what( const char * sys_err_what,
+ const Path & /*path1*/, const Path & /*path2*/, std::string & /*target*/ )
+ {
+ return sys_err_what;
+ }
+ }
+
+ // basic_filesystem_error ----------------------------------------------//
+
+ template<class Path>
+ class basic_filesystem_error : public system::system_error
+ {
+ // see http://www.boost.org/more/error_handling.html for design rationale
+ public:
+ // compiler generates copy constructor and copy assignment
+
+ typedef Path path_type;
+
+ basic_filesystem_error( const std::string & what,
+ system::error_code ec );
+
+ basic_filesystem_error( const std::string & what,
+ const path_type & path1, system::error_code ec );
+
+ basic_filesystem_error( const std::string & what, const path_type & path1,
+ const path_type & path2, system::error_code ec );
+
+ ~basic_filesystem_error() throw() {}
+
+ const path_type & path1() const
+ {
+ static const path_type empty_path;
+ return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path ;
+ }
+ const path_type & path2() const
+ {
+ static const path_type empty_path;
+ return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path ;
+ }
+
+ const char * what() const throw()
+ {
+ if ( !m_imp_ptr.get() )
+ return system::system_error::what();
+ return detail::what( system::system_error::what(), m_imp_ptr->m_path1,
+ m_imp_ptr->m_path2, m_imp_ptr->m_what );
+ }
+
+ private:
+ struct m_imp
+ {
+ path_type m_path1; // may be empty()
+ path_type m_path2; // may be empty()
+ std::string m_what; // not built until needed
+ };
+ boost::shared_ptr<m_imp> m_imp_ptr;
+ };
+
+ typedef basic_filesystem_error<path> filesystem_error;
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+ typedef basic_filesystem_error<wpath> wfilesystem_error;
+# endif
+
// path::name_checks -----------------------------------------------------//
BOOST_FILESYSTEM_DECL bool portable_posix_name( const std::string & name );
@@ -1376,8 +1385,8 @@
template<class Path>
basic_filesystem_error<Path>::basic_filesystem_error(
- const std::string & what, system_error_type sys_err_code )
- : filesystem_error(what, sys_err_code)
+ const std::string & what, system::error_code ec )
+ : system::system_error(ec, what)
{
try
{
@@ -1389,8 +1398,8 @@
template<class Path>
basic_filesystem_error<Path>::basic_filesystem_error(
const std::string & what, const path_type & path1,
- system_error_type sys_err_code )
- : filesystem_error(what, sys_err_code)
+ system::error_code ec )
+ : system::system_error(ec, what)
{
try
{
@@ -1403,8 +1412,8 @@
template<class Path>
basic_filesystem_error<Path>::basic_filesystem_error(
const std::string & what, const path_type & path1,
- const path_type & path2, system_error_type sys_err_code )
- : filesystem_error(what, sys_err_code)
+ const path_type & path2, system::error_code ec )
+ : system::system_error(ec, what)
{
try
{
Modified: branches/release/libs/filesystem/build/Jamfile.v2
==============================================================================
--- branches/release/libs/filesystem/build/Jamfile.v2 (original)
+++ branches/release/libs/filesystem/build/Jamfile.v2 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,33 +1,33 @@
-# Boost Filesystem Library Build Jamfile
-# (C) Copyright Beman Dawes 2002, 2006
+# Boost Filesystem Library Build Jamfile
+# (C) Copyright Beman Dawes 2002-2006
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
+
# See library home page at http://www.boost.org/libs/filesystem
project boost/filesystem
- :
- source-location ../src
+ : source-location ../src
+ : usage-requirements # pass these requirement to dependents (i.e. users)
+ <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
+ <link>static:<define>BOOST_FILESYSTEM_STATIC_LINK=1
;
SOURCES =
- exception operations path portability utf8_codecvt_facet ;
+ operations path portability utf8_codecvt_facet ;
lib boost_filesystem
:
$(SOURCES).cpp
+ ../../system/build//boost_system
:
- <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1 # tell source we're building dll's
- ;
-
-install dist-lib
+ <link>shared:<define>BOOST_ALL_DYN_LINK=1 # tell source we're building dll's
+ <link>static:<define>BOOST_All_STATIC_LINK=1 # tell source we're building static lib's
:
- boost_filesystem
:
- <install-type>LIB
- <location>../../../dist/lib
+ <library>../../system/build//boost_system
;
-explicit dist-lib ;
+boost-install boost_filesystem ;
\ No newline at end of file
Modified: branches/release/libs/filesystem/doc/faq.htm
==============================================================================
--- branches/release/libs/filesystem/doc/faq.htm (original)
+++ branches/release/libs/filesystem/doc/faq.htm 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,269 +1,156 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
- <head>
- <title>
- Boost Filesystem FAQ
- </title>
-<style type="text/css">
- body {
- background-color: #FFFFFF;
- }
- p.c1 {font-weight: bold}
-</style>
- </head>
- <body>
- <h1>
- <img border="0" src="../../../boost.png" align="middle" alt=
- "Boost C++ libraries logo" width="277" height="86"> Filesystem
- FAQ
- </h1>
- <p class="c1">
- Why base the generic-path string format on POSIX?
- </p>
- <p>
- [POSIX-01] is an ISO Standard.
- It is the basis for the most familiar path-string formats,
- including the URL portion of URI's and the native Windows format.
- It is ubiquitous and familiar. On many systems, it is very
- easy to implement because it is either the native operating
- system format (Unix and Windows) or via a operating system
- supplied POSIX library (z/OS, OS/390, and many more.)
- </p>
- <p class="c1">
- Why not use a full URI (Universal Resource Identifier) based
- path?
- </p>
-
- <p>
- URI's would promise more than the
- Filesystem Library can actually deliver, since URI's extend far
- beyond what most operating systems consider a file or a
- directory. Thus for the primary "portable script-style file
- system operations" requirement of the Filesystem Library, full
- URI's appear to be over-specification.
- </p>
- <p class="c1">
- Why isn't <i>path</i> a base class with derived
- <i>directory_path</i> and <i>file_path</i> classes?
- </p>
-
- <p>
- Why bother? The behavior of all three classes is
- essentially identical. Several early versions did require users
- to identify each path as a file or directory path, and this
- seemed to increase errors and decrease code readability. There
- was no apparent upside benefit.
- </p>
- <p class="c1">
- Why are fully specified paths called <i>complete</i> rather than
- <i><a name="absolute" id="absolute">absolute</a></i>?
- </p>
-
- <p>
- To avoid long-held assumptions (what do you mean, <i>"/foo"</i>
- isn't absolute on some systems?) by programmers used to
- single-rooted filesystems. Using an unfamiliar name for the
- concept and related functions causes programmers to read the
- specs rather than just assuming the meaning is known.
- </p>
- <p class="c1">
- Why not support a concept of specific kinds of file systems, such
- as posix_file_system or windows_file_system.
- </p>
- <p>
- Portability is one of the most important requirements for the
- library. Gaining some advantage by using features specific
- to particular operating systems is not a requirement. There
- doesn't appear to be much need for the ability to manipulate,
- say, a classic Mac OS path while running on an OpenVMS machine.
- </p>
-
- <p>
- Furthermore, concepts like "file system" are very slippery. What
- happens when a NTFS or FAT file system is mounted in directory on
- a machine running a POSIX-like operating system, for example?
- Some of the POSIX API's may return very un-POSIX like results.
- </p>
- <p class="c1">
- Why not supply a 'handle' type, and let the file and directory
- operations traffic in it?
- </p>
- <p>
- It isn't clear there is any feasible way to meet the "portable
- script-style file system operations" requirement with such a
- system. File systems exist where operations are usually performed
- on some non-string handle type. The classic Mac OS has been
- mentioned explicitly as a case where trafficking in paths isn't
- always natural.
- </p>
-
- <p>
- The case for the "handle" (opaque data type to identify a file)
- style may be strongest for directory iterator value type.
- (See Jesse Jones' Jan 28, 2002, Boost postings). However, as
- class path has evolved, it seems sufficient even as the directory
- iterator value type.
- </p>
- <p class="c1">
- Why are the operations.hpp non-member functions so low-level?
- </p>
- <p>
- To provide a toolkit from which higher-level functionality can be
- created.
- </p>
-
- <p>
- An extended attempt to add convenience functions on top of, or as
- a replacement for, the low-level functionality failed because
- there is no widely acceptable set of simple semantics for most
- convenience functions considered. Attempts to provide
- alternate semantics via either run-time options or compile-time
- polices became overly complicated in relation to the value
- delivered, or became contentious. OTOH, the specific
- functionality needed for several trial applications was very easy
- for the user to construct from the lower-level toolkit
- functions. See <a href=
- "design.htm#Abandoned_Designs">Failed Attempts</a>.
- </p>
- <p class="c1">
- Isn't it inconsistent then to provide a few convenience
- functions?
- </p>
-
- <p>
- Yes, but experience with both this library, POSIX, and Windows
- indicates the utility of certain convenience functions, and that
- it is possible to provide simple, yet widely acceptable,
- semantics for them. For example, remove_all.
- </p>
- <p class="c1">
- Why are there basic_directory_iterator<> overloads for
- operations.hpp predicate functions? Isn't two ways to do the same
- thing poor design?
- </p>
- <p>
- Yes, two ways to do the same thing is often a poor design
- practice. But the iterator versions are often much more
- efficient. Calling status() during iteration over a directory
- containing 15,000 files took 6 seconds for the path overload, and
- 1 second for the iterator overload, for tests on a freshly booted
- machine. Times were .90 seconds and .30 seconds, for tests after
- prior use of the directory. This performance gain is large enough
- to justify deviating from preferred design practices. Neither
- overload alone meets all needs.
- </p>
-
- <p class="c1">
- Why are library functions so picky about errors?
- </p>
- <p>
- Safety. The default is to be safe rather than sorry. This is
- particularly important given the reality that on many computer
- systems files and directories are <a href="#global">globally
- shared</a> resources, and thus subject to unexpected errors.
- </p>
- <p class="c1">
- Why are errors reported by exception rather than return code or
- error notification variable?
- </p>
-
- <p>
- Safety. Return codes or error notification variables are
- often ignored by programmers. Exceptions are much harder to
- ignore, provided desired default behavior (program termination)
- if not caught, yet allow error recovery if desired. Non-throwing
- versions of functions are provided where experience indicates the
- need.
- </p>
- <p class="c1">
- Why are attributes accessed via named functions rather than
- property maps?
- </p>
- <p>
- For commonly used attributes (existence, directory or file,
- emptiness), simple syntax and guaranteed presence outweigh other
- considerations. Because access to many other attributes is
- inherently system dependent, property maps are viewed as the best
- hope for access and modification, but it is better design to
- provide such functionality in a separate library. (Historical
- note: even the apparently simple attribute "read-only" turned out
- to be so system depend as to be disqualified as a "guaranteed
- presence" operation.)
- </p>
-
- <p class="c1">
- Why isn't there a set_current_directory function?
- </p>
- <p>
- Global variables are considered harmful [<a href=
- "design.htm#Wulf-Shaw-73">wulf-shaw-73</a>]. While we can't
- prevent people from shooting themselves in the foot, we aren't
- about to hand them a loaded gun pointed right at their big toe.
- </p>
- <p class="c1">
- Why aren't <a name="wide-character_names" id=
- "wide-character_names">wide-character names</a> supported? Why
- not std::wstring or even a templated type?
- </p>
-
- <p>
- They <u>are</u> supported, starting with version 1.33. See
- Internationalization.
- </p>
- <p class="c1">
- Why isn't automatic name portability error detection provided?
- </p>
- <p>
-
- A number (at least six) of designs for name validity error
- detection were evaluated, including at least four complete
- implementations. While the details for rejection differed,
- all of the more powerful name validity checking designs distorted
- other otherwise simple aspects of the library. Even the simple
- name checking provided in prior library versions was a constant
- source of user complaints. While name checking can be helpful, it
- isn't important enough to justify added a lot of additional
- complexity.
- </p>
- <p class="c1">
- Why are paths sometimes manipulated by member functions and
- sometimes by non-member functions?
- </p>
- <p>
- The design rule is that purely lexical operations are supplied as
- <i>class basic_path</i> member functions, while operations
- performed by the operating system are provided as free functions.
- </p>
-
- <p class="c1">
- Why is path <i>normalized form</i> different from <i>canonical
- form</i>?
- </p>
- <p>
- On operating systems such as POSIX which allow symbolic links to
- directories, the normalized form of a path can represent a
- different location than the canonical form. See <a href=
- "design.htm#symbolic-link-use-case">use case</a> from Walter
- Landry.
- </p>
-
- <hr>
- <p>
- Revised
- <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
- 06 February, 2006
- <!--webbot bot="Timestamp" endspan i-checksum="40411" -->
- </p>
- <p>
- © Copyright Beman Dawes, 2002
- </p>
- <p>
-
- Use, modification, and distribution are subject to the Boost
- Software License, Version 1.0. (See accompanying file <a href=
- "../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at
- www.boost.org/LICENSE_1_0.txt)
- </p>
- </body>
-</html>
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Filesystem FAQ</title>
+<link rel="stylesheet" type="text/css" href="../../../doc/html/minimal.css">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="710">
+ <tr>
+ <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td>
+ <td width="410" align="middle">
+ <font size="7">Filesystem Library</font>
+ </td>
+ </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+ <tr>
+ <td>Boost Home
+ Library Home
+ Tutorial <a href="reference.html">
+ Reference</a> FAQ</td>
+ </tr>
+</table>
+
+<h1>
+Frequently Asked Questions</h1>
+<p><b>Why base the generic-path string format on POSIX?</b></p>
+<p>[POSIX-01] is an ISO Standard. It is the basis for the most familiar path-string formats,
+not just for POSIX systems but also for the native Windows format and the
+URL portion of URI's. It is ubiquitous and
+familiar. On many systems, it is very easy to implement because it is
+either the native operating system format (Unix and Windows) or via a
+operating system supplied
+POSIX library (z/OS, OS/390, and many more.)</p>
+<p><b>Why not use a full URI (Universal Resource Identifier) based path?</b></p>
+<p>URI's would promise more than the Filesystem Library can actually deliver,
+since URI's extend far beyond what most operating systems consider a file or a
+directory. Thus for the primary "portable script-style file system
+operations" requirement of the Filesystem Library, full URI's appear to be over-specification.</p>
+<p><b>Why isn't <i>path</i> a base class with derived <i>directory_path</i> and
+<i>file_path</i> classes?</b></p>
+<p>Why bother? The behavior of all three classes is essentially identical.
+Several early versions did require users to identify each path as a file or
+directory path, and this seemed to increase errors and decrease code
+readability. There was no apparent upside benefit.</p>
+<p><b>Why are fully specified paths called <i>complete</i> rather than <i>
+<a name="absolute">absolute</a></i>?</b></p>
+<p>To avoid long-held assumptions (what do you mean, <i>"/foo"</i> isn't
+absolute on some systems?) by programmers used to single-rooted filesystems.
+Using an unfamiliar name for the concept and related functions causes
+programmers to read the specs rather than just assuming the meaning is known.</p>
+<p><b>Why not support a concept of specific kinds of file systems, such as posix_file_system or windows_file_system.</b></p>
+<p>Portability is one of the most important requirements for the
+library. Gaining some advantage by using features specific to particular
+operating systems is not a requirement. There doesn't appear to be much need for
+the ability to manipulate, say, a classic Mac OS path while running on an
+OpenVMS machine.</p>
+<p>Furthermore, concepts like "file system"
+are very slippery. What happens when a NTFS or FAT file system is mounted
+in directory on a machine running a POSIX-like operating system, for example?
+Some of the POSIX API's may return very un-POSIX like results.</p>
+<p><b>Why not supply a 'handle' type, and let the file and directory operations
+traffic in it?</b></p>
+<p>It isn't clear there is any feasible way to meet the "portable script-style
+file system operations" requirement with such a system. File systems exist where operations are usually performed on
+ some non-string handle type. The classic Mac OS has been mentioned explicitly as a case where
+trafficking in paths isn't always natural. </p>
+<p>The case for the "handle" (opaque data type to identify a file)
+style may be strongest for directory iterator value type. (See Jesse Jones' Jan 28,
+2002, Boost postings). However, as class path has evolved, it seems sufficient
+even as the directory iterator value type.</p>
+<p><b>Why are the operations.hpp non-member functions so low-level?</b></p>
+<p>To provide a toolkit from which higher-level functionality can be created.</p>
+<p>An
+extended attempt to add convenience functions on top of, or as a replacement
+for, the low-level functionality failed because there is no widely acceptable
+set of simple semantics for most convenience functions considered.
+Attempts to provide alternate semantics via either run-time options or
+compile-time polices became overly complicated in relation to the value
+delivered, or became contentious. OTOH, the specific functionality needed for several trial
+applications was very easy for the user to construct from the lower-level
+toolkit functions. See <a href="design.htm#Abandoned_Designs">Failed
+Attempts</a>.</p>
+<p><b>Isn't it inconsistent then to provide a few convenience functions?</b></p>
+<p>Yes, but experience with both this library, POSIX, and Windows indicates
+the utility of certain convenience functions, and that it is possible to provide
+simple, yet widely acceptable, semantics for them. For example, remove_all.</p>
+<p><b>Why are there basic_directory_iterator<> overloads for operations.hpp
+predicate functions? Isn't two ways to do the same thing poor design?</b></p>
+<p>Yes, two ways to do the same thing is often a poor design practice. But the
+iterator versions are often much more efficient. Calling status() during
+iteration over a directory containing 15,000 files took 6 seconds for the path
+overload, and 1 second for the iterator overload, for tests on a freshly booted
+machine. Times were .90 seconds and .30 seconds, for tests after prior use of
+the directory. This performance gain is large enough to justify deviating from
+preferred design practices. Neither overload alone meets all needs.</p>
+<p><b>Why are library functions so picky about errors?</b></p>
+<p>Safety. The default is to be safe rather than sorry. This is particularly
+important given the reality that on many computer systems files and directories
+are globally shared resources, and thus subject to
+unexpected errors.</p>
+<p><b>Why are errors reported by exception rather than return code or error
+notification variable?</b></p>
+<p>Safety. Return codes or error notification variables are often ignored
+by programmers. Exceptions are much harder to ignore, provided desired
+default behavior (program termination) if not caught, yet allow error recovery
+if desired. Non-throwing versions of functions are provided where experience
+indicates the need.</p>
+<p><b>Why are attributes accessed via named functions rather than property maps?</b></p>
+<p>For commonly used attributes (existence, directory or file, emptiness),
+simple syntax and guaranteed presence outweigh other considerations. Because
+access to many other attributes is inherently system dependent,
+property maps are viewed as the best hope for access and modification, but it is
+better design to provide such functionality in a separate library. (Historical
+note: even the apparently simple attribute "read-only" turned out to be so
+system depend as to be disqualified as a "guaranteed presence" operation.)</p>
+<p><b>Why aren't <a name="wide-character_names">wide-character names</a> supported? Why not std::wstring or even
+a templated type?</b></p>
+<p>They <u>are</u> supported, starting with version 1.33. See
+Internationalization.</p>
+<p><b>Why isn't automatic name portability error detection provided?</b></p>
+<p>A number (at least six) of designs for name validity error
+detection were evaluated, including at least four complete implementations.
+While the details for rejection differed, all of the more powerful name validity checking
+designs distorted other
+otherwise simple aspects of the library. Even the simple name checking provided
+in prior library versions was a constant source of user complaints. While name checking can be helpful, it
+isn't important enough to justify added a lot of additional complexity.</p>
+<p><b>Why are paths sometimes manipulated by member functions and sometimes by
+non-member functions?</b></p>
+<p>The design rule is that purely lexical operations are supplied as <i>class
+basic_path</i> member
+functions, while operations performed by the operating system are provided as
+free functions.</p>
+<p><b>Why is path normalized form different
+from canonical form?</b></p>
+<p>On operating systems such as POSIX which allow symbolic links to directories,
+the normalized form of a path can represent a different location than the
+canonical form. See use case
+from Walter Landry.</p>
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->08 November, 2007<!--webbot bot="Timestamp" endspan i-checksum="39371" --></p>
+<p>© Copyright Beman Dawes, 2002</p>
+<p> Use, modification, and distribution are subject to the Boost Software
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
\ No newline at end of file
Modified: branches/release/libs/filesystem/doc/index.htm
==============================================================================
--- branches/release/libs/filesystem/doc/index.htm (original)
+++ branches/release/libs/filesystem/doc/index.htm 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -5,54 +5,67 @@
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Boost Filesystem Library</title>
+<title>Filesystem Home</title>
+<link rel="stylesheet" type="text/css" href="../../../doc/html/minimal.css">
</head>
-<body bgcolor="#FFFFFF">
+<body>
-<h1>
-<img border="0" src="../../../boost.png" align="center" width="277" height="86">Boost
-Filesystem Library</h1>
-<table border="0" cellpadding="0" width="100%">
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="710">
<tr>
- <td width="50%" valign="top"><font size="4">This Document</font><br>
- Introduction<br>
- Two-minute tutorial<br>
- Cautions<br>
- <a href="#Using_reference_doc">Using the Reference
- Documentation</a><br>
- Examples<br>
- Implementation<br>
- <a href="#narrow-only">Restricting library to narrow
- character paths</a><br>
- Building the object-library<br>
- Notes for Cygwin users<br>
- Acknowledgements<br>
- Change history</td>
- <td width="50%" valign="top"><font size="4">Other Documents</font><br>
- Reference<br>
- Table of Contents<br>
-
- TR2 Introduction<br>
- Formal reference text<br>
-
- <a href="tr2_proposal.html#frontmatter">Introductory
- chapter</a><br>
-
- <a href="tr2_proposal.html#Filesystem-library">Filesystem
- library chapter</a><br>
-
- <a href="tr2_proposal.html#Header-filesystem-synopsis">Header
- <boost/filesystem.hpp> synopsis</a><br>
- Library Design<br>
- FAQ<br>
- Portability Guide<br>
- Do-list<br>
- </td>
+ <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td>
+ <td width="410" align="middle">
+ <font size="7">Filesystem Library</font>
+ </td>
</tr>
</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+ <tr>
+ <td>Boost Home
+ Library Home Tutorial <a href="reference.html">
+ Reference</a> FAQ</td>
+ </tr>
+</table>
+
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" align="right">
+ <tr>
+ <td width="100%" bgcolor="#D7EEFF" align="center">
+ <i><b>Contents</b></i></td>
+ </tr>
+ <tr>
+ <td width="100%" bgcolor="#E8F5FF">
+ Introduction<br>
+ Two-minute tutorial<br>
+ Cautions<br>
+ Using the Reference Documentation<br>
+ Examples<br>
+ Implementation<br>
+ Using only narrow character paths<br>
+ Building the object-library<br>
+ Notes for Cygwin users<br>
+ Acknowledgements<br>
+ Change history</td>
+ </tr>
+ <tr>
+ <td width="100%" bgcolor="#D7EEFF" align="center">
+ <i><b>Other Documents</b></i></td>
+ </tr>
+ <tr>
+ <td width="100%" bgcolor="#E8F5FF">
+ Reference<br>
+ Library Design<br>
+ FAQ<br>
+ Portability Guide<br>
+ Do-list
+ </td>
+ </tr>
+</table>
+
<h2><a name="Introduction">Introduction</a></h2>
-<p>The Boost Filesystem Library provides portable facilities to query and
+<p>The Boost.Filesystem library provides portable facilities to query and
manipulate paths, files, and directories.</p>
<p>The motivation for the library is the need to perform portable script-like operations from within C++ programs. The intent is not to
@@ -62,7 +75,7 @@
<p>Programs using the library are <b><i>portable</i></b>, both in the sense that
the syntax of program code is portable, and the sense that the semantics or
-behavior of code is portable. The <a href="tr2_proposal.html#Pathname-grammar">generic path
+behavior of code is portable. The <a href="reference.html">generic path
grammar</a> is another important aid to portability.</p>
<p>Usage is <i><b>safe</b></i> in the sense that errors cannot be ignored since most functions throw C++
@@ -70,18 +83,18 @@
it alleviates the need to explicitly check error
return codes.</p>
-<p>A proposal has been
-submitted to the C++ Standards Committee for inclusion of the library in the
-Standard Library Technical Report 2 (TR2). The Boost.Filesystem library will
-stay in alignment with the TR2 Filesystem proposal as it works its way through
-the committee process. Note, however, that namespaces and header granularity
-differs between Boost.Filesystem and the TR2 proposal. See
-Using the Reference Documentation.</p>
+<p>A proposal,
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html">
+N1975</a>, to include Boost.Filesystem in Technical Report 2 has been accepted
+by the C++ Standards Committee. The Boost.Filesystem library will stay in
+alignment with the TR2 Filesystem proposal as it works its way through the TR2
+process. Note, however, that namespaces and header granularity differs between
+Boost.Filesystem and the TR2 proposal.</p>
-<p>The Filesystem Library supplies several headers:</p>
+<p>The Boost.Filesystem library provides several headers:</p>
<ul>
- <li>Header boost/filesystem.hpp provides class <i>
+ <li>Header <boost/filesystem.hpp> provides class <i>
basic_path, </i>a portable mechanism for representing
<a href="#path">paths</a> in C++ programs. Typedefs <i>path</i> and <i>
wpath</i> ease the most common usages of <i>basic_path</i>. Operational
@@ -91,14 +104,9 @@
the contents of directories. Convenience functions and classes combine lower-level functionality
in useful ways.<br>
</li>
- <li>Header boost/filesystem/fstream.hpp provides the same components as the C++ Standard
+ <li>Header <boost/filesystem/fstream.hpp> provides the same components as the C++ Standard
Library's <i>fstream</i> header, except
- that files are identified by <i>basic_path</i> objects rather that <i>char *</i>'s.<br>
- </li>
- <li>Header <a href="../../../boost/filesystem/cerrno.hpp">
- boost/filesystem/cerrno.hpp</a> provides POSIX errno macros used by
- Boost.Filesystem, and two new macros (EBADHANDLE, EOTHER) not defined by
- POSIX.</li>
+ that files are identified by <i>basic_path</i> objects rather that <i>char *</i>'s.</li>
</ul>
<h2>Two-minute <a name="tutorial">tutorial</a></h2>
<p>First some preliminaries:</p>
@@ -251,20 +259,6 @@
BOOST_NO_EXCEPTIONS at the time the filesystem source files are compiled.</p>
<p>Non-throwing versions are provided of several functions that are often used
in contexts where error codes may be the preferred way to report an error.</p>
-<h2><a name="Using_reference_doc">Using the Reference Documentation</a></h2>
-<p>The proposal for adding Boost.Filesystem to the C++ Standard Library's
-Technical Report 2 is used as the <a href="tr2_proposal.html">Reference
-Documentation</a>. This eliminates the need to maintain two sets of
-documentation, but means that the actual Boost.Filesystem library differs from
-this reference documentation in several ways.</p>
-<ul>
- <li>The Boost.Filesystem header is <a href="../../../boost/filesystem.hpp">
- <code><boost/filesystem.hpp></code></a> rather than <code><filesystem></code>.</li>
- <li>The namespace is <code>boost::filesystem</code> rather than <code>
- std::tr2::sys</code>.</li>
- <li>Several legacy interfaces are provided by Boost.Filesystem that are not
- part of the TR2 proposal.</li>
-</ul>
<h2><a name="Examples">Examples</a></h2>
<h3>simple_ls.cpp</h3>
<p>The example program simple_ls.cpp is
@@ -347,7 +341,7 @@
<h2><a name="Acknowledgements">Acknowledgements</a></h2>
<p>The Filesystem Library was designed and implemented by Beman Dawes. The
original <i>directory_iterator</i> and <i>filesystem_error</i> classes were
-based on prior work from Dietmar Kühl, as modified by Jan Langer. Thomas Witt
+based on prior work from Dietmar Kühl, as modified by Jan Langer. Thomas Witt
was a particular help in later stages of initial development. Peter Dimov and
Rob Stewart made many useful suggestions and comments over a long period of
time. Howard Hinnant helped with internationalization issues.</p>
@@ -462,6 +456,16 @@
<h2><a name="Change-history">Change history</a></h2>
+<h3>Version 1.35.0</h3>
+
+<ul>
+ <li>Diagnostics moved to the separate <a href="../../system/doc/index.html">
+ Boost.System</a> library.</li>
+ <li>current_path() function added to set the current directory path.</li>
+ <li>Test coverage extended.</li>
+ <li>A few minor implementation fixes.</li>
+</ul>
+
<h3>Version 1.34.0</h3>
<ul>
@@ -525,7 +529,7 @@
<li>The object library can now be built for either
static or dynamic (shared/dll) linking. </li>
<li>Several added functions, including improved checking for directory and
- file name portability. See <a href="portability_guide.htm#name_check_functions">
+ file name portability. See <a href="portability_guide.htm#name_checkÂ_functions">
Name check functions</a>.</li>
<li>Separation of canonical form and normalized form and a new path member
function normalize(). This changes behavior,
@@ -536,13 +540,12 @@
<hr>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->03 June, 2007<!--webbot bot="Timestamp" endspan i-checksum="19946" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->08 November, 2007<!--webbot bot="Timestamp" endspan i-checksum="39371" --></p>
<p>© Copyright Beman Dawes, 2002-2005</p>
<p> Use, modification, and distribution are subject to 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>
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
</body>
Deleted: branches/release/libs/filesystem/doc/tr2_proposal.html
==============================================================================
--- branches/release/libs/filesystem/doc/tr2_proposal.html 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
+++ (empty file)
@@ -1,3435 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Filesystem Library Proposal
-</title>
-</head>
-
-<body bgcolor="#FFFFFF">
-
-<p>Doc. no. WG21/D1934=06-0004<br>
-Date: 2006-01-31<br>
-Project: Programming Language C++<br>
-Reply to: Beman Dawes <<a href="mailto:bdawes_at_[hidden]">bdawes_at_[hidden]</a>></p>
-
-<h1 align="center"><i><font size="7">Draft</font></i></h1>
-
-<h1>Filesystem Library Proposal for TR2 (Revision 2)</h1>
-
-<h2><a name="TOC">Table of Contents</a></h2>
-
-<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="26%" valign="top">Introduction<br>
-Motivation and Scope<br>
-Impact on the Standard<br>
-Important Design Decisions<br>
-Proposed Text for TR2<br>
- Introductory chapter<br>
- Filesystem library chapter<br>
- Definitions<br>
- Requirements<br>
-
-Requirements on programs<br>
-
-Requirements<br>
-
-on implementations<br>
- <a href="#Header-filesystem-synopsis">
- Header <filesystem> synopsis</a><br>
- Path traits<br>
- <a href="#Class-template-basic_path">
- Class template basic_path</a><br>
-
-Pathname formats<br>
-
-Pathname grammar<br>
-
-Filename conversion<br>
-
-Requirements </td>
- <td width="35%" valign="top"> Class template basic_path (continued)<br>
-
-basic_path constructors<br>
-
-basic_path assignments<br>
-
-basic_path modifiers<br>
-
-basic_path operators<br>
-
-basic_path observers<br>
-
-basic_path iterators<br>
-
-basic_path non-member functions<br>
-
-basic_path inserter and extractor<span style="background-color: #FFFFFF"><br>
-
-</span> <a href="#Class-filesystem_error">
-<span style="background-color: #FFFFFF">Class filesystem_error</span></a><span style="background-color: #FFFFFF"><br>
-</span>
-<a href="#Class-template-basic_filesystem_error">Class template
- basic_filesystem_error</a><br>
-
-<a href="#basic_filesystem_error-constructors">basic_filesystem_error
- constructors</a><br>
-
-basic_filesystem_error observers<br>
-
-<a href="#Class-template-basic_directory_entry">Class template
- basic_directory_entry</a><br>
-
-basic_directory_entry constructors<br>
-
-basic_directory_entry modifiers<br>
-
-basic_directory_entry observers<br>
-
-basic_directory_entry comparisons</td>
- <td width="89%" valign="top">Filesystem library chapter (continued)<br>
-
-<a href="#Class-template-basic_directory_iterator">Class template
- basic_directory_iterator</a><br>
-
-<a href="#basic_directory_iterator-constructors">basic_directory_iterator
- constructors</a><br>
-
-<a href="#Class-template-basic_recursive_directory_iterator">Class template
- basic_recursive_directory_iterator</a><br>
- <a href="#file_status">Class
- file_status</a><br>
- <a href="#Non-member-functions">
- Non-member operational functions</a><br>
-
-Status functions<br>
-
-Predicate functions<br>
-
-Attribute functions<br>
-
-Other operations functions<br>
-
-Convenience functions<br>
- <a href="#header-cerrno">Additions to
- header <cerrno></a><br>
- <a href="#header-fstream">Additions
- to header <fstream></a><br>
-Suggestions for <fstream>
<code><br>
- </code>
- implementations<br>
-Path decomposition table<br>
-Issues<br>
-Acknowledgements<br>
-References<br>
-<a href="#Revision-History"><span style="background-color: #FFFFFF">Revision
-History</span></a></td>
- </tr>
-</table>
-
-<h2><a name="Introduction">Introduction</a></h2>
-<p>This paper proposes addition of a filesystem library component
-to the C++ Standard Library Technical Report 2. The proposal is based on the Boost Filesystem Library (see www.boost.org/libs/filesystem).</p>
-<p>The library provides portable facilities to query and
-manipulate paths, files, and directories. The Boost version of the library is widely used. It would
-be a pure addition to the C++ standard, leaving in place existing
-standard library functionality in the relatively few areas where there is overlap.</p>
-<p>Users say they prefer the Boost Filesystem Library interface to native
-operating system or
-<i>POSIX</i> API's, even in code without portability requirements, because the design
-follows modern C++ practice.</p>
-<p>The proposed text includes an example of a
-program using the library.</p>
-<h2><a name="Motivation">Motivation</a> and Scope</h2>
-<p><b><i>Why is this important? </i></b></p>
-<p>The motivation for the library is the desire to perform <i><b>safe, portable, script-like filesystem operations</b></i> from within C++ programs. Because the
-C++ Standard Library currently contains no facilities for such filesystem tasks
-as directory iteration or directory creation, programmers currently must rely on
-operating system specific interfaces, making it difficult to write
-portable programs.</p>
-<p>The intent is not to compete
-with Python, Perl, or shell scripting languages, but rather to provide
-file system operations where C++ is already the language of choice. The design
-encourages, but does not require, safe and portable usage.</p>
-<p><b><i>What kinds of problems does it address, and what kinds of programmers is
-it intended to support?</i></b></p>
-<p>The library addresses everyday needs, for both application programs and
-libraries. It is useful across every application domain that uses files. It is
-intended to be useful to all levels of programmers, from rank beginners to
-seasoned experts.</p>
-<p><b><i>Is it based on existing practice?</i></b></p>
-<p>Yes, very much so. The proposal is based on the Boost Filesystem Library,
-which has been in use since 2002 and by now is in very wide use. For example,
-current versions of Adobe Systems products such as Adobe Reader use the Boost
-Filesystem Library on the many platforms they support.</p>
-<p>Note, however, that until recently all the Boost experience was with a
-narrow-character only version of the library. The internationalized version as
-described in this proposal is just starting to be used, and will not be fully
-released until Boost release 1.34.</p>
-<p>The underlying mechanisms have been in use for decades on the world's most
-wide-spread operating systems, such as <i>POSIX</i>, <i>Windows</i>, and various
-mainframe operating systems. What this proposal brings to the table is an
-approach that is C++
-Standard Library friendly and fully internationalized.</p>
-<p><b><i>Is there a reference implementation?</i></b></p>
-<p>Yes. The Boost Filesystem Library is freely and publicly available. The Boost library will track the TR2 proposed
-library as the proposal evolves.</p>
-<h2><a name="Impact">Impact</a> on the Standard</h2>
-<p><b><i>What does it depend on, and what depends on it?</i></b></p>
-<p>It depends on
-some standard library components, such as basic_string. No other proposals
-depend on it.</p>
-<p>If a revision to the Code Conversion Proposal (See
-<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1683.html">
-http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1683.html>) is
-accepted, it may be advantageous for the Filesystem Library
-to use that library rather than the current code conversion facilities proposed
-below.</p>
-<p><b><i>Is it a pure extension, or does it require changes to standard
-components?</i></b></p>
-<p>Most of the proposed library is a pure extension.</p>
-<p>There are additions to header <cerrno>. Since
-the critical portions that might require change to C headers (always a sore
-point) are already mandated for <i>POSIX</i> compliance, and codify
-existing practice for many non-<i>POSIX</i> implementations such as for <i>Windows</i>, it is not expected that they will cause any problems.</p>
-<p>There are additions to header <fstream>.
-These have been carefully specified to avoid breaking existing code in common operating environments such as <i>POSIX</i>, <i>
-Windows</i>, and <i>OpenVMS</i>. See <a href="#Suggestions-for-fstream">
-Suggestions for <code><fstream></code> implementations</a> for techniques to
-avoid breaking existing code in other environments, particularly on operating
-systems allowing slashes in filenames.</p>
-<p><b><i>Can it be implemented using today's compilers, or does it require
-language features that will only be available as part of C++0x?</i></b></p>
-<p>It can
-be (and has been) implemented with today's compilers.</p>
-<p>There is one minor function that can best be implemented by an addition to
-current C++ runtime libraries, although an acceptable workaround is documented.</p>
-<p>On operating systems with built-in support for wide-character file names,
-such as <i>Windows</i>, high-quality implementation of the header <fstream>
-additions require an addition to the C++ Standard Library implementation. The
-addition is relatively small and localized. There is a workaround that avoids
-modifying the standard library, but it is very much a hack and depends on a <i>
-Windows</i> feature (8.3 filename support) which some users disable, thereby
-disabling the workaround. The issue doesn't affect implementations on operating
-systems which only support narrow character file names.</p>
-<h2>Important <a name="Design">Design</a> Decisions</h2>
-<h4><i>Why did you choose the specific design that you did?</i></h4>
-<p>Many of the specific design decisions were driven by the desire to provide a modern C++ interface
-that works
-well with the C++ Standard Library. The intent is that Standard Library users
-can become comfortable with the Filesystem Library in very short order.</p>
-<p>The proposed library encourages both syntactic and semantic portability, yet
-does not force implementors into heroic efforts on hopeless systems. This
-balances the benefits to users of both code and knowledge portability with the
-realities faced by implementors on some operating systems.</p>
-
-<p><span style="background-color: #FFFFFF">In some
-cases users always need portable semantics. In some cases users always need
-platform specific semantics. In some cases users need to be able to choose
-between portable and platform specific semantics. The design evolved over a
-period of years to identify and meet each of those needs. </span></p>
-
-<p>Because of the desire to support simple "script-like" usage, use cases often
-drove design choices. For example, users can write <code>if (exists("foo"))</code> rather than
-the lengthier <code>if (exists(path("foo")))</code>.</p>
-
-<p>Because filesystem operations often encounter unexpected runtime errors, the library reports runtime errors via C++ exceptions,
-and ensures enough information is provided for meaningful error messages,
-including internationalized error messages.</p>
-
-<p><b><i>What alternatives did you consider, and what are the tradeoffs?</i></b></p>
-<p><i>Additional observers and modifiers for file system attributes.</i>
-Attribute functions which cannot supply portable semantics are not provided,
-avoiding the illusion of portability in cases where it cannot in fact exist.</p>
-<p><i>A larger number of operational convenience functions.</i>
-Convenience functions (functions which can be portably created by composition
-from basic functions) were not provided unless there was widespread agreement on
-usefulness and need.</p>
-<p><i>Compile-time or run-time options for operational functions.</i>
-Numerous trial implementations were abandoned because the added complexity
-out weighed the benefits, and because consensus could not be reached on the
-feature set.</p>
-<p><i>Automatic path name checking.</i> This feature, supplied by the Boost
-library for several years, allowed users to specify both default and per
-constructor path name checking, and thus allowed the desired degree of portability to be
-automatically enforce. This implicit name checking was abandoned because of user
-confusion and complaints.</p>
-<p><i>Separate path types for regular file and directory pathnames.</i> Pathname
-formats that use different syntax for regular pathnames versus directory
-pathnames are passing into extinction. Why prolong the agony at the cost of
-torturing those using modern systems? It is perhaps significant that one of the few web
-sites dedicated to preserving a dual pathname format operating system is named
-<i>Deathrow</i> (http://deathrow.vistech.net/).</p>
-<p><i>Single path type which can at runtime accept narrow or wide character
-pathnames.</i> Although certainly interesting, and possibly superior, such a
-design would not interoperate well with the current Standard Library's compile-time
-typed <code>basic_string</code>. A new runtime polymorphic string class would be
-the best place to experiment with this concept, not a path class.</p>
-<p><b><i>What are the consequences of your choices, for users and implementors?</i></b></p>
-<p>The design has evolved over a period of four years of actual experience by
-Boost users, and the most frequent causes of user complaints (such as enforced
-name-checking and several over-strict preconditions) were eliminated. The TR
-process will allow further refinement. The intent is to ensure user needs are
-met.</p>
-<p>Because the Boost implementation is tested and
-used in a wide range of <i>POSIX</i> and <i>Windows</i> environments, many implementation
-concerns have already been addressed.</p>
-<p><b><i>What decisions are left up to implementors?</i></b></p>
-<p>Because implementations of the library are dependent on facilities of the
-underlying operating system, implementors are given unusual freedom to redefine
-semantics of the library. That being said, implementors are given strong
-normative encouragement to provide the TR described semantics whenever feasible.</p>
-<p><b><i>If there are any similar libraries in use, how do their design
-decisions compare to yours?</i></b></p>
-<p>There are a number of libraries which address the problem domain. Most of the
-C/C++ libraries have C, rather than C++ interfaces. For example, see the Apache Portable Runtime
-Project (http://apr.apache.org). The ACE
-toolkit (http://www.cs.wustl.edu/~schmidt/ACE.html)
-uses a C++ approach, but doesn't mesh well with the C++ Standard Library. For
-example, the ACE directory iterator differs greatly from Standard Library
-iterator requirements.</p>
-<h2>Proposed <a name="Text">Text</a> for Technical Report 2</h2>
-<p><span style="font-style: italic; background-color: #E0E0E0">Gray-shaded
-italic text is commentary on the proposal. It is not to be added to the TR.</span></p>
-<p><span style="background-color: #FFFFFF"><i>Italic text is editorial guidance.
-It is not to be added to the TR.</i></span></p>
-<p><span style="font-style: italic; background-color: #FFFFFF">
-<a name="frontmatter">Add</a> to the
-introductory section of the TR:</span></p>
-<p>The following standard contains provisions which, through reference in this
-text, constitute provisions of this Technical Report. At the time of
-publication, the editions indicated were valid. All standards are subject to
-revision, and parties to agreements based on this Technical Report are
-encouraged to investigate the possibility of applying the most recent editions
-of the standard indicated below. Members of IEC and ISO maintain registers of
-currently valid International Standards.</p>
- <ul>
- <li>ISO/IEC 9945:2003, <i>Portable Operating System Interface (POSIX1),
- part 1 (Base Definitions) and part 2 (System Interfaces)</i>, both as corrected by their
- respective 2004 Correction 1 documents.<p>[<i>Note:</i> ISO/IEC 9945:2003 is
- also IEEE Std 1003.1-2001, and The Open Group Base Specifications, Issue 6,
- and also known as The Single Unix<font face="Times New Roman"><sup>2</sup><i><b>
- </b></i>Specification, Version 3. It is available from each of those organizations,
- and may be read online or downloaded from
- <a href="http://www.unix.org/single_unix_specification/">
- www.unix.org/single_unix_specification/</a> <i>-- end note</i>]</font></p>
- </li>
- </ul>
-<p>ISO/IEC 9945:2003, with the indicated corrections, is hereinafter called <i>
-POSIX</i>.</p>
-<p>Some library behavior in this Technical Report is defined by reference to <i>
-POSIX</i>. How such behavior is actually implemented is unspecified.</p>
-<blockquote>
-<p>[<i>Note:</i> This constitutes an "as if" rule for implementation of
-operating system dependent behavior. Presumably implementations will actually call native
-operating system API's. <i>--end note</i>]</p>
-</blockquote>
-<p>Implementations are encouraged, but not required, to support such behavior
-
-as it is defined by <i>POSIX</i>. Implementations shall document any
-behavior that differs from the <i>POSIX</i> defined behavior. Implementations that do not support exact <i>POSIX</i> behavior are
-encouraged to provide behavior as close to <i>POSIX</i> behavior as is reasonable given the
-limitations of actual operating systems. If an implementation cannot provide any
-reasonable behavior, the implementation shall report an error in an
-implementation-defined manner.</p>
-<blockquote>
-<p>[<i>Note:</i> Such errors might be reported by an #error directive, a <code>
-static_assert</code>, a <code>basic_filesystem_error</code> exception, a special
-return value, or some other manner. <i>--end note</i>]</p>
-</blockquote>
-<p><a name="Footnote-1">Footnote 1</a>: <i>POSIX</i>® is a registered trademark of The
-IEEE.</p>
-<p><a name="Footnote-2">Footnote 2</a>: <i>UNIX</i>® is a registered trademark of The
-Open Group.</p>
-<p><span style="background-color: #FFFFFF"><i>Add a new clause to the TR:</i></span></p>
-<hr>
-<h2>Chapter <span style="font-weight: 400"><i>(tbs)</i></span> - <a name="Filesystem-library">Filesystem library</a></h2>
-<hr>
-<p>This clause describes components that C++ programs may use to interrogate and
-manipulate files (including directories), and certain of their
-attributes.</p>
-<p>This clause applies only to hosted implementations (C++ Std, 1.4,
-Implementation compliance [intro.compliance]).</p>
-<blockquote>
-<p>[<i>Note:</i> This clause applies to any hosted implementation.
-Specific operating systems such as <i>OpenMVS</i><sup>3</sup>,
-<i>UNIX</i>, and <i>Windows</i><sup>4</sup> are mentioned only for purposes of illustration or to
-give guidance to implementors. No slight to other operating systems is implied
-or intended. <i>--end note</i>.]</p>
-</blockquote>
-<p>Unless otherwise specified, all components described in this clause are
-declared in namespace <code>std::tr2::sys</code>.</p>
-<blockquote>
-<p>[<i>Note:</i> The <code>sys</code> sub-namespace prevents collisions with
-names already in the standard library and emphasizes reliance on the
-operating system dependent behavior inherent in file system operations. <i>-- end
-note</i>]</p>
-</blockquote>
-<p>The <i>Effects</i> and <i>Postconditions</i> of functions described in this clause
-may not be achieved in
-the presence of race conditions. No diagnostic is required.</p>
-<p>If the possibility of race conditions makes it unreliable for a program to
-test for a precondition before calling a function described in this clause, <i>
-Requires</i> is not specified for the condition. Instead, the condition is
-specified as a <i>Throws</i> condition.</p>
-<blockquote>
-<p>[<i>Note:</i> As a design practice, preconditions are not specified when it
-is unreasonable for a program to detect them prior to calling the function. <i>
--- end note</i>]</p>
-</blockquote>
-<p><a name="Footnote-3">Footnote 3</a>: <i>OpenMVS</i>® is a registered
-trademark of Hewlett-Packard Development Company.</p>
-<p><a name="Footnote-4">Footnote 4</a>: <i>Windows</i>® is a registered
-trademark of Microsoft Corporation.</p>
-<h3><a name="Definitions">Definitions</a></h3>
-<p>The following definitions shall apply to this clause:</p>
-<p><i><a name="File">File</a>: </i>An object that can be written to, or read from, or both. A file
-has certain attributes, including type. File types include regular file,
-symbolic link, and directory. Other types of files may be supported by the
-implementation.</p>
-<p><i><a name="File-system">File system</a>:</i> A collection of files and certain of their attributes.</p>
-<p><i><a name="Filename">Filename</a>:</i> The name of a file. The format is as
-specified by the <i>POSIX
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_169">
-Filename</a></i> base definition.</p>
-<p><i><a name="Path">Path</a>:</i> A sequence of elements which identify
-a location within a filesystem. The elements are the <i>root-name</i>, <i>
-root-directory</i>, and each successive <i>filename</i>. See
-Pathname grammar.</p>
-<p><i><a name="Pathname">Pathname</a>: </i>A character string that represents a
-path.</p>
-<p><i><a name="Link">Link</a>: </i>A directory entry object that associates a
-filename with a file. On some file systems, several directory entries can
-associate names with the same file.</p>
-<p><i><a name="Hard-link">Hard link</a>:</i> A link to an existing file. Some
-file systems support multiple hard links to a file. If the last hard link to a
-file is removed, the file itself is removed.</p>
-<blockquote>
-<p>[<i>Note:</i> A hard link can be thought of as a shared-ownership smart
-pointer to a file.<i> -- end note</i>]<i> </i></p>
-</blockquote>
-<p><i><a name="Symbolic-link">Symbolic link</a>: </i>A type of file with the
-property that when the file is encountered during pathname resolution, a string
-stored by the file is used to modify the pathname resolution.</p>
-<blockquote>
-<p>[<i>Note:</i> A symbolic link can be thought of as a raw pointer to a file.
-If the file pointed to does not exist, the symbolic link is said to be a
-"dangling" symbolic link.<i> -- end note</i>]<i> </i></p>
-</blockquote>
-<p><i><a name="Slash">Slash</a>:</i> The character <tt>'/'</tt>, also known as
-solidus.</p>
-<p><i><a name="Dot">Dot</a>:</i> The character '.', also known as period.</p>
-<p><i><a name="Race-condition">Race condition</a>:</i> The condition that occurs
-when multiple threads, processes, or computers interleave access and
-modification of
-the same object within a file system.</p>
-<h3><a name="Requirements">Requirements</a></h3>
-<h4><a name="Requirements-on-programs">Requirements on programs</a></h4>
-<p>The arguments for template parameters named <code>Path</code>, <code>Path1</code>,
-or <code>Path2</code> described in this clause shall be of type <code>basic_path</code>,
-or a class derived from <code>basic_path</code>, unless otherwise
-specified.</p>
-<h4><a name="Requirements-on-implementations">Requirements on implementations</a></h4>
-<p>Some function templates described in this clause have a template parameter
-named <code>Path</code>, <code>Path1</code>, or <code>Path2</code>. When called
-with a function argument <code>s</code> of type <code>char*</code> or <code>
-std::string</code>, the implementation shall treat the argument as if it were
-coded <code>path(s)</code>. When called with a function argument <code>s</code>
-of type <code>wchar_t*</code> or <code>std::wstring</code>, the implementation
-shall treat the argument as if it were coded <code>wpath(s)</code>. For
-functions with two arguments, implementations shall not supply this treatment
-when <code>Path1</code> and <code>Path2</code> are different types.</p>
-<blockquote>
-<p>[<i>Note:</i> This "do-the-right-thing" rule allows users to write <code>exists("foo")</code>,
-taking advantage of class <code>basic_path</code>'s string conversion
-constructor, rather
-than the lengthier and more error prone <code>exists(path("foo"))</code>. This
-is particularly important for the simple, script-like, programs which are an
-important use case for the library. Calling two argument functions with
-different types is a very rare usage, and may well be a coding error, so
-automatic conversion is not supported for such cases.</p>
-<p>The implementation technique is unspecified. One possible implementation
-technique, using
-<code>exists()</code> as an example, is:</p>
- <blockquote>
- <pre>template <class Path>
- typename boost::enable_if<is_basic_path<Path>,bool>::type exists(const Path& p);
-inline bool exists(const path& p) { return exists<path>(p); }
-inline bool exists(const wpath& p) { return exists<wpath>(p); }</pre>
- </blockquote>
- <p> The <code>enable_if</code> will fail for a C string or <code>
- std::basic_string</code> argument, which will then be automatically converted
- to a <code>basic_path</code> object via the appropriate <code>basic_path</code> conversion
- constructor. <i>-- end note</i>]</p>
- <p><span style="background-color: #E0E0E0"><i>The two overloads are not given
- in the normative text because:</i></span></p>
- <ul>
- <li><span style="background-color: #E0E0E0"><i>Better techniques for
- achieving the desired affect may be developed, perhaps enabled by core
- language changes like Concepts.</i></span></li>
- <li><span style="background-color: #E0E0E0"><i>Implementations may prefer
- techniques that work with legacy compilers that do not support enable_if.</i></span></li>
- <li><span style="background-color: #E0E0E0"><i>Spelling out the overloads
- makes the text longer and harder to read without adding much benefit.</i></span></li>
- <li><span style="background-color: #E0E0E0"><i>More overloads will probably
- be needed for char16_t and char32_t (or whatever they end up being called),
- making it even less attractive to actually spell out each one. </i></span>
- </li>
- </ul>
-</blockquote>
-<p>Implementations of functions described in this clause are permitted to call the applications
-program interface (API) provided by the operating system. If such an operating
-system API call results in an error, implementations
-shall report the error by throwing exception <code>basic_filesystem_error</code>,
-unless otherwise specified.</p>
-<blockquote>
-<p>[<i>Note: </i>Such exceptions and the conditions that cause them to be thrown
-are not explicitly described in each <i>Throws</i> element within this clause.
-Because hardware failures, network failures, race conditions, and a plethora of
-other errors occur frequently in file system operations, users should be aware
-that <span style="background-color: #FFFFFF">unless otherwise specified</span> any file system operation, not matter how apparently innocuous, may throw
-an exception. <i>-- end note</i>]</p>
-</blockquote>
-<p><span style="background-color: #FFFFFF">Functions commonly used in contexts
-where errors are not exceptional have overloads taking an additional argument of
-type </span><code><span style="background-color: #FFFFFF">system_error_code&</span></code><span style="background-color: #FFFFFF">
-ec. Such overloaded functions shall not throw exceptions. If an error occurs,
-<code>ec</code> shall be set to the
-error code reported by the operating system, otherwise <code>ec</code> shall be set to 0. If
-an overload without an argument of type </span><code>
-<span style="background-color: #FFFFFF">system_error_code&</span></code><span style="background-color: #FFFFFF">
-ec returns void, the other overload (without an argument of type </span><code>
-<span style="background-color: #FFFFFF">system_error_code&</span></code><span style="background-color: #FFFFFF">
-ec) returns a <code>system_error_code</code> with the value of ec.</span></p>
-<h3><a name="Header-filesystem-synopsis">Header <code><filesystem></code> synopsis</a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template <class String, class Traits> class basic_path;
-
- template<class String, class Traits>
- void swap(basic_path<String, Traits> & lhs, basic_path<String, Traits> & rhs);
-
- template<class String, class Traits> bool operator<(<i>a</i> a, <i>b</i> b);
- template<class String, class Traits> bool operator==(<i>a</i> a, <i>b</i> b);
- template<class String, class Traits> bool operator!=(<i>a</i> a, <i>b</i> b);
- template<class String, class Traits> bool operator>(<i>a</i> a, <i>b</i> b);
- template<class String, class Traits> bool operator<=(<i>a</i> a, <i>b</i> b);
- template<class String, class Traits> bool operator>=(<i>a</i> a, <i>b</i> b);
- template<class String, class Traits> bool operator/(<i>a</i> a, <i>b</i> b);
-
- template<class Path>
- basic_ostream<typename Path::string_type::value_type, typename Path::string_type::traits_type> &
- operator<<(basic_ostream<typename Path::string_type::value_type, typename Path::string_type::traits_type>& os, const Path & ph);
-
- template<class Path>
- basic_istream<typename Path::string_type::value_type, typename Path::string_type::traits_type> &
- operator>>(basic_istream<typename Path::string_type::value_type, typename Path::string_type::traits_type>& is, Path & ph);
-
- struct path_traits;
- struct wpath_traits;
-
- typedef basic_path<std::string, path_traits> path;
- typedef basic_path<std::wstring, wpath_traits> wpath;
-
- template<class Path> struct is_basic_path;
-
- template<class Path> struct slash { static const char value = '/'; };
- template<class Path> struct dot { static const char value = '.'; };
-<span style="background-color: #FFFFFF"> template<class Path> struct colon { static const char value = ':'; };</span><span style="background-color: #FFFF00">
-</span>
- typedef int errno_type; // type is determined by the C standard
- typedef<i> implementation-defined </i>system_error_type; // usually int or unsigned
-
- <span style="background-color: #FFFFFF">class filesystem_error;</span><span style="background-color: #FFFF00">
-</span>
- template <class Path> class basic_filesystem_error;
-
- typedef basic_filesystem_error<path> filesystem<span style="background-color: #FFFFFF">_path</span>_error;
- typedef basic_filesystem_error<wpath> filesystem<span style="background-color: #FFFFFF">_wpath</span>_error;
-
- <span style="background-color: #FFFFFF">template <class Path> class basic_directory_entry;
-
- typedef basic_directory_entry<path> directory_entry;
- typedef basic_directory_entry<wpath> wdirectory_entry;
-</span>
- template <class Path> class basic_directory_iterator;
-
- typedef basic_directory_iterator<path> directory_iterator;
- typedef basic_directory_iterator<wpath> wdirectory_iterator;
-
- template <class Path> class basic_recursive_directory_iterator;
-
- typedef basic_recursive_directory_iterator<path> recursive_directory_iterator;
- typedef basic_recursive_directory_iterator<wpath> wrecursive_directory_iterator;
-
- enum file_type { status_unknown, file_not_found, regular_file, directory_file,
- symlink_file, block_file, character_file, fifo_file, socket_file,
- type_unknown
- };
-
- class file_status;
-
- <span style="background-color: #FFFFFF">struct space_info // returned by </span>space<span style="background-color: #FFFFFF"> function
- {
- uintmax_t capacity;
- uintmax_t free;
- uintmax_t available;
- };
-</span>
- // status functions
- template <class Path> file_status status(const Path& p);
- template <class Path> file_status status(const Path& p, system_error_code& ec);
- template <class Path> file_status symlink_status(const Path& p);
- template <class Path> file_status symlink_status(const Path& p, system_error_code& ec);
-
- // predicate functions
- bool status_known( file_status s );
- bool exists( file_status s );
- bool is_regular( file_status s );
- bool is_directory( file_status s );
- bool is_symlink( file_status s );
- bool is_other( file_status s );
-
- template <class Path> bool exists(const Path& p);
- template <class Path> bool is_directory(const Path& p);
- template <class Path> bool is_regular(const Path& p);
- template <class Path> bool is_other(const Path& p);
- template <class Path> bool is_symlink(const Path& p);
- template <class Path> bool is_empty(const Path& p);
-
- template <class Path1, class Path2>
- bool equivalent(const Path1& p1, const Path2& p2);
-
- // attribute functions
- template <class Path> Path current_path();
- template <class Path> const Path& initial_path();
- template <class Path> <span style="background-color: #FFFFFF; ">uintmax_t</span> file_size(const Path& p);
-<span style="background-color: #FFFFFF"> template <class Path> space_info space(const Path& p);</span><span style="background-color: #FFFF00">
-</span> template <class Path> std::time_t last_write_time(const Path& p);
- template <class Path>
- void last_write_time(const Path& p, const std::time_t new_time);
-
- // operations functions
- template <class Path> bool create_directory(const Path& dp);
- template <class Path1, class Path2>
- void create_hard_link(const Path1& old_fp, const Path2& new_fp);
-<span style="background-color: #FFFFFF"> template <class Path1, class Path2>
- system_error_type create_hard_link(const Path1& old_fp, const Path2& new_fp, system_error_code& ec);
- template <class Path1, class Path2>
- void create_symlink(const Path1& old_fp, const Path2& new_fp);
- template <class Path1, class Path2>
- system_error_type create_symlink(const Path1& old_fp, const Path2& new_fp, system_error_code& ec);
-</span> template <class Path> bool remove(const Path& p);
- template <class Path1, class Path2>
- void rename(const Path1& from_p, const Path2& to_p);
- template <class Path1, class Path2>
- void copy_file(const Path1& from_fp, const Path2& to_fp);
- template <class Path> Path system_complete(const Path& p);
- template <class Path> Path complete(const Path& p, const Path& base=initial_path<Path>());
- errno_type lookup_errno(system_error_type code);
- void system_message(system_error_type code, std::string & target);
- void system_message(system_error_type code, std::wstring & target);
-
- // convenience functions
- template <class Path> bool create_directories(const Path & p);
- template <class Path> typename Path::string_type extension(const Path & p);
- template <class Path> typename Path::string_type basename(const Path & p);
- template <class Path>
- Path replace_extension(const Path & p, const typename Path::string_type & new_extension);
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<h3><a name="Path-traits">Path traits</a></h3>
-<p>This subclause defines requirements on classes representing path behavior
-traits, and defines two classes that satisfy those requirements for paths based
-on <code>string</code> and <code>wstring</code>.. It also defines several path
-additional path traits structure templates, and defines several specializations
-of them.</p>
-<p>Class template <code>basic_path</code> defined in this clause requires additional
-types, values, and behavior to complete the definition of its semantics.</p>
-<p>For purposes of exposition, Traits behaves as if it is a class with private
-members bool m_locked, initialized false, and std::locale m_locale, initialized </p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="50%" align="center" colspan="2"><b><i>
- <a name="Path-Behavior-Traits-Requirements">Path Behavior Traits
- Requirements</a></i></b></td>
- </tr>
- <tr>
- <td width="38%" align="center"><b><i>Expression</i></b></td>
- <td width="62%" align="center"><b><i>Requirements</i></b></td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::external_string_type</code></td>
- <td width="62%">A typedef which is a specialization of <code>basic_string</code>.
- The <code>value_type</code> is a character type used by the operating system
- to represent pathnames.</td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::internal_string_type</code></td>
- <td width="62%">A typedef which is a specialization of <code>basic_string</code>.
- The <code>value_type</code> is a character type to be used by the program to
- represent pathnames. Required be the same type as the <code>basic_path
- String</code> template parameter. </td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::to_external( p, is )</code></td>
- <td width="62%"><code>is</code>, converted by the <code>m_locale</code>
- <code>codecvt</code> facet to <code>external_string_type</code>.</td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::to_internal( p, xs )</code></td>
- <td width="62%"><code>xs</code>, converted by the <code>m_locale</code>
- <code>codecvt</code> facet to to <code>internal_string_type</code>.</td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::imbue(loc)</code></td>
- <td width="62%"><i>Effects:</i> if <code>m_locked</code>, throw. Otherwise,
- <code>m_locked = true; m_locale = loc;<br>
- </code><i>Returns:</i> <code>void</code><b><br>
- </b><i>Throws:</i> <code>basic_filesystem_error</code></td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::imbue(loc, std::nothrow)</code></td>
- <td width="62%"><i>Effects:</i> <code>if (!m_locked) m_locale = loc; bool
- temp(m_locked); m_locked = true;<br>
- </code><i>Returns:</i> <code>temp</code></td>
- </tr>
-</table>
-<p>Type <code>is_basic_path</code> shall be a <i>UnaryTypeTrait</i> (TR1, 4.1).
-The primary template shall be derived directly or indirectly from <code>
-std::tr1::false_type</code>. Type <code>is_basic_path</code> shall be
-specialized for <code>path</code>, <code>wpath</code>, and any
-user-specialized <code>basic_path</code> types, and such specializations shall
-be derived directly or indirectly from <code>std::tr1::true_type</code>.</p>
-<p>Structure templates <code>slash</code>, <code>dot</code>, and <code>
-<span style="background-color: #FFFFFF">colon</span></code><span style="background-color: #FFFFFF">
-</span>are supplied with
-values of type <code>char</code>. If a user-specialized <code>basic_path</code>
-has a <code>
-value_type</code> type which is not convertible from <code>char</code>, the
-templates <code>slash</code> and <code>dot</code> shall be specialized to
-provide <code>value</code> with type which is convertible to <code>
-basic_path::value_type</code>.</p>
-<h3><a name="Class-template-basic_path">Class template <code>basic_path</code></a></h3>
-<p>Class template <code>basic_path</code> provides a portable mechanism for
-representing paths in C++ programs, using a portable generic
-pathname grammar. When portability is not a
-requirement, native file system specific formats can be used. Class template
-<code>basic_path</code> is concerned only with the lexical and syntactic aspects
-of a path. The path does not have to exist in the operating system's file
-system, and may contain names which are not even valid for the current operating
-system. </p>
-<blockquote>
- <p>[<i>Note: </i>If the library's functions trafficked only in C++<i> </i>or
- C-style strings, they would provide only the illusion of portability since
- while the syntax of function calls would be portable, the semantics of the
- strings they operate on would not be portable. <i>-- end note</i>]</p>
-</blockquote>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template <class String, class Traits> class basic_path
- {
- public:
- typedef basic_path<String, Traits> path_type;
- typedef String string_type;
- typedef typename String::value_type value_type;
- typedef Traits traits_type;
- typedef typename Traits::external_string_type external_string_type;
-
- // constructors/destructor
- basic_path();
- basic_path(const basic_path& p);
- basic_path(const string_type& s);
- basic_path(const value_type* s);
- template <class InputIterator>
- basic_path(InputIterator first, InputIterator last);
-
- ~basic_path();
-
- // assignments
- basic_path& operator=(const basic_path& p);
- basic_path& operator=(const string_type& s);
- basic_path& operator=(const value_type* s);
- template <class InputIterator>
- basic_path& assign(InputIterator first, InputIterator last);
-
- // modifiers
- basic_path& operator/=(const basic_path& rhs);
- basic_path& operator/=(const string_type& s);
- basic_path& operator/=(const value_type* s);
- template <class InputIterator>
- basic_path& append(InputIterator first, InputIterator last);
-
- <span style="background-color: #FFFFFF">void swap( basic_path & rhs );</span>
- basic_path& remove_leaf();
-
- // observers
- const string_type string() const;
- const string_type file_string() const;
- const string_type directory_string() const;
-
- const external_string_type external_file_string() const;
- const external_string_type external_directory_string() const;
-
- string_type root_name() const;
- string_type root_directory() const;
- basic_path root_path() const;
- basic_path relative_path() const;
- string_type leaf() const;
- basic_path branch_path() const;
-
- bool empty() const;
- bool is_complete() const;
- bool has_root_name() const;
- bool has_root_directory() const;
- bool has_root_path() const;
- bool has_relative_path() const;
- bool has_leaf() const;
- bool has_branch_path() const;
-
- // iterators
- class iterator;
- typedef iterator const_iterator;
-
- iterator begin() const;
- iterator end() const;
-
- };
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p>A <code>basic_path</code> object stores a possibly empty path.
-The internal form of the stored path is unspecified.</p>
-<p><a name="pathname-resolution">Functions</a> described in this clause which access files or their attributes do so by
-resolving a <code>basic_path</code> object into a particular file in a file
-hierarchy. The pathname, suitably converted to the string type, format, and
-encoding
-required by the operating system, is resolved as if by the <i>POSIX</i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a> mechanism. The encoding of the resulting pathname is determined by the <code>Traits::to_external</code> conversion function.</p>
-<blockquote>
-<p>[<i>Note:</i> There is no guarantee that the path stored in a <code>basic_path</code>
-object is valid for a particular operating system or file system. <i>-- end note</i>]</p>
-</blockquote>
-<p>Some functions in this clause return <code>basic_path</code> objects for
-paths composed partly or wholly of pathnames obtained from the operating system.
-Such pathnames are suitably converted from the actual format and string
-type supplied by the operating system. The encoding of the resulting path is determined by the <code>Traits::to_internal</code> conversion function.</p>
-<p>For member functions described as returning "<code>const string_type</code>" or
-"<code>const external_string_type</code>", implementations are permitted to return
-"<code>const string_type&</code>" or "<code>const external_string_type&</code>"
-respectively.</p>
-<blockquote>
-<p>[<i>Note:</i> This allows implementations to avoid unnecessary copies.
-Return-by-value is specified as
-<code>const</code> to ensure programs won't break if moved to a return-by-reference
-implementation. <i>--
-end note</i>]</p>
-</blockquote>
-<h4><a name="Pathname-formats">Pathname formats</a></h4>
-<p>There are two formats for string or sequence arguments that describe a
-path:</p>
-<ul>
- <li>The portable pathname format as described in <a href="#Pathname-grammar">
- Pathname grammar</a> and by the <i>POSIX</i> <i>Filename,
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_266">
-Pathname</a> </i>and<i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a></i> definitions.<blockquote>
-<p>[<i>Note:</i> <span style="background-color: #FFFFFF">The <i>POSIX</i> format
-is the basis for the portable format because it is already an ISO standard, is
-the basis for the ubiquitous <i>URL</i> format, and is the native format or a
-subset of the native format for <i>UNIX</i>-like and <i>Windows</i>-like
-operating systems familiar to large numbers of programmers. </span></p>
-<p>Use of the portable format does not alone guarantee
-portability; filenames must also be portable.<span style="background-color: #FFFFFF">
-See Filename conversions. Each operating system
-always follows its own rules. Use of the portable format
-does not change that. </span> <i>-- end note</i>]</p>
- </blockquote>
- </li>
- <li>A native pathname format
- as defined by the operating system.<blockquote>
- <p>[<i>Note:</i> If an operating system supports only the <i>POSIX</i>
- pathname format, the portable format and the native format are the same. </p>
- <p><span style="background-color: #FFFFFF">Identifying user-provided paths
- as native format is a common need, and ensures maximum portability, even
- though not strictly needed except on systems where the native format
- is not implicitly recognized.</span></p>
- <p><span style="background-color: #FFFFFF">Programs using hard-coding native
- formats are likely to be non-portable. --</span><i><span style="background-color: #FFFFFF"> end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
- </li>
-</ul>
-<p><span style="background-color: #FFFFFF">All <code>basic_path</code> string or sequence arguments that describe a
-path shall accept the portable pathname format, and shall accept the native
-format if explicitly identified by a native format escape sequence prefix of
-<code>slash slash colon</code>.</span></p>
-<blockquote>
- <p><span style="background-color: #FFFFFF">[<i>Note:</i> <code>slash
- slash colon</code> was chosen as the escape sequence because a leading <code>
- slash slash</code> is already implementation-defined by POSIX, <code>
- colon</code> is prohibited in a Windows filename, and on any system a single
- <code>slash</code> can be used when a filename beginning with a <code>colon</code>
- is desired. These factors eliminate the chance of collision with a real
- filename. --</span><i><span style="background-color: #FFFFFF"> end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
-<p><span style="background-color: #FFFFFF">Implementations are encouraged to
-implicitly recognize the native pathname format if it can be lexically
-identified. An implementation </span>shall document whether or
-not the native pathname format is <span style="background-color: #FFFFFF">
-implicitly recognized</span>.</p>
-<blockquote>
-<p>[<i>Example:</i></p>
-<p><i>-- OpenVMS:</i> <code>"SYS1::DISK1:[JANE.TYLER.HARRY]</code>" is treated
-as a native pathname with a system name, drive name, and three directory
-filenames, rather than a portable pathname with one filename.</p>
-<p><i>-- Windows: </i><code>"c:\\jane\\tyler\\harry"</code> is treated as a
-native pathname with a drive letter, root-directory, and three filenames, rather
-than a portable pathname with one filename.</p>
-<p><i>-- Counter-example 1:</i> An operating system that allows slashes in
-filenames and uses dot as a directory separator. Distinguishing between portable
-and native format argument strings or sequences is not possible as there is no
-other distinguishing syntax. The implementation does not accept native format
-pathnames unless the <code>native</code> argument is present.</p>
-<p><i>-- Counter-example 2:</i> An operating system that allows slashes in
-filenames and uses some unusual character as a directory separator. The
-implementation does accept native format pathnames without the additional <code>
-native</code> argument, which only has to be used for native format arguments
-containing slashes in filenames.</p>
-<p><i>-- end example</i>]</p>
-<p>[<i>Note:</i> This <i><a name="duck-rule">duck-rule</a></i> ("if it looks
-like a duck, walks like a duck, and quacks like a duck, it must be a duck")
-eliminates format confusion as a source of programmer error and support
-requests. <i>-- end note</i>]</p>
-</blockquote>
-<p>If both the portable and native formats are accepted, implementations shall
-document what characters or character sequences are used to distinguish between
-portable and native formats.</p>
-<blockquote>
-<p>[<i>Note:</i> <i>Windows</i> implementations are encouraged to define colons
-and backslashes as the characters which distinguish native from portable
-formats. <i>--end note</i>]</p>
-</blockquote>
-<h4><a name="Pathname-grammar">Pathname grammar</a></h4>
-<p>The grammar for the portable pathname format is as follows:</p>
-<blockquote>
-<p><i>pathname:<br>
- root-name<sub>opt</sub>
-root-directory<sub>opt</sub> relative-path<sub>opt</sub></i></p>
-<p><i>root-name:<br>
-
-implementation-defined</i></p>
-<p><i>root-directory:<br>
- slash<br>
-
-root-directory slash<br>
-
-implementation-defined</i></p>
-<p><i>relative-path:<br>
-
-filename<br>
- relative-path
-slash<br>
- relative-path
-slash filename</i></p>
-<p><i>filename:<br>
- name<br>
- dot<br>
- dot dot</i></p>
-<p><i>slash:<br>
- <code>
-slash<Path>::value</code></i></p>
-<p><i>dot:<br>
- <code>
-dot<Path>::value</code></i></p>
-</blockquote>
-<p>The grammar is aligned with the <i>POSIX </i> <i>Filename,
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_266">
-Pathname</a> </i>and<i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a></i> definitions. Any conflict between the grammar and <i>
-POSIX</i> is unintentional. This technical report defers to <i>POSIX</i>.</p>
-<blockquote>
-<p><span style="background-color: #E0E0E0"><i>The form of the above wording was taken
-from POSIX, which uses it in several places to defer to the C standard.</i></span></p>
-<p>[<i>Note: Windows</i> implementations are encouraged to define <i>slash slash
-name</i> as a permissible <i>root-name</i>. <i>POSIX</i> permits, but does not
-require, implementations to do the same. <i>Windows</i> implementations are
-encouraged to define an additional <i>root-directory</i> element <i>
-root_directory name.</i> It is applicable only to the <i>slash slash name</i>
-form of <i>root-name.</i></p>
-<p> <i>Windows</i> implementations are encouraged to recognize a <i>name</i>
-followed by a colon as a native format <i>root-name</i>,
-and a backslash as a format element equivalent to <i>slash</i>. <i>-- end note</i>]</p>
-</blockquote>
-<h4><a name="Filename-conversion">Filename conversion</a></h4>
-<p>When converting filenames to the native operating system format,
-implementations are encouraged, but not required, to convert otherwise invalid
-characters or character sequences to valid characters or character sequences.
-Such conversions are implementation-defined.</p>
-<blockquote>
-<p>[<i>Note:</i> Filename conversion allows much wider portability of both
-programs and filenames that would otherwise be possible.</p>
-<p>Implementations are encouraged to base conversion on existing standards or
-practice. Examples include the Uniform Resource Locator escape syntax of a percent sign (<code>'%'</code>)
-followed by two hex digits representing the character value. On
-<i>OpenVMS</i>, which does not allow percent signs in filenames, a dollar sign (<code>'$'</code>)
-followed by two hex digits is the existing practice, as is converting lowercase
-letters to uppercase.<i> -- end note.</i>]</p>
-<p><span style="background-color: #E0E0E0"><i>The Boost implementation for
-Windows currently does not map invalid characters. Pending feedback from the LWG,
-Boost may settle on % hex hex as the preferred escape sequence. If so, should
-there be normative encouragement?</i></span></p>
-</blockquote>
-<h4><a name="basic_path-requirements">Requirements</a></h4>
-<p>The argument for the template parameter named <code>String</code> shall be a
-class that includes members with the same names, types, values, and semantics as
-class template <code>basic_string</code>.</p>
-<p>The argument for the template parameter named <code>Traits</code> shall be a
-class that satisfies the requirements specified in the
-Path Behavior Traits Requirements
-table.</p>
-<p>The argument for template parameters named <code>InputIterator</code> shall satisfy the
-requirements of an input iterator (C++ Std, 24.1.1, Input iterators [lib.input.iterators]) and shall have a value type convertible to
-<code>basic_path::value_type</code>. </p>
-<p>Some function templates with a template
-parameter named <code>InputIterator</code> also have non-template overloads. Implementations shall
-only select the function template overload if the type named by <code>InputIterator</code>
-is not <code>path_format_t</code>.</p>
-<blockquote>
-<p>[<i>Note:</i> This "do-the-right-thing" rule ensures that the
-overload expected by the user is selected. The implementation technique is unspecified -
-implementations may use
-enable_if or
-other techniques to achieve the effect. <i>-- end note</i>]</p>
-</blockquote>
-<h4> <a name="basic_path-constructors"> <code>basic_path</code> constructors</a></h4>
-<pre>basic_path();</pre>
-<blockquote>
- <p><i>Postconditions:</i> <code>empty()</code>.</p>
- </blockquote>
-<pre>basic_path(const string_type& s);
-basic_path(const value_type * s);
-template <class InputIterator>
- basic_path(InputIterator s, InputIterator last);</pre>
-<blockquote>
- <p><i>Remarks:</i> The format of string <code>s</code> and sequence [<code>first</code>,<code>last</code>)
- is described in Pathname formats.</p>
- <p><i>Effects:</i> The path elements in string <code>s</code> or sequence [<code>first</code>,<code>last</code>)
- are stored.</p>
-</blockquote>
-<h4> <a name="basic_path-assignments"> <code>basic_path</code> assignments</a></h4>
-<pre>basic_path& operator=(const string_type& s);
-basic_path& operator=(const value_type* s);
-template <class InputIterator>
- basic_path& assign(InputIterator first, InputIterator last);</pre>
-<blockquote>
- <p><i>Remarks:</i> The format of string <code>s</code> and sequence [<code>first</code>,<code>last</code>)
- is described in Pathname formats.</p>
- <p><i>Effects:</i> The path elements in string <code>s</code> or sequence [<code>first</code>,<code>last</code>)
- are stored.</p>
- <p><i>Returns: </i><code>*this</code></p>
- </blockquote>
-<h4> <a name="basic_path-modifiers"> <code>basic_path</code> modifiers</a></h4>
-<pre>basic_path& operator/=(const basic_path& rhs);</pre>
-<blockquote>
- <p><i>Effects:</i> The path stored in <code>rhs</code> is appended to the
- stored path.</p>
- <p><i>Returns:</i> <code>*this</code></p>
-</blockquote>
-<pre>basic_path& operator/=(const string_type& s);
-basic_path& operator/=(const value_type* s);
-template <class InputIterator>
-basic_path& append(InputIterator first, InputIterator last);</pre>
-<blockquote>
- <p><i>Remarks:</i> The format of string <code>s</code> and sequence [<code>first</code>,<code>last</code>)
- is described in Pathname formats.</p>
-<p><i>Effects:</i> The path elements in string <code>s</code> or sequence [<code>first</code>,<code>last</code>)
- are appended to the stored path.</p>
- <p><i>Returns: </i><code>*this</code></p>
- </blockquote>
-<pre><code><span style="background-color: #FFFFFF">void swap( basic_path & rhs );</span></code></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">
- Swaps the contents of the two paths.</span></p>
- <p><i><span style="background-color: #FFFFFF">Throws: </span></i>
- <span style="background-color: #FFFFFF">nothing.</span></p>
- <p><i><span style="background-color: #FFFFFF">Postcondition:</span></i><span style="background-color: #FFFFFF">
- </span><code><span style="background-color: #FFFFFF">this->string()</span></code><span style="background-color: #FFFFFF">
- contains the same sequence of characters that were in </span><code>
- <span style="background-color: #FFFFFF">rhs</span></code><span style="background-color: #FFFFFF">,
- </span><code><span style="background-color: #FFFFFF">rhs</span></code><span style="background-color: #FFFFFF">
- contains the same sequence of characters that were is </span><code>
- <span style="background-color: #FFFFFF">this->string()</span></code><span style="background-color: #FFFFFF">.</span></p>
- <p><i><span style="background-color: #FFFFFF">Complexity: </span></i>
- <span style="background-color: #FFFFFF">constant time.</span></p>
-</blockquote>
-<pre>basic_path& remove_leaf();</pre>
-<blockquote>
- <p><i>Effects:</i> If <code>has_branch_path()</code> then remove the last <i>filename</i> from the stored path. If that leaves
- the stored path with one or more trailing <i>slash</i> elements not
- representing <i>root-directory</i>, remove them.</p>
- <p><i>Returns:</i> <code>*this</code></p>
- <p>[<i>Note:</i> This function is needed to efficiently implement <code>
- basic_directory_iterator</code>. It is made public to allow additional uses. <i>-- end
- note</i>]</p>
-</blockquote>
-<h4> <a name="basic_path-observers"> <code>basic_path</code> observers</a></h4>
-<blockquote>
-<p><span style="background-color: #E0E0E0"><i>See the
-Path decomposition table for examples
-for values returned by decomposition functions.</i></span></p>
-</blockquote>
-<pre>const string_type string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-Pathname grammar rules.</p>
-</blockquote>
-<pre>const string_type file_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for regular file pathnames, with any
-Filename conversion applied.</p>
-<p>[<i>Note:</i> For some operating systems, including <i>POSIX</i> and <i>
-Windows</i>, the native format for regular file pathnames and directory
-pathnames is the same, so <code>file_string()</code> and <code>directory_string()</code>
-return the same string. On OpenMVS, however, the expression <code>path("/cats/jane").file_string()</code>
-would return the string <code>"[CATS]JANE"</code> while <code>path("/cats/jane").directory_string()</code>
-would return the string <code>"[CATS.JANE]"</code>. <i>-- end note</i>]</p>
-</blockquote>
-<pre>const string_type directory_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for directory pathnames, with any
-Filename conversion applied.</p>
-</blockquote>
-<pre>const external_string_type external_file_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for regular file pathnames, with any
-Filename conversion applied, and encoded by the <code>Traits::to_external</code>
-conversion function.</p>
-</blockquote>
-<pre>const external_string_type external_directory_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for directory pathnames, with any
-Filename conversion applied, and encoded by the <code>Traits::to_external</code>
-conversion function.</p>
-</blockquote>
-<pre>string_type root_name() const;</pre>
-<blockquote>
-<p><i>Returns:</i> <i>root-name,</i> if the stored path includes <i>
-root-name</i>, otherwise <code>string_type()</code>. </p>
-</blockquote>
-<pre>string_type root_directory() const;</pre>
-<blockquote>
-<p><i>Returns:</i> <i>root-directory</i>, if the stored path includes <i>
-root-directory</i>, otherwise <code>string_type()</code>.</p>
-<p>If <i>root-directory</i> is composed <i>slash name</i>, <i>slash</i> is
-excluded from the returned string.</p>
-</blockquote>
-<pre>basic_path root_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>root_name() / root_directory()</code></p>
-</blockquote>
-<pre>basic_path relative_path() const;</pre>
-<blockquote>
-<p><i>Returns:</i> A <code>basic_path</code> composed from the the stored path, if any, beginning
-with the first <i>filename</i> after <i>root-path</i>.
-Otherwise, an empty <code>basic_path</code>.</p>
-</blockquote>
-<pre>string_type leaf() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>empty() ? string_type() : *--end()</code></p>
-</blockquote>
-<pre>basic_path branch_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>(string().empty() || begin() == --end()) ? path_type("") :
- <i>br</i></code>, where <code><i>br</i></code> is constructed as if by
- starting with an empty <code>basic_path</code> and successively applying <code>
- operator/=</code> for each element in the range <code>begin()</code>, <code>
- --end()</code>.</p>
-</blockquote>
-<pre>bool empty() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>string().empty()</code>.</p>
-</blockquote>
-<pre>bool is_complete() const;</pre>
-<blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>true</code>,
- if the elements of root_path() uniquely identify a directory, else <code>false</code>.</span></p>
-</blockquote>
-<pre>bool has_root_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!root_path().empty()</code></p>
-</blockquote>
-<pre>bool has_root_name() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!root_name().empty()</code></p>
-</blockquote>
-<pre>bool has_root_directory() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!root_directory().empty()</code></p>
-</blockquote>
-<pre>bool has_relative_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!relative_path().empty()</code></p>
-</blockquote>
-<pre>bool has_leaf() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!leaf().empty()</code></p>
-</blockquote>
-<pre>bool has_branch_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!branch_path().empty()</code></p>
-</blockquote>
-<h4> <a name="basic_path-iterators"> <code>basic_path</code> iterators</a></h4>
-<p> A <code>basic_path::iterator</code> is a constant iterator satisfying all
-the requirements of a bidirectional iterator (C++ Std, 24.1.4 Bidirectional
-iterators [lib.bidirectional.iterators]). Its <code>value_type</code> is
-<code>string_type</code>.</p>
- <p>Calling any non-const member function of a <code>basic_path</code> object
- invalidates all iterators referring to elements of the object.</p>
-<p> The forward traversal order is as follows:</p>
-<ul>
- <li>The <i>root-name</i> element, if present.</li>
- <li>The <i>root-directory</i> element, if present.</li>
- <li>Each successive <i>filename</i> element, if present.</li>
- <li><i>Dot</i>, if one or more trailing non-root <i>slash</i>
- characters are present.</li>
-</ul>
- <p>The backward traversal order is the reverse of forward traversal.</p>
- <pre>iterator begin() const;</pre>
-<blockquote>
- <p><i>Returns:</i> An iterator for the first present element in the traversal
- list above. If no elements are present, the end iterator.</p>
-</blockquote>
-<pre>iterator end() const;</pre>
-<blockquote>
- <p><i>Returns:</i> The end iterator.</p>
-</blockquote>
-<h4> <a name="basic_path-non-member-functions">
-<span style="background-color: #FFFFFF">basic_path non-member functions</span></a></h4>
-<pre><span style="background-color: #FFFFFF">template<class String, class Traits>
-void swap( basic_path<String, Traits> & lhs, basic_path<String, Traits> & rhs )</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects: </span></i><code>
- <span style="background-color: #FFFFFF">lhs.swap(
- rhs )</span></code></p>
-</blockquote>
- <h4><span style="background-color: #FFFFFF">basic_path non-member operators</span></h4>
- <p><span style="background-color: #FFFFFF">There are seven basic_path non-member operators (/,
- </span> <code><span style="background-color: #FFFFFF">==</span></code><span style="background-color: #FFFFFF">,
- </span> <code>
- <span style="background-color: #FFFFFF">!=</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF"><</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">></span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF"><=</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">>=</span></code><span style="background-color: #FFFFFF">),
- each with five overloads. For brevity, the specifications are given in tabular
- form. Each of the resulting thirty-five signatures is a template, with
- template parameter list template</span><code><span style="background-color: #FFFFFF"><class
- String, class Traits></span></code><span style="background-color: #FFFFFF">.
- The format of such arguments is described in </span> <a href="#Pathname-formats">
- <span style="background-color: #FFFFFF">Pathname formats</span></a><span style="background-color: #FFFFFF">.</span></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="100%">
- <p align="center"><i><b><span style="background-color: #FFFFFF">Argument type overloads</span></b></i></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>
- basic_path<String, Traits>& a, basic_path<String, Traits>&
- b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- typename basic_path<String, Traits>::string_type& a,
- basic_path<String, Traits>& b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- typename basic_path<String, Traits>::string_type::value_type* a,
- basic_path<String, Traits>& b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- basic_path<String, Traits>& a, typename basic_path<String, Traits>::string_type&
- b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- basic_path<String, Traits>& a, typename
- basic_path<String, Traits>::string_type::value_type* b</code></span></td>
- </tr>
- </table>
- <p><span style="background-color: #FFFFFF">In the </span><b><i>
- <span style="background-color: #FFFFFF">basic_path non-member operators </span>
- </i></b><span style="background-color: #FFFFFF">table, </span><code>
- <span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF">
- and </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- are of the types given in the </span><i><b>
- <span style="background-color: #FFFFFF">Argument type overloads</span></b></i><span style="background-color: #FFFFFF">
- table. If </span><code><span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF">
- or </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- is of type </span><code><span style="background-color: #FFFFFF">const
- basic_path<String, Traits>&</span></code><span style="background-color: #FFFFFF">,
- then </span><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i></code><span style="background-color: #FFFFFF">
- or </span><i><b><span style="background-color: #FFFFFF">b'</span></b></i><span style="background-color: #FFFFFF">
- respectively is </span><code><span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF">
- or </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- respectively. Otherwise </span><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i></code><span style="background-color: #FFFFFF">
- or </span><i><b><span style="background-color: #FFFFFF">b'</span></b></i><span style="background-color: #FFFFFF">
- respectively represent named or unnamed temporary </span><code>
- <span style="background-color: #FFFFFF">basic_path<String, Traits></span></code><span style="background-color: #FFFFFF">
- objects constructed from </span><code><span style="background-color: #FFFFFF">
- a</span></code><span style="background-color: #FFFFFF"> or </span><code>
- <span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- respectively.</span></p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" height="280">
- <tr>
- <td width="100%" colspan="3" align="center" height="19"><b><i>
- <span style="background-color: #FFFFFF">basic_path non-member operators</span></i></b></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19"><i><b>
- <span style="background-color: #FFFFFF">Expression</span></b></i></td>
- <td width="25%" align="center" height="19"><i><b>
- <span style="background-color: #FFFFFF">Return type</span></b></i></td>
- <td width="55%" align="center" height="19"><i><b>
- <span style="background-color: #FFFFFF">Semantics</span></b></i></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="30" valign="top"><code>
- <span style="background-color: #FFFFFF">a / b</span></code></td>
- <td width="25%" align="center" height="30" valign="top"><code>
- <span style="background-color: #FFFFFF">basic_path<String, Traits></span></code></td>
- <td width="55%" height="30"><code><span style="background-color: #FFFFFF">
- basic_path<String, Traits> tmp(a);<br>
- return a /= </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">;</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a < b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return lexicographical_compare(</span></code><span style="background-color: #FFFFFF"><i><b>a</b></i></span><code><span style="background-color: #FFFFFF"><i><b>'</b></i>.begin(), </span></code><i><b>
- <span style="background-color: #FFFFFF">a</span></b></i><code><span style="background-color: #FFFFFF"><i><b>'</b></i>.end(), </span></code><i><b>
- <span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">.begin(), </span></code><i><b>
- <span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">.end());</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a == b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">
- < </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">)
- && !(</span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">
- < </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a != b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">
- == </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a > b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">
- < </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">;</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a <= b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">
- < </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a >= b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">
- < </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
-</table>
- <blockquote>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- </span> <a name="Path-equality"><span style="background-color: #FFFFFF">Path equality</span></a><span style="background-color: #FFFFFF"> and path
- equivalence have different semantics.</span></p>
- <p><span style="background-color: #FFFFFF">Equality is determined by </span> <i>
- <span style="background-color: #FFFFFF">basic_path</span></i><span style="background-color: #FFFFFF">'s
- non-member </span> <code><a href="#operator-eq">
- <span style="background-color: #FFFFFF">operator==</span></a></code><span style="background-color: #FFFFFF">, which considers the two path's lexical representations
- only. Paths "abc" and "ABC" are never equal.</span></p>
- <p><span style="background-color: #FFFFFF">Equivalence is determined by the
- </span> equivalent()<span style="background-color: #FFFFFF">
- non-member function, which determines if two paths </span>
- resolve<span style="background-color: #FFFFFF"> to the same file system entity.
- Paths "abc"
- and "ABC" may or may not resolve to the same file, depending on the file
- system.</span></p>
- <p><span style="background-color: #FFFFFF">Programmers wishing to determine if two paths are "the same" must decide if
- "the same" means "the same representation" or "resolve to the same actual
- file", and choose the appropriate function accordingly. </span> <i>
- <span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
-</blockquote>
- <h4><a name="basic_path-inserter-extractor"> <code>
- <span style="background-color: #FFFFFF">basic_path</span></code><span style="background-color: #FFFFFF"> inserter
- and extractor</span></a></h4>
-<pre><span style="background-color: #FFFFFF">template<class Path>
- basic_istream<typename Path::string_type::value_type, typename Path::string_type::traits_type>&
- operator>>(basic_istream< typename Path::string_type::value_type, typename Path::string_type::traits_type>& is,
- Path& ph );</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects: </span></i>
- <code><span style="background-color: #FFFFFF">typename Path::string_type str;<br>
-
- is >> str;<br>
-
- ph = str;</span></code></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">is</span></code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">template<class Path>
- basic_ostream<typename Path::string_type::value_type, typename Path::string_type::traits_type>&
- operator<<(basic_ostream< typename Path::string_type::value_type, typename Path::string_type::traits_type>& os,
- const Path& ph );</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">os << ph.string()</span></code></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">os</span></code></p>
-</blockquote>
-<h3><u><a name="Class-filesystem_error"><span style="background-color: #FFFFFF">
-Class </span><code><span style="background-color: #FFFFFF">filesystem_error</span></code></a></u></h3>
-<pre><span style="background-color: #FFFFFF">namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- class filesystem_error : public std::runtime_error
- {
- public:
- explicit filesystem_error(const std::string & what_arg, system_error_type ec=0);
- system_error_type system_error() const;
- };
- } // namespace sys
- } // namespace tr2
-} // namespace std</span></pre>
-<p><span style="background-color: #FFFFFF">The class <code>filesystem_error</code> defines the
-base type of
-objects thrown as exceptions to report file system errors from functions described in this
-clause.</span></p>
-<blockquote>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- A non-template base class allows users who are uninterested in path specifics
- to catch a single exception type. </span> <i>
- <span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">explicit filesystem_error(const std::string & what_arg, system_error_type ec=0);</span></pre>
-<blockquote>
- <p><span style="background-color: #FFFFFF"><i>Postcondition:</i> <code>
- strcmp(what(), <i>what_arg</i>.c_str()) == 0 && system_error() == <i>ec</i></code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">system_error_type system_error() const;</span></pre>
-<blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns: <code>ec</code></i></span></p>
-</blockquote>
-<h3><a name="Class-template-basic_filesystem_error">Class template <code>basic_filesystem_error</code></a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template <class Path> class basic_filesystem_error : public <u><span style="background-color: #FFFFFF">filesystem</span>_error</u>
- {
- public:
- typedef Path path_type;
-
- explicit basic_filesystem_error(const std::string& <u><span style="background-color: #FFFFFF">what_arg</span></u>, system_error_type ec=0);
- basic_filesystem_error(const std::string& <u><span style="background-color: #FFFFFF">what_arg</span></u>, const path_type& p1, system_error_type ec);
- basic_filesystem_error(const std::string& <u><span style="background-color: #FFFFFF">what_arg</span></u>, const path_type& p1, const path_type& p2, system_error_type ec);
-
- const path_type& path1() const;
- const path_type& path2() const;
- };
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p>The class template <code>basic_filesystem_error</code> defines the type of
-objects thrown as exceptions to report file system errors from functions described in this
-clause.</p>
-<h4> <a name="basic_filesystem_error-constructors"> <code>basic_filesystem_error</code> constructors</a></h4>
-<pre>explicit basic_filesystem_error(const std::string& <u><span style="background-color: #FFFFFF">what_arg</span></u>, system_error_type ec=0);</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="41%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%" bgcolor="#FFFFFF"><code>
- <span style="background-color: #FFFFFF">what</span>()</code></td>
- <td width="82%" bgcolor="#FFFFFF"><span style="background-color: #FFFFFF">
- <code><i>what_arg</i>.c_str()</code></span></td>
- </tr>
- <tr>
- <td width="18%"><code>system_error()</code></td>
- <td width="82%"><code>ec</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path1().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path2().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>basic_filesystem_error(const std::string& <span style="background-color: #FFFFFF">what_arg</span>, const path_type& p1, system_error_type ec);</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="41%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code><span style="background-color: #FFFFFF">what</span>()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">
- <code><i>what_arg</i>.c_str()</code></span></td>
- </tr>
- <tr>
- <td width="18%"><code>system_error()</code></td>
- <td width="82%"><code>ec</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path1()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">Reference to stored copy of
- </span> <code>p1</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path2().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>basic_filesystem_error(const std::string& <span style="background-color: #FFFFFF">what_arg</span>, const path_type& p1, const path_type& p2, system_error_type ec);</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="41%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code><span style="background-color: #FFFFFF">what</span>()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">
- <u>
- <code><i>w</i></code></u><code><i>hat_arg</i>.c_str()</code></span></td>
- </tr>
- <tr>
- <td width="18%"><code>system_error()</code></td>
- <td width="82%"><code>ec</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path1()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">Reference to stored copy of
- </span> <code>p1</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path2()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">Reference to stored copy of
- </span> <code>p2</code></td>
- </tr>
- </table>
-</blockquote>
-<h4> <a name="basic_filesystem_error-observers"> <code>basic_filesystem_error</code> observers</a></h4>
-<pre>const path_type& path1() const;</pre>
-<blockquote>
- <p><i>Returns:</i> Reference to copy of <code>p1</code> stored by the
- constructor, or, if none, an empty path.</p>
-</blockquote>
-<pre>const path_type& path2() const;</pre>
-<blockquote>
- <p><i>Returns:</i> Reference to copy of <code>p2</code> stored by the
- constructor, or, if none, an empty path.</p>
-</blockquote>
-<h3><a name="Class-template-basic_directory_entry">Class template <code>basic_directory_entry</code></a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template <class Path> class basic_directory_entry
- {
- public:
- typedef Path path_type;
- typedef typename Path::string_type string_type;
-
- // constructors
- basic_directory_entry();
- explicit basic_directory_entry(const path_type& p,
- <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());
-
- // modifiers
- void assign(const path_type& p, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());
- void replace_leaf(const string_type& s, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());
-
- // observers
- const Path& path() const;
- operator const Path&() const;
-<span style="background-color: #FFFFFF">
- file_status status() const;
- file_status status(system_error_code& ec) const;
- file_status symlink_status() const;
- file_status symlink_status(system_error_code& ec) const;
-</span><span style="background-color: #FFFF00">
-</span> // comparisons
- bool operator<(const basic_directory_entry<Path>& rhs);
- bool operator==(const basic_directory_entry<Path>& rhs);
- bool operator!=(const basic_directory_entry<Path>& rhs);
- bool operator>(const basic_directory_entry<Path>& rhs);
- bool operator<=(const basic_directory_entry<Path>& rhs);
- bool operator>=(const basic_directory_entry<Path>& rhs);
-
- private:
- path_type m_path; // for exposition only
- mutable <span style="background-color: #FFFFFF">file_status</span> m_status; // for exposition only; stat()-like
- mutable <span style="background-color: #FFFFFF">file_status</span> m_symlink_status; // for exposition only; lstat()-like
- };
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p>A <code>basic_directory_entry</code> object stores a <code>basic_path object</code>,
-a <code>file_status</code> object for non-symbolic link status, and a <code>
-file_status</code> object for symbolic link status. The <code>file_status</code>
-objects act as value caches.</p>
-<blockquote>
-<p>[<i>Note:</i> Because <code>status()</code>on a pathname may be a very expensive operation,
-some operating systems provide status information as a byproduct of directory
-iteration. Caching such status information can result is significant time savings. Cached and
-non-cached results may differ in the presence of race conditions. <i>-- end note</i>]</p>
-<p><span style="background-color: #E0E0E0"><i>Actual cold-boot timing of iteration over
-a directory with 15,047 entries was six seconds for non-cached status queries
-versus one second for cached status queries. Windows XP, 3.0 GHz processor, with
-a moderately fast hard-drive. Similar speedup expected on Linux and BSD-derived
-Unix variants that provide status during directory iteration.</i></span></p>
-</blockquote>
-<h4> <a name="basic_directory_entry-constructors"> <code>basic_directory_entry </code>constructors</a></h4>
-<pre>basic_directory_entry();</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>file_status()</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>file_status()</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>explicit basic_directory_entry(const path_type& p, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path()</code></td>
- <td width="82%"><code>p</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>st</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>symlink_st</code></td>
- </tr>
- </table>
-</blockquote>
-<h4> <a name="basic_directory_entry-modifiers"> <code>basic_directory_entry </code>modifiers</a></h4>
-<pre>void assign(const path_type& p, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path()</code></td>
- <td width="82%"><code>p</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>st</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>symlink_st</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>void replace_leaf(const string_type& s, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="43%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path()</code></td>
- <td width="82%"><code>path().branch() / s</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>st</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>symlink_st</code></td>
- </tr>
- </table>
-</blockquote>
-<h4> <a name="basic_directory_entry-observers"> <code>basic_directory_entry</code> observers</a></h4>
-<pre>const Path& path() const;
-operator const Path&() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>m_path</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status status() const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_status ) )
-{
- if ( status_known(m_symlink_status) && !is_symlink(m_symlink_status) )
- { m_status = m_symlink_status; }
- else { m_status = status(m_path); }
-}</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Throws:</i> See <code>status</code>
- function.</span></p>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>m_status</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status status(system_error_code& ec) const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_status ) )
-{
- if ( status_known(m_symlink_status) && !is_symlink(m_symlink_status) )
- { m_status = m_symlink_status; }
- else { m_status = status(m_path, ec); }
-}
-else ec = 0;</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>m_status</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status symlink_status() const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_symlink_status ) )
-{
- m_symlink_status = symlink_status(m_path);
-}</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Throws:</i> See <code>symlink_status</code>
- function.</span></p>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>
- m_symlink_status</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status symlink_status(system_error_code& ec) const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_symlink_status ) )
-{
- m_symlink_status = symlink_status(m_path, ec);
-}
-else ec = 0;</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>m_symlink_status</code></span></p>
-</blockquote>
-<h3><a name="Class-template-basic_directory_iterator">Class template <code>basic_directory_iterator</code></a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template <class Path>
- class basic_directory_iterator :
- public iterator<input_iterator_tag, basic_directory_entry<Path> >
- {
- public:
- typedef Path path_type;
-
- // constructors
- basic_directory_iterator();
- explicit basic_directory_iterator(const Path& dp);
- basic_directory_iterator(const Path& dp, system_error_type& ec);
- basic_directory_iterator(const basic_directory_iterator& bdi);
- basic_directory_iterator& operator=(const basic_directory_iterator& bdi);
- ~basic_directory_iterator();
-
- // other members as required by
- // C++ Std, 24.1.1 Input iterators [lib.input.iterators]
- };
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p> <code>basic_directory_iterator</code> satisfies the requirements of an
-input iterator (C++ Std, 24.1.1, Input iterators [lib.input.iterators]).</p>
-<p>A <code>basic_directory_iterator</code> reads successive elements from the directory for
-which it was constructed, as if by calling <i>POSIX</i>
-<code>
-readdir_r()</code>. After a <code>basic_directory_iterator</code> is constructed, and every time
-<code>operator++</code> is called,
-it reads and stores a value of <code>basic_directory_entry<Path></code>
-and possibly stores associated status values.
-<code>operator++</code> is not equality preserving; that is, <code>i == j</code> does not imply that
-<code>++i == ++j</code>. </p>
-<blockquote>
-<p>[<i>Note:</i> The practical consequence of not preserving equality is that directory iterators
-can be used only for single-pass algorithms. <i>--end note</i>]</p>
-</blockquote>
-<p>If the end of the directory elements is reached, the iterator becomes equal to
-the end iterator value. The constructor <code>basic_directory_iterator()</code>
-with no arguments always constructs an end iterator object, which is the only
-legitimate iterator to be used for the end condition. The result of <code>
-operator*</code> on an end iterator is not defined. For any other iterator value
-a <code>const basic_directory_entry<Path>&</code> is returned. The result of
-<code>operator-></code> on an end iterator is not defined. For any other
-iterator value a <code>const basic_directory_entry<Path>*</code> is
-returned. </p>
-<p>Two end iterators are always equal. An end iterator is not equal to a non-end
-iterator.</p>
-<blockquote>
-<p><i><span style="background-color: #E0E0E0">The above wording is based on the
-Standard Library's istream_iterator wording. Commentary was shortened and
-moved into a note.</span></i></p>
-</blockquote>
-<p>The result of calling the <code>path()</code> member of the <code>
-basic_directory_entry</code> object obtained by dereferencing a <code>
-basic_directory_iterator</code> is a reference to a <code>basic_path</code>
-object composed of the directory argument from which the iterator was
-constructed with filename of the directory entry appended as if by <code>
-operator/=</code>. </p>
-<blockquote>
-<p>[<i><a name="Example-program">Example</a>: </i>This program accepts an
-optional command line argument, and if that argument is a directory pathname,
-iterates over the contents of the directory. For each directory entry, the name
-is output, and if the entry is for a regular file, the size of the file is
-output.</p>
- <blockquote>
- <pre>#include <iostream>
-#include <filesystem>
-
-using std::tr2::sys;
-using std::cout;
-
-int main(int argc, char* argv[])
-{
- std::string p(argc <= 1 ? "." : argv[1]);
-
- if (is_directory(p))
- {
- for (directory_iterator itr(p); itr!=directory_iterator(); ++itr)
- {
- cout << itr->path().leaf() << ' '; // display filename only
- if (is_regular(itr->status())) cout << " [" << file_size(itr->path()) << ']';
- cout << '\n';
- }
- }
- else cout << (exists(p) : "Found: " : "Not found: ") << p << '\n';
-
- return 0;
-}</pre>
- </blockquote>
- <p><i>-- end example</i>]</p>
-</blockquote>
-<p>Directory iteration shall not yield directory entries for the current (<i>dot</i>)
-and parent (<i>dot dot</i>) directories.</p>
-<p>The order of directory entries obtained by dereferencing successive
-increments of a <code>basic_directory_iterator</code> is unspecified.</p>
-<blockquote>
-<p>[<i>Note:</i> Programs performing directory iteration may wish to test if the
-path obtained by dereferencing a directory iterator actually exists. It could be
-a
-symbolic link to a non-existent file. Programs recursively
-walking directory trees for purposes of removing and renaming entries may wish
-to avoid following symbolic links.</p>
-<p>If a file is removed from or added to a directory after the
-construction of a <code>basic_directory_iterator</code> for the directory, it is
-unspecified whether or not subsequent incrementing of the iterator will ever
-result in an iterator whose value is the removed or added directory entry. See
-<i>POSIX</i>
-<code>
-readdir_r()</code>. <i>
---end note</i>]</p>
-</blockquote>
-<h4><a name="basic_directory_iterator-constructors"><code>basic_directory_iterator</code> constructors</a></h4>
-
-<p><code>basic_directory_iterator();</code></p>
-
-<blockquote>
-
-<p><i>Effects:</i> Constructs the end iterator.</p>
-
-</blockquote>
-
-<p><code>explicit basic_directory_iterator(const Path& dp);</code></p>
-
-<blockquote>
-
-<p><i>Effects:</i> Constructs a iterator representing the first
-entry in the directory resolved to by <code>dp</code>, otherwise, the end iterator.</p>
-
-<p>[<i>Note:</i> To iterate over the current directory, write <code>
-directory_iterator(".")</code> rather than <code>directory_iterator("")</code>.
-<i>-- end note</i>]</p>
-</blockquote>
-<pre><code>basic_directory_iterator(const Path& dp, system_error_type& ec );</code></pre>
-<blockquote>
-
-<p><i>Effects:</i> Constructs a iterator representing the first
-entry in the directory resolved to by <code>dp</code>, otherwise, the end iterator.
-If an error occurs while establishing the results, the iterator constructed
-represents the end iterator and <code>ec</code> is set to the error code
-reported by the operating system, otherwise to 0.</p>
-
-</blockquote>
-<h3><a name="Class-template-basic_recursive_directory_iterator">Class template <code>basic_recursive_directory_iterator</code></a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- template <class Path>
- class basic_recursive_directory_iterator :
- public iterator<input_iterator_tag, basic_directory_entry<Path> >
- {
- public:
- typedef Path path_type;
-
- // constructors
- basic_recursive_directory_iterator();
- explicit basic_recursive_directory_iterator(const Path& dp);
- basic_recursive_directory_iterator(const basic_recursive_directory_iterator& brdi);
- basic_recursive_directory_iterator& operator=(const basic_recursive_directory_iterator& brdi);
- ~basic_recursive_directory_iterator();
-
- // observers
- int level() const;
-
- // modifiers
- void pop();
- void no_push();
-
- // other members as required by
- // C++ Std, 24.1.1 Input iterators [lib.input.iterators]
-
- private:
- int m_level; // for exposition only
- };
-
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p>The behavior of a <code>basic_recursive_directory_iterator</code> is the same
-as a <code>basic_directory_iterator</code> unless otherwise specified.</p>
-<ul>
- <li>When an iterator is constructed, <code>m_level</code> is set to 0;</li>
- <li>When an iterator <code>it</code> is incremented, if <code>it->is_directory()</code>
- is true and <code>no_push()</code> had not been called subsequent to
- the most recent increment operation (or construction, if no increment has
- occurred), then <code>m_level</code> is incremented, the
- directory is visited, and its contents recursively iterated over.</li>
- <li>When an iterator reaches the end of the directory currently being iterated
- over, or when <code>pop()</code> is called, <code>m_level</code> is
- decremented, and iteration continues with the parent directory, until the
- directory specified in the constructor argument is reached.</li>
- <li><code>level()</code> returns <code>m_level</code>.</li>
- <li><code>level()</code>, <code>pop()</code>, and <code>no_push()</code> all
- require that the iterator not be the end iterator.</li>
-</ul>
-<blockquote>
- <p>[<i>Note:</i> One of the uses of <code>no_push()</code> is to prevent
- unwanted recursion into symlinked directories. This may be necessary to
- prevent loops on some operating systems. <i>--end note</i>]</p>
-</blockquote>
-<h3><a name="file_status">Class file_status</a></h3>
-<pre>namespace std
-{
- namespace tr2
- {
- namespace sys
- {
- class file_status
- {
- public:
- explicit file_status( file_type v = status_unknown );
-
- file_type type() const;
- void type( file_type v );
- };
- } // namespace sys
- } // namespace tr2
-} // namespace std</pre>
-<p>A <code>file_status</code> object stores information about the status of a
-file. The internal form of the stored information is unspecified.</p>
-<blockquote>
- <p><i>[Note: </i>The class may be extended in the future to store
- additional status information. <i>--end note]</i></p>
-</blockquote>
-<h4>Members</h4>
-<pre>explicit file_status( file_type v = status_unknown );</pre>
-<blockquote>
- <p><i>Effects:</i> Stores <code>v</code>.</p>
-</blockquote>
-<pre>file_type type() const;</pre>
-<blockquote>
- <p><i>Returns: </i>The stored <code>file_type</code>.</p>
-</blockquote>
-<pre>void type( file_type v );</pre>
-<blockquote>
- <p><i>Effects:</i> Stores <code>v</code>, replacing the previously stored
- value.</p>
-</blockquote>
-<h3><a name="Non-member-functions">Non-member operational functions</a></h3>
-<h4><a name="Status-functions">Status functions</a></h4>
-<pre>template <class Path> file_status status(const Path& p, system_error_code& ec);
-template <class Path> file_status symlink_status(const Path& p, system_error_code& ec);</pre>
-<blockquote>
- <p><i>Returns:</i></p>
- <blockquote>
- For <code>status,</code> determine the attributes
- of
- <code>p</code> as if by<i> POSIX </i> <code>
- stat()</code>,
- for <code>symlink_status</code> determine the attributes as if by <i>POSIX </i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/lstat.html">
- lstat()</a></code>.<blockquote>
- <p>[<i>Note:</i> For symbolic links, <code>stat()</code> continues
- pathname resolution using the contents of the symbolic link, <code>lstat()</code>
- does not. <i>--
- end note</i>]</p>
- </blockquote>
- <p>If the operating system reports an error during attribute determination:</p>
- <ul>
- <li>If the error indicating that <code>p</code> could not
- be resolved, as if by POSIX error codes ENOENT or ENOTDIR, set ec to 0 and return <code>
- file_status(not_found_flag)</code>.</li>
- </ul>
- <ul>
- <li>Otherwise, set ec to the error code reported by the operating system
- and return <code>
- file_status(status_unknown)</code>.</li>
- </ul>
- Otherwise:<ul>
- <li>If the attributes indicate a regular file, as if by <i>POSIX</i> S_ISREG(),
- return <code>
- file_status(regular_file)</code>.</li>
- <li>Else if the attributes indicate a directory, as if by <i>POSIX</i> S_ISDIR(),
- return <code>
- file_status(directory_file)</code>.</li>
- <li>Else if the attributes indicate a symbolic link, as if by <i>POSIX</i> S_ISLNK(),
- return <code>
- file_status(symlink_file)</code>. <i>[Note: </i>Only possible for <code>
- symlink_status</code>. <i>--end note]</i></li>
- <li>Else if the attributes indicate a block special file, as if by <i>POSIX</i> S_ISBLK(),
- return <code>
- file_status(block_file)</code>.</li>
- <li>Else if the attributes indicate a character special file, as if by <i>POSIX</i> S_ISCHR(),
- return <code>
- file_status(character_file)</code>.</li>
- <li>Else if the attributes indicate a fifo or pipe file, as if by <i>POSIX</i> S_ISFIFO(),
- return <code>
- file_status(fifo_file)</code>.</li>
- <li>Else if the attributes indicate a socket, as if by <i>POSIX</i> S_ISSOCK(),
- return <code>
- file_status(socket_file)</code>.</li>
- <li>Else return <code>
- file_status(type_unknown)</code>.</li>
- </ul>
- </blockquote>
-<p>[<i>Note:</i> <code>directory_file</code> implies <code>
-basic_directory_iterator</code> on the file would succeed, and <code>
-regular_file</code> implies appropriate <code><fstream></code> operations would succeed,
-assuming no hardware, permission, access, or race
-condition errors. For <code>regular_file,</code> the converse is not true; lack of
-<code>regular_file</code> does not necessarily imply <code><fstream></code> operations would
-fail on a directory.
-<i>-- end note</i>]</p>
-</blockquote>
-<pre>template <class Path> file_status status(const Path& p);</pre>
-<blockquote>
- <p><i>Effects:</i> <code>system_error_code ec;</code><br>
-
- <code>file_status stat(status(p, ec));</code></p>
- <p><i>Throws:</i> <code>basic_filesystem_error<Path></code> if <code>ec
- != 0</code></p>
- <p><i>Returns:</i> <code>stat</code></p>
-</blockquote>
-<pre>template <class Path> file_status symlink_status(const Path& p);</pre>
-<blockquote>
- <p><i>Effects:</i> <code>system_error_code ec;</code><br>
-
- <code>file_status stat(symlink_status(p, ec));</code></p>
- <p><i>Throws:</i> <code>basic_filesystem_error<Path></code> if <code>ec
- != 0</code></p>
- <p><i>Returns: </i><code>stat</code></p>
-</blockquote>
-<h4><a name="Predicate-functions">Predicate functions</a></h4>
-<pre><span style="background-color: #FFFFFF">bool status_known(file_status s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>s.type() != status_unknown</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool </span><a name="exists"><span style="background-color: #FFFFFF">exists</span></a><span style="background-color: #FFFFFF">(file_status</span><span style="background-color: #FFFFFF"> s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>status_known(s) && s.type() != file_not_found</code></span></p>
-</blockquote>
-<pre>template <class Path> bool <a name="exists">exists</a>(const Path& p);</pre>
-<blockquote>
- <p><i>Returns:</i> <code>exists( status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool </span><code><span style="background-color: #FFFFFF">is_regular</span></code><span style="background-color: #FFFFFF">(file_status</span><span style="background-color: #FFFFFF"> s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>s.type() == regular_file</code></span></p>
-</blockquote>
-<pre><code>template <class Path> bool is_regular(const Path& p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_regular( status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool </span><code><span style="background-color: #FFFFFF">is_directory</span></code><span style="background-color: #FFFFFF">(file_status</span><span style="background-color: #FFFFFF"> s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> </span>
- <code><span style="background-color: #FFFFFF">s.type() == directory_file</span></code></p>
-</blockquote>
-<pre><code>template <class Path> bool is_directory(const Path& p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_directory( status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool <a name="exists">is_symlink</a>(file_status s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> </span>
- <code><span style="background-color: #FFFFFF">s.type() == symlink_file</span></code></p>
-</blockquote>
-<pre><code>template <class Path> bool is_symlink(const Path& p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_symlink( symlink_status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool <a name="exists">is_other</a>(file_status s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>return exists(s) && !is_regular(s) && !is_directory(s) && !is_symlink(s)</code></span></p>
-</blockquote>
-<pre><code>template <class Path> bool is_other(const Path& p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_other( status(p) )</code></p>
-</blockquote>
-<pre><code>template <class Path> bool <span style="background-color: #FFFFFF; text-decoration:underline">is_</span>empty(const Path& p);</code></pre>
-<blockquote>
- <p><i>Effects:</i> Determines <code>file_status s</code>, as if by <code>
- status(p)</code>.</p>
- <p><i>Throws:</i> <code>basic_filesystem_error<Path></code> if <code>!exist(s) ||
- is_other(s)</code>.</p>
- <p><i>Returns:</i> <code>is_directory(s)<br>
- ?
- basic_directory_iterator<Path>(p) == basic_directory_iterator<Path>()<br>
- : file_size(p) == 0;</code></p>
-</blockquote>
-<pre><code>template <class Path1, class Path2> bool <a name="equivalent">equivalent</a>(const Path1& p1, const Path2& p2);</code></pre>
-<blockquote>
- <p><i>Requires:</i> <code>Path1::external_string_type</code> and <code>
- Path2::external_string_type</code> are the same type. </p>
- <p><i>Effects:</i> Determines <code>file_status s1</code> and <code>s2</code>,
- as if by <code>status(p1)</code> and <code>status(p2)</code>,
- respectively.</p>
- <p><i>Throws:</i> <code>basic_filesystem_error<Path1></code><span style="background-color: #FFFFFF"> </span>
- if <code>(!exists(s1) && !exists(s2)) || (is_other(s1) &&
- is_other(s2))</code>.</p>
- <p><i>Returns:</i> <code>true</code>, if <code>sf1 == sf2</code> and <code>p1</code> and <code>p2</code>
- resolve to the same file system entity, else <code>false</code>.</p>
- <p>Two paths are considered to resolve to
- the same file system entity if two candidate entities reside on the same
- device at the same location. This is determined as if by the values of the <i>POSIX</i> <code>
- stat</code>
- structure<code>,</code> obtained as if by <code>
- stat()</code> for the two paths, having equal
- <code>st_dev</code> values and equal <code>st_ino</code> values.</p>
- <p>[<i>Note:</i> <i>POSIX</i> requires that <i>"st_dev</i> must be unique
- within a Local Area Network". Conservative <i>POSIX</i> implementations may
- also wish to check for equal <code>st_size</code> and <code>st_mtime</code>
- values. <i>Windows</i> implementations may use <code>GetFileInformationByHandle()</code> as a surrogate for <code>
- stat()</code>, and consider "same" to be equal values for <code>
- dwVolumeSerialNumber</code>, <code>nFileIndexHigh</code>, <code>
- nFileIndexLow</code>, <code>nFileSizeHigh</code>, <code>nFileSizeLow</code>,
- <code>ftLastWriteTime.dwLowDateTime</code>, and <code>
- ftLastWriteTime.dwHighDateTime</code>. <i>-- end note</i>]</p>
-</blockquote>
-<h4><a name="Attribute-functions">Attribute functions</a></h4>
-<p>[<i>Note:</i> A strictly limited number of attribute functions are provided
-because few file system attributes are portable. Even the functions provided will be impossible to implement on some file
-systems. <i>--end note</i>.]</p>
-<pre>template <class Path> const Path& <a name="initial_path">initial_path</a>();</pre>
-<blockquote>
- <p><i>Returns:</i> <code>current_path()</code> at the time of entry to <code>
- main()</code>.</p>
- <p>[<i>Note:</i> These semantics turn a dangerous global variable into a safer
- global constant. <i>--end note</i>]</p>
- <p>[<i>Note:</i> Full implementation requires runtime library support.
- Implementations which cannot provide runtime library support are encouraged to
- instead store the value of <code>current_path()</code> at the first call of
- <a name="initial_path"><code>initial_path</code></a><code>()</code>, and
- return this value for all subsequent calls. Programs using
- <a name="initial_path"><code>initial_path</code></a><code>()</code> are
- encouraged to call it immediately on entrance to <code>main()</code> so that
- they will work correctly with such partial implementations. <i>--end note</i>]</p>
-</blockquote>
-<pre>template <class Path> Path current_path();</pre>
-<blockquote>
- <p><i>Returns:</i> The current path, as if by <i>POSIX</i>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/getcwd.html">
- <code>getcwd()</code></a>.</p>
- <p><i>Postcondition:</i> <code>current_path().is_complete()</code></p>
- <p>[<i>Note:</i> The current path as returned by many operating systems is a
- dangerous global variable. It may be changed unexpectedly by a third-party or
- system library functions, or by another thread. Although dangerous, the
- function is useful in dealing with other libraries.. For a safer alternative,
- see <code>initial_path()</code>. The <code>
- current_path()</code> name was chosen to emphasize that the return is a
- complete path, not just a single directory name. <i>-- </i><i>end note</i>]</p>
-</blockquote>
-<pre>template <class Path> <span style="background-color: #FFFFFF; ">uintmax_t</span> file_size(const Path& p);</pre>
-<blockquote>
- <p><i>Returns:</i> The size
- <span style="background-color: #FFFFFF; ">in bytes</span>
- of the file <code>p</code> resolves to, determined as if by the value of
- the <i>POSIX</i> <code>
- stat</code> structure member <code>st_size</code>
- obtained as if by <i>POSIX</i> <code>
- stat()</code>.</p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF"><a name="space">template</a> <class Path> space_info space(const Path& p);</span></pre>
-<blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> A <code>space_info</code>
- object. The value of the <code>space_info</code> object is determined as if by
- using </span> <i><span style="background-color: #FFFFFF">POSIX</span></i><span style="background-color: #FFFFFF"> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/statvfs.html" style="text-decoration: none">
- statvfs()</a></code> to obtain a <i>POSIX</i> struct <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/statvfs.h.html" style="text-decoration: none">
- statvfs</a></code>, and then multiplying its <code>f_blocks</code>, <code>
- f_bfree</code>, and <code>f_bavail</code> members by its <code>f_frsize</code>
- member, and assigning the results to the <code>capacity</code>, <code>free</code>,
- and <code>available</code> members respectively. Any members for which the
- value cannot be determined shall be set to -1.</span></p>
-</blockquote>
-<pre>template <class Path> std::time_t last_write_time(const Path& p);</pre>
-<blockquote>
- <p><i>Returns:</i> The time of last data modification of <code>p</code>, determined as if by the
- value of the <i>POSIX</i> <code>
- stat</code> structure member <code>st_mtime</code> obtained
- as if by <i>POSIX</i> <code>
- stat()</code>.</p>
-</blockquote>
-<pre>template <class Path> void last_write_time(const Path& p, const std::time_t new_time);</pre>
-<blockquote>
- <p><i>Effects:</i> Sets the time of last data modification of the file
- resolved to by <code>p</code>
- to <code>new_time</code>, as if by <i>POSIX</i> <code>
- stat()</code>
- followed by <i>POSIX</i>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/utime.html">
- <code>utime()</code></a>.</p>
- <p>[<i>Note:</i> The apparent postcondition <code>last_write_time(p) ==
- new_time</code> is not specified since it would not hold for many file systems
- due to coarse time mechanism granularity. <i>-- end note</i>]</p>
-</blockquote>
-<h4>Other o<a name="Operations-functions">perations functions</a></h4>
-<pre>template <class Path> bool create_directory(const Path& dp);</pre>
-<blockquote>
- <p><i>Effects:</i> Attempts to create the directory <code>dp</code> resolves to,
- as if by<i> POSIX </i><code>
- mkdir()</code> with a second argument of S_IRWXU|S_IRWXG|S_IRWXO. </p>
- <p><i>Throws:</i> <code>basic_filesystem_error<Path></code> if <i>
- Effects</i> fails for any reason other than because the directory already exists.</p>
- <p><i>Returns:</i> True if a new directory was created, otherwise false.</p>
- <p><i>Postcondition:</i> <code>is_directory(dp)</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">template <class Path1, class Path2>
- system_error_type create_hard_link(const Path1& to_p, const Path2& from_p, system_error_code& ec);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF"> Establishes the postcondition, as if by
- </span> <i><span style="background-color: #FFFFFF">POSIX</span></i><span style="background-color: #FFFFFF">
- </span> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/link.html">
- <span style="background-color: #FFFFFF">link()</span></a></code><span style="background-color: #FFFFFF">.</span></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> If the
- postcondition cannot be established, a system error code
- indicating the reason for the failure, otherwise 0.</span></p>
- <p><i><span style="background-color: #FFFFFF">Postcondition:</span></i></p>
- <ul>
- <li><span style="background-color: #FFFFFF"> </span><code><span style="background-color: #FFFFFF">exists(to_p) && exists(from_p) && equivalent(to_p,
- from_p)</span></code></li>
- <li><span style="background-color: #FFFFFF">The contents of the file or directory
- </span> <code><span style="background-color: #FFFFFF">to_p</span></code><span style="background-color: #FFFFFF"> resolves to are unchanged.</span></li>
- </ul>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- Some operating systems do not support hard links or support
- them only for regular files. Some operating systems limit the number of links per
- file.
- Some file systems that do not
- support
- hard links - the FAT system used on floppy discs, memory cards and flash
- drives,
- for example. Thus hard links should be avoided if wide portability is
- a concern. </span> <i><span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
-<pre><span style="background-color: #FFFFFF">template <class Path1, class Path2>
- void create_hard_link(const Path1& to_p, const Path2& from_p);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">
- As if <code>system_error_code ec( create_hard_link( to_p, from_p ) );</code></span></p>
- <p><span style="font-style: italic; background-color: #FFFFFF">Throws:</span><span style="background-color: #FFFFFF">
- </span> <code>basic_filesystem_error<Path1, Path2></code><span style="background-color: #FFFFFF">
- if <code>ec</code> is not zero.</span></p>
- </blockquote>
-<pre><span style="background-color: #FFFFFF">template <class Path1, class Path2>
- system_error_type create_symlink(const Path1& to_p, const Path2& from_p, system_error_code& ec);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF"> Establishes the postcondition, as if by
- </span> <i><span style="background-color: #FFFFFF">POSIX</span></i><span style="background-color: #FFFFFF">
- </span> <code>
- <span style="background-color: #FFFFFF">
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">
- symlink()</a></span></code><span style="background-color: #FFFFFF">.</span></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> If the
- postcondition cannot be established, a system error code
- indicating the reason for the failure, otherwise 0.</span></p>
- <p><span style="background-color: #FFFFFF"><i>Postcondition:</i> <code>from_p</code>
- resolves to a symbolic link file that contains an unspecified representation
- of <code>to_p</code>.</span></p>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- Some operating systems do not support symbolic links at all or support
- them only for regular files. Thus symbolic links should be avoided if code portability is
- a concern. </span> <i><span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
-<pre><span style="background-color: #FFFFFF">template <class Path1, class Path2>
- void create_symlink(const Path1& to_p, const Path2& from_p);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">
- As if <code>system_error_code ec( create_symlink( to_p, from_p ) );</code></span></p>
- <p><span style="font-style: italic; background-color: #FFFFFF">Throws:</span><span style="background-color: #FFFFFF">
- </span> <code>basic_filesystem_error<Path1, Path2></code><span style="background-color: #FFFFFF">
- if <code>ec</code> is not zero.</span></p>
- </blockquote>
-<pre>template <class Path> bool remove(const Path& p);</pre>
-<blockquote>
- <p><i>Precondition:</i> <code>!p.empty()</code></p>
- <p><i>Effects:</i> Attempts to delete the file <code>p</code> resolves
- to,
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/link.html">
- remove()</a></code>.</p>
- <p><i>Returns:</i> The value of <code>exists(p)</code> prior to the
- establishment of the postcondition.</p>
- <p><i>Postcondition:</i> <code>!exists(p)</code></p>
- <p><i>Throws:</i> <code>basic_filesystem_error<Path></code> if:</p>
- <ul>
- <li><code>p.empty() || (exists(p) && is_directory(p) && !empty(p))</code>.</li>
- <li><i>Effects</i> fails for any reason other than because <code>p</code>
- does not resolve to an existing file.</li>
- </ul>
- <p>[<i>Note:</i> A symbolic link is itself removed, rather than what it
- resolves to being removed. <i>-- end note</i>]</p>
-</blockquote>
-<pre>template <class Path1, class Path2> void rename(const Path1& from_p, const Path2& to_p);</pre>
-<blockquote>
- <p><i>Requires:</i> <code>Path1::external_string_type</code> and <code>
- Path2::external_string_type</code> are the same type. </p>
- <p><i>Effects:</i> Renames <code>from_p</code> to <code>to_p</code>, as if by
- <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/rename.html">
- rename()</a></code>.</p>
- <p><i>Postconditions:</i> <code>!exists(from_p) && exists(to_p)</code>, and
- the contents and attributes of the file originally named <code>from_p</code>
- are otherwise unchanged.</p>
- <p>[<i>Note:</i> If <code>from_p</code> and <code>to_p</code> resolve to the
- same file, no action is taken. Otherwise, if <code>to_p</code> resolves to an
- existing file, it is removed. A symbolic link is itself renamed, rather than
- the file it resolves to being renamed. <i>-- end note</i>]</p>
-</blockquote>
-<pre>template <class Path1, class Path2> void copy_file(const Path1& from_fp, const Path2& to_fp);</pre>
-<blockquote>
- <p><i>Requires:</i> <code>Path1::external_string_type</code> and <code>
- Path2::external_string_type</code> are the same type. </p>
- <p><i>Effects:</i> The contents and attributes of the file <code>from_fp</code>
- resolves to are copied to the file <code>to_fp</code> resolves to.</p>
- <p><i>Throws:</i> <code>basic_filesystem_error<Path></code> if <code>
- from_fp.empty() || to_fp.empty() ||!exists(from_fp) || !is_regular(from_fp)
- || exists(to_fp)</code></p>
-</blockquote>
-<pre>template <class Path> Path complete(const Path& p, const Path& base=initial_path<Path>());</pre>
-<blockquote>
- <p><i>Effects:</i> Composes a complete path from <code>p</code> and <code>base</code>,
- using the following rules:</p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
- <tr>
- <td align="center"> </td>
- <td align="center"><b><code>p.has_root_directory()</code></b></td>
- <td align="center"><b><code>!p.has_root_directory()</code></b></td>
- </tr>
- <tr>
- <td align="center"><b><code>p.has_root_name()</code></b></td>
- <td align="center"><code>p</code></td>
- <td align="center">precondition failure</td>
- </tr>
- <tr>
- <td align="center"><b><code>!p.has_root_name()</code></b></td>
- <td align="center"><code>base.root_name()<br>
- / p</code></td>
- <td align="center"><code>base / p</code></td>
- </tr>
- </table>
- <p><i>Returns:</i> The composed path.</p>
- <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>
- rp.is_complete()</code> is true.</p>
- <p><i>Throws:</i>
- <span style="background-color: #FFFFFF">If </span> <code>
- <span style="background-color: #FFFFFF">!(base.is_complete() && (p.is_complete() || !p.has_root_name()))</span></code></p>
- <p>[<i><a name="complete_note">Note</a>:</i> When portable behavior is
- required, use <i>complete()</i>. When operating system dependent behavior is
- required, use <i>system_complete()</i>.</p>
- <p>Portable behavior is useful when dealing with paths created
- internally within a program, particularly if the program should exhibit the
- same behavior on all operating systems.</p>
- <p>Operating system dependent behavior is useful when dealing with
- paths supplied by user input, reported to program users, or when such behavior
- is expected by program users. <i>--
- end note</i>]</p>
-</blockquote>
-<pre>template <class Path> Path system_complete(const Path& p);</pre>
-<blockquote>
- <p><i>Effects:</i> Composes a complete path from <code>p</code>, using the
- same rules used by the operating system to resolve a path passed as the
- filename argument to standard library open functions.</p>
- <p><i>Returns:</i> The composed path.</p>
- <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>
- rp.is_complete()</code> is true.</p>
- <p><i>Throws:</i> <span style="background-color: #FFFFFF">If <code>p.empty()</code>.</span></p>
- <p>[<i>Note:</i> For <i>POSIX</i>, <code>system_complete(p)</code> has the same semantics as
- <code>complete(p, current_path())</code>.</p>
- <p><a name="windows_effects">For <i>Windows</i></a>, <code>system_complete(p)</code> has the
- same semantics as <code>complete(ph, current_path())</code> if
- <code>p.is_complete() || !p.has_root_name()</code> or <code>p</code> and <code>base</code> have the same
- <code>root_name()</code>.
- Otherwise it acts like <code>complete(p, kinky)</code>, where <code>kinky</code>
- is the current directory for the <code>p.root_name()</code> drive. This will
- be the current directory of that drive the last time it was set, and thus may
- be <b>residue left over from a prior program</b> run by the command
- processor! Although these semantics are often useful, they are also very
- error-prone.</p>
- <p>See
- <a href="file:///C|/boost/site/libs/filesystem/doc/operations.htm#complete_note">
- <i>complete()</i> note</a> for usage suggestions. <i>-- end note</i>]</p>
-</blockquote>
-<pre>errno_type <a name="to_errno">to_errno</a>( system_error_type code );</pre>
-<blockquote>
-<p><i>Returns:</i> The value of the <code>errno</code> error number which
-corresponds to the operating system's error code <code>code</code>. The exact
-correspondence is implementation defined. Implementations are only required to
-support error codes reported by <code>basic_filesystem_error</code> exceptions
-thrown by functions defined in this clause.</p>
-</blockquote>
-<pre>void system_message( system_error_type ec, std::string & target );
-void system_message( system_error_type ec, std::wstring & target );</pre>
-<blockquote>
-<p><i>Effects:</i> Appends a message corresponding to <code>ec</code> to <code>
-target</code>.</p>
-<p>[<i>Note:</i> Implementations are encouraged to supply a localized message. <i>-- end note</i>]</p>
-</blockquote>
-<h4><a name="Convenience-functions">Convenience functions</a></h4>
-<pre>template <class Path> bool create_directories(const Path & p);</pre>
-<blockquote>
- <p><i>Requires:</i> <code>p.empty() || <br>
- forall px: px == p || is_parent(px, p): is_directory(px) || !exists( px )</code>
- </p>
- <p><i>Returns:</i> The value of <code>!exists(p)</code> prior to the
- establishment of the postcondition.</p>
- <p><i>Postcondition:</i> <code>is_directory(p)</code></p>
- <p><i>Throws:</i> <code>basic_filesystem_error<Path></code> if<code>
- exists(p) && !is_directory(p)</code></p>
-</blockquote>
-<pre>template <class Path> typename Path::string_type extension(const Path & p);</pre>
-<blockquote>
- <p><i>Returns:</i> if <code>p.leaf()</code> contains a <i>dot</i>, returns the
- substring of <code>p.leaf()</code> starting at the rightmost <i>dot</i> and
- ending at the string's end. Otherwise, returns an empty string. </p>
- <p>[<i>Note:<b> </b></i>The <i>dot</i> is included in the return value so that
- it is possible to distinguish between no extension and an empty extension. </p>
- <p>Implementations are permitted but not required to define additional
- behavior for file systems which append additional elements to extensions, such
- as alternate data stream or partitioned dataset names. <i>-- end note</i>]</p>
-</blockquote>
-<pre>template <class Path> typename Path::string_type basename(const Path & p);</pre>
-<blockquote>
- <p><i>Returns:</i> if <code>p.leaf()</code> contains a <i>dot</i>, returns the
- substring of <code>p.leaf()</code> starting at its beginning and ending at the
- last <i>dot</i> (the <i>dot</i> is not included). Otherwise, returns <code>
- p.leaf()</code>.</p>
-</blockquote>
-<pre>template <class Path>
- Path replace_extension(const Path & p, const typename Path::string_type & new_extension);</pre>
-<blockquote>
- <p><i>Postcondition:</i> <code>basename(<i>return_value</i>) == basename(p) &&
- extension(<i>return_value</i>) == new_extension</code> </p>
- <p>[<i>Note:</i> It follows from the semantics of <code>extension()</code>
- that <code>new_extension</code> should include <i>dot</i> to achieve
- reasonable results. <i>-- end note</i>]</p>
-</blockquote>
-<h3><a name="header-cerrno">Additions</a> to header <code><cerrno></code></h3>
-<p>The header <cerrno> shall include an additional symbolic constant macro for
-each of the values returned by the to_errno
-function. The macro names shall be as defined in <i>POSIX</i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/errno.h.html">
-errno.h</a>, with the additions below.</p>
-<blockquote>
-<p><i><span style="background-color: #E0E0E0">This codifies existing practice.
-The required names are only a sub-set of those defined by POSIX, and are usually already
-supplied in <errno.h> (as wrapped by <cerrno>) as shipped with POSIX and Windows compilers.
-These implementations require no changes to their underlying C headers to conform with the above
-requirement.</span></i></p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="33%">
- <tr>
- <td width="18%" align="center"><i><b>Name</b></i></td>
- <td width="82%" align="center"><i><b>Meaning</b></i></td>
- </tr>
- <tr>
- <td width="18%"><code>EBADHANDLE</code></td>
- <td width="82%">Bad operating system handle.</td>
- </tr>
- <tr>
- <td width="18%"><code>EOTHER</code></td>
- <td width="82%">Other error.</td>
- </tr>
-</table>
-</blockquote>
-<h3><a name="header-fstream">Additions</a> to header <code><fstream></code></h3>
-<blockquote>
-<p><span style="background-color: #E0E0E0; font-style:italic">These additions have been carefully
-specified to avoid breaking existing code in common operating environments such as
-</span> <i><span style="background-color: #E0E0E0">POSIX</span></i><span style="background-color: #E0E0E0; font-style:italic">,
-</span> <i>
-<span style="background-color: #E0E0E0">Windows</span></i><span style="background-color: #E0E0E0; font-style:italic">, and
-</span> <i><span style="background-color: #E0E0E0">OpenVMS.
-See </span><a href="#Suggestions-for-fstream">
-<span style="background-color: #E0E0E0">Suggestions for <code><fstream></code>
-implementations</span></a><span style="background-color: #E0E0E0"> for
-techniques to avoid breaking existing code in other environments, particularly
-on operating systems allowing slashes in filenames.</span></i></p>
-<p><span style="background-color: #FFFFFF">[<i>Note:</i> The
-"do-the-right-thing" rule from <a href="#Requirements-on-implementations">
-Requirements on implementations</a> does apply to header <code><fstream></code>.</span></p>
-<p><span style="background-color: #FFFFFF">The overloads
-below are specified as additions rather than replacements for existing
-functions. This preserves existing code (perhaps
-using a <a name="home-grown-path">home-grown path</a> class) that relies on an
-automatic conversion to <code>const char*</code>.<i> -- end note</i>]</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.1 Class template
-basic_filebuf [lib.filebuf] synopsis preceding paragraph 1, add the function:</i></span></p>
-<blockquote>
-<pre><span style="background-color: #FFFFFF">template <class Path> </span><span style="background-color: #FFFFFF">basic_filebuf</span><span style="background-color: #FFFFFF"><charT,traits>* </span><span style="background-color: #FFFFFF">open(const</span><span style="background-color: #FFFFFF"> Path& p, </span><span style="background-color: #FFFFFF">ios_base::openmode</span><span style="background-color: #FFFFFF"> mode);</span></pre>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.3 Member functions [lib.filebuf.members],
-add the above to the signature preceding paragraph 2, and replace the
-sentence:</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF">It then opens a file, if possible,
-whose name is the NTBS s (as if by calling <code>std::fopen(s ,<i>modstr</i>
-))</code>.</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with:</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF">It then opens, if possible, the file
-that
-<code>p</code> or <code>path(s)</code> resolves to, as if by calling <code>std::fopen()</code> with a
-second argument of <i>modstr</i>.</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.5 Class template
-basic_ifstream [lib.ifstream] synopsis preceding paragraph 1, add the functions:</i></span></p>
-<blockquote>
- <pre><span style="background-color: #FFFFFF">template <class Path> explicit basic_ifstream(const Path& p, ios_base::openmode mode = ios_base::in);
-template <class Path> void open(const Path& p, ios_base::openmode mode = ios_base::in);</span></pre>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.6 basic_ifstream
-constructors [lib.ifstream.cons] </span></i>
-<span style="background-color: #FFFFFF"><i>add the above constructor to the signature preceding
-paragraph 2, and in paragraph 2 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(s, mode |
-ios_base::in)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(path(s), mode |
-ios_base::in)</code> or <code>rdbuf()->open(p, mode | ios_base::in)</code> as
-appropriate</span></p>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.7 Member functions [lib.ifstream.members]
-</span></i><span style="background-color: #FFFFFF"><i>add the above open
-function to the signature
-preceding paragraph 3, and in paragraph 3 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(s, mode |
-ios_base::in)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(path(s), mode |
-ios_base::in)</code> or <code>rdbuf()->open(p, mode | ios_base::in)</code> as
-appropriate</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.8 Class template
-basic_ofstream [lib.ofstream] synopsis preceding paragraph 1, add the
-
-functions:</i></span></p>
-<blockquote>
- <pre><span style="background-color: #FFFFFF">template <class Path> explicit basic_ofstream(const Path& p, ios_base::openmode mode = ios_base::out);
-template <class Path> void open(const Path& p, ios_base::openmode mode = ios_base::out);</span></pre>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.9 basic_ofstream
-constructors [lib.ofstream.cons] </span></i>
-<span style="background-color: #FFFFFF"><i>add the above constructor to the signature preceding
-paragraph 2, and in paragraph 2 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(s, mode |
-ios_base::out)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(path(s), mode |
-ios_base::out)</code> or <code>rdbuf()->open(p, mode | ios_base::out)</code> as
-appropriate</span></p>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.10 Member functions [lib.ofstream.members]
-</span></i><span style="background-color: #FFFFFF"><i>add the above open
-function to the signature
-preceding paragraph 3, and in paragraph 3 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(s, mode |
-ios_base::out)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(path(s), mode |
-ios_base::out)</code> or <code>rdbuf()->open(p, mode | ios_base::out)</code> as
-appropriate</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.11 Class template
-basic_fstream [lib.fstream] synopsis preceding paragraph 1, add the functions:</i></span></p>
-<blockquote>
- <pre><span style="background-color: #FFFFFF">template <class Path> explicit basic_fstream(const Path& p, ios_base::openmode mode = ios_base::in|ios_base::out);
-template <class Path> void open(const Path& p, ios_base::openmode mode = ios_base::in|ios_base::out);</span></pre>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.12 basic_fstream
-constructors [lib.fstream.cons] </span></i>
-<span style="background-color: #FFFFFF"><i>add the above constructor to the signature preceding
-paragraph 2, and in paragraph 2 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(s, mode)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(path(s), mode)</code>
-or <code>rdbuf()->open(p, mode)</code> as appropriate</span></p>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.13 Member functions [lib.fstream.members]
-</span></i><span style="background-color: #FFFFFF"><i>add the above open
-function to the signature
-preceding paragraph 3, and in paragraph 3 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(s, mode)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()->open(path(s), mode)</code>
-or <code>rdbuf()->open(p, mode)</code> as appropriate</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>End of proposed text.</i></span></p>
-<h2><a name="Path-decomposition-table">Path decomposition table</a></h2>
-<p>The table is generated by a program compiled with the Boost implementation.</p>
-<p>Shaded entries indicate cases where <i>POSIX</i> and <i>Windows</i>
-implementations yield different results. The top value is the
-<i>POSIX</i> result and the bottom value is the <i>Windows</i> result. <br>
- <table border="1" cellspacing="0" cellpadding="5" width="1066">
-<p>
-<tr><td width="112"><b>Constructor<br>argument</b></td>
-<td width="160"><b>Elements found<br>by iteration</b></td>
-<td width="112"><b><code>string()</code></b></td>
-<td width="112"><code><b>file_<br>string()</b></td>
-<td width="72"><b><code>root_<br>path()<br>.string()</code></b></td>
-<td width="48"><b><code>root_<br>name()</code></b></td>
-<td width="88"><b><code>root_<br>directory()</code></b></td>
-<td width="96"><b><code>relative_<br>path()<br>.string()</code></b></td>
-<td width="72"><b><code>branch_<br>path()<br>.string()</code></b></td>
-<td width="72"><b><code>leaf()</code></b></td>
-</tr>
-<tr>
-<td width="112"><code>""</code></td>
-<td width="160"><code>""</code></td>
-<td width="112"><code>""</code></td>
-<td width="112"><code>""</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>""</code></td>
-<td width="72"><code>""</code></td>
-<td width="72"><code>""</code></td>
-</tr>
-<tr>
-<td width="112"><code>"."</code></td>
-<td width="160"><code>"."</code></td>
-<td width="112"><code>"."</code></td>
-<td width="112"><code>"."</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"."</code></td>
-<td width="72"><code>""</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>".."</code></td>
-<td width="160"><code>".."</code></td>
-<td width="112"><code>".."</code></td>
-<td width="112"><code>".."</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>".."</code></td>
-<td width="72"><code>""</code></td>
-<td width="72"><code>".."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"foo"</code></td>
-<td width="160"><code>"foo"</code></td>
-<td width="112"><code>"foo"</code></td>
-<td width="112"><code>"foo"</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"foo"</code></td>
-<td width="72"><code>""</code></td>
-<td width="72"><code>"foo"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"/"</code></td>
-<td width="160"><code>"/"</code></td>
-<td width="112"><code>"/"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"/"<br>"\"</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>"/"</code></td>
-<td width="96"><code>""</code></td>
-<td width="72"><code>""</code></td>
-<td width="72"><code>"/"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"/foo"</code></td>
-<td width="160"><code>"/","foo"</code></td>
-<td width="112"><code>"/foo"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"/foo"<br>"\foo"</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>"/"</code></td>
-<td width="96"><code>"foo"</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="72"><code>"foo"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"foo/"</code></td>
-<td width="160"><code>"foo","."</code></td>
-<td width="112"><code>"foo/"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"foo/"<br>"foo\"</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"foo/"</code></td>
-<td width="72"><code>"foo"</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"/foo/"</code></td>
-<td width="160"><code>"/","foo","."</code></td>
-<td width="112"><code>"/foo/"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"/foo/"<br>"\foo\"</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>"/"</code></td>
-<td width="96"><code>"foo/"</code></td>
-<td width="72"><code>"/foo"</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"foo/bar"</code></td>
-<td width="160"><code>"foo","bar"</code></td>
-<td width="112"><code>"foo/bar"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"foo/bar"<br>"foo\bar"</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"foo/bar"</code></td>
-<td width="72"><code>"foo"</code></td>
-<td width="72"><code>"bar"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"/foo/bar"</code></td>
-<td width="160"><code>"/","foo","bar"</code></td>
-<td width="112"><code>"/foo/bar"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"/foo/bar"<br>"\foo\bar"</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>"/"</code></td>
-<td width="96"><code>"foo/bar"</code></td>
-<td width="72"><code>"/foo"</code></td>
-<td width="72"><code>"bar"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"///foo///"</code></td>
-<td width="160"><code>"/","foo","."</code></td>
-<td width="112"><code>"///foo///"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"///foo///"<br>"\foo\\\"</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>"/"</code></td>
-<td width="96"><code>"foo///"</code></td>
-<td width="72"><code>"///foo"</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"///foo///bar"</code></td>
-<td width="160"><code>"/","foo","bar"</code></td>
-<td width="112"><code>"///foo///bar"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"///foo///bar"<br>"\foo\\\bar"</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>"/"</code></td>
-<td width="96"><code>"foo///bar"</code></td>
-<td width="72"><code>"///foo"</code></td>
-<td width="72"><code>"bar"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"/."</code></td>
-<td width="160"><code>"/","."</code></td>
-<td width="112"><code>"/."</code></td>
-<td bgcolor="#99FF66" width="112"><code>"/."<br>"\."</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>"/"</code></td>
-<td width="96"><code>"."</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"./"</code></td>
-<td width="160"><code>".","."</code></td>
-<td width="112"><code>"./"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"./"<br>".\"</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"./"</code></td>
-<td width="72"><code>"."</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"/.."</code></td>
-<td width="160"><code>"/",".."</code></td>
-<td width="112"><code>"/.."</code></td>
-<td bgcolor="#99FF66" width="112"><code>"/.."<br>"\.."</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>"/"</code></td>
-<td width="96"><code>".."</code></td>
-<td width="72"><code>"/"</code></td>
-<td width="72"><code>".."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"../"</code></td>
-<td width="160"><code>"..","."</code></td>
-<td width="112"><code>"../"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"../"<br>"..\"</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"../"</code></td>
-<td width="72"><code>".."</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"foo/."</code></td>
-<td width="160"><code>"foo","."</code></td>
-<td width="112"><code>"foo/."</code></td>
-<td bgcolor="#99FF66" width="112"><code>"foo/."<br>"foo\."</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"foo/."</code></td>
-<td width="72"><code>"foo"</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"foo/.."</code></td>
-<td width="160"><code>"foo",".."</code></td>
-<td width="112"><code>"foo/.."</code></td>
-<td bgcolor="#99FF66" width="112"><code>"foo/.."<br>"foo\.."</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"foo/.."</code></td>
-<td width="72"><code>"foo"</code></td>
-<td width="72"><code>".."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"foo/./"</code></td>
-<td width="160"><code>"foo",".","."</code></td>
-<td width="112"><code>"foo/./"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"foo/./"<br>"foo\.\"</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"foo/./"</code></td>
-<td width="72"><code>"foo/."</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"foo/./bar"</code></td>
-<td width="160"><code>"foo",".","bar"</code></td>
-<td width="112"><code>"foo/./bar"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"foo/./bar"<br>"foo\.\bar"</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"foo/./bar"</code></td>
-<td width="72"><code>"foo/."</code></td>
-<td width="72"><code>"bar"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"foo/.."</code></td>
-<td width="160"><code>"foo",".."</code></td>
-<td width="112"><code>"foo/.."</code></td>
-<td bgcolor="#99FF66" width="112"><code>"foo/.."<br>"foo\.."</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"foo/.."</code></td>
-<td width="72"><code>"foo"</code></td>
-<td width="72"><code>".."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"foo/../"</code></td>
-<td width="160"><code>"foo","..","."</code></td>
-<td width="112"><code>"foo/../"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"foo/../"<br>"foo\..\"</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"foo/../"</code></td>
-<td width="72"><code>"foo/.."</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"foo/../bar"</code></td>
-<td width="160"><code>"foo","..","bar"</code></td>
-<td width="112"><code>"foo/../bar"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"foo/../bar"<br>"foo\..\bar"</code></td>
-<td width="72"><code>""</code></td>
-<td width="48"><code>""</code></td>
-<td width="88"><code>""</code></td>
-<td width="96"><code>"foo/../bar"</code></td>
-<td width="72"><code>"foo/.."</code></td>
-<td width="72"><code>"bar"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:"</code></td>
-<td width="160"><code>"c:"</code></td>
-<td width="112"><code>"c:"</code></td>
-<td width="112"><code>"c:"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1; border-top-style: solid; border-top-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td width="88"><code>""</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:"<br>""</code></td>
-<td width="72"><code>""</code></td>
-<td width="72"><code>"c:"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:/"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:","."<br>"c:","/"</code></td>
-<td width="112"><code>"c:/"</code></td>
-<td bgcolor="#99FF66" width="112"><code><span style="background-color: #99FF66">
-"c:/"<br>"c:\"</span></code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:/"<br>""</code></td>
-<td width="72"><code>"c:"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"."<br>"/"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:foo"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:foo"<br>"c:","foo"</code></td>
-<td width="112"><code>"c:foo"</code></td>
-<td width="112"><code>"c:foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td width="88"><code>""</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:foo"<br>"foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"c:foo"<br>"foo"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:/foo"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:","foo"<br>"c:","/","foo"</code></td>
-<td width="112"><code>"c:/foo"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:/foo"<br>"c:\foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:/foo"<br>"foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"c:"<br>"c:/"</code></td>
-<td width="72"><code>"foo"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:foo/"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:foo","."<br>"c:","foo","."</code></td>
-<td width="112"><code>"c:foo/"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:foo/"<br>"c:foo\"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td width="88"><code>""</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:foo/"<br>"foo/"</code></td>
-<td width="72"><code>"c:foo"</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:/foo/"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:","foo","."<br>"c:","/","foo","."</code></td>
-<td width="112"><code>"c:/foo/"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:/foo/"<br>"c:\foo\"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:/foo/"<br>"foo/"</code></td>
-<td width="72"><code>"c:/foo"</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:/foo/bar"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:","foo","bar"<br>"c:","/","foo","bar"</code></td>
-<td width="112"><code>"c:/foo/bar"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:/foo/bar"<br>"c:\foo\bar"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:/foo/bar"<br>"foo/bar"</code></td>
-<td width="72"><code>"c:/foo"</code></td>
-<td width="72"><code>"bar"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"prn:"</code></td>
-<td width="160"><code>"prn:"</code></td>
-<td width="112"><code>"prn:"</code></td>
-<td width="112"><code>"prn:"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"prn:"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"prn:"</code></td>
-<td width="88"><code>""</code></td>
-<td bgcolor="#99FF66" width="96"><code>"prn:"<br>""</code></td>
-<td width="72"><code>""</code></td>
-<td width="72"><code>"prn:"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:\"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:\"<br>"c:","/"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:\"<br>"c:/"</code></td>
-<td width="112"><code>"c:\"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:\"<br>""</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"c:\"<br>"/"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:foo"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:foo"<br>"c:","foo"</code></td>
-<td width="112"><code>"c:foo"</code></td>
-<td width="112"><code>"c:foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td width="88"><code>""</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:foo"<br>"foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"c:foo"<br>"foo"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:\foo"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:\foo"<br>"c:","/","foo"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:\foo"<br>"c:/foo"</code></td>
-<td width="112"><code>"c:\foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:\foo"<br>"foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"c:\foo"<br>"foo"</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:foo\"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:foo\"<br>"c:","foo","."</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:foo\"<br>"c:foo/"</code></td>
-<td width="112"><code>"c:foo\"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td width="88"><code>""</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:foo\"<br>"foo/"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"c:foo\"<br>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:\foo\"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:\foo\"<br>"c:","/","foo","."</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:\foo\"<br>"c:/foo/"</code></td>
-<td width="112"><code>"c:\foo\"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:\foo\"<br>"foo/"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"c:\foo\"<br>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:\foo/"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:\foo","."<br>"c:","/","foo","."</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:\foo/"<br>"c:/foo/"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:\foo/"<br>"c:\foo\"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:\foo/"<br>"foo/"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"c:\foo"<br>"c:/foo"</code></td>
-<td width="72"><code>"."</code></td>
-</tr>
-<tr>
-<td width="112"><code>"c:/foo\bar"</code></td>
-<td bgcolor="#99FF66" width="160"><code>"c:","foo\bar"<br>"c:","/","foo","bar"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:/foo\bar"<br>"c:/foo/bar"</code></td>
-<td bgcolor="#99FF66" width="112"><code>"c:/foo\bar"<br>"c:\foo\bar"</code></td>
-<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1; border-bottom-style: solid; border-bottom-width: 1" width="48"><code>
-""<br>"c:"</code></td>
-<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td>
-<td bgcolor="#99FF66" width="96"><code>"c:/foo\bar"<br>"foo/bar"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"c:"<br>"c:/foo"</code></td>
-<td bgcolor="#99FF66" width="72"><code>"foo\bar"<br>"bar"</code></td>
-</tr>
-</table>
-<h2><a name="Suggestions-for-fstream">Suggestions for <code><fstream></code></a>
-implementations</h2>
-<p><span style="background-color: #FFFFFF">The change in semantics to functions
-taking <code>const char*</code> arguments can break existing code, but only on
-operating systems where implementations don't
-implicitly accept native format pathnames or
-operating systems that allow slashes in filenames. Thus on <i>POSIX</i>,
-<i>Windows,</i> and <i>OpenVMS</i>, for example, there is no problem if the
-implementation follows encouraged behavior.</span></p>
-<p><span style="background-color: #FFFFFF">For most of the Filesystem Library,
-there is no existing code, so the issue preserving existing code that uses
-slashes in filenames doesn't arise. New code simply must use basic_path
-constructors with <code>path_format_t</code> arguments of <code>native</code>.
-To preserve existing fstream code that uses slashes in filenames, an
-implementation may wish to provide a mechanism such as a macro to control
-selection of the old behavior.</span></p>
-<p><span style="background-color: #FFFFFF">Implementations are already required
-by the TR front-matter to provide a mechanism such as a macro to control
-selection of the old behavior (useful to guarantee protection of existing code)
-or new behavior (useful in new code, and code being ported from other systems)
-for headers. Because use of the rest of the Filesystem Library is independent of
-use of the <code><fstream></code> additions, affected implementations are
-encouraged to allow disabling the <code><fstream></code> additions separately
-from other TR features.</span></p>
-<p><span style="background-color: #FFFFFF">An rejected alternative was to supply
-new fstream classes in namespace <code>sys</code>, inheriting from the current
-classes, overriding the constructors and opens taking pathname arguments, and
-providing the additional overloads. In Lillehammer LWG members indicated lack of
-support for this alternative, feeling that costs outweigh benefits.</span></p>
-<h2><a name="Issues">Issues</a></h2>
-<h3>1. Return type of certain basic_path members returning strings. [Howard
-Hinnant]</h3>
-<p>For member functions described as returning "<code>const string_type</code>"
-or "<code>const external_string_type</code>", implementations are permitted to
-return "<code>const string_type&</code>" or "<code>const
-external_string_type&</code>" respectively.</p>
-<p>This allows implementations to avoid unnecessary copies. Return-by-value is
-specified as
-<code>const</code> to ensure programs won't break if moved to a
-return-by-reference implementation.</p>
-<p>For example, the Boost implementation keeps the internal representation of a
-pathname in the portable format, so string() returns by reference and is inlined:</p>
-<blockquote>
- <pre>const string_type & string() const { return m_path; }</pre>
-</blockquote>
-<p>Howard Hinnant comments: This may inhibit optimization if rvalue reference is
-accepted. Const-qualified return types can't be moved from. I'd
-rather see either the return type specified as
-<code>const string_type&</code> or <code>string_type</code>.</p>
-<p>Beman Dawes comments: I can't make up my mind. Removing the const will bite
-users, but not very often. OTOH, excessive copying is a real concern, and if
-move semantics can alleviate that, I'm all for it. What does the LWG think?</p>
-<h3>2. Basic_path canonize() and normalize() removed. [Beman Dawes]</h3>
-<p>The Boost implementation has basic_path functions canonize() and normalize()
-which return cleaned up string representations of a pathname. They have been
-removed from the proposal as messy to specify and implement, not hugely useful,
-and possible to implement by users as non-member functions without any loss of
-functionality or efficiency. There was also a concern the proposal was getting a
-bit large.</p>
-<p>These functions can be added later as convenience functions if the LWG so
-desires..</p>
-<h3>3. Filename checking functions. [Beman Dawes]</h3>
-<p>Boost has a set of predicate functions that determine if a filename is valid
-for a particular operating or system. These can be used as building blocks for
-functions that determine if an entire pathname is valid for a particular
-operating or file system.</p>
-<p>Users can use these functions to ensure that pathnames are in fact portable
-to target operating or file systems, without having to actually test on the
-target systems.</p>
-<p>These functions are not included in the proposal because of lack of time, and
-uncertainty as to their fit with the Standard Library. They can be added later
-if the LWG so desires.</p>
-<h2><a name="Acknowledgements">Acknowledgements</a></h2>
-<p>This Filesystem Library is dedicated to my wife, Sonda, who provided the
-support necessary to see both a trial implementation and the proposal itself
-through to completion. She gave me the strength to continue after a difficult
-year of cancer treatment in the middle of it all.</p>
-<p>Many people contributed technical comments, ideas, and suggestions to the
-Boost Filesystem Library. See
-<a href="http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements">
-http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements>.</p>
-<p>Dietmar Kühl contributed the original Boost Filesystem Library
-directory_iterator design. Peter Dimov, Walter Landry, Rob Stewart, and Thomas
-Witt were particularly helpful in refining the library.</p>
-<p>The create_directories, extension, basename, and replace_extension functions
-were developed by Vladimir Prus.</p>
-<p>Howard Hinnant and John Maddock reviewed a draft of the proposal, and
-identified a number of mistakes or weaknesses, resulting in a more polished
-final document.</p>
-<h2><a name="References">References</a></h2>
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="16%" valign="top">[<a name="ISO_POSIX">ISO-POSIX</a>]</td>
- <td width="84%">ISO/IEC 9945:2003, IEEE Std 1003.1-2001, and The Open Group
- Base Specifications, Issue 6. Also known as The Single Unix<font face="Times New Roman">®
- Specification, Version 3. Available from each of the organizations involved
- in its creation. For example, read online or download from
- <a href="http://www.unix.org/single_unix_specification/">
- www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 -
- POSIX homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">
- www.open-std.org/jtc1/sc22/WG15/</a></td>
- </tr>
- <tr>
- <td width="16%" valign="top">[Abrahams]</td>
- <td width="84%">Dave Abrahams, Error and Exception Handling,
- <a href="http://www.boost.org/more/error_handling.html">
- www.boost.org/more/error_handling.html</a></td>
- </tr>
-</table>
-<h2><a name="Revision-History">Revision History</a></h2>
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="11%" valign="top">
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1841.html">
- N1841</a></td>
- <td width="89%">
- <ul>
- <li>Initial version, August, 2005, pre-Tremblant mailing</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td width="11%" valign="top" bgcolor="#FFFFFF">
- <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1889.html">
- N1889</a><br>
- Revision 1</td>
- <td width="89%" bgcolor="#FFFFFF">
- <ul>
- <li>Missing argument name <code>fmt</code> added to several <code>
- basic_path</code> members.</li>
- <li> <code>is_empty()</code> name discrepancy between synopsis and
- description corrected.</li>
- <li><code>file_size()</code> return type changed from <code>intmax_t</code>
- to <code>uintmax_t</code>. Wording slightly clarified.</li>
- <li><code>struct space_info</code> and non-member function <code>space()</code>
- added.</li>
- <li>A paragraph was added to <b><i>Important design decisions</i></b>
- mentioning the need for both portable and platform specific semantics.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td width="11%" valign="top" bgcolor="#FFFFFF">
- N1934<br>
- Revision 2</td>
- <td width="89%" bgcolor="#FFFFFF">
- <ul>
- <li>Changed native path identification from constructor argument to
- <code>"//:"</code> escape prefix. Rationale: simplifies basic_path
- constructor interfaces, easier use for platforms needing explicit native
- format identification.</li>
- <li>Introduced a new base class, filesystem_error, to<span style="background-color: #FFFFFF">
- allow users to catch a single exception type if desired, or to deal with
- the case where the templated type is unknown. Rename filesystem_error and
- wfilesystem_error accordingly.</span></li>
- <li><span style="background-color: #FFFFFF">Rewording
- basic_filesystem_error text to more closely follow the form of clause 19
- of the standard.</span></li>
- <li><span style="background-color: #FFFFFF">Removed dual specification of
- certain errors in both "Reguires" and "Throws" paragraphs. Since throwing
- an exception is well-defined behavior, the error condition does not result
- in undefined behavior as implied by "Requires". (Suggested by Dave
- Abrahams)</span></li>
- <li><span style="background-color: #FFFFFF">Added a non-throwing version
- of create_hard_link().</span></li>
- <li><span style="background-color: #FFFFFF">Added two create_symlink()
- functions.</span></li>
- <li><span style="background-color: #FFFFFF">Added basic_path inserter and
- extractor. (Suggested by Vladimir Prus)</span></li>
- <li><span style="background-color: #FFFFFF">Added basic_path member and
- non-member swap() functions.</span></li>
- <li><span style="background-color: #FFFFFF">Aligned basic_path operator
- functions with std::basic_string practice. </span></li>
- <li><span style="background-color: #FFFFFF">Replaced status_flags with
- file_type enum and file_status class to improve encapsulation and allow
- for future expansion of file_status.</span></li>
- <li><span style="background-color: #FFFFFF">Added predicate functions
- overloaded on file_status (Suggested by Martin Adrian). This change,
- coupled with the introduction of file_status, clarifies the meaning of
- file types and related predicate operations, and eliminates the need for
- user bit manipulation, which was a source of user error.</span></li>
- <li><span style="background-color: #FFFFFF">Predicate function
- specification clarified accordingly.</span></li>
- <li><span style="background-color: #FFFFFF">Revised and explicitly
- documented policy for non-throwing versions of functions to increase
- consistency.</span></li>
- <li><span style="background-color: #FFFFFF">Added basic_directory_iterator
- constructor non-throwing overload (Suggested by Martin Adrian).</span></li>
- <li><span style="background-color: #FFFFFF">Changed symlink awareness to
- separately name functions to cut clutter caused by addition of
- non-throwing overloads.</span></li>
- </ul>
- </td>
- </tr>
- </table>
-<hr>
-<p>© Copyright Beman Dawes, 2002-2006</p>
-<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y-%m-%d" startspan -->2006-02-06<!--webbot bot="Timestamp" endspan i-checksum="12142" --></p>
-
-</body>
-
-</html>
\ No newline at end of file
Modified: branches/release/libs/filesystem/example/Jamfile.v2
==============================================================================
--- branches/release/libs/filesystem/example/Jamfile.v2 (original)
+++ branches/release/libs/filesystem/example/Jamfile.v2 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,6 +1,6 @@
-# Boost System Library Build Jamfile
-
-# (C) Copyright Beman Dawes 2002, 2006
+# Boost Filesystem Library Example Jamfile
+
+# (C) Copyright Vladimir Prus 2003
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
Modified: branches/release/libs/filesystem/example/mbpath.cpp
==============================================================================
--- branches/release/libs/filesystem/example/mbpath.cpp (original)
+++ branches/release/libs/filesystem/example/mbpath.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,6 +1,6 @@
// Boost.Filesystem mbpath.hpp ---------------------------------------------//
-// Copyright Beman Dawes 2005
+// © Copyright Beman Dawes 2005
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -46,7 +46,7 @@
boost::throw_exception<fs::basic_filesystem_error<mbpath> >(
fs::basic_filesystem_error<mbpath>(
"user::mbpath::to_external conversion error",
- ph, EINVAL ) );
+ ph, boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) );
*to_next = '\0';
return external_string_type( work.get() );
}
@@ -64,7 +64,8 @@
work.get()+work_size, to_next ) != std::codecvt_base::ok )
boost::throw_exception<fs::basic_filesystem_error<mbpath> >(
fs::basic_filesystem_error<mbpath>(
- "user::mbpath::to_internal conversion error", EINVAL ) );
+ "user::mbpath::to_internal conversion error",
+ boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) );
*to_next = L'\0';
return internal_string_type( work.get() );
}
Modified: branches/release/libs/filesystem/src/operations.cpp
==============================================================================
--- branches/release/libs/filesystem/src/operations.cpp (original)
+++ branches/release/libs/filesystem/src/operations.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -2,12 +2,11 @@
// Copyright 2002-2005 Beman Dawes
// Copyright 2001 Dietmar Kuehl
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+// at http://www.boost.org/LICENSE_1_0.txt)
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem/
+// See library home page at http://www.boost.org/libs/filesystem
//----------------------------------------------------------------------------//
@@ -24,9 +23,8 @@
#if !(defined(__HP_aCC) && defined(_ILP32) && \
!defined(_STATVFS_ACPP_PROBLEMS_FIXED))
-# define _FILE_OFFSET_BITS 64 // at worst, these defines may have no effect,
+#define _FILE_OFFSET_BITS 64 // at worst, these defines may have no effect,
#endif
-
#define __USE_FILE_OFFSET64 // but that is harmless on Windows and on POSIX
// 64-bit systems or on 32-bit systems which don't have files larger
// than can be represented by a traditional POSIX/UNIX off_t type.
@@ -51,33 +49,38 @@
#include <boost/detail/workaround.hpp>
namespace fs = boost::filesystem;
+using boost::system::error_code;
+using boost::system::system_category;
# if defined(BOOST_WINDOWS_API)
-# include "windows.h"
+# include <windows.h>
# if defined(__BORLANDC__) || defined(__MWERKS__)
# if defined(__BORLANDC__)
using std::time_t;
# endif
-# include "utime.h"
+# include <utime.h>
# else
-# include "sys/utime.h"
+# include <sys/utime.h>
# endif
# else // BOOST_POSIX_API
# include <sys/types.h>
-# ifndef __APPLE__
+# if !defined(__APPLE__) && !defined(__OpenBSD__)
# include <sys/statvfs.h>
# define BOOST_STATVFS statvfs
# define BOOST_STATVFS_F_FRSIZE vfs.f_frsize
# else
+#ifdef __OpenBSD__
+# include <sys/param.h>
+#endif
# include <sys/mount.h>
# define BOOST_STATVFS statfs
# define BOOST_STATVFS_F_FRSIZE static_cast<boost::uintmax_t>( vfs.f_bsize )
# endif
-# include "dirent.h"
-# include "unistd.h"
-# include "fcntl.h"
-# include "utime.h"
+# include <dirent.h>
+# include <unistd.h>
+# include <fcntl.h>
+# include <utime.h>
# include "limits.h"
# endif
@@ -107,7 +110,7 @@
namespace
{
- static const fs::directory_iterator end_itr;
+ const fs::directory_iterator end_itr;
bool is_empty_directory( const std::string & dir_path )
{
return fs::directory_iterator(fs::path(dir_path)) == end_itr;
@@ -128,7 +131,7 @@
inline DWORD get_file_attributes( const wchar_t * ph )
{ return ::GetFileAttributesW( ph ); }
- static const fs::wdirectory_iterator wend_itr;
+ const fs::wdirectory_iterator wend_itr;
bool is_empty_directory( const std::wstring & dir_path )
{
return fs::wdirectory_iterator(fs::wpath(dir_path)) == wend_itr;
@@ -151,6 +154,9 @@
inline DWORD get_current_directory( DWORD sz, wchar_t * buf )
{ return ::GetCurrentDirectoryW( sz, buf ); }
+ inline bool set_current_directory( const wchar_t * buf )
+ { return ::SetCurrentDirectoryW( buf ) != 0 ; }
+
inline bool get_free_disk_space( const std::wstring & ph,
PULARGE_INTEGER avail, PULARGE_INTEGER total, PULARGE_INTEGER free )
{ return ::GetDiskFreeSpaceExW( ph.c_str(), avail, total, free ) != 0; }
@@ -181,24 +187,32 @@
# endif // ifndef BOOST_FILESYSTEM_NARROW_ONLY
template< class String >
- fs::file_status status_template( const String & ph, fs::system_error_type & ec )
+ fs::file_status status_template( const String & ph, error_code & ec )
{
DWORD attr( get_file_attributes( ph.c_str() ) );
if ( attr == 0xFFFFFFFF )
{
- ec = ::GetLastError();
- if ((ec == ERROR_FILE_NOT_FOUND)
- || (ec == ERROR_PATH_NOT_FOUND)
- || (ec == ERROR_INVALID_NAME) // "tools/jam/src/:sys:stat.h", "//foo"
- || (ec == ERROR_INVALID_PARAMETER) // ":sys:stat.h"
- || (ec == ERROR_BAD_NETPATH))
+ ec = error_code( ::GetLastError(), system_category );
+ if ((ec.value() == ERROR_FILE_NOT_FOUND)
+ || (ec.value() == ERROR_PATH_NOT_FOUND)
+ || (ec.value() == ERROR_INVALID_NAME) // "tools/jam/src/:sys:stat.h", "//foo"
+ || (ec.value() == ERROR_INVALID_PARAMETER) // ":sys:stat.h"
+ || (ec.value() == ERROR_BAD_PATHNAME) // "//nosuch" on Win64
+ || (ec.value() == ERROR_BAD_NETPATH)) // "//nosuch" on Win32
{
- ec = 0; // these are not considered errors
+ ec = error_code(); // these are not considered errors;
+ // the status is considered not found
return fs::file_status( fs::file_not_found );
}
+ else if ((ec.value() == ERROR_SHARING_VIOLATION))
+ {
+ ec = error_code(); // these are not considered errors;
+ // the file exists but the type is not known
+ return fs::file_status( fs::type_unknown );
+ }
return fs::file_status( fs::status_unknown );
}
- ec = 0;
+ ec = error_code();;
return (attr & FILE_ATTRIBUTE_DIRECTORY)
? fs::file_status( fs::directory_file )
: fs::file_status( fs::regular_file );
@@ -214,8 +228,8 @@
{
WIN32_FILE_ATTRIBUTE_DATA fad;
if ( get_file_attributes_ex( ph.c_str(), fad ) == 0 )
- return std::make_pair( ::GetLastError(), false );
- return std::make_pair( 0,
+ return std::make_pair( error_code( ::GetLastError(), system_category ), false );
+ return std::make_pair( error_code(),
( fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
? is_empty_directory( ph )
:( !fad.nFileSizeHigh && !fad.nFileSizeLow ) );
@@ -281,21 +295,21 @@
{
if ( p1.handle != INVALID_HANDLE_VALUE
|| p2.handle != INVALID_HANDLE_VALUE )
- { return std::make_pair( 0, false ); }
+ { return std::make_pair( error_code(), false ); }
assert( p1.handle == INVALID_HANDLE_VALUE
&& p2.handle == INVALID_HANDLE_VALUE );
- { return std::make_pair( error1, false ); }
+ { return std::make_pair( error_code( error1, system_category), false ); }
}
// at this point, both handles are known to be valid
BY_HANDLE_FILE_INFORMATION info1, info2;
if ( !::GetFileInformationByHandle( p1.handle, &info1 ) )
- { return std::make_pair( ::GetLastError(), false ); }
+ { return std::make_pair( error_code( ::GetLastError(), system_category ), false ); }
if ( !::GetFileInformationByHandle( p2.handle, &info2 ) )
- { return std::make_pair( ::GetLastError(), false ); }
+ { return std::make_pair( error_code( ::GetLastError(), system_category ), false ); }
// In theory, volume serial numbers are sufficient to distinguish between
// devices, but in practice VSN's are sometimes duplicated, so last write
// time and file size are also checked.
- return std::make_pair( 0,
+ return std::make_pair( error_code(),
info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
&& info1.nFileIndexHigh == info2.nFileIndexHigh
&& info1.nFileIndexLow == info2.nFileIndexLow
@@ -314,10 +328,10 @@
WIN32_FILE_ATTRIBUTE_DATA fad;
// by now, intmax_t is 64-bits on all Windows compilers
if ( get_file_attributes_ex( ph.c_str(), fad ) == 0 )
- return std::make_pair( ::GetLastError(), 0 );
+ return std::make_pair( error_code( ::GetLastError(), system_category ), 0 );
if ( (fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) !=0 )
- return std::make_pair( ERROR_FILE_NOT_FOUND, 0 );
- return std::make_pair( 0,
+ return std::make_pair( error_code( ERROR_FILE_NOT_FOUND, system_category), 0 );
+ return std::make_pair( error_code(),
(static_cast<boost::uintmax_t>(fad.nFileSizeHigh)
<< (sizeof(fad.nFileSizeLow)*8))
+ fad.nFileSizeLow );
@@ -335,7 +349,7 @@
boost::filesystem::detail::space_pair result;
if ( get_free_disk_space( ph, &avail, &total, &free ) )
{
- result.first = 0;
+ result.first = error_code();
result.second.capacity
= (static_cast<boost::uintmax_t>(total.HighPart) << 32)
+ total.LowPart;
@@ -348,7 +362,7 @@
}
else
{
- result.first = ::GetLastError();
+ result.first = error_code( ::GetLastError(), system_category );
result.second.capacity = result.second.free
= result.second.available = 0;
}
@@ -359,7 +373,7 @@
{ return ::GetCurrentDirectoryA( sz, buf ); }
template< class String >
- boost::filesystem::system_error_type
+ error_code
get_current_path_template( String & ph )
{
DWORD sz;
@@ -369,9 +383,20 @@
typedef typename String::value_type value_type;
boost::scoped_array<value_type> buf( new value_type[sz] );
if ( get_current_directory( sz, buf.get() ) == 0 )
- return ::GetLastError();
+ return error_code( ::GetLastError(), system_category );
ph = buf.get();
- return 0;
+ return error_code();
+ }
+
+ inline bool set_current_directory( const char * buf )
+ { return ::SetCurrentDirectoryA( buf ) != 0; }
+
+ template< class String >
+ error_code
+ set_current_path_template( const String & ph )
+ {
+ return error_code( set_current_directory( ph.c_str() )
+ ? 0 : ::GetLastError(), system_category );
}
inline std::size_t get_full_path_name(
@@ -385,31 +410,31 @@
const std::size_t buf_size( 128 );
template<class String>
- boost::filesystem::system_error_type
+ error_code
get_full_path_name_template( const String & ph, String & target )
{
typename String::value_type buf[buf_size];
typename String::value_type * pfn;
std::size_t len = get_full_path_name( ph,
buf_size , buf, &pfn );
- if ( len == 0 ) return ::GetLastError();
+ if ( len == 0 ) return error_code( ::GetLastError(), system_category );
if ( len > buf_size )
{
typedef typename String::value_type value_type;
boost::scoped_array<value_type> big_buf( new value_type[len] );
if ( (len=get_full_path_name( ph, len , big_buf.get(), &pfn ))
- == 0 ) return ::GetLastError();
+ == 0 ) return error_code( ::GetLastError(), system_category );
big_buf[len] = '\0';
target = big_buf.get();
- return 0;
+ return error_code();
}
buf[len] = '\0';
target = buf;
- return 0;
+ return error_code();
}
template<class String>
- boost::filesystem::system_error_type
+ error_code
get_file_write_time( const String & ph, FILETIME & last_write_time )
{
handle_wrapper hw(
@@ -417,13 +442,13 @@
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0 ) );
if ( hw.handle == INVALID_HANDLE_VALUE )
- return ::GetLastError();
- return ::GetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
- ? 0 : ::GetLastError();
+ return error_code( ::GetLastError(), system_category );
+ return error_code( ::GetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
+ ? 0 : ::GetLastError(), system_category );
}
template<class String>
- boost::filesystem::system_error_type
+ error_code
set_file_write_time( const String & ph, const FILETIME & last_write_time )
{
handle_wrapper hw(
@@ -431,9 +456,9 @@
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0 ) );
if ( hw.handle == INVALID_HANDLE_VALUE )
- return ::GetLastError();
- return ::SetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
- ? 0 : ::GetLastError();
+ return error_code( ::GetLastError(), system_category );
+ return error_code( ::SetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
+ ? 0 : ::GetLastError(), system_category );
}
// these constants come from inspecting some Microsoft sample code
@@ -468,13 +493,13 @@
last_write_time_template( const String & ph )
{
FILETIME lwt;
- boost::filesystem::system_error_type result
- = get_file_write_time( ph, lwt );
- return std::make_pair( result, to_time_t( lwt ) );
+ error_code ec(
+ get_file_write_time( ph, lwt ) );
+ return std::make_pair( ec, to_time_t( lwt ) );
}
template<class String>
- boost::filesystem::system_error_type
+ error_code
last_write_time_template( const String & ph, const std::time_t new_time )
{
FILETIME lwt;
@@ -489,22 +514,22 @@
{ return ::DeleteFileA( ph.c_str() ) != 0; }
template<class String>
- boost::filesystem::system_error_type
+ error_code
remove_template( const String & ph )
{
- fs::system_error_type ec;
+ error_code ec;
fs::file_status sf( fs::detail::status_api( ph, ec ) );
if ( ec ) return ec;
if ( fs::is_directory( sf ) )
{
if ( !remove_directory( ph ) )
- return ::GetLastError();
+ return error_code(::GetLastError(), system_category);
}
else
{
- if ( !delete_file( ph ) ) return ::GetLastError();
+ if ( !delete_file( ph ) ) return error_code(::GetLastError(), system_category);
}
- return 0;
+ return error_code();
}
inline bool create_directory( const std::string & dir )
@@ -514,13 +539,13 @@
boost::filesystem::detail::query_pair
create_directory_template( const String & dir_ph )
{
- boost::filesystem::system_error_type error(0), dummy;
+ error_code error, dummy;
if ( create_directory( dir_ph ) ) return std::make_pair( error, true );
- error = ::GetLastError();
+ error = error_code( ::GetLastError(), system_category );
// an error here may simply mean the postcondition is already met
- if ( error == ERROR_ALREADY_EXISTS
+ if ( error.value() == ERROR_ALREADY_EXISTS
&& fs::is_directory( fs::detail::status_api( dir_ph, dummy ) ) )
- return std::make_pair( 0, false );
+ return std::make_pair( error_code(), false );
return std::make_pair( error, false );
}
@@ -532,12 +557,12 @@
#if _WIN32_WINNT >= 0x500
template<class String>
- boost::filesystem::system_error_type
+ error_code
create_hard_link_template( const String & to_ph,
const String & from_ph )
{
- return fs::system_error_type( create_hard_link( to_ph.c_str(), from_ph.c_str() )
- ? 0 : ::GetLastError() );
+ return error_code( create_hard_link( to_ph.c_str(), from_ph.c_str() )
+ ? 0 : ::GetLastError(), system_category );
}
#endif
@@ -551,14 +576,17 @@
namespace detail
{
-#if defined(BOOST_WINDOWS_API)
- BOOST_FILESYSTEM_DECL system_error_type not_found_error = ERROR_PATH_NOT_FOUND;
-#else
- BOOST_FILESYSTEM_DECL system_error_type not_found_error = ENOENT;
-#endif
-
// free functions ----------------------------------------------------------//
+ BOOST_FILESYSTEM_DECL error_code not_found_error()
+ {
+# ifdef BOOST_WINDOWS_API
+ return error_code(ERROR_PATH_NOT_FOUND, system_category);
+# else
+ return error_code(ENOENT, system_category);
+# endif
+ }
+
BOOST_FILESYSTEM_DECL bool possible_large_file_size_support()
{
# ifdef BOOST_POSIX_API
@@ -572,13 +600,13 @@
# ifdef BOOST_WINDOWS_API
BOOST_FILESYSTEM_DECL fs::file_status
- status_api( const std::string & ph, fs::system_error_type & ec )
+ status_api( const std::string & ph, error_code & ec )
{ return status_template( ph, ec ); }
# ifndef BOOST_FILESYSTEM_NARROW_ONLY
BOOST_FILESYSTEM_DECL fs::file_status
- status_api( const std::wstring & ph, fs::system_error_type & ec )
+ status_api( const std::wstring & ph, error_code & ec )
{ return status_template( ph, ec ); }
BOOST_FILESYSTEM_DECL bool symbolic_link_exists_api( const std::wstring & )
@@ -602,11 +630,16 @@
{ return space_template( ph ); }
BOOST_FILESYSTEM_DECL
- boost::filesystem::system_error_type
+ error_code
get_current_path_api( std::wstring & ph )
{ return get_current_path_template( ph ); }
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL
+ error_code
+ set_current_path_api( const std::wstring & ph )
+ { return set_current_path_template( ph ); }
+
+ BOOST_FILESYSTEM_DECL error_code
get_full_path_name_api( const std::wstring & ph, std::wstring & target )
{ return get_full_path_name_template( ph, target ); }
@@ -614,7 +647,7 @@
last_write_time_api( const std::wstring & ph )
{ return last_write_time_template( ph ); }
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
last_write_time_api( const std::wstring & ph, std::time_t new_value )
{ return last_write_time_template( ph, new_value ); }
@@ -623,32 +656,32 @@
{ return create_directory_template( ph ); }
#if _WIN32_WINNT >= 0x500
- BOOST_FILESYSTEM_DECL fs::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
create_hard_link_api( const std::wstring & to_ph,
const std::wstring & from_ph )
{ return create_hard_link_template( to_ph, from_ph ); }
#endif
- BOOST_FILESYSTEM_DECL fs::system_error_type
- create_symlink_api( const std::wstring & to_ph,
- const std::wstring & from_ph )
- { return ERROR_NOT_SUPPORTED; }
+ BOOST_FILESYSTEM_DECL error_code
+ create_symlink_api( const std::wstring & /*to_ph*/,
+ const std::wstring & /*from_ph*/ )
+ { return error_code( ERROR_NOT_SUPPORTED, system_category ); }
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
remove_api( const std::wstring & ph ) { return remove_template( ph ); }
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
rename_api( const std::wstring & from, const std::wstring & to )
{
- return ::MoveFileW( from.c_str(), to.c_str() )
- ? 0 : ::GetLastError();
+ return error_code( ::MoveFileW( from.c_str(), to.c_str() )
+ ? 0 : ::GetLastError(), system_category );
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
copy_file_api( const std::wstring & from, const std::wstring & to )
{
- return ::CopyFileW( from.c_str(), to.c_str(), /*fail_if_exists=*/true )
- ? 0 : ::GetLastError();
+ return error_code( ::CopyFileW( from.c_str(), to.c_str(), /*fail_if_exists=*/true )
+ ? 0 : ::GetLastError(), system_category );
}
BOOST_FILESYSTEM_DECL bool create_file_api( const std::wstring & ph,
@@ -709,7 +742,7 @@
return narrow_short_form;
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
dir_itr_first( void *& handle, const std::wstring & dir,
std::wstring & target, file_status & sf, file_status & symlink_sf )
{
@@ -723,17 +756,17 @@
== INVALID_HANDLE_VALUE )
{
handle = 0;
- return ::GetLastError() == ERROR_FILE_NOT_FOUND
- ? 0 : ::GetLastError();
+ return error_code( ::GetLastError() == ERROR_FILE_NOT_FOUND
+ ? 0 : ::GetLastError(), system_category );
}
target = data.cFileName;
if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{ sf.type( directory_file ); symlink_sf.type( directory_file ); }
else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return 0;
+ return error_code();
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
dir_itr_increment( void *& handle, std::wstring & target,
file_status & sf, file_status & symlink_sf )
{
@@ -742,13 +775,13 @@
{
int error = ::GetLastError();
dir_itr_close( handle );
- return error == ERROR_NO_MORE_FILES ? 0 : error;
+ return error_code( error == ERROR_NO_MORE_FILES ? 0 : error, system_category );
}
target = data.cFileName;
if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{ sf.type( directory_file ); symlink_sf.type( directory_file ); }
else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return 0;
+ return error_code();
}
# endif // ifndef BOOST_FILESYSTEM_NARROW_ONLY
@@ -775,11 +808,16 @@
{ return space_template( ph ); }
BOOST_FILESYSTEM_DECL
- boost::filesystem::system_error_type
+ error_code
get_current_path_api( std::string & ph )
{ return get_current_path_template( ph ); }
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL
+ error_code
+ set_current_path_api( const std::string & ph )
+ { return set_current_path_template( ph ); }
+
+ BOOST_FILESYSTEM_DECL error_code
get_full_path_name_api( const std::string & ph, std::string & target )
{ return get_full_path_name_template( ph, target ); }
@@ -787,7 +825,7 @@
last_write_time_api( const std::string & ph )
{ return last_write_time_template( ph ); }
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
last_write_time_api( const std::string & ph, std::time_t new_value )
{ return last_write_time_template( ph, new_value ); }
@@ -796,35 +834,37 @@
{ return create_directory_template( ph ); }
#if _WIN32_WINNT >= 0x500
- BOOST_FILESYSTEM_DECL fs::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
create_hard_link_api( const std::string & to_ph,
const std::string & from_ph )
- { return system_error_type( create_hard_link_template( to_ph, from_ph ) ); }
+ {
+ return create_hard_link_template( to_ph, from_ph );
+ }
#endif
- BOOST_FILESYSTEM_DECL fs::system_error_type
- create_symlink_api( const std::string & to_ph,
- const std::string & from_ph )
- { return ERROR_NOT_SUPPORTED; }
+ BOOST_FILESYSTEM_DECL error_code
+ create_symlink_api( const std::string & /*to_ph*/,
+ const std::string & /*from_ph*/ )
+ { return error_code( ERROR_NOT_SUPPORTED, system_category ); }
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
remove_api( const std::string & ph ) { return remove_template( ph ); }
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
rename_api( const std::string & from, const std::string & to )
{
- return ::MoveFileA( from.c_str(), to.c_str() )
- ? 0 : ::GetLastError();
+ return error_code( ::MoveFileA( from.c_str(), to.c_str() )
+ ? 0 : ::GetLastError(), system_category );
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
copy_file_api( const std::string & from, const std::string & to )
{
- return ::CopyFileA( from.c_str(), to.c_str(), /*fail_if_exists=*/true )
- ? 0 : ::GetLastError();
+ return error_code( ::CopyFileA( from.c_str(), to.c_str(), /*fail_if_exists=*/true )
+ ? 0 : ::GetLastError(), system_category );
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
dir_itr_first( void *& handle, const std::string & dir,
std::string & target, file_status & sf, file_status & symlink_sf )
// Note: an empty root directory has no "." or ".." entries, so this
@@ -842,29 +882,29 @@
== INVALID_HANDLE_VALUE )
{
handle = 0;
- return ::GetLastError() == ERROR_FILE_NOT_FOUND
- ? 0 : ::GetLastError();
+ return error_code( ::GetLastError() == ERROR_FILE_NOT_FOUND
+ ? 0 : ::GetLastError(), system_category );
}
target = data.cFileName;
if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{ sf.type( directory_file ); symlink_sf.type( directory_file ); }
else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return 0;
+ return error_code();
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
dir_itr_close( void *& handle )
{
if ( handle != 0 )
{
bool ok = ::FindClose( handle ) != 0;
handle = 0;
- return ok ? 0 : ::GetLastError();
+ return error_code( ok ? 0 : ::GetLastError(), system_category );
}
- return 0;
+ return error_code();
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
dir_itr_increment( void *& handle, std::string & target,
file_status & sf, file_status & symlink_sf )
{
@@ -873,32 +913,32 @@
{
int error = ::GetLastError();
dir_itr_close( handle );
- return error == ERROR_NO_MORE_FILES ? 0 : error;
+ return error_code( error == ERROR_NO_MORE_FILES ? 0 : error, system_category );
}
target = data.cFileName;
if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{ sf.type( directory_file ); symlink_sf.type( directory_file ); }
else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return 0;
+ return error_code();
}
# else // BOOST_POSIX_API
BOOST_FILESYSTEM_DECL fs::file_status
- status_api( const std::string & ph, system_error_type & ec )
+ status_api( const std::string & ph, error_code & ec )
{
struct stat path_stat;
if ( ::stat( ph.c_str(), &path_stat ) != 0 )
{
if ( errno == ENOENT || errno == ENOTDIR )
{
- ec = 0;
+ ec = error_code();
return fs::file_status( fs::file_not_found );
}
- ec = errno;
+ ec = error_code( errno, system_category );
return fs::file_status( fs::status_unknown );
}
- ec = 0;
+ ec = error_code();
if ( S_ISDIR( path_stat.st_mode ) )
return fs::file_status( fs::directory_file );
if ( S_ISREG( path_stat.st_mode ) )
@@ -915,20 +955,20 @@
}
BOOST_FILESYSTEM_DECL fs::file_status
- symlink_status_api( const std::string & ph, system_error_type & ec )
+ symlink_status_api( const std::string & ph, error_code & ec )
{
struct stat path_stat;
if ( ::lstat( ph.c_str(), &path_stat ) != 0 )
{
if ( errno == ENOENT || errno == ENOTDIR )
{
- ec = 0;
+ ec = error_code();
return fs::file_status( fs::file_not_found );
}
- ec = errno;
+ ec = error_code( errno, system_category );
return fs::file_status( fs::status_unknown );
}
- ec = 0;
+ ec = error_code();
if ( S_ISREG( path_stat.st_mode ) )
return fs::file_status( fs::regular_file );
if ( S_ISDIR( path_stat.st_mode ) )
@@ -960,8 +1000,8 @@
{
struct stat path_stat;
if ( (::stat( ph.c_str(), &path_stat )) != 0 )
- return std::make_pair( errno, false );
- return std::make_pair( 0, S_ISDIR( path_stat.st_mode )
+ return std::make_pair( error_code( errno, system_category ), false );
+ return std::make_pair( error_code(), S_ISDIR( path_stat.st_mode )
? is_empty_directory( ph )
: path_stat.st_size == 0 );
}
@@ -974,9 +1014,9 @@
struct stat s1;
int e1( ::stat( ph1.c_str(), &s1 ) );
if ( e1 != 0 || e2 != 0 )
- return std::make_pair( e1 != 0 && e2 != 0 ? errno : 0, false );
+ return std::make_pair( error_code( e1 != 0 && e2 != 0 ? errno : 0, system_category ), false );
// at this point, both stats are known to be valid
- return std::make_pair( 0,
+ return std::make_pair( error_code(),
s1.st_dev == s2.st_dev
&& s1.st_ino == s2.st_ino
// According to the POSIX stat specs, "The st_ino and st_dev fields
@@ -991,10 +1031,10 @@
{
struct stat path_stat;
if ( ::stat( ph.c_str(), &path_stat ) != 0 )
- return std::make_pair( errno, 0 );
+ return std::make_pair( error_code( errno, system_category ), 0 );
if ( !S_ISREG( path_stat.st_mode ) )
- return std::make_pair( EPERM, 0 );
- return std::make_pair( 0,
+ return std::make_pair( error_code( EPERM, system_category ), 0 );
+ return std::make_pair( error_code(),
static_cast<boost::uintmax_t>(path_stat.st_size) );
}
@@ -1005,13 +1045,13 @@
space_pair result;
if ( ::BOOST_STATVFS( ph.c_str(), &vfs ) != 0 )
{
- result.first = errno;
+ result.first = error_code( errno, system_category );
result.second.capacity = result.second.free
= result.second.available = 0;
}
else
{
- result.first = 0;
+ result.first = error_code();
result.second.capacity
= static_cast<boost::uintmax_t>(vfs.f_blocks) * BOOST_STATVFS_F_FRSIZE;
result.second.free
@@ -1027,22 +1067,23 @@
{
struct stat path_stat;
if ( ::stat( ph.c_str(), &path_stat ) != 0 )
- return std::make_pair( errno, 0 );
- return std::make_pair( 0, path_stat.st_mtime );
+ return std::make_pair( error_code( errno, system_category ), 0 );
+ return std::make_pair( error_code(), path_stat.st_mtime );
}
- BOOST_FILESYSTEM_DECL fs::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
last_write_time_api( const std::string & ph, std::time_t new_value )
{
struct stat path_stat;
- if ( ::stat( ph.c_str(), &path_stat ) != 0 ) return errno;
+ if ( ::stat( ph.c_str(), &path_stat ) != 0 )
+ return error_code( errno, system_category );
::utimbuf buf;
buf.actime = path_stat.st_atime; // utime() updates access time too:-(
buf.modtime = new_value;
- return ::utime( ph.c_str(), &buf ) != 0 ? errno : 0;
+ return error_code( ::utime( ph.c_str(), &buf ) != 0 ? errno : 0, system_category );
}
- BOOST_FILESYSTEM_DECL fs::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
get_current_path_api( std::string & ph )
{
for ( long path_max = 32;; path_max *=2 ) // loop 'til buffer large enough
@@ -1056,7 +1097,7 @@
# if defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
&& errno != 0
# endif
- ) return errno;
+ ) return error_code( errno, system_category );
}
else
{
@@ -1064,38 +1105,46 @@
break;
}
}
- return 0;
+ return error_code();
+ }
+
+ BOOST_FILESYSTEM_DECL error_code
+ set_current_path_api( const std::string & ph )
+ {
+ return error_code( ::chdir( ph.c_str() )
+ ? errno : 0, system_category );
}
BOOST_FILESYSTEM_DECL fs::detail::query_pair
create_directory_api( const std::string & ph )
{
if ( ::mkdir( ph.c_str(), S_IRWXU|S_IRWXG|S_IRWXO ) == 0 )
- { return std::make_pair( 0, true ); }
- system_error_type ec=errno, dummy;
+ { return std::make_pair( error_code(), true ); }
+ int ec=errno;
+ error_code dummy;
if ( ec != EEXIST
|| !fs::is_directory( status_api( ph, dummy ) ) )
- { return std::make_pair( ec, false ); }
- return std::make_pair( 0, false );
+ { return std::make_pair( error_code( ec, system_category ), false ); }
+ return std::make_pair( error_code(), false );
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
create_hard_link_api( const std::string & to_ph,
const std::string & from_ph )
{
- return ::link( to_ph.c_str(), from_ph.c_str() ) == 0
- ? 0 : errno;
+ return error_code( ::link( to_ph.c_str(), from_ph.c_str() ) == 0
+ ? 0 : errno, system_category );
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
create_symlink_api( const std::string & to_ph,
const std::string & from_ph )
{
- return ::symlink( to_ph.c_str(), from_ph.c_str() ) == 0
- ? 0 : errno;
+ return error_code( ::symlink( to_ph.c_str(), from_ph.c_str() ) == 0
+ ? 0 : errno, system_category );
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
remove_api( const std::string & ph )
{
# if defined(__QNXNTO__) || (defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)))
@@ -1117,23 +1166,23 @@
// shall fail and set errno to EEXIST or ENOTEMPTY."
// Linux uses ENOTEMPTY, Solaris uses EEXIST.
if ( error == EEXIST ) error = ENOTEMPTY;
- return error;
+ return error_code( error, system_category );
}
- return 0;
+ return error_code();
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
rename_api( const std::string & from, const std::string & to )
{
// POSIX is too permissive so must check
- fs::system_error_type dummy;
+ error_code dummy;
if ( fs::exists( status_api( to, dummy ) ) )
- return EEXIST;
- return std::rename( from.c_str(), to.c_str() ) != 0
- ? errno : 0;
+ return error_code( EEXIST, system_category );
+ return error_code( std::rename( from.c_str(), to.c_str() ) != 0
+ ? errno : 0, system_category );
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
copy_file_api( const std::string & from_file_ph,
const std::string & to_file_ph )
{
@@ -1150,7 +1199,7 @@
from_stat.st_mode )) < 0 )
{
if ( infile >= 0 ) ::close( infile );
- return errno;
+ return error_code( errno, system_category );
}
ssize_t sz, sz_read=1, sz_write;
@@ -1175,13 +1224,12 @@
if ( ::close( infile) < 0 ) sz_read = -1;
if ( ::close( outfile) < 0 ) sz_read = -1;
- return sz_read < 0 ? errno : 0;
+ return error_code( sz_read < 0 ? errno : 0, system_category );
}
-
+
// this code is based on Stevens and Rago, Advanced Programming in the
// UNIX envirnment, 2nd Ed., ISBN 0-201-43307-9, page 49
- fs::system_error_type
- path_max( std::size_t & result )
+ error_code path_max( std::size_t & result )
{
# ifdef PATH_MAX
static std::size_t max = PATH_MAX;
@@ -1196,40 +1244,42 @@
{
if ( errno == 0 ) // indeterminate
max = 4096; // guess
- else return errno;
+ else return error_code( errno, system_category );
}
else max = static_cast<std::size_t>( tmp + 1 ); // relative root
}
result = max;
- return 0;
+ return error_code();
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
dir_itr_first( void *& handle, void *& buffer,
const std::string & dir, std::string & target,
file_status &, file_status & )
{
- static const std::string dummy_first_name( "." );
- if ( (handle = ::opendir( dir.c_str() )) == 0 ) return errno;
- target = dummy_first_name;
+ if ( (handle = ::opendir( dir.c_str() )) == 0 )
+ return error_code( errno, system_category );
+ target = std::string( "." ); // string was static but caused trouble
+ // when iteration called from dtor, after
+ // static had already been destroyed
std::size_t path_size;
- fs::system_error_type ec = path_max( path_size );
+ error_code ec = path_max( path_size );
if ( ec ) return ec;
dirent de;
buffer = std::malloc( (sizeof(dirent) - sizeof(de.d_name))
+ path_size + 1 ); // + 1 for "/0"
- return buffer == 0 ? ENOMEM : 0;
+ return error_code();
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
dir_itr_close( void *& handle, void*& buffer )
{
std::free( buffer );
buffer = 0;
- if ( handle == 0 ) return 0;
+ if ( handle == 0 ) return error_code();
DIR * h( static_cast<DIR*>(handle) );
handle = 0;
- return ::closedir( h ) == 0 ? 0 : errno;
+ return error_code( ::closedir( h ) == 0 ? 0 : errno, system_category );
}
// warning: the only dirent member updated is d_name
@@ -1242,7 +1292,7 @@
&& defined(_POSIX_THREAD_SAFE_FUNCTIONS) \
&& defined(_SC_THREAD_SAFE_FUNCTIONS) \
&& (_POSIX_THREAD_SAFE_FUNCTIONS+0 >= 0) \
- && (!defined(__HP_aCC) || (defined(__HP_aCC) && defined(_REENTRANT)))
+ && (!defined(__hpux) || (defined(__hpux) && defined(_REENTRANT)))
if ( ::sysconf( _SC_THREAD_SAFE_FUNCTIONS ) >= 0 )
{ return ::readdir_r( dirp, entry, result ); }
# endif
@@ -1256,7 +1306,7 @@
return 0;
}
- BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ BOOST_FILESYSTEM_DECL error_code
dir_itr_increment( void *& handle, void *& buffer,
std::string & target, file_status & sf, file_status & symlink_sf )
{
@@ -1265,16 +1315,16 @@
dirent * result;
int return_code;
if ( (return_code = readdir_r_simulator( static_cast<DIR*>(handle),
- entry, &result )) != 0 ) return errno;
+ entry, &result )) != 0 ) return error_code( errno, system_category );
if ( result == 0 ) return dir_itr_close( handle, buffer );
target = entry->d_name;
# ifdef BOOST_FILESYSTEM_STATUS_CACHE
- if ( entry->d_type == DT_UNKNOWN ) // filesystem does not supply d_type value
+ if ( entry->d_type == DT_UNKNOWN ) // filesystem does not supply d_type value
{
sf = symlink_sf = fs::file_status(fs::status_unknown);
}
- else // filesystem supplies d_type value
- {
+ else // filesystem supplies d_type value
+ {
if ( entry->d_type == DT_DIR )
sf = symlink_sf = fs::file_status( fs::directory_file );
else if ( entry->d_type == DT_REG )
@@ -1285,11 +1335,11 @@
symlink_sf = fs::file_status( fs::symlink_file );
}
else sf = symlink_sf = fs::file_status( fs::status_unknown );
- }
+ }
# else
sf = symlink_sf = fs::file_status( fs::status_unknown );
# endif
- return 0;
+ return error_code();
}
# endif
Modified: branches/release/libs/filesystem/src/path.cpp
==============================================================================
--- branches/release/libs/filesystem/src/path.cpp (original)
+++ branches/release/libs/filesystem/src/path.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,9 +1,9 @@
// path.cpp ----------------------------------------------------------------//
// Copyright 2005 Beman Dawes
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
-// at http://www.boost.org/LICENSE_1_0.txt)
+
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See library home page at http://www.boost.org/libs/filesystem
@@ -21,7 +21,8 @@
#include <boost/scoped_array.hpp>
#include <locale>
-#include <cerrno>
+#include <boost/cerrno.hpp>
+#include <boost/system/error_code.hpp>
namespace
{
@@ -29,7 +30,6 @@
// so a static at function scope is used to ensure that exceptions can be
// caught. (A previous version was at namespace scope, so initialization
// occurred before main(), preventing exceptions from being caught.)
-
std::locale & loc()
{
// ISO C calls this "the locale-specific native environment":
@@ -66,10 +66,45 @@
void wpath_traits::imbue( const std::locale & new_loc )
{
- if ( locked ) boost::throw_exception( filesystem_wpath_error(
- "boost::filesystem::wpath_traits::imbue() after lockdown", 0 ) );
+ if ( locked ) boost::throw_exception(
+ wfilesystem_error(
+ "boost::filesystem::wpath_traits::imbue() after lockdown",
+ make_error_code( system::posix::not_supported ) ) );
imbue( new_loc, std::nothrow );
}
+
+ //namespace detail
+ //{
+ // BOOST_FILESYSTEM_DECL
+ // const char * what( const char * sys_err_what,
+ // const path & path1, const path & path2, std::string & target)
+ // {
+ // try
+ // {
+ // if ( target.empty() )
+ // {
+ // target = sys_err_what;
+ // if ( !path1.empty() )
+ // {
+ // target += ": \"";
+ // target += path1.file_string();
+ // target += "\"";
+ // }
+ // if ( !path2.empty() )
+ // {
+ // target += ", \"";
+ // target += path2.file_string();
+ // target += "\"";
+ // }
+ // }
+ // return target.c_str();
+ // }
+ // catch (...)
+ // {
+ // return sys_err_what;
+ // }
+ // }
+ //}
# ifdef BOOST_POSIX_API
@@ -89,9 +124,9 @@
if ( converter()->out(
state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
work.get()+work_size, to_next ) != std::codecvt_base::ok )
- boost::throw_exception( boost::filesystem::filesystem_wpath_error(
+ boost::throw_exception( boost::filesystem::wfilesystem_error(
"boost::filesystem::wpath::to_external conversion error",
- ph, EINVAL ) );
+ ph, system::error_code( system::posix::invalid_argument, system::system_category ) ) );
*to_next = '\0';
return external_string_type( work.get() );
}
@@ -108,8 +143,9 @@
if ( converter()->in(
state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
work.get()+work_size, to_next ) != std::codecvt_base::ok )
- boost::throw_exception( boost::filesystem::filesystem_wpath_error(
- "boost::filesystem::wpath::to_internal conversion error", EINVAL ) );
+ boost::throw_exception( boost::filesystem::wfilesystem_error(
+ "boost::filesystem::wpath::to_internal conversion error",
+ system::error_code( system::posix::invalid_argument, system::system_category ) ) );
*to_next = L'\0';
return internal_string_type( work.get() );
}
Modified: branches/release/libs/filesystem/src/portability.cpp
==============================================================================
--- branches/release/libs/filesystem/src/portability.cpp (original)
+++ branches/release/libs/filesystem/src/portability.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,6 +1,6 @@
// portability.cpp ---------------------------------------------------------//
-// Copyright © 2002-2005 Beman Dawes
+// Copyright 2002-2005 Beman Dawes
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
// at http://www.boost.org/LICENSE_1_0.txt)
Modified: branches/release/libs/filesystem/src/utf8_codecvt_facet.hpp
==============================================================================
--- branches/release/libs/filesystem/src/utf8_codecvt_facet.hpp (original)
+++ branches/release/libs/filesystem/src/utf8_codecvt_facet.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,9 +1,8 @@
// Copyright © 2001 Ronald Garcia, Indiana University (garcia_at_[hidden])
-// Andrew Lumsdaine, Indiana University (lums_at_[hidden]). 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.
+// Andrew Lumsdaine, Indiana University (lums_at_[hidden]).
+
+// Distributed under the Boost Software License, Version 1.0.
+// (See http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_FILESYSTEM_UTF8_CODECVT_FACET_HPP
#define BOOST_FILESYSTEM_UTF8_CODECVT_FACET_HPP
Modified: branches/release/libs/filesystem/test/Jamfile.v2
==============================================================================
--- branches/release/libs/filesystem/test/Jamfile.v2 (original)
+++ branches/release/libs/filesystem/test/Jamfile.v2 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,49 +1,48 @@
# Boost Filesystem Library test Jamfile
-# (C) Copyright Beman Dawes 2002, 2006
-
+# (C) Copyright Beman Dawes 2002-2006
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
-# See library home page at http://www.boost.org/libs/filesystem
-
project
- : requirements <library>/boost/filesystem//boost_filesystem
+ : requirements
+ <library>/boost/filesystem//boost_filesystem
<define>BOOST_ALL_NO_LIB
+ <toolset>msvc:<asynch-exceptions>on
;
test-suite "filesystem" :
[ run path_test.cpp
: : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
]
- [ run path_test.cpp
- : : : <define>BOOST_FILESYSTEM_DYN_LINK
+ [ run path_test.cpp ../../system/build
+ : : : <define>BOOST_FILESYSTEM_DYN_LINK <define>BOOST_SYSTEM_DYN_LINK
: path_test_dll
]
[ run operations_test.cpp
: : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
]
- [ run operations_test.cpp
- : : : <define>BOOST_FILESYSTEM_DYN_LINK
- : operations_test_dll
+ [ run operations_test.cpp ../../system/build
+ : : : <define>BOOST_FILESYSTEM_DYN_LINK <define>BOOST_SYSTEM_DYN_LINK
+ : operations_test_dll
]
[ run fstream_test.cpp
: : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
]
[ run convenience_test.cpp
: : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
]
[ run large_file_support_test.cpp
: : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
]
[ run wide_test.cpp
: : : <define>BOOST_FILESYSTEM_STATIC_LINK
- <runtime-link>static <link>static
+ <link>static
]
[ compile ../example/mbcopy.cpp ]
Modified: branches/release/libs/filesystem/test/convenience_test.cpp
==============================================================================
--- branches/release/libs/filesystem/test/convenience_test.cpp (original)
+++ branches/release/libs/filesystem/test/convenience_test.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -18,6 +18,7 @@
#include <boost/filesystem/convenience.hpp>
namespace fs = boost::filesystem;
using fs::path;
+namespace sys = boost::system;
#include <boost/test/minimal.hpp>
#include <boost/bind.hpp>
@@ -35,24 +36,25 @@
namespace
{
template< typename F >
- bool throws_fs_error( F func, fs::errno_type ec = 0 )
+ bool throws_fs_error( F func )
{
try { func(); }
- catch ( const fs::filesystem_error & ex )
+ catch ( const fs::filesystem_error & )
{
- if ( ec == 0
- || ec == fs::lookup_error_code(ex.system_error()) ) return true;
- std::cout
- << "exception reports " << fs::lookup_error_code(ex.system_error())
- << ", should be " << ec
- << "\n system_error() is " << ex.system_error()
- << std::endl;
- return false;
+ return true;
}
return false;
}
+
+ void create_recursive_iterator( const fs::path & ph )
+ {
+ fs::recursive_directory_iterator it( ph );
+ }
}
+
+// --------------------------------------------------------------------------//
+
int test_main( int, char*[] )
{
path::default_name_check( fs::no_check ); // names below not valid on all O/S's
@@ -70,13 +72,13 @@
BOOST_CHECK( fs::exists( "xx" ) );
BOOST_CHECK( fs::is_directory( "xx" ) );
- BOOST_CHECK( fs::create_directories( "xx/ww/zz" ) );
+ BOOST_CHECK( fs::create_directories( "xx/yy/zz" ) );
BOOST_CHECK( fs::exists( "xx" ) );
- BOOST_CHECK( fs::exists( "xx/ww" ) );
- BOOST_CHECK( fs::exists( "xx/ww/zz" ) );
+ BOOST_CHECK( fs::exists( "xx/yy" ) );
+ BOOST_CHECK( fs::exists( "xx/yy/zz" ) );
BOOST_CHECK( fs::is_directory( "xx" ) );
- BOOST_CHECK( fs::is_directory( "xx/ww" ) );
- BOOST_CHECK( fs::is_directory( "xx/ww/zz" ) );
+ BOOST_CHECK( fs::is_directory( "xx/yy" ) );
+ BOOST_CHECK( fs::is_directory( "xx/yy/zz" ) );
path is_a_file( "xx/uu" );
{
@@ -116,15 +118,81 @@
// see the rationale in html docs for explanation why this works
BOOST_CHECK( fs::change_extension("", ".png").string() == ".png" );
-// what() tests --------------------------------------------------------------//
+// recursive_directory_iterator tests ----------------------------------------//
+
+ sys::error_code ec;
+ fs::recursive_directory_iterator it( "/no-such-path", ec );
+ BOOST_CHECK( ec );
+ BOOST_CHECK( throws_fs_error(
+ boost::bind( create_recursive_iterator, "/no-such-path" ) ) );
+
+ fs::remove( "xx/uu" );
+
+#ifdef BOOST_WINDOWS_API
+ // These tests depends on ordering of directory entries, and that's guaranteed
+ // on Windows but not necessarily on other operating systems
+ {
+ std::ofstream f( "xx/yya" );
+ BOOST_CHECK( !!f );
+ }
+
+ for ( it = fs::recursive_directory_iterator( "xx" );
+ it != fs::recursive_directory_iterator(); ++it )
+ { std::cout << *it << '\n'; }
+
+ it = fs::recursive_directory_iterator( "xx" );
+ BOOST_CHECK( it->path() == "xx/yy" );
+ BOOST_CHECK( it.level() == 0 );
+ ++it;
+ BOOST_CHECK( it->path() == "xx/yy/zz" );
+ BOOST_CHECK( it.level() == 1 );
+ it.pop();
+ BOOST_CHECK( it->path() == "xx/yya" );
+ BOOST_CHECK( it.level() == 0 );
+ it++;
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+ it = fs::recursive_directory_iterator( "xx" );
+ BOOST_CHECK( it->path() == "xx/yy" );
+ it.no_push();
+ ++it;
+ BOOST_CHECK( it->path() == "xx/yya" );
+ ++it;
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+ fs::remove( "xx/yya" );
+#endif
+
+ it = fs::recursive_directory_iterator( "xx/yy/zz" );
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+ it = fs::recursive_directory_iterator( "xx" );
+ BOOST_CHECK( it->path() == "xx/yy" );
+ BOOST_CHECK( it.level() == 0 );
+ ++it;
+ BOOST_CHECK( it->path() == "xx/yy/zz" );
+ BOOST_CHECK( it.level() == 1 );
+ it++;
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+ it = fs::recursive_directory_iterator( "xx" );
+ BOOST_CHECK( it->path() == "xx/yy" );
+ it.no_push();
+ ++it;
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+ it = fs::recursive_directory_iterator( "xx" );
+ BOOST_CHECK( it->path() == "xx/yy" );
+ ++it;
+ it.pop();
+ BOOST_CHECK( it == fs::recursive_directory_iterator() );
+
+
+
+ // nothrow wrong. see imp. Make sure failed basic_directory_iterator
+ // ctor creates the end iterator.
+
- try { throw fs::filesystem_path_error( "abc", "p1", "p2", 0 ); }
- catch ( const fs::filesystem_path_error & ex )
- {
-# if !defined( BOOST_MSVC ) || BOOST_MSVC >= 1300 // > VC++ 7.0
- BOOST_CHECK( fs::what(ex) == std::string( "abc: \"p1\", \"p2\"" ) );
-# endif
- }
return 0;
Modified: branches/release/libs/filesystem/test/fstream_test.cpp
==============================================================================
--- branches/release/libs/filesystem/test/fstream_test.cpp (original)
+++ branches/release/libs/filesystem/test/fstream_test.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -37,6 +37,8 @@
namespace
{
+ bool cleanup = true;
+
template< class Path >
void test( const Path & p )
{
@@ -141,12 +143,16 @@
BOOST_CHECK( tfs.is_open() );
}
# endif
+
+ if ( cleanup ) fs::remove( p );
+
} // test
} // unnamed namespace
-int test_main( int, char*[] )
+int test_main( int argc, char*[] )
{
-
+ if ( argc > 1 ) cleanup = false;
+
// test fs::path
std::cout << "path tests:\n";
test( fs::path( "fstream_test_foo" ) );
Modified: branches/release/libs/filesystem/test/lpath.hpp
==============================================================================
--- branches/release/libs/filesystem/test/lpath.hpp (original)
+++ branches/release/libs/filesystem/test/lpath.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -34,7 +34,7 @@
static size_t length(const char_type* s)
{ const char_type* b=s; for(;*s!=0L;++s){} return s-b; }
- static const char_type* find(const char_type* s, size_t n, const char_type& a)
+ static const char_type* find(const char_type* /*s*/, size_t /*n*/, const char_type& /*a*/)
{ return 0; }
// copy semantics will do for wide_test
Modified: branches/release/libs/filesystem/test/operations_test.cpp
==============================================================================
--- branches/release/libs/filesystem/test/operations_test.cpp (original)
+++ branches/release/libs/filesystem/test/operations_test.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,9 +1,9 @@
// Boost operations_test.cpp -----------------------------------------------//
// Copyright Beman Dawes 2002.
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
+
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See library home page at http://www.boost.org/libs/filesystem
@@ -16,14 +16,16 @@
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/convenience.hpp>
-#include <boost/filesystem/cerrno.hpp>
+#include <boost/cerrno.hpp>
namespace fs = boost::filesystem;
#include <boost/config.hpp>
#include <boost/test/minimal.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/bind.hpp>
-using boost::bind;
+//#include <boost/concept_check.hpp>
+
+using boost::system::error_code;
+using boost::system::system_category;
+using boost::system::system_error;
#include <fstream>
#include <iostream>
@@ -51,21 +53,29 @@
using ::difftime; using ::time; using ::tm; using ::mktime; using ::system; }
# endif
-#define CHECK_EXCEPTION(b,e) throws_fs_error(b,e,__LINE__)
+#ifdef BOOST_WINDOWS_API
+# include <windows.h>
+#endif
+
+#define CHECK_EXCEPTION(Functor,Expect) throws_fs_error(Functor,Expect,__LINE__)
namespace
{
+ typedef int errno_t;
+ std::string platform( BOOST_PLATFORM );
bool report_throws;
fs::directory_iterator end_itr;
+ unsigned short language_id; // 0 except for Windows
+
const char * temp_dir_name = "temp_fs_test_dir";
void create_file( const fs::path & ph, const std::string & contents )
{
std::ofstream f( ph.file_string().c_str() );
if ( !f )
- throw fs::filesystem_path_error( "operations_test create_file",
- ph, errno );
+ throw fs::filesystem_error( "operations_test create_file",
+ ph, error_code(errno, system_category) );
if ( !contents.empty() ) f << contents;
}
@@ -73,34 +83,34 @@
{
std::ifstream f( ph.file_string().c_str() );
if ( !f )
- throw fs::filesystem_path_error( "operations_test verify_file",
- ph, errno );
+ throw fs::filesystem_error( "operations_test verify_file",
+ ph, error_code(errno, system_category) );
std::string contents;
f >> contents;
if ( contents != expected )
- throw fs::filesystem_path_error( "operations_test verify_file contents \""
- + contents + "\" != \"" + expected + "\"", ph, 0 );
+ throw fs::filesystem_error( "operations_test verify_file contents \""
+ + contents + "\" != \"" + expected + "\"", ph, error_code() );
}
template< typename F >
- bool throws_fs_error( F func, fs::errno_type ec, int line )
+ bool throws_fs_error( F func, errno_t en, int line )
{
try { func(); }
- catch ( const fs::filesystem_path_error & ex )
+ catch ( const fs::filesystem_error & ex )
{
if ( report_throws )
{
// use the what() convenience function to display exceptions
- std::cout << fs::what(ex) << "\n";
+ std::cout << "\n" << ex.what() << "\n";
}
- if ( ec == 0
- || ec == fs::lookup_error_code(ex.system_error()) ) return true;
+ if ( en == 0
+ || en == ex.code().default_error_condition().value() ) return true;
std::cout
<< "\nWarning: line " << line
- << " exception reports " << fs::lookup_error_code(ex.system_error())
- << ", should be " << ec
- << "\n system_error() is " << ex.system_error()
+ << " exception reports default_error_condition().value() " << ex.code().default_error_condition().value()
+ << ", should be " << en
+ << "\n value() is " << ex.code().value()
<< std::endl;
return true;
}
@@ -125,6 +135,125 @@
fs::copy_file( a, a );
}
+ void exception_tests()
+ {
+ bool exception_thrown;
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory( "no-such-dir/foo/bar" );
+ }
+ catch ( std::runtime_error x )
+ {
+ exception_thrown = true;
+ if ( report_throws ) std::cout << x.what() << std::endl;
+ if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
+ BOOST_CHECK( std::strcmp( x.what(),
+ "boost::filesystem::create_directory" ) == 0 );
+ }
+ BOOST_CHECK( exception_thrown );
+
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory( "no-such-dir/foo/bar" );
+ }
+ catch ( system_error x )
+ {
+ exception_thrown = true;
+ if ( report_throws ) std::cout << x.what() << std::endl;
+ if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
+ BOOST_CHECK( std::strcmp( x.what(),
+ "boost::filesystem::create_directory: The system cannot find the path specified" ) == 0 );
+ }
+ BOOST_CHECK( exception_thrown );
+
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory( "no-such-dir/foo/bar" );
+ }
+ catch ( fs::filesystem_error x )
+ {
+ exception_thrown = true;
+ if ( report_throws ) std::cout << x.what() << std::endl;
+ if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
+ {
+ bool ok ( std::strcmp( x.what(),
+ "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir\\foo\\bar\"" ) == 0 );
+ BOOST_CHECK( ok );
+ if ( !ok )
+ {
+ std::cout << "what returns \"" << x.what() << "\"" << std::endl;
+ }
+ }
+ }
+ BOOST_CHECK( exception_thrown );
+
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory( "no-such-dir/foo/bar" );
+ }
+ catch ( const fs::filesystem_error & x )
+ {
+ exception_thrown = true;
+ if ( report_throws ) std::cout << x.what() << std::endl;
+ if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
+ {
+ bool ok ( std::strcmp( x.what(),
+ "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir\\foo\\bar\"" ) == 0 );
+ BOOST_CHECK( ok );
+ if ( !ok )
+ {
+ std::cout << "what returns \"" << x.what() << "\"" << std::endl;
+ }
+ }
+ }
+ BOOST_CHECK( exception_thrown );
+ }
+
+ void bad_file_size()
+ {
+ fs::file_size( " No way, Jose" );
+ }
+
+ void bad_directory_size()
+ {
+ fs::file_size( fs::current_path() );
+ }
+
+ fs::path bad_create_directory_path;
+ void bad_create_directory()
+ {
+ fs::create_directory( bad_create_directory_path );
+ }
+
+ void bad_equivalent()
+ {
+ fs::equivalent( "no-such-path", "another-not-present-path" );
+ }
+
+ fs::path bad_remove_dir;
+ void bad_remove()
+ {
+ fs::remove( bad_remove_dir );
+ }
+
+ class renamer
+ {
+ public:
+ renamer( const fs::path & p1, const fs::path & p2 )
+ : from(p1), to(p2) {}
+ void operator()()
+ {
+ fs::rename( from, to );
+ }
+ private:
+ fs::path from;
+ fs::path to;
+ };
+
} // unnamed namespace
// test_main ---------------------------------------------------------------//
@@ -133,8 +262,6 @@
{
if ( argc > 1 && *argv[1]=='-' && *(argv[1]+1)=='t' ) report_throws = true;
- std::string platform( BOOST_PLATFORM );
-
// The choice of platform is make at runtime rather than compile-time
// so that compile errors for all platforms will be detected even though
// only the current platform is runtime tested.
@@ -142,12 +269,19 @@
platform = "POSIX";
# elif defined( BOOST_WINDOWS_API )
platform = "Windows";
+# if !defined(__MINGW32__) && !defined(__CYGWIN__)
+ language_id = ::GetUserDefaultUILanguage();
+# else
+ language_id = 0x0409; // Assume US English
+# endif
# else
platform = ( platform == "Win32" || platform == "Win64" || platform == "Cygwin" )
? "Windows"
: "POSIX";
# endif
- std::cout << "API is " << platform << '\n';
+ std::cout << "API is " << platform << std::endl;
+
+ exception_tests();
std::cout << "\ninitial_path<path>().string() is\n \""
<< fs::initial_path<fs::path>().string()
@@ -239,35 +373,21 @@
BOOST_CHECK( !fs::exists( dir ) );
// the bound functions should throw, so CHECK_EXCEPTION() should return true
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::file_size), ng ), ENOENT ) );
+ BOOST_CHECK( CHECK_EXCEPTION( bad_file_size, ENOENT ) );
// test path::exception members
try { fs::file_size( ng ); } // will throw
- catch ( const fs::filesystem_path_error & ex )
+ catch ( const fs::filesystem_error & ex )
{
BOOST_CHECK( ex.path1().string() == " no-way, Jose" );
}
-
- BOOST_CHECK( fs::create_directory( dir ) );
-
// several functions give unreasonable results if uintmax_t isn't 64-bits
std::cout << "sizeof(boost::uintmax_t) = " << sizeof(boost::uintmax_t) << '\n';
BOOST_CHECK( sizeof( boost::uintmax_t ) >= 8 );
- // make some reasonable assuptions for testing purposes
- fs::space_info spi( fs::space( dir ) );
- BOOST_CHECK( spi.capacity > 1000000 );
- BOOST_CHECK( spi.free > 1000 );
- BOOST_CHECK( spi.capacity > spi.free );
- BOOST_CHECK( spi.free >= spi.available );
-
- // it is convenient to display space, but older VC++ versions choke
-# if !defined(BOOST_MSVC) || _MSC_VER >= 1300 // 1300 == VC++ 7.0
- std::cout << " capacity = " << spi.capacity << '\n';
- std::cout << " free = " << spi.free << '\n';
- std::cout << "available = " << spi.available << '\n';
-# endif
+ // create a directory, then check it for consistency
+ BOOST_CHECK( fs::create_directory( dir ) );
BOOST_CHECK( fs::exists( dir ) );
BOOST_CHECK( BOOST_FS_IS_EMPTY( dir ) );
@@ -282,11 +402,41 @@
BOOST_CHECK( !fs::is_other( stat ) );
BOOST_CHECK( !fs::is_symlink( stat ) );
+ // set the current directory, then check it for consistency
+ fs::path original_dir = fs::current_path<fs::path>();
+ BOOST_CHECK( dir != original_dir );
+ fs::current_path( dir );
+ BOOST_CHECK( fs::current_path<fs::path>() == dir );
+ BOOST_CHECK( fs::current_path<fs::path>() != original_dir );
+ fs::current_path( original_dir );
+ BOOST_CHECK( fs::current_path<fs::path>() == original_dir );
+ BOOST_CHECK( fs::current_path<fs::path>() != dir );
+ // make sure the overloads work
+ fs::current_path( dir.string().c_str() );
+ BOOST_CHECK( fs::current_path<fs::path>() == dir );
+ BOOST_CHECK( fs::current_path<fs::path>() != original_dir );
+ fs::current_path( original_dir.string() );
+ BOOST_CHECK( fs::current_path<fs::path>() == original_dir );
+ BOOST_CHECK( fs::current_path<fs::path>() != dir );
+
+ // make some reasonable assuptions for testing purposes
+ fs::space_info spi( fs::space( dir ) );
+ BOOST_CHECK( spi.capacity > 1000000 );
+ BOOST_CHECK( spi.free > 1000 );
+ BOOST_CHECK( spi.capacity > spi.free );
+ BOOST_CHECK( spi.free >= spi.available );
+
+ // it is convenient to display space, but older VC++ versions choke
+# if !defined(BOOST_MSVC) || _MSC_VER >= 1300 // 1300 == VC++ 7.0
+ std::cout << " capacity = " << spi.capacity << '\n';
+ std::cout << " free = " << spi.free << '\n';
+ std::cout << "available = " << spi.available << '\n';
+# endif
+
if ( platform == "Windows" )
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::file_size), dir ),
- ENOENT ) );
+ BOOST_CHECK( CHECK_EXCEPTION( bad_directory_size, ENOENT ) );
else
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::file_size), dir ), 0 ) );
+ BOOST_CHECK( CHECK_EXCEPTION( bad_directory_size, 0 ) );
BOOST_CHECK( !fs::create_directory( dir ) );
BOOST_CHECK( !fs::is_symlink( dir ) );
@@ -301,7 +451,7 @@
BOOST_CHECK( fs::is_directory( d1 ) );
BOOST_CHECK( BOOST_FS_IS_EMPTY( d1 ) );
- boost::function_requires< boost::InputIteratorConcept< fs::directory_iterator > >();
+// boost::function_requires< boost::InputIteratorConcept< fs::directory_iterator > >();
bool dir_itr_exception(false);
try { fs::directory_iterator it( "" ); }
@@ -316,10 +466,10 @@
dir_itr_exception = false;
try
{
- fs::system_error_type ec(0);
+ error_code ec;
fs::directory_iterator it( "nosuchdirectory", ec );
- BOOST_CHECK( ec != 0 );
- BOOST_CHECK( ec == fs::detail::not_found_error );
+ BOOST_CHECK( ec );
+ BOOST_CHECK( ec == fs::detail::not_found_error() );
}
catch ( const fs::filesystem_error & ) { dir_itr_exception = true; }
BOOST_CHECK( !dir_itr_exception );
@@ -426,8 +576,8 @@
BOOST_CHECK( fs::is_regular( file_ph ) );
BOOST_CHECK( BOOST_FS_IS_EMPTY( file_ph ) );
BOOST_CHECK( fs::file_size( file_ph ) == 0 );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::create_directory),
- file_ph ), EEXIST ) );
+ bad_create_directory_path = file_ph;
+ BOOST_CHECK( CHECK_EXCEPTION( bad_create_directory, EEXIST ) );
stat = fs::status( file_ph );
BOOST_CHECK( fs::status_known( stat ) );
BOOST_CHECK( fs::exists( stat ) );
@@ -447,9 +597,7 @@
verify_file( file_ph, "foobar1" );
// equivalence tests
- fs::path ng2("does_not_exist2");
- BOOST_CHECK( CHECK_EXCEPTION(
- bind( BOOST_BND(fs::equivalent), ng, ng2 ), ENOENT ) );
+ BOOST_CHECK( CHECK_EXCEPTION( bad_equivalent, ENOENT ) );
BOOST_CHECK( fs::equivalent( file_ph, dir / "f1" ) );
BOOST_CHECK( fs::equivalent( dir, d1 / ".." ) );
BOOST_CHECK( !fs::equivalent( file_ph, dir ) );
@@ -483,10 +631,10 @@
BOOST_CHECK( fs::equivalent( from_ph, file_ph ) );
}
- fs::system_error_type ec(0);
+ error_code ec;
BOOST_CHECK( fs::create_hard_link( fs::path("doesnotexist"),
- fs::path("shouldnotwork"), ec ) != 0 );
- BOOST_CHECK( ec != 0 );
+ fs::path("shouldnotwork"), ec ) );
+ BOOST_CHECK( ec );
// symbolic link tests
from_ph = dir / "f4";
@@ -518,9 +666,9 @@
BOOST_CHECK( fs::is_symlink( stat ) );
}
- ec = 0;
- BOOST_CHECK( fs::create_symlink( "doesnotexist", "", ec ) != 0 );
- BOOST_CHECK( ec != 0 );
+ ec = error_code();
+ BOOST_CHECK( fs::create_symlink( "doesnotexist", "", ec ) );
+ BOOST_CHECK( ec );
// there was an inital bug in directory_iterator that caused premature
// close of an OS handle. This block will detect regression.
@@ -545,29 +693,30 @@
// [case 1] make sure can't rename() a non-existent file
BOOST_CHECK( !fs::exists( d1 / "f99" ) );
BOOST_CHECK( !fs::exists( d1 / "f98" ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), d1 / "f99", d1 / "f98" ),
- ENOENT ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), fs::path(""), d1 / "f98" ),
- ENOENT ) );
+ renamer n1a( d1 / "f99", d1 / "f98" );
+ BOOST_CHECK( CHECK_EXCEPTION( n1a, ENOENT ) );
+ renamer n1b( fs::path(""), d1 / "f98" );
+ BOOST_CHECK( CHECK_EXCEPTION( n1b, ENOENT ) );
// [case 2] rename() target.empty()
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), file_ph, "" ),
- ENOENT ) );
+ renamer n2( file_ph, "" );
+ BOOST_CHECK( CHECK_EXCEPTION( n2, ENOENT ) );
// [case 3] make sure can't rename() to an existent file or directory
BOOST_CHECK( fs::exists( dir / "f1" ) );
BOOST_CHECK( fs::exists( d1 / "f2" ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename),
- dir / "f1", d1 / "f2" ), EEXIST ) );
+ renamer n3a( dir / "f1", d1 / "f2" );
+ BOOST_CHECK( CHECK_EXCEPTION( n3a, EEXIST ) );
// several POSIX implementations (cygwin, openBSD) report ENOENT instead of EEXIST,
// so we don't verify error type on the above test.
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), dir, d1 ), 0 ) );
+ renamer n3b( dir, d1 );
+ BOOST_CHECK( CHECK_EXCEPTION( n3b, 0 ) );
// [case 4A] can't rename() file to a nonexistent parent directory
BOOST_CHECK( !fs::is_directory( dir / "f1" ) );
BOOST_CHECK( !fs::exists( dir / "d3/f3" ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), dir / "f1", dir / "d3/f3" ),
- ENOENT ) );
+ renamer n4a( dir / "f1", dir / "d3/f3" );
+ BOOST_CHECK( CHECK_EXCEPTION( n4a, ENOENT ) );
// [case 4B] rename() file in same directory
BOOST_CHECK( fs::exists( d1 / "f2" ) );
@@ -593,8 +742,8 @@
BOOST_CHECK( fs::exists( d1 ) );
BOOST_CHECK( !fs::exists( dir / "d3/d5" ) );
BOOST_CHECK( !fs::exists( dir / "d3" ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::rename), d1, dir / "d3/d5" ),
- ENOENT ) );
+ renamer n5a( d1, dir / "d3/d5" );
+ BOOST_CHECK( CHECK_EXCEPTION( n5a, ENOENT ) );
// [case 5B] rename() on directory
fs::path d3( dir / "d3" );
@@ -643,7 +792,8 @@
BOOST_CHECK( fs::exists( d1 ) );
BOOST_CHECK( fs::is_directory( d1 ) );
BOOST_CHECK( BOOST_FS_IS_EMPTY( d1 ) );
- BOOST_CHECK( CHECK_EXCEPTION( bind( BOOST_BND(fs::remove), dir ), ENOTEMPTY ) );
+ bad_remove_dir = dir;
+ BOOST_CHECK( CHECK_EXCEPTION( bad_remove, ENOTEMPTY ) );
BOOST_CHECK( fs::remove( d1 ) );
BOOST_CHECK( !fs::exists( d1 ) );
Modified: branches/release/libs/filesystem/test/path_test.cpp
==============================================================================
--- branches/release/libs/filesystem/test/path_test.cpp (original)
+++ branches/release/libs/filesystem/test/path_test.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -180,18 +180,23 @@
void exception_tests()
{
const std::string str_1("string-1");
- try { throw fs::filesystem_error( str_1, 12345 ); }
+ boost::system::error_code ec( 12345, boost::system::system_category);
+ try { throw fs::filesystem_error( str_1, ec ); }
catch ( const fs::filesystem_error & ex )
{
- BOOST_CHECK( ex.what() == str_1 );
- BOOST_CHECK( ex.system_error() == 12345 );
+ //std::cout << ex.what() << "*" << std::endl;
+ //BOOST_CHECK( std::strcmp( ex.what(),
+ // "string-1: Unknown error" ) == 0 );
+ BOOST_CHECK( ex.code() == ec );
}
- try { throw fs::filesystem_path_error( str_1, "p1", "p2", 12345 ); }
- catch ( const fs::filesystem_path_error & ex )
+ try { throw fs::filesystem_error( str_1, "p1", "p2", ec ); }
+ catch ( const fs::filesystem_error & ex )
{
- BOOST_CHECK( ex.what() == str_1 );
- BOOST_CHECK( ex.system_error() == 12345 );
+ //std::cout << ex.what() << "*" << std::endl;
+ //BOOST_CHECK( std::strcmp( ex.what(),
+ // "string-1: Unknown error: \"p1\", \"p2\"" ) == 0 );
+ BOOST_CHECK( ex.code() == ec );
BOOST_CHECK( ex.path1().string() == "p1" );
BOOST_CHECK( ex.path2().string() == "p2" );
}
Modified: branches/release/libs/filesystem/test/wide_test.cpp
==============================================================================
--- branches/release/libs/filesystem/test/wide_test.cpp (original)
+++ branches/release/libs/filesystem/test/wide_test.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -38,6 +38,8 @@
namespace
{
+ bool cleanup = true;
+
template< class Path >
void create_file( const Path & ph, const std::string & contents )
{
@@ -49,7 +51,8 @@
# endif
if ( !f )
throw fs::basic_filesystem_error<Path>( "wide_test create_file",
- ph, errno );
+ ph,
+ boost::system::error_code( errno, boost::system::errno_ecat ) );
if ( !contents.empty() ) f << contents;
}
@@ -89,6 +92,11 @@
++count;
}
BOOST_CHECK( count == 1 );
+ if ( cleanup )
+ {
+ fs::remove( dir / file );
+ fs::remove( dir );
+ }
}
// test boost::detail::utf8_codecvt_facet - even though it is not used by
@@ -113,9 +121,11 @@
// test_main ---------------------------------------------------------------//
-int test_main( int argc, char * argv[] )
+int test_main( int argc, char * /*argv*/[] )
{
+ if ( argc > 1 ) cleanup = false;
+
// So that tests are run with known encoding, use Boost UTF-8 codecvt
std::locale global_loc = std::locale();
std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet );
Modified: branches/release/tools/bcp/add_path.cpp
==============================================================================
--- branches/release/tools/bcp/add_path.cpp (original)
+++ branches/release/tools/bcp/add_path.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -49,6 +49,8 @@
//
if(m_cvs_mode && !fs::exists(m_boost_path / p / "CVS/Entries"))
return;
+ if(m_svn_mode && !fs::exists(m_boost_path / p / ".svn/entries"))
+ return;
//
// enermerate files and directories:
//
@@ -75,7 +77,7 @@
//
// if the file does not exist in cvs then don't do anything with it:
//
- if(m_cvs_mode && (m_cvs_paths.find(p) == m_cvs_paths.end()))
+ if((m_cvs_mode || m_svn_mode) && (m_cvs_paths.find(p) == m_cvs_paths.end()))
return;
//
// if we've already seen the file return:
Modified: branches/release/tools/bcp/bcp.hpp
==============================================================================
--- branches/release/tools/bcp/bcp.hpp (original)
+++ branches/release/tools/bcp/bcp.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -20,6 +20,7 @@
virtual void enable_list_mode() = 0;
virtual void enable_summary_list_mode() = 0;
virtual void enable_cvs_mode() = 0;
+ virtual void enable_svn_mode() = 0;
virtual void enable_unix_lines() = 0;
virtual void enable_scan_mode() = 0;
virtual void enable_license_mode() = 0;
Modified: branches/release/tools/bcp/bcp.html
==============================================================================
--- branches/release/tools/bcp/bcp.html (original)
+++ branches/release/tools/bcp/bcp.html 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -3,7 +3,7 @@
<head>
<title>bcp</title>
<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="../../doc/html/boostbook.css">
</head>
<body>
<P>
@@ -16,7 +16,7 @@
<H1 align="center">The bcp utility</H1>
</TD>
<td width="50">
- <h3><a href="../../index.htm"><img height="45" width="43" alt="Boost.Regex Index" src="../../libs/regex/doc/uarrow.gif"
+ <h3><a href="../../index.htm"><img alt="Boost.Regex Index" src="../../doc/html/images/up.png"
border="0"></a></h3>
</td>
</TR>
@@ -81,8 +81,8 @@
<P>Treats the module list as a list of (probably non-boost) files to scan for
boost dependencies, the files listed in the module list are not copied (or
listed), only the boost files upon which they depend.</P>
- <PRE>--cvs</PRE>
- <P>Only copy files under cvs version control.</P>
+ <PRE>--svn</PRE>
+ <P>Only copy files under svn version control.</P>
<PRE>--unix-lines</PRE>
<P>Make sure that all copied files use Unix style line endings.</P>
<H4>module-list: </H4>
@@ -179,15 +179,15 @@
<HR>
<P></P>
<P></P>
- <p>Revised
- <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
- 28 June 2004
- <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
- </p>
- <P><I>© Copyright <a href="mailto:jm_at_[hidden]">John Maddock</a> 2003-4</I></P>
+ <p>Last revised $Date$</p>
+ <P><I>© Copyright John Maddock 2003-7</I></P>
<P align="left"><I>Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
</I></P>
</body>
</html>
+
+
+
+
Modified: branches/release/tools/bcp/bcp_imp.cpp
==============================================================================
--- branches/release/tools/bcp/bcp_imp.cpp (original)
+++ branches/release/tools/bcp/bcp_imp.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -18,7 +18,7 @@
#include <string>
bcp_implementation::bcp_implementation()
- : m_list_mode(false), m_list_summary_mode(false), m_license_mode(false), m_cvs_mode(false), m_unix_lines(false), m_scan_mode(false), m_bsl_convert_mode(false), m_bsl_summary_mode(false)
+ : m_list_mode(false), m_list_summary_mode(false), m_license_mode(false), m_cvs_mode(false), m_svn_mode(false), m_unix_lines(false), m_scan_mode(false), m_bsl_convert_mode(false), m_bsl_summary_mode(false)
{
}
@@ -46,6 +46,11 @@
m_cvs_mode = true;
}
+void bcp_implementation::enable_svn_mode()
+{
+ m_svn_mode = true;
+}
+
void bcp_implementation::enable_scan_mode()
{
m_scan_mode = true;
@@ -124,8 +129,13 @@
// if m_cvs_mode is true:
if(m_cvs_mode)
{
+ std::cerr << "CAUTION: Boost is no longer in CVS, cvs mode may not work anymore!!!" << std::endl;
scan_cvs_path(fs::path());
}
+ if(m_svn_mode)
+ {
+ scan_svn_path(fs::path());
+ }
//
// if in license mode, try to load more/blanket_permission.txt
//
Modified: branches/release/tools/bcp/bcp_imp.hpp
==============================================================================
--- branches/release/tools/bcp/bcp_imp.hpp (original)
+++ branches/release/tools/bcp/bcp_imp.hpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -51,6 +51,7 @@
void enable_list_mode();
void enable_summary_list_mode();
void enable_cvs_mode();
+ void enable_svn_mode();
void enable_unix_lines();
void enable_scan_mode();
void enable_license_mode();
@@ -64,6 +65,7 @@
private:
// internal helper functions:
void scan_cvs_path(const fs::path& p);
+ void scan_svn_path(const fs::path& p);
void add_path(const fs::path& p);
void add_directory(const fs::path& p);
void add_file(const fs::path& p);
@@ -83,6 +85,7 @@
bool m_list_summary_mode; // list file summary only
bool m_license_mode; // generate license information for files listed
bool m_cvs_mode; // check cvs for files
+ bool m_svn_mode; // check svn for files
bool m_unix_lines; // fix line endings
bool m_scan_mode; // scan non-boost files.
bool m_bsl_convert_mode; // try to convert to the BSL
Modified: branches/release/tools/bcp/file_types.cpp
==============================================================================
--- branches/release/tools/bcp/file_types.cpp (original)
+++ branches/release/tools/bcp/file_types.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -39,7 +39,7 @@
bool bcp_implementation::is_binary_file(const fs::path& p)
{
- if(m_cvs_mode)
+ if(m_cvs_mode || m_svn_mode)
{
std::map<fs::path, bool, path_less>::iterator pos = m_cvs_paths.find(p);
if(pos != m_cvs_paths.end()) return pos->second;
Modified: branches/release/tools/bcp/main.cpp
==============================================================================
--- branches/release/tools/bcp/main.cpp (original)
+++ branches/release/tools/bcp/main.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -107,6 +107,10 @@
{
papp->enable_cvs_mode();
}
+ else if(0 == std::strcmp("--svn", argv[i]))
+ {
+ papp->enable_svn_mode();
+ }
else if(0 == std::strcmp("--scan", argv[i]))
{
papp->enable_scan_mode();
Modified: branches/release/tools/bcp/scan_cvs_path.cpp
==============================================================================
--- branches/release/tools/bcp/scan_cvs_path.cpp (original)
+++ branches/release/tools/bcp/scan_cvs_path.cpp 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,6 +1,7 @@
/*
*
- * Copyright (c) 2003 Dr John Maddock
+ * Copyright (c) 2003-7 John Maddock
+ * Copyright (c) 2007 Bjorn Roald
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying file
* LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -16,6 +17,7 @@
#include <boost/regex.hpp>
#include <boost/filesystem/operations.hpp>
#include <boost/detail/workaround.hpp>
+#include <iostream>
void bcp_implementation::scan_cvs_path(const fs::path& p)
{
@@ -61,3 +63,85 @@
}
}
}
+
+void bcp_implementation::scan_svn_path(const fs::path& p)
+{
+ //
+ // scan through the svn entries files to build a list
+ // of all the files under svn version control
+ // and whether they are text or binary:
+ //
+ static const boost::regex entry_expression("^\\f([^\\f]*)");
+ static const boost::regex entry_line_expression("\\n[[:blank:]]*([^\\n]*)");
+ // static const boost::regex
+ // mime_type_expression("\\nsvn:mime-type\\nV [[digit]]*\\n([^/]*)[^\\n]*");
+
+ fs::path entries(m_boost_path / p / ".svn" / "entries");
+ if(fs::exists(entries))
+ {
+ fileview view(entries);
+ boost::cregex_token_iterator
+ i(view.begin(), view.end(), entry_expression, 1), j;
+
+ while(i != j) // entries
+ {
+ std::string entr = i->str();
+ boost::sregex_token_iterator
+ atr_it(entr.begin(), entr.end(), entry_line_expression, 1), atr_j;
+
+ if(atr_it != atr_j)
+ {
+ std::string name = atr_it->str(); // name of file or directory
+ fs::path fpath = p / name;
+ if(++atr_it != atr_j)
+ {
+ std::string kind = atr_it->str();
+ if(kind == "file")
+ {
+ // find if binary, we asume text unless mime type is
+ // set in property file
+ bool binary = false; //
+
+ // skip some lines type | example
+ if( ++atr_it != atr_j && // revnum |
+ ++atr_it != atr_j && // url |
+ ++atr_it != atr_j && // repos |
+ ++atr_it != atr_j && // scedule attr |
+ ++atr_it != atr_j && // text timestamp | 2007-09-02T...
+ ++atr_it != atr_j && // checksum | 58f4bfa7860...
+ ++atr_it != atr_j && // cmt_date | 2007-05-09T...
+ ++atr_it != atr_j && // cmt_rev | 37654
+ ++atr_it != atr_j && // cmt_author | dgregor
+ ++atr_it != atr_j ) // has_props | has-props
+ {
+ if(atr_it->str() == "has-props")
+ {
+ // we need to check properties file for mime-type
+ // that does not start with "text/", if found file is binary
+ fs::path properties(m_boost_path / p / ".svn" / "prop-base"
+ / (name + ".svn-base") );
+ if(fs::exists(properties))
+ {
+ fileview prop(properties);
+
+ static const boost::regex mime_type(
+ "svn:mime-type[[:blank:]]*(?:\\n|\\r|\\r\\n)[^\\r\\n]*(?:\\n|\\r|\\r\\n)[[:blank:]]*text/");
+ binary = regex_search(prop.begin(), prop.end(), mime_type) ? false : true;
+ }
+ }
+ }
+ m_cvs_paths[fpath] = binary;
+ } // kind == "file"
+ else if(kind == "dir")
+ {
+ scan_svn_path(fpath); // recursion for directory entries
+ }
+ // else
+ // std::cerr << "WARNING: unknown entry kind for entry " << name
+ // << "in " << entries << std::endl;
+ }
+ }
+ ++i;
+ } // while
+ }
+}
Modified: branches/release/tools/boostbook/doc/boostbook.xml
==============================================================================
--- branches/release/tools/boostbook/doc/boostbook.xml (original)
+++ branches/release/tools/boostbook/doc/boostbook.xml 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
@@ -137,7 +137,7 @@
<title>Manual setup for all systems</title>
<para>This section describes how to manually configure Boost
- Boost version 2 (BBv2) for BoostBook. If you can use the
+ Boost version 2 (BBv@) for BoostBook. If you can use the
automatic setup script, you should. All configuration will
happen in the BBv2 user configuration file,
<filename>user-config.jam</filename>. If you do not have a copy
@@ -212,13 +212,9 @@
documentation for libraries that do not require Doxygen. To
test this, change into the directory <filename
class="directory">$BOOST_ROOT/libs/function/doc</filename> and
- run the command <code>bjam</code>: it should produce HTML
+ run the command <code>bjam --v2</code>: it should produce HTML
documentation for the Boost.Function library in the
- <code>html</code> subdirectory. This documentation
- will look a little strange, because the BoostBook stylesheet is
- missing. You can copy the <code>boostbook.css</code> stylesheet from
- <filename class="directory">$BOOST_ROOT/doc/html</filename> to
- fix this problem.</para>
+ <code>html</code> subdirectory.</para>
</section>
<section id="boostbook.setup.doxygen">
Modified: branches/release/tools/boostbook/doc/reference.dtdxml
==============================================================================
--- branches/release/tools/boostbook/doc/reference.dtdxml (original)
+++ branches/release/tools/boostbook/doc/reference.dtdxml 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -21,22 +21,18 @@
<entity name="boost.class.content"
type="param"
>
-<text-expanded>template?, inherit*, purpose?, description?,
- (static-constant|typedef|enum|
- copy-assignment|constructor|destructor|method-group|
- free-function-group|function|method|overloaded-function|
- overloaded-method|data-member|class|class-specialization|struct|
- struct-specialization|union|union-specialization)*</text-expanded>
-<text>template?, inherit*, purpose?, description?,
- (%boost.class.mix;)*</text>
+<text-expanded>template?, inherit*, purpose?, description?,
+ (access|%boost.class.mix;)*</text-expanded>
+<text>template?, inherit*, purpose?, description?,
+ (access|%boost.class.mix;)*</text>
</entity>
<entity name="boost.function.semantics"
type="param"
>
-<text-expanded>purpose?, description?, requires?, effects?, postconditions?,
+<text-expanded>purpose?, description?, requires?, effects?, postconditions?,
returns?, throws?, complexity?, notes?, rationale?</text-expanded>
-<text>purpose?, description?, requires?, effects?, postconditions?,
+<text>purpose?, description?, requires?, effects?, postconditions?,
returns?, throws?, complexity?, notes?, rationale?</text>
</entity>
@@ -98,21 +94,26 @@
id CDATA #IMPLIED</text>
</entity>
-<entity name="boost.class.mix"
+<entity name="boost.class.members"
type="param"
>
<text-expanded>static-constant|typedef|enum|
copy-assignment|constructor|destructor|method-group|
- free-function-group|function|method|overloaded-function|
- overloaded-method|data-member|class|class-specialization|struct|
+ method|overloaded-method|data-member|class|class-specialization|struct|
struct-specialization|union|union-specialization</text-expanded>
<text>static-constant|typedef|enum|
copy-assignment|constructor|destructor|method-group|
- free-function-group|function|method|overloaded-function|
- overloaded-method|data-member|class|class-specialization|struct|
+ |method|overloaded-method|data-member|class|class-specialization|struct|
struct-specialization|union|union-specialization</text>
</entity>
+<entity name="boost.class.mix"
+ type="param"
+>
+<text-expanded>free-function-group|function|overloaded-function|%boost.class.members;</text-expanded>
+<text>free-function-group|function|overloaded-function|%boost.class.members;</text>
+</entity>
+
<entity name="boost.testsuite.tests"
type="param"
>
@@ -196,14 +197,10 @@
<entity name="boost.class-specialization.content"
type="param"
>
-<text-expanded>template?, specialization?, inherit?, purpose?, description?,
- (static-constant|typedef|enum|
- copy-assignment|constructor|destructor|method-group|
- free-function-group|function|method|overloaded-function|
- overloaded-method|data-member|class|class-specialization|struct|
- struct-specialization|union|union-specialization)*</text-expanded>
-<text>template?, specialization?, inherit?, purpose?, description?,
- (%boost.class.mix;)*</text>
+<text-expanded>template?, specialization?, inherit?, purpose?, description?,
+ (access|%boost.class.mix;)*</text-expanded>
+<text>template?, specialization?, inherit?, purpose?, description?,
+ (access|%boost.class.mix;)*</text>
</entity>
<entity name="library.content"
@@ -223,6 +220,7 @@
<element-name name="purpose" occurrence="?"/>
<element-name name="description" occurrence="?"/>
<or-group occurrence="*">
+ <element-name name="access"/>
<element-name name="static-constant"/>
<element-name name="typedef"/>
<element-name name="enum"/>
@@ -296,7 +294,7 @@
</element>
<attlist name="link-test">
-<attdecl>
+<attdecl>
filename CDATA #REQUIRED
name CDATA #IMPLIED</attdecl>
<attribute name="filename"
@@ -329,7 +327,7 @@
</element>
<attlist name="link-fail-test">
-<attdecl>
+<attdecl>
filename CDATA #REQUIRED
name CDATA #IMPLIED</attdecl>
<attribute name="filename"
@@ -494,7 +492,7 @@
</element>
<attlist name="destructor">
-<attdecl>
+<attdecl>
specifiers CDATA #IMPLIED
%boost.common.attrib;</attdecl>
<attribute name="last-revision"
@@ -639,7 +637,7 @@
</or-group>
</sequence-group>
</content-model-expanded>
-<content-model>
+<content-model>
<sequence-group>
<element-name name="title" occurrence="?"/>
<element-name name="section" occurrence="*"/>
@@ -750,6 +748,7 @@
<element-name name="purpose" occurrence="?"/>
<element-name name="description" occurrence="?"/>
<or-group occurrence="*">
+ <element-name name="access"/>
<element-name name="static-constant"/>
<element-name name="typedef"/>
<element-name name="enum"/>
@@ -819,10 +818,7 @@
<purpose>Declares a base class of the enclosing class or struct</purpose>
<description>
- <para>This element contains the name of the class inherited. The
- content model is free-form, as the inherited class may be an
- instantiation of a template and may have markup in it (e.g.,
- <sgmltag>classname</sgmltag> tags).</para>
+ <para>This element contains the type of the class inherited.</para>
</description>
</element>
@@ -837,7 +833,9 @@
<attribute name="access"
type="#REQUIRED"
value="CDATA"
- default=""/>
+ default="">
+ <purpose>The access specifier ("public", "private", or "protected") of the inheritance.</purpose>
+</attribute>
<attribute name="id"
type="#IMPLIED"
value="CDATA"
@@ -950,7 +948,7 @@
behavior. Constructors, destructors, member functions, and free
functions all use the same documentation method, although the
top-level tags differ.</para>
-
+
<para>The behavior of functions in BoostBook is documenting using a
style similar to that of the C++ standard, with clauses describing
the requirements, effects, postconditions, exception behavior, and
@@ -979,12 +977,12 @@
so that any content is equivalent in both type and value to the
content of <code>other</code>, or empty if
<code>other</code> is
- empty.
+ empty.
</simpara>
</effects>
<throws>
- <simpara>May fail with a
+ <simpara>May fail with a
<classname>std::bad_alloc</classname> exception or any
exceptions arising from the copy constructor of the
contained type.
@@ -1218,7 +1216,7 @@
</element>
<attlist name="constructor">
-<attdecl>
+<attdecl>
specifiers CDATA #IMPLIED
%boost.common.attrib;</attdecl>
<attribute name="last-revision"
@@ -1274,7 +1272,7 @@
<programlisting><library-reference>
<header name="boost/any.hpp">
- <namespace name="boost">
+ <namespace name="boost">
<!-- C++ constructs in the boost namespace -->
</namespace>
</header>
@@ -1496,7 +1494,7 @@
</element>
<attlist name="data-member">
-<attdecl>
+<attdecl>
name CDATA #REQUIRED
%boost.common.attrib;</attdecl>
<attribute name="last-revision"
@@ -1558,6 +1556,7 @@
<element-name name="purpose" occurrence="?"/>
<element-name name="description" occurrence="?"/>
<or-group occurrence="*">
+ <element-name name="access"/>
<element-name name="static-constant"/>
<element-name name="typedef"/>
<element-name name="enum"/>
@@ -1736,7 +1735,7 @@
</element>
<attlist name="requirement">
-<attdecl>
+<attdecl>
name CDATA #REQUIRED</attdecl>
<attribute name="name"
type="#REQUIRED"
@@ -1859,7 +1858,7 @@
</element>
<attlist name="run-test">
-<attdecl>
+<attdecl>
filename CDATA #REQUIRED
name CDATA #IMPLIED</attdecl>
<attribute name="filename"
@@ -1954,7 +1953,7 @@
</element>
<attlist name="copy-assignment">
-<attdecl>
+<attdecl>
cv CDATA #IMPLIED
specifiers CDATA #IMPLIED
%boost.common.attrib;</attdecl>
@@ -2000,7 +1999,7 @@
</element>
<attlist name="run-fail-test">
-<attdecl>
+<attdecl>
filename CDATA #REQUIRED
name CDATA #IMPLIED</attdecl>
<attribute name="filename"
@@ -2159,7 +2158,7 @@
</element>
<attlist name="parameter">
-<attdecl>
+<attdecl>
name CDATA #IMPLIED</attdecl>
<attribute name="name"
type="#IMPLIED"
@@ -2255,7 +2254,7 @@
</element>
<attlist name="overloaded-function">
-<attdecl>
+<attdecl>
name CDATA #REQUIRED
%boost.common.attrib;</attdecl>
<attribute name="last-revision"
@@ -2276,6 +2275,60 @@
default=""/>
</attlist>
+ <element name="access"
+ content-type="element">
+ <content-model-expanded>
+ <or-group occurrence="+">
+ <element-name name="static-constant"/>
+ <element-name name="typedef"/>
+ <element-name name="enum"/>
+ <element-name name="copy-assignment"/>
+ <element-name name="constructor"/>
+ <element-name name="destructor"/>
+ <element-name name="method-group"/>
+ <element-name name="method"/>
+ <element-name name="overloaded-method"/>
+ <element-name name="data-member"/>
+ <element-name name="class"/>
+ <element-name name="class-specialization"/>
+ <element-name name="struct"/>
+ <element-name name="struct-specialization"/>
+ <element-name name="union"/>
+ <element-name name="union-specialization"/>
+ </or-group>
+ </content-model-expanded>
+ <content-model>
+ <sequence-group occurrence="+">
+ <parament-name name="boost.class.members"/>
+ </sequence-group>
+ </content-model>
+ <purpose>Declares an access specification for class members</purpose>
+
+ <description>
+ <para>The access specifications of class members (public, private, or protected) may be determined by enclosing them in an <access> element.</para>
+ </description>
+ </element>
+
+ <attlist name="access">
+ <attdecl>
+ name CDATA #REQUIRED
+ %boost.common.attrib;</attdecl>
+ <attribute name="last-revision"
+ type="#IMPLIED"
+ value="CDATA"
+ default=""/>
+ <attribute name="name"
+ type="#REQUIRED"
+ value="CDATA"
+ default="">
+ <purpose>The name of the access specification, e.g. "public", "private", or "protected".</purpose>
+ </attribute>
+ <attribute name="id"
+ type="#IMPLIED"
+ value="CDATA"
+ default=""/>
+ </attlist>
+
<element name="class"
content-type="element">
<content-model-expanded>
@@ -2285,6 +2338,7 @@
<element-name name="purpose" occurrence="?"/>
<element-name name="description" occurrence="?"/>
<or-group occurrence="*">
+ <element-name name="access"/>
<element-name name="static-constant"/>
<element-name name="typedef"/>
<element-name name="enum"/>
@@ -2348,7 +2402,7 @@
inheritance from the class <classname>std::bad_cast</classname>. It
also defines the <purpose> element, which contains a short
description of the use of the class.</para>
-
+
<programlisting><class name="bad_any_cast">
<inherit access="public"><classname>std::bad_cast</classname></inherit>
<purpose><para>The exception thrown in the event of a failed
@@ -2402,7 +2456,7 @@
</element>
<attlist name="librarycategorydef">
-<attdecl>
+<attdecl>
name CDATA #REQUIRED
%boost.common.attrib;</attdecl>
<attribute name="last-revision"
@@ -2524,7 +2578,7 @@
</element>
<attlist name="overloaded-method">
-<attdecl>
+<attdecl>
name CDATA #REQUIRED
%boost.common.attrib;</attdecl>
<attribute name="last-revision"
@@ -2813,6 +2867,7 @@
<element-name name="purpose" occurrence="?"/>
<element-name name="description" occurrence="?"/>
<or-group occurrence="*">
+ <element-name name="access"/>
<element-name name="static-constant"/>
<element-name name="typedef"/>
<element-name name="enum"/>
@@ -2874,6 +2929,7 @@
<element-name name="purpose" occurrence="?"/>
<element-name name="description" occurrence="?"/>
<or-group occurrence="*">
+ <element-name name="access"/>
<element-name name="static-constant"/>
<element-name name="typedef"/>
<element-name name="enum"/>
@@ -3224,5 +3280,4 @@
value="CDATA"
default=""/>
</attlist>
-
</dtd>
Modified: branches/release/tools/boostbook/doc/reference.xml
==============================================================================
--- branches/release/tools/boostbook/doc/reference.xml (original)
+++ branches/release/tools/boostbook/doc/reference.xml 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,14 +1,7 @@
<?xml version="1.0" standalone="yes"?>
-<!--
- Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
- -->
-<chapter id="reference">
+<section id="reference">
<title>Reference</title>
- <para>Elements:<itemizedlist spacing="compact"><listitem><simpara><link linkend="boostbook.dtd.boostbook">Element <sgmltag>boostbook</sgmltag> - Defines a BoostBook book</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.class">Element <sgmltag>class</sgmltag> - Declares a class or class template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.class-specialization">Element <sgmltag>class-specialization</sgmltag> - A specialization (partial or full) of a class template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.code">Element <sgmltag>code</sgmltag> - Mimics the <sgmltag>code</sgmltag> tag in HTML</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.compile-fail-test">Element <sgmltag>compile-fail-test</sgmltag> - A testcase that should fail to compile</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.compile-test">Element <sgmltag>compile-test</sgmltag> - A testcase that should
compile correctly</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.complexity">Element <sgmltag>complexity</sgmltag> - The time/space/etc. complexity of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.constructor">Element <sgmltag>constructor</sgmltag> - Declares a constructor of the enclosing class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.copy-assignment">Element <sgmltag>copy-assignment</sgmltag> - Declares a copy-assignment operator</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.data-member">Element <sgmltag>data-member</sgmltag> - Declares a data member of a class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.default">Element <sgmltag>default</sgmltag> - The default value of a function or template parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.description">Element <sgmltag>description</sgmltag> - Detailed descripti
on of a construct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.destructor">Element <sgmltag>destructor</sgmltag> - Declares a destructor for the enclosing class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.effects">Element <sgmltag>effects</sgmltag> - Declares the side effects of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.enum">Element <sgmltag>enum</sgmltag> - Declares an enumeration type</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.enumvalue">Element <sgmltag>enumvalue</sgmltag> - A single value of an enumeration</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.free-function-group">Element <sgmltag>free-function-group</sgmltag> - A set of functions that are grouped together under one name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.function">Element <sgmltag>function</sgmltag> - Declares a function</link></simpara></lis
titem><listitem><simpara><link linkend="boostbook.dtd.functionname">Element <sgmltag>functionname</sgmltag> - References a function with the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.header">Element <sgmltag>header</sgmltag> - Declares a C++ header with the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.if-fails">Element <sgmltag>if-fails</sgmltag> - What it means when a testcase fails</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.inherit">Element <sgmltag>inherit</sgmltag> - Declares a base class of the enclosing class or struct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.lib">Element <sgmltag>lib</sgmltag> - A library dependency</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.library">Element <sgmltag>library</sgmltag> - Top-level element for a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.library-refer
ence">Element <sgmltag>library-reference</sgmltag> - Declares the reference material for a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategory">Element <sgmltag>librarycategory</sgmltag> - Declares that the enclosing library is in this category</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategorydef">Element <sgmltag>librarycategorydef</sgmltag> - Defines a new library category</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategorylist">Element <sgmltag>librarycategorylist</sgmltag> - Categorized listing of libraries</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.libraryinfo">Element <sgmltag>libraryinfo</sgmltag> - Provides information about a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarylist">Element <sgmltag>librarylist</sgmltag> - Placeholder for an alphabetical list of libraries</link></simpara></listitem><listit
em><simpara><link linkend="boostbook.dtd.libraryname">Element <sgmltag>libraryname</sgmltag> - References a library of the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarypurpose">Element <sgmltag>librarypurpose</sgmltag> - Describes in one short sentence or phrase the purpose of a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.link-fail-test">Element <sgmltag>link-fail-test</sgmltag> - Declares a test that should compile but fail to link</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.link-test">Element <sgmltag>link-test</sgmltag> - Declares a test that should compile and link</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.method">Element <sgmltag>method</sgmltag> - Declares a method, i.e., a member function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.method-group">Element <sgmltag>method-group</sgmltag> - A set of methods that are grouped to
gether under one name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.namespace">Element <sgmltag>namespace</sgmltag> - Declares a namespace</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.notes">Element <sgmltag>notes</sgmltag> - Non-normative notes about a function's semantics</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.overloaded-function">Element <sgmltag>overloaded-function</sgmltag> - An overloaded function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.overloaded-method">Element <sgmltag>overloaded-method</sgmltag> - An overloaded method</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.parameter">Element <sgmltag>parameter</sgmltag> - A function parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.paramtype">Element <sgmltag>paramtype</sgmltag> - The type of a function parameter</link></simpara></listitem><listitem><simpara><link lin
kend="boostbook.dtd.postconditions">Element <sgmltag>postconditions</sgmltag> - Conditions that must hold after the function returns</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.precondition">Element <sgmltag>precondition</sgmltag> - Conditions that must be met prior to executing a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.programlisting">Element <sgmltag>programlisting</sgmltag> - A sample of program code</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.purpose">Element <sgmltag>purpose</sgmltag> - A short description of an entity's use</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.rationale">Element <sgmltag>rationale</sgmltag> - Describes the rationale for a particular function's design</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.requirement">Element <sgmltag>requirement</sgmltag> - A requirement/property in the Jamfile for a testcase</link></simpara
></listitem><listitem><simpara><link linkend="boostbook.dtd.requires">Element <sgmltag>requires</sgmltag> - Declares the requirements of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.returns">Element <sgmltag>returns</sgmltag> - Description of the return value of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.run-fail-test">Element <sgmltag>run-fail-test</sgmltag> - A testcase that should compile and link, but fail on execution</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.run-test">Element <sgmltag>run-test</sgmltag> - A testcase that should compile, link, and execute</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.signature">Element <sgmltag>signature</sgmltag> - One signature of an overloaded function or method</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.snippet">Element <sgmltag>snippet</sgmltag> - Pulls in a code snippet from a <sgmltag>pro
gramlisting</sgmltag> element</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.source">Element <sgmltag>source</sgmltag> - Defines source code for a test</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.specialization">Element <sgmltag>specialization</sgmltag> - Defines the specialization arguments for a class specialization</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.static-constant">Element <sgmltag>static-constant</sgmltag> - Declares a static constant, e.g., <code>const int foo = 5;</code>.</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.struct">Element <sgmltag>struct</sgmltag> - Declares a C++ struct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.struct-specialization">Element <sgmltag>struct-specialization</sgmltag> - A specialization (full or partial) of a struct template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template">Element <
sgmltag>template</sgmltag> - Declares the template parameters of a class or function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-arg">Element <sgmltag>template-arg</sgmltag> - A template argument in a specialization</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-nontype-parameter">Element <sgmltag>template-nontype-parameter</sgmltag> - A nontype template parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-type-parameter">Element <sgmltag>template-type-parameter</sgmltag> - Declares a template type parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-varargs">Element <sgmltag>template-varargs</sgmltag> - Declares a variable-length list of template parameters</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.testsuite">Element <sgmltag>testsuite</sgmltag> - Describes a library testsuite</link></simpara></listitem><listitem><simp
ara><link linkend="boostbook.dtd.throws">Element <sgmltag>throws</sgmltag> - Description of the exceptions thrown by a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.type">Element <sgmltag>type</sgmltag> - The type of an element or return type of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.typedef">Element <sgmltag>typedef</sgmltag> - Declares a typedef</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.union">Element <sgmltag>union</sgmltag> - Declares a C++ union or union template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.union-specialization">Element <sgmltag>union-specialization</sgmltag> - A specialization (full or partial) of a union template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.using-class">Element <sgmltag>using-class</sgmltag> - Injects the method and function names of a class into the local scope</link></simpara></listitem><lis
titem><simpara><link linkend="boostbook.dtd.using-namespace">Element <sgmltag>using-namespace</sgmltag> - Injects the declared names from a namespace into the local scope</link></simpara></listitem></itemizedlist></para>
+ <para>Elements:<itemizedlist spacing="compact"><listitem><simpara><link linkend="boostbook.dtd.access">Element <sgmltag>access</sgmltag> - Declares an access specification for class members</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.boostbook">Element <sgmltag>boostbook</sgmltag> - Defines a BoostBook book</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.class">Element <sgmltag>class</sgmltag> - Declares a class or class template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.class-specialization">Element <sgmltag>class-specialization</sgmltag> - A specialization (partial or full) of a class template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.code">Element <sgmltag>code</sgmltag> - Mimics the <sgmltag>code</sgmltag> tag in HTML</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.compile-fail-test">Element <sgmltag>compile-fail-test</sgmltag> - A testcase that should
fail to compile</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.compile-test">Element <sgmltag>compile-test</sgmltag> - A testcase that should compile correctly</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.complexity">Element <sgmltag>complexity</sgmltag> - The time/space/etc. complexity of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.constructor">Element <sgmltag>constructor</sgmltag> - Declares a constructor of the enclosing class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.copy-assignment">Element <sgmltag>copy-assignment</sgmltag> - Declares a copy-assignment operator</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.data-member">Element <sgmltag>data-member</sgmltag> - Declares a data member of a class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.default">Element <sgmltag>default</sgmltag> - The default value of a function
or template parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.description">Element <sgmltag>description</sgmltag> - Detailed description of a construct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.destructor">Element <sgmltag>destructor</sgmltag> - Declares a destructor for the enclosing class</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.effects">Element <sgmltag>effects</sgmltag> - Declares the side effects of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.enum">Element <sgmltag>enum</sgmltag> - Declares an enumeration type</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.enumvalue">Element <sgmltag>enumvalue</sgmltag> - A single value of an enumeration</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.free-function-group">Element <sgmltag>free-function-group</sgmltag> - A set of functions that are grouped together under one
name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.function">Element <sgmltag>function</sgmltag> - Declares a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.functionname">Element <sgmltag>functionname</sgmltag> - References a function with the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.header">Element <sgmltag>header</sgmltag> - Declares a C++ header with the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.if-fails">Element <sgmltag>if-fails</sgmltag> - What it means when a testcase fails</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.inherit">Element <sgmltag>inherit</sgmltag> - Declares a base class of the enclosing class or struct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.lib">Element <sgmltag>lib</sgmltag> - A library dependency</link></simpara></listitem><listitem><simpara><link linkend="boostbook.
dtd.library">Element <sgmltag>library</sgmltag> - Top-level element for a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.library-reference">Element <sgmltag>library-reference</sgmltag> - Declares the reference material for a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategory">Element <sgmltag>librarycategory</sgmltag> - Declares that the enclosing library is in this category</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategorydef">Element <sgmltag>librarycategorydef</sgmltag> - Defines a new library category</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarycategorylist">Element <sgmltag>librarycategorylist</sgmltag> - Categorized listing of libraries</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.libraryinfo">Element <sgmltag>libraryinfo</sgmltag> - Provides information about a library</link></simpara></listitem><listitem><simpa
ra><link linkend="boostbook.dtd.librarylist">Element <sgmltag>librarylist</sgmltag> - Placeholder for an alphabetical list of libraries</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.libraryname">Element <sgmltag>libraryname</sgmltag> - References a library of the given name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.librarypurpose">Element <sgmltag>librarypurpose</sgmltag> - Describes in one short sentence or phrase the purpose of a library</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.link-fail-test">Element <sgmltag>link-fail-test</sgmltag> - Declares a test that should compile but fail to link</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.link-test">Element <sgmltag>link-test</sgmltag> - Declares a test that should compile and link</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.method">Element <sgmltag>method</sgmltag> - Declares a method, i.e., a member functi
on</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.method-group">Element <sgmltag>method-group</sgmltag> - A set of methods that are grouped together under one name</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.namespace">Element <sgmltag>namespace</sgmltag> - Declares a namespace</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.notes">Element <sgmltag>notes</sgmltag> - Non-normative notes about a function's semantics</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.overloaded-function">Element <sgmltag>overloaded-function</sgmltag> - An overloaded function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.overloaded-method">Element <sgmltag>overloaded-method</sgmltag> - An overloaded method</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.parameter">Element <sgmltag>parameter</sgmltag> - A function parameter</link></simpara></listitem><listitem><simpa
ra><link linkend="boostbook.dtd.paramtype">Element <sgmltag>paramtype</sgmltag> - The type of a function parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.postconditions">Element <sgmltag>postconditions</sgmltag> - Conditions that must hold after the function returns</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.precondition">Element <sgmltag>precondition</sgmltag> - Conditions that must be met prior to executing a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.programlisting">Element <sgmltag>programlisting</sgmltag> - A sample of program code</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.purpose">Element <sgmltag>purpose</sgmltag> - A short description of an entity's use</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.rationale">Element <sgmltag>rationale</sgmltag> - Describes the rationale for a particular function's design</link></simpara></listitem>
<listitem><simpara><link linkend="boostbook.dtd.requirement">Element <sgmltag>requirement</sgmltag> - A requirement/property in the Jamfile for a testcase</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.requires">Element <sgmltag>requires</sgmltag> - Declares the requirements of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.returns">Element <sgmltag>returns</sgmltag> - Description of the return value of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.run-fail-test">Element <sgmltag>run-fail-test</sgmltag> - A testcase that should compile and link, but fail on execution</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.run-test">Element <sgmltag>run-test</sgmltag> - A testcase that should compile, link, and execute</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.signature">Element <sgmltag>signature</sgmltag> - One signature of an overloaded function or m
ethod</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.snippet">Element <sgmltag>snippet</sgmltag> - Pulls in a code snippet from a <sgmltag>programlisting</sgmltag> element</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.source">Element <sgmltag>source</sgmltag> - Defines source code for a test</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.specialization">Element <sgmltag>specialization</sgmltag> - Defines the specialization arguments for a class specialization</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.static-constant">Element <sgmltag>static-constant</sgmltag> - Declares a static constant, e.g., <code>const int foo = 5;</code>.</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.struct">Element <sgmltag>struct</sgmltag> - Declares a C++ struct</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.struct-specialization">Element <sgmltag>struct-special
ization</sgmltag> - A specialization (full or partial) of a struct template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template">Element <sgmltag>template</sgmltag> - Declares the template parameters of a class or function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-arg">Element <sgmltag>template-arg</sgmltag> - A template argument in a specialization</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-nontype-parameter">Element <sgmltag>template-nontype-parameter</sgmltag> - A nontype template parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-type-parameter">Element <sgmltag>template-type-parameter</sgmltag> - Declares a template type parameter</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.template-varargs">Element <sgmltag>template-varargs</sgmltag> - Declares a variable-length list of template parameters</link></simpara></listitem>
<listitem><simpara><link linkend="boostbook.dtd.testsuite">Element <sgmltag>testsuite</sgmltag> - Describes a library testsuite</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.throws">Element <sgmltag>throws</sgmltag> - Description of the exceptions thrown by a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.type">Element <sgmltag>type</sgmltag> - The type of an element or return type of a function</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.typedef">Element <sgmltag>typedef</sgmltag> - Declares a typedef</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.union">Element <sgmltag>union</sgmltag> - Declares a C++ union or union template</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.union-specialization">Element <sgmltag>union-specialization</sgmltag> - A specialization (full or partial) of a union template</link></simpara></listitem><listitem><simpara><link linkend=
"boostbook.dtd.using-class">Element <sgmltag>using-class</sgmltag> - Injects the method and function names of a class into the local scope</link></simpara></listitem><listitem><simpara><link linkend="boostbook.dtd.using-namespace">Element <sgmltag>using-namespace</sgmltag> - Injects the declared names from a namespace into the local scope</link></simpara></listitem></itemizedlist></para>
<refentry id="boostbook.dtd.class-specialization">
<refmeta>
<refentrytitle>
@@ -20,7 +13,7 @@
<refpurpose>A specialization (partial or full) of a class template</refpurpose>
</refnamediv>
<refsynopsisdiv>class-specialization ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dt
d.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">ove
rloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
</refsynopsisdiv>
<refsection>
<title>Attributes</title>
@@ -36,7 +29,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -140,7 +133,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -176,7 +169,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -218,7 +211,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -258,7 +251,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -294,7 +287,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -339,7 +332,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -377,7 +370,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -413,7 +406,7 @@
this:</para>
<programlisting><library-reference>
- <header name="boost/any.hpp">
+ <header name="boost/any.hpp">
<!-- C++ constructs in this header -->
</header>
</library-reference></programlisting>
@@ -440,7 +433,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -480,7 +473,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -499,7 +492,7 @@
<refpurpose>Declares a C++ union or union template</refpurpose>
</refnamediv>
<refsynopsisdiv>union ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbo
ok.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-meth
od">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
</refsynopsisdiv>
<refsection>
<title>Attributes</title>
@@ -515,7 +508,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -535,13 +528,10 @@
<refpurpose>Declares a base class of the enclosing class or struct</refpurpose>
</refnamediv>
<refsynopsisdiv>inherit ::=
- (ANY)
+ (<link linkend="boostbook.dtd.type">type</link>, <link linkend="boostbook.dtd.purpose">purpose</link>?)
</refsynopsisdiv>
<refsection><title>Description</title>
- <para>This element contains the name of the class inherited. The
- content model is free-form, as the inherited class may be an
- instantiation of a template and may have markup in it (e.g.,
- <sgmltag>classname</sgmltag> tags).</para>
+ <para>This element contains the type of the class inherited.</para>
</refsection>
<refsection>
<title>Attributes</title>
@@ -557,8 +547,8 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
-<row><entry>access</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry/></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>access</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The access specifier ("public", "private", or "protected") of the inheritance.</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -582,7 +572,7 @@
<refsection><title>Description</title>
<para>Variable-length template parameter lists are not allowed in
C++, but because they are sometimes needed in documentation they are
- allowed in BoostBook. This element generally expands to "..." and
+ allowed in BoostBook. This element generally expands to "..." and
can be used anywhere any other template parameter can be
used.</para>
</refsection>
@@ -600,7 +590,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -654,7 +644,7 @@
behavior. Constructors, destructors, member functions, and free
functions all use the same documentation method, although the
top-level tags differ.</para>
-
+
<para>The behavior of functions in BoostBook is documenting using a
style similar to that of the C++ standard, with clauses describing
the requirements, effects, postconditions, exception behavior, and
@@ -662,18 +652,18 @@
<para>The following example illustrates some constructors and a
destructor for <classname>boost::any</classname>. Note that one of
- the constructors takes a single parameter whose name is "other" and
+ the constructors takes a single parameter whose name is "other" and
whose type, <code>const any&</code> is contained in the
<paramtype> element; any number of parameters may be specified
in this way.</para>
- <programlisting><class name="any">
+ <programlisting><class name="any">
<constructor>
<postconditions><para><this->empty()></para></postconditions>
</constructor>
<constructor>
- <parameter name="other">
+ <parameter name="other">
<paramtype>const <classname>any</classname>&amp;</paramtype>
</parameter>
@@ -683,12 +673,12 @@
so that any content is equivalent in both type and value to the
content of <code>other</code>, or empty if
<code>other</code> is
- empty.
+ empty.
</simpara>
</effects>
<throws>
- <simpara>May fail with a
+ <simpara>May fail with a
<classname>std::bad_alloc</classname> exception or any
exceptions arising from the copy constructor of the
contained type.
@@ -718,7 +708,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
@@ -755,7 +745,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -829,7 +819,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>cv</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>cv-qualifiers for this method, e.g., const volatile</entry></row>
<row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
@@ -905,7 +895,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -932,12 +922,12 @@
element. As in C++, namespaces can be nested and contain other C++
constructs, such as classes or functions. The <code>name</code>
attribute of a <namespace> element gives the namespace name
- (e.g., "boost"). The <libraryname>Any</libraryname> library is
+ (e.g., "boost"). The <libraryname>Any</libraryname> library is
defined entirely within namespace boost by:</para>
<programlisting><library-reference>
- <header name="boost/any.hpp">
- <namespace name="boost">
+ <header name="boost/any.hpp">
+ <namespace name="boost">
<!-- C++ constructs in the boost namespace -->
</namespace>
</header>
@@ -957,7 +947,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1016,7 +1006,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1060,7 +1050,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1095,7 +1085,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1131,7 +1121,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1166,7 +1156,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1202,7 +1192,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1221,7 +1211,7 @@
<refpurpose>A specialization (full or partial) of a union template</refpurpose>
</refnamediv>
<refsynopsisdiv>union-specialization ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dt
d.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">ove
rloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
</refsynopsisdiv>
<refsection>
<title>Attributes</title>
@@ -1237,7 +1227,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1273,7 +1263,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1308,7 +1298,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1343,7 +1333,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1372,7 +1362,7 @@
requirement gives the value of that feature. A requirement such as
<code><includes>foo.hpp</code> would be encoded as
<code><requirement
- name="includes">foo.hpp</requirement></code>.</para>
+ name="includes">foo.hpp</requirement></code>.</para>
</refsection>
<refsection>
<title>Attributes</title>
@@ -1421,7 +1411,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1456,7 +1446,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1491,7 +1481,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1561,7 +1551,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1605,7 +1595,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>cv</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>cv-qualifiers for this method, e.g., const volatile</entry></row>
<row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
@@ -1676,7 +1666,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1745,7 +1735,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1780,7 +1770,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -1857,7 +1847,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>cv</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>cv-qualifiers for this method, e.g., const volatile</entry></row>
<row><entry>specifiers</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>The specifiers for this function, e.g., inline, static, etc.</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
@@ -1899,7 +1889,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -1908,6 +1898,44 @@
</informaltable>
</refsection>
</refentry>
+ <refentry id="boostbook.dtd.access">
+ <refmeta>
+ <refentrytitle>
+ BoostBook element <sgmltag>access</sgmltag></refentrytitle>
+ <manvolnum>9</manvolnum>
+ </refmeta>
+ <refnamediv>
+ <refname>access</refname>
+ <refpurpose>Declares an access specification for class members</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>access ::=
+ (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)+
+ </refsynopsisdiv>
+ <refsection><title>Description</title>
+ <para>The access specifications of class members (public, private, or protected) may be determined by enclosing them in an <access> element.</para>
+ </refsection>
+ <refsection>
+ <title>Attributes</title>
+ <informaltable>
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>Value</entry>
+ <entry>Purpose</entry>
+ </row>
+ </thead>
+ <tbody>
+
+ <row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+ <row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the access specification, e.g. "public", "private", or "protected".</entry></row>
+ <row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </refsection>
+ </refentry>
<refentry id="boostbook.dtd.class">
<refmeta>
<refentrytitle>
@@ -1919,18 +1947,18 @@
<refpurpose>Declares a class or class template</refpurpose>
</refnamediv>
<refsynopsisdiv>class ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbo
ok.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-meth
od">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
</refsynopsisdiv>
<refsection><title>Description</title>
<para>C++ classes and class templates are described via the
- <class> element. Each class has a name (e.g., "any") given by
+ <class> element. Each class has a name (e.g., "any") given by
the <code>name</code> attribute, a purpose given by the
<purpose> element, documentation, and a set of types,
functions, base classes, and data members. Here is a minimal
definition of the <classname>boost::any</classname> class:</para>
- <programlisting><namespace name="boost">
- <class name="any">
+ <programlisting><namespace name="boost">
+ <class name="any">
<purpose>
A class whose instances can hold instances of any type that satisfies
ValueType requirements.
@@ -1955,9 +1983,9 @@
inheritance from the class <classname>std::bad_cast</classname>. It
also defines the <purpose> element, which contains a short
description of the use of the class.</para>
-
- <programlisting><class name="bad_any_cast">
- <inherit access="public"><classname>std::bad_cast</classname></inherit>
+
+ <programlisting><class name="bad_any_cast">
+ <inherit access="public"><classname>std::bad_cast</classname></inherit>
<purpose><para>The exception thrown in the event of a failed
<functionname>any_cast</functionname> of an
<classname>any</classname> value.</para></purpose>
@@ -1980,7 +2008,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2003,7 +2031,7 @@
(#PCDATA)
</refsynopsisdiv>
<refsection><title>Description</title>
- <para>All library category definitions should be in <filename>doc/src/boost.xml</filename>, and the names of categories must be prefixed with "<code>category:</code>".</para>
+ <para>All library category definitions should be in <filename>doc/src/boost.xml</filename>, and the names of categories must be prefixed with "<code>category:</code>".</para>
</refsection>
<refsection>
<title>Attributes</title>
@@ -2019,7 +2047,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2055,7 +2083,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -2090,7 +2118,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2131,7 +2159,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2200,7 +2228,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -2235,7 +2263,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -2270,7 +2298,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2306,7 +2334,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>dirname</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry/></row>
<row><entry>url</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry/></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
@@ -2350,7 +2378,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -2385,7 +2413,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2405,7 +2433,7 @@
<refpurpose>A specialization (full or partial) of a struct template</refpurpose>
</refnamediv>
<refsynopsisdiv>struct-specialization ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dt
d.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.specialization">specialization</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">ove
rloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
</refsynopsisdiv>
<refsection>
<title>Attributes</title>
@@ -2421,7 +2449,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2441,7 +2469,7 @@
<refpurpose>Declares a C++ struct</refpurpose>
</refnamediv>
<refsynopsisdiv>struct ::=
- (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-method">overloaded-method</link>| <link linkend="boostbo
ok.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
+ (<link linkend="boostbook.dtd.template">template</link>?, <link linkend="boostbook.dtd.inherit">inherit</link>*, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?, (<link linkend="boostbook.dtd.access">access</link>| <link linkend="boostbook.dtd.static-constant">static-constant</link>| <link linkend="boostbook.dtd.typedef">typedef</link>| <link linkend="boostbook.dtd.enum">enum</link>| <link linkend="boostbook.dtd.copy-assignment">copy-assignment</link>| <link linkend="boostbook.dtd.constructor">constructor</link>| <link linkend="boostbook.dtd.destructor">destructor</link>| <link linkend="boostbook.dtd.method-group">method-group</link>| <link linkend="boostbook.dtd.free-function-group">free-function-group</link>| <link linkend="boostbook.dtd.function">function</link>| <link linkend="boostbook.dtd.method">method</link>| <link linkend="boostbook.dtd.overloaded-function">overloaded-function</link>| <link linkend="boostbook.dtd.overloaded-meth
od">overloaded-method</link>| <link linkend="boostbook.dtd.data-member">data-member</link>| <link linkend="boostbook.dtd.class">class</link>| <link linkend="boostbook.dtd.class-specialization">class-specialization</link>| <link linkend="boostbook.dtd.struct">struct</link>| <link linkend="boostbook.dtd.struct-specialization">struct-specialization</link>| <link linkend="boostbook.dtd.union">union</link>| <link linkend="boostbook.dtd.union-specialization">union-specialization</link>)*)
</refsynopsisdiv>
<refsection>
<title>Attributes</title>
@@ -2457,7 +2485,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2510,7 +2538,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2546,7 +2574,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -2581,7 +2609,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -2616,7 +2644,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -2651,7 +2679,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -2686,7 +2714,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -2721,7 +2749,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>name</entry><entry>#REQUIRED</entry><entry>CDATA</entry><entry>The name of the element being declared to referenced</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
@@ -2757,7 +2785,7 @@
</thead>
<tbody>
-<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
+<row><entry>last-revision</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Set to $Date$ to keep "last revised" information in sync with CVS changes</entry></row>
<row><entry>id</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>A global identifier for this element</entry></row>
<row><entry>xml:base</entry><entry>#IMPLIED</entry><entry>CDATA</entry><entry>Implementation detail used by XIncludes</entry></row>
</tbody>
@@ -2765,4 +2793,4 @@
</informaltable>
</refsection>
</refentry>
-</chapter>
+</section>
Modified: branches/release/tools/boostbook/dtd/boostbook.dtd
==============================================================================
--- branches/release/tools/boostbook/dtd/boostbook.dtd (original)
+++ branches/release/tools/boostbook/dtd/boostbook.dtd 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,15 +1,20 @@
<!--
- BoostBook DTD version 1.0
+ BoostBook DTD version 1.1
For further information, see: http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Boost_Documentation_Format
- Copyright (c) 2002 by Peter Simons <simons_at_[hidden]>.
- All Rights Reserved.
+ Copyright (c) 2002 by Peter Simons <simons_at_[hidden]>
+ Copyright (c) 2003-2004 by Douglas Gregor <doug.gregor -at- gmail.com>
+ Copyright (c) 2007 by Frank Mori Hess <fmhess_at_[hidden]>
+
+ Distributed under the 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 DTD module is identified by the PUBLIC and SYSTEM identifiers:
- PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
- SYSTEM "http://cryp.to/boost-sandbox/libs/documentation/dtd/boostbook.dtd"
+ PUBLIC "-//Boost//DTD BoostBook XML V1.1//EN"
+ SYSTEM "http://www.boost.org/tools/boostbook/dtd/1.1/boostbook.dtd"
$Revision$
$Date$
@@ -37,7 +42,7 @@
<!ENTITY % boost.common.attrib "%local.common.attrib;
id CDATA #IMPLIED">
-<!ENTITY % boost.namespace.mix
+<!ENTITY % boost.namespace.mix
"class|class-specialization|struct|struct-specialization|
union|union-specialization|typedef|enum|
free-function-group|function|overloaded-function|
@@ -46,23 +51,25 @@
<!ENTITY % boost.template.mix
"template-type-parameter|template-nontype-parameter|template-varargs">
-<!ENTITY % boost.class.mix
+<!ENTITY % boost.class.members
"static-constant|typedef|enum|
copy-assignment|constructor|destructor|method-group|
- free-function-group|function|method|overloaded-function|
- overloaded-method|data-member|class|class-specialization|struct|
+ method|overloaded-method|data-member|class|class-specialization|struct|
struct-specialization|union|union-specialization">
+<!ENTITY % boost.class.mix
+ "%boost.class.members;|free-function-group|function|overloaded-function">
+
<!ENTITY % boost.class.content
- "template?, inherit*, purpose?, description?,
- (%boost.class.mix;)*">
+ "template?, inherit*, purpose?, description?,
+ (%boost.class.mix;|access)*">
<!ENTITY % boost.class-specialization.content
- "template?, specialization?, inherit?, purpose?, description?,
- (%boost.class.mix;)*">
+ "template?, specialization?, inherit?, purpose?, description?,
+ (%boost.class.mix;|access)*">
<!ENTITY % boost.function.semantics
- "purpose?, description?, requires?, effects?, postconditions?,
+ "purpose?, description?, requires?, effects?, postconditions?,
returns?, throws?, complexity?, notes?, rationale?">
<!ENTITY % library.content
@@ -104,7 +111,7 @@
<!ATTLIST librarycategorylist %boost.common.attrib;>
<!ELEMENT librarycategorydef (#PCDATA)>
-<!ATTLIST librarycategorydef
+<!ATTLIST librarycategorydef
name CDATA #REQUIRED
%boost.common.attrib;>
@@ -148,6 +155,11 @@
name CDATA #REQUIRED
%boost.common.attrib;>
+<!ELEMENT access (%boost.class.members;)+>
+<!ATTLIST access
+ name CDATA #REQUIRED
+ %boost.common.attrib;>
+
<!--========= C++ Templates =========-->
<!ELEMENT template (%boost.template.mix;)*>
<!ATTLIST template %boost.common.attrib;>
@@ -209,7 +221,7 @@
%boost.common.attrib;>
<!ELEMENT data-member (type, purpose?, description?)>
-<!ATTLIST data-member
+<!ATTLIST data-member
name CDATA #REQUIRED
specifiers CDATA #IMPLIED
%boost.common.attrib;>
@@ -229,12 +241,12 @@
%boost.common.attrib;>
<!ELEMENT constructor (template?, parameter*, %boost.function.semantics;)>
-<!ATTLIST constructor
+<!ATTLIST constructor
specifiers CDATA #IMPLIED
%boost.common.attrib;>
<!ELEMENT destructor (%boost.function.semantics;)>
-<!ATTLIST destructor
+<!ATTLIST destructor
specifiers CDATA #IMPLIED
%boost.common.attrib;>
@@ -252,12 +264,12 @@
%boost.common.attrib;>
<!ELEMENT overloaded-method (signature*, %boost.function.semantics;)>
-<!ATTLIST overloaded-method
+<!ATTLIST overloaded-method
name CDATA #REQUIRED
%boost.common.attrib;>
<!ELEMENT overloaded-function (signature*, %boost.function.semantics;)>
-<!ATTLIST overloaded-function
+<!ATTLIST overloaded-function
name CDATA #REQUIRED
%boost.common.attrib;>
@@ -286,12 +298,12 @@
<!ATTLIST rationale %boost.common.attrib;>
<!ELEMENT functionname (#PCDATA)>
-<!ATTLIST functionname
+<!ATTLIST functionname
alt CDATA #IMPLIED
%boost.common.attrib;>
<!ELEMENT enumname (#PCDATA)>
-<!ATTLIST enumname
+<!ATTLIST enumname
alt CDATA #IMPLIED
%boost.common.attrib;>
@@ -301,9 +313,9 @@
<!ELEMENT headername (#PCDATA)>
<!ATTLIST headername %boost.common.attrib;>
-<!ELEMENT copy-assignment
+<!ELEMENT copy-assignment
(template?, type?, parameter*, %boost.function.semantics;)>
-<!ATTLIST copy-assignment
+<!ATTLIST copy-assignment
cv CDATA #IMPLIED
specifiers CDATA #IMPLIED
%boost.common.attrib;>
@@ -330,7 +342,7 @@
%boost.common.attrib;>
<!--========== Boost Testsuite Extensions ==========-->
-<!ENTITY % boost.testsuite.tests
+<!ENTITY % boost.testsuite.tests
"compile-test|link-test|run-test|
compile-fail-test|link-fail-test|run-fail-test">
<!ENTITY % boost.testsuite.test.content
@@ -345,12 +357,12 @@
name CDATA #IMPLIED>
<!ELEMENT link-test (%boost.testsuite.test.content;)>
-<!ATTLIST link-test
+<!ATTLIST link-test
filename CDATA #REQUIRED
name CDATA #IMPLIED>
<!ELEMENT run-test (%boost.testsuite.test.content;)>
-<!ATTLIST run-test
+<!ATTLIST run-test
filename CDATA #REQUIRED
name CDATA #IMPLIED>
@@ -360,12 +372,12 @@
name CDATA #IMPLIED>
<!ELEMENT link-fail-test (%boost.testsuite.test.content;)>
-<!ATTLIST link-fail-test
+<!ATTLIST link-fail-test
filename CDATA #REQUIRED
name CDATA #IMPLIED>
<!ELEMENT run-fail-test (%boost.testsuite.test.content;)>
-<!ATTLIST run-fail-test
+<!ATTLIST run-fail-test
filename CDATA #REQUIRED
name CDATA #IMPLIED>
@@ -378,13 +390,13 @@
<!ELEMENT lib (#PCDATA)>
<!ELEMENT requirement (#PCDATA)>
-<!ATTLIST requirement
+<!ATTLIST requirement
name CDATA #REQUIRED>
<!ELEMENT if-fails ANY>
<!ELEMENT parameter (paramtype, default?, description?)>
-<!ATTLIST parameter
+<!ATTLIST parameter
name CDATA #IMPLIED>
<!ELEMENT programlisting ANY>
@@ -393,7 +405,7 @@
<!--========== Customize the DocBook DTD ==========-->
<!ENTITY % local.tech.char.class "|functionname|libraryname|enumname|code">
-<!ENTITY % local.para.class
+<!ENTITY % local.para.class
"|using-namespace|using-class|librarylist|librarycategorylist">
<!ENTITY % local.descobj.class "|libraryinfo">
<!ENTITY % local.classname.attrib "alt CDATA #IMPLIED">
@@ -408,5 +420,5 @@
<!--========== Import DocBook DTD ==========-->
<!ENTITY % DocBook PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-
+
%DocBook;
Modified: branches/release/tools/boostbook/setup_boostbook.py
==============================================================================
--- branches/release/tools/boostbook/setup_boostbook.py (original)
+++ branches/release/tools/boostbook/setup_boostbook.py 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,5 +1,5 @@
# Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-#
+#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
@@ -10,10 +10,11 @@
# right now it is used only be release scripts
# User configuration
-DOCBOOK_XSL_VERSION = "1.67.2"
+DOCBOOK_XSL_VERSION = "1.73.2"
DOCBOOK_DTD_VERSION = "4.2"
-FOP_VERSION = "0.20.5"
-FOP_MIRROR = "http://mirrors.ibiblio.org/pub/mirrors/apache/xmlgraphics/fop/"
+FOP_VERSION = "0.94"
+FOP_JDK_VERSION="1.4"
+FOP_MIRROR = "http://mirrors.ibiblio.org/pub/mirrors/apache/xmlgraphics/fop"
SOURCEFORGE_MIRROR = "http://puzzle.dl.sourceforge.net"
# No user configuration below this point-------------------------------------
@@ -40,7 +41,7 @@
( options, args ) = parser.parse_args( args )
if options.tools is None:
options.tools = os.getcwd()
-
+
return options.tools
@@ -48,7 +49,7 @@
return path.replace( "\\", "/" )
def unzip( archive_path, result_dir ):
- z = zipfile.ZipFile( archive_path, 'r', zipfile.ZIP_DEFLATED )
+ z = zipfile.ZipFile( archive_path, 'r', zipfile.ZIP_DEFLATED )
for f in z.infolist():
print f.filename
if not os.path.exists( os.path.join( result_dir, os.path.dirname( f.filename ) ) ):
@@ -56,11 +57,11 @@
result = open( os.path.join( result_dir, f.filename ), 'wb' )
result.write( z.read( f.filename ) )
result.close()
-
+
z.close()
def gunzip( archive_path, result_dir ):
- tar = tarfile.open( archive_path, 'r:gz' )
+ tar = tarfile.open( archive_path, 'r:gz' )
for tarinfo in tar:
tar.extract( tarinfo, result_dir )
tar.close()
@@ -143,7 +144,7 @@
except OSError, e:
os.unlink( config_file )
os.rename( config_file + ".tmp", config_file )
-
+
def setup_docbook_xsl( tools_directory ):
print "DocBook XSLT Stylesheets ..."
@@ -181,7 +182,7 @@
print "Expanding DocBook XML DTD into %s... " % DOCBOOK_DTD_DIR
unzip( DOCBOOK_DTD_ZIP, DOCBOOK_DTD_DIR )
print "done."
-
+
return DOCBOOK_DTD_DIR
def find_xsltproc():
@@ -206,13 +207,13 @@
def setup_fop( tools_directory ):
print "FOP ..."
- FOP_TARBALL = os.path.join( tools_directory, "fop-%s-bin.tar.gz" % FOP_VERSION )
+ FOP_TARBALL = os.path.join( tools_directory, "fop-%s-bin-jdk%s.tar.gz" % ( FOP_VERSION, FOP_JDK_VERSION ) )
FOP_URL = "%s/%s" % ( FOP_MIRROR, os.path.basename( FOP_TARBALL ) )
FOP_DIR = to_posix( "%s/fop-%s" % ( tools_directory, FOP_VERSION ) )
if sys.platform == 'win32':
fop_driver = "fop.bat"
else:
- fop_driver = "fop.sh"
+ fop_driver = "fop"
FOP = to_posix( os.path.join( FOP_DIR, fop_driver ) )
@@ -240,7 +241,7 @@
print " Updating Boost.Jam configuration in %s... " % JAM_CONFIG_OUT
return JAM_CONFIG_OUT
elif os.environ.has_key( "BOOST_ROOT" ) and os.path.exists( os.path.join( os.environ[ "BOOST_ROOT" ], "tools/build/v2/user-config.jam" ) ):
- JAM_CONFIG_IN=os.path.join( os.environ[ "BOOST_ROOT" ], "tools/build/v2/user-config.jam" )
+ JAM_CONFIG_IN=os.path.join( os.environ[ "BOOST_ROOT" ], "tools/build/v2/user-config.jam" )
print " Found user-config.jam in BOOST_ROOT directory (%s)" % JAM_CONFIG_IN
JAM_CONFIG_IN_TEMP="no"
print " Writing Boost.Jam configuration to %s... " % JAM_CONFIG_OUT
@@ -251,7 +252,7 @@
print "Setting up boostbook tools..."
print "-----------------------------"
print ""
-
+
DOCBOOK_XSL_DIR = setup_docbook_xsl( tools_directory )
DOCBOOK_DTD_DIR = setup_docbook_dtd( tools_directory )
XSLTPROC = find_xsltproc()
@@ -264,7 +265,7 @@
FOP = setup_fop( tools_directory )
user_config = find_user_config()
-
+
# Find the input jamfile to configure
if user_config is None:
@@ -296,8 +297,8 @@
def main():
( tools_directory ) = accept_args( sys.argv[ 1: ] )
setup_boostbook( tools_directory )
-
+
if __name__ == "__main__":
main()
-
+
Modified: branches/release/tools/boostbook/setup_boostbook.sh
==============================================================================
--- branches/release/tools/boostbook/setup_boostbook.sh (original)
+++ branches/release/tools/boostbook/setup_boostbook.sh 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,15 +1,16 @@
#!/bin/sh
# Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-#
+#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
# User configuration
-DOCBOOK_XSL_VERSION=1.68.1
+DOCBOOK_XSL_VERSION=1.73.2
DOCBOOK_DTD_VERSION=4.2
-FOP_VERSION=0.20.5
-FOP_MIRROR=http://mirrors.ibiblio.org/pub/mirrors/apache/xml/fop/
+FOP_VERSION=0.94
+FOP_JDK_VERSION=1.4
+FOP_MIRROR=http://mirrors.ibiblio.org/pub/mirrors/apache/xmlgraphics/fop
SOURCEFORGE_MIRROR=http://dl.sourceforge.net
HTTP_GET_CMD="curl -O"
@@ -99,17 +100,17 @@
HAVE_FOP="no"
else
echo "Searching for Java... $JAVA.";
- FOP_TARBALL="fop-$FOP_VERSION-bin.tar.gz"
+ FOP_TARBALL="fop-$FOP_VERSION-bin-jdk$FOP_JDK_VERSION.tar.gz"
FOP_URL="$FOP_MIRROR/$FOP_TARBALL"
FOP_DIR="$PWD/fop-$FOP_VERSION"
- FOP="$FOP_DIR/fop.sh"
+ FOP="$FOP_DIR/fop"
if test -f $FOP_TARBALL; then
echo "Using existing FOP distribution (version $FOP_VERSION)."
else
- echo "Downloading FOP distribution version $FOP_VERSION..."
+ echo "Downloading FOP distribution version $FOP_VERSION..."
$HTTP_GET_CMD $FOP_URL
fi
-
+
if test ! -d $FOP_DIR; then
echo -n "Expanding FOP distribution into $FOP_DIR... ";
gunzip -cd $FOP_TARBALL | tar xf -
@@ -122,7 +123,7 @@
JAM_CONFIG_OUT="$HOME/user-config.jam"
if test -r "$HOME/user-config.jam"; then
JAM_CONFIG_IN="user-config-backup.jam"
- cp $JAM_CONFIG_OUT user-config-backup.jam
+ cp $JAM_CONFIG_OUT user-config-backup.jam
JAM_CONFIG_IN_TEMP="yes"
echo -n "Updating Boost.Jam configuration in $JAM_CONFIG_OUT... "
@@ -130,7 +131,7 @@
JAM_CONFIG_IN="$BOOST_ROOT/tools/build/v2/user-config.jam";
JAM_CONFIG_IN_TEMP="no"
echo -n "Writing Boost.Jam configuration to $JAM_CONFIG_OUT... "
-else
+else
echo "ERROR: Please set the BOOST_ROOT environment variable to refer to your"
echo "Boost installation or copy user-config.jam into your home directory."
exit 0
@@ -139,8 +140,8 @@
cat > setup_boostbook.awk <<EOF
BEGIN { using_boostbook = 0; eaten=0 }
-/^\s*using boostbook/ {
- using_boostbook = 1;
+/^\s*using boostbook/ {
+ using_boostbook = 1;
print "using boostbook";
print " : $DOCBOOK_XSL_DIR";
print " : $DOCBOOK_DTD_DIR";
@@ -156,7 +157,7 @@
/^.*$/ { if (eaten == 0) print; eaten=0 }
-END {
+END {
if (using_boostbook==0) {
print "using boostbook";
print " : $DOCBOOK_XSL_DIR";
Modified: branches/release/tools/boostbook/xsl/caramel/concept2docbook.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/caramel/concept2docbook.xsl (original)
+++ branches/release/tools/boostbook/xsl/caramel/concept2docbook.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -59,7 +59,7 @@
<copyright><xsl:copy-of select="document(concat('../concepts/', @file))/copyright/node()"/></copyright>
</xsl:when>
</xsl:choose>
- </xsl:for-each>
+ </xsl:for-each>
</refentryinfo>
-->
@@ -108,12 +108,12 @@
<!-- This part must be run even if there are no associated types to print out, so the hidden type definitions can be found -->
<xsl:variable name="definition_list">
<xsl:call-template name="make-definition-list">
- <xsl:with-param name="typedefs" select="define-type | associated-type"/>
- <xsl:with-param name="definition_list">
- <xsl:for-each select="param/@name">
- @(@<xsl:value-of select="."/>=<xsl:value-of select="."/>@)@
- </xsl:for-each>
- </xsl:with-param>
+ <xsl:with-param name="typedefs" select="define-type | associated-type"/>
+ <xsl:with-param name="definition_list">
+ <xsl:for-each select="param/@name">
+ @(@<xsl:value-of select="."/>=<xsl:value-of select="."/>@)@
+ </xsl:for-each>
+ </xsl:with-param>
</xsl:call-template>
</xsl:variable>
@@ -130,12 +130,12 @@
<xsl:variable name="notations">
<xsl:for-each select="notation">
- @@(@@<xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="*[1]"/>
- <xsl:with-param name="definition_list" select="$definition_list"/>
- <xsl:with-param name="ignore-cv" select="true()"/>
- <xsl:with-param name="ignore-references" select="true()"/>
- </xsl:call-template>@@=@@<xsl:value-of select="normalize-space(@variables)"/>@@)@@
+ @@(@@<xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="*[1]"/>
+ <xsl:with-param name="definition_list" select="$definition_list"/>
+ <xsl:with-param name="ignore-cv" select="true()"/>
+ <xsl:with-param name="ignore-references" select="true()"/>
+ </xsl:call-template>@@=@@<xsl:value-of select="normalize-space(@variables)"/>@@)@@
</xsl:for-each>
</xsl:variable>
@@ -144,9 +144,9 @@
<xsl:if test="definition">
<refsect1>
<title>Definitions</title>
- <xsl:for-each select="definition">
- <p><xsl:apply-templates/></p>
- </xsl:for-each>
+ <xsl:for-each select="definition">
+ <p><xsl:apply-templates/></p>
+ </xsl:for-each>
</refsect1>
</xsl:if>
@@ -202,8 +202,8 @@
<xsl:with-param name="notations" select="normalize-space($notations)"/>
</xsl:call-template>
</type>
-
- <xsl:comment/> must be
+
+ <xsl:comment/> must be
<xsl:for-each select="return-type/*">
<xsl:if test="position()!=1 and last()!=2">, </xsl:if>
<xsl:if test="position()=last() and last()!=1"> and </xsl:if>
@@ -214,7 +214,7 @@
</xsl:call-template>
</xsl:for-each><xsl:comment/>.
</para>
-
+
<xsl:if test="description">
<xsl:for-each select="description">
<xsl:apply-templates/>
@@ -271,9 +271,9 @@
</thead>
<tbody>
<xsl:apply-templates select="valid-expression">
- <xsl:with-param name="definition_list"
+ <xsl:with-param name="definition_list"
select="$definition_list"/>
- <xsl:with-param name="notations"
+ <xsl:with-param name="notations"
select="normalize-space($notations)"/>
<xsl:with-param name="columns" select="$columns"/>
</xsl:apply-templates>
@@ -282,53 +282,53 @@
</informaltable>
<!-- Doug prefers the table
<variablelist>
- <xsl:for-each select="valid-expression">
- <xsl:variable name="as-cxx-value">
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="*[1]"/>
- <xsl:with-param name="definition_list" select="$definition_list"/>
- <xsl:with-param name="notations" select="normalize-space($notations)"/>
- </xsl:call-template>
- </xsl:variable>
- <varlistentry>
- <term><xsl:value-of select="@name"/>: <literal><xsl:value-of select="$as-cxx-value"/></literal></term>
- <listitem><variablelist>
- <xsl:if test="return-type/*">
- <varlistentry><term>Return value</term><listitem><para>
- <xsl:for-each select="return-type/*">
- <xsl:if test="position()!=1 and last()!=2">, </xsl:if>
- <xsl:if test="position()=last() and last()!=1"> and </xsl:if>
- <xsl:call-template name="unparse-constraint">
- <xsl:with-param name="constraint" select="."/>
- <xsl:with-param name="definition_list" select="$definition_list"/>
- <xsl:with-param name="capitalize" select="position()=1"/>
- </xsl:call-template>
- </xsl:for-each>
- </para></listitem></varlistentry>
- </xsl:if>
-
- <xsl:for-each select="precondition">
- <varlistentry><term>Precondition</term><listitem><para>
- <xsl:apply-templates/>
- </para></listitem></varlistentry>
- </xsl:for-each>
-
- <xsl:for-each select="semantics">
- <varlistentry><term>Semantics</term><listitem><para>
- <xsl:apply-templates/>
- </para></listitem></varlistentry>
- </xsl:for-each>
-
- <xsl:for-each select="postcondition">
- <varlistentry><term>Postcondition</term><listitem><para>
- <xsl:apply-templates/>
- </para></listitem></varlistentry>
- </xsl:for-each>
+ <xsl:for-each select="valid-expression">
+ <xsl:variable name="as-cxx-value">
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="*[1]"/>
+ <xsl:with-param name="definition_list" select="$definition_list"/>
+ <xsl:with-param name="notations" select="normalize-space($notations)"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <varlistentry>
+ <term><xsl:value-of select="@name"/>: <literal><xsl:value-of select="$as-cxx-value"/></literal></term>
+ <listitem><variablelist>
+ <xsl:if test="return-type/*">
+ <varlistentry><term>Return value</term><listitem><para>
+ <xsl:for-each select="return-type/*">
+ <xsl:if test="position()!=1 and last()!=2">, </xsl:if>
+ <xsl:if test="position()=last() and last()!=1"> and </xsl:if>
+ <xsl:call-template name="unparse-constraint">
+ <xsl:with-param name="constraint" select="."/>
+ <xsl:with-param name="definition_list" select="$definition_list"/>
+ <xsl:with-param name="capitalize" select="position()=1"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </para></listitem></varlistentry>
+ </xsl:if>
- </variablelist></listitem>
- </varlistentry>
+ <xsl:for-each select="precondition">
+ <varlistentry><term>Precondition</term><listitem><para>
+ <xsl:apply-templates/>
+ </para></listitem></varlistentry>
+ </xsl:for-each>
- </xsl:for-each>
+ <xsl:for-each select="semantics">
+ <varlistentry><term>Semantics</term><listitem><para>
+ <xsl:apply-templates/>
+ </para></listitem></varlistentry>
+ </xsl:for-each>
+
+ <xsl:for-each select="postcondition">
+ <varlistentry><term>Postcondition</term><listitem><para>
+ <xsl:apply-templates/>
+ </para></listitem></varlistentry>
+ </xsl:for-each>
+
+ </variablelist></listitem>
+ </varlistentry>
+
+ </xsl:for-each>
</variablelist>
-->
</refsect1>
@@ -337,9 +337,9 @@
<xsl:if test="complexity">
<refsect1>
<title>Complexity</title>
- <xsl:for-each select="complexity">
- <para><xsl:apply-templates/></para>
- </xsl:for-each>
+ <xsl:for-each select="complexity">
+ <para><xsl:apply-templates/></para>
+ </xsl:for-each>
</refsect1>
</xsl:if>
@@ -347,14 +347,14 @@
<refsect1>
<title>Invariants</title>
<variablelist>
- <xsl:for-each select="invariant">
- <varlistentry>
- <term><xsl:value-of select="@name"/></term>
- <listitem>
- <para><xsl:apply-templates/></para>
- </listitem>
- </varlistentry>
- </xsl:for-each>
+ <xsl:for-each select="invariant">
+ <varlistentry>
+ <term><xsl:value-of select="@name"/></term>
+ <listitem>
+ <para><xsl:apply-templates/></para>
+ </listitem>
+ </varlistentry>
+ </xsl:for-each>
</variablelist>
</refsect1>
</xsl:if>
@@ -362,46 +362,44 @@
<xsl:if test="example-model">
<refsect1>
<title>Models</title>
- <itemizedlist>
- <xsl:for-each select="example-model">
- <listitem>
- <simplelist type="inline">
- <xsl:for-each select="*">
- <xsl:variable name="example-value">
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="."/>
- <xsl:with-param name="definition_list" select="$definition_list"/>
- </xsl:call-template>
- </xsl:variable>
- <member><type><xsl:value-of select="$example-value"/></type></member>
- </xsl:for-each>
- </simplelist>
- </listitem>
- </xsl:for-each>
- </itemizedlist>
+ <itemizedlist>
+ <xsl:for-each select="example-model">
+ <listitem>
+ <simplelist type="inline">
+ <xsl:for-each select="*">
+ <xsl:variable name="example-value">
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="."/>
+ <xsl:with-param name="definition_list" select="$definition_list"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <member><type><xsl:value-of select="$example-value"/></type></member>
+ </xsl:for-each>
+ </simplelist>
+ </listitem>
+ </xsl:for-each>
+ </itemizedlist>
</refsect1>
</xsl:if>
- <xsl:variable name="see-also-list" select="concept-ref | see-also | refines | refines-when-mutable | models-as-first-arg | models | models-when-mutable"/>
+ <xsl:variable name="see-also-list-0" select="concept-ref | see-also | refines | refines-when-mutable | models-as-first-arg | models | models-when-mutable"/>
+ <xsl:variable name="see-also-list-1" select="$see-also-list-0[string(@name | @concept) != string(../@name)]"/>
+ <xsl:variable name="see-also-list" select="$see-also-list-1[not(string(@name|@concept) = (preceding::*/@name | preceding::*/@concept | ancestor::*/@name | ancestor::*/@concept))]"/>
<xsl:if test="$see-also-list">
<refsect1>
- <title>See also</title>
- <itemizedlist>
- <xsl:for-each select="$see-also-list">
- <xsl:sort select="string(@name|@concept)" data-type="text"/>
- <xsl:if test="string(@name|@concept) != string(../@name)">
- <xsl:if test="not(string(@name|@concept) = (preceding::*/@name | preceding::*/@concept | ancestor::*/@name | ancestor::*/@concept))">
- <listitem>
- <para>
- <xsl:call-template name="concept.link">
- <xsl:with-param name="name" select="@name|@concept"/>
- </xsl:call-template>
- </para>
- </listitem>
- </xsl:if>
- </xsl:if>
- </xsl:for-each>
- </itemizedlist>
+ <title>See also</title>
+ <itemizedlist>
+ <xsl:for-each select="$see-also-list">
+ <xsl:sort select="string(@name|@concept)" data-type="text"/>
+ <listitem>
+ <para>
+ <xsl:call-template name="concept.link">
+ <xsl:with-param name="name" select="@name|@concept"/>
+ </xsl:call-template>
+ </para>
+ </listitem>
+ </xsl:for-each>
+ </itemizedlist>
</refsect1>
</xsl:if>
@@ -417,79 +415,79 @@
<xsl:choose>
<xsl:when test="name($constraint)='require-same-type'">
- <xsl:if test="$type-expr-mode">identical to </xsl:if>
- <type>
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="$constraint/*[1]"/>
- <xsl:with-param name="definition_list" select="definition_list"/>
- </xsl:call-template>
- </type>
+ <xsl:if test="$type-expr-mode">identical to </xsl:if>
+ <type>
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="$constraint/*[1]"/>
+ <xsl:with-param name="definition_list" select="definition_list"/>
+ </xsl:call-template>
+ </type>
</xsl:when>
<xsl:when test="name($constraint)='convertible-to'">
- <xsl:choose>
- <xsl:when test="$type-expr-mode">convertible to </xsl:when>
- <xsl:when test="not($type-expr-mode) and $capitalize">Convertible to </xsl:when>
- <xsl:when test="not($type-expr-mode) and not($capitalize)">convertible to </xsl:when>
- </xsl:choose>
- <type>
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="$constraint/*[1]"/>
- <xsl:with-param name="definition_list" select="definition_list"/>
- </xsl:call-template>
- </type>
+ <xsl:choose>
+ <xsl:when test="$type-expr-mode">convertible to </xsl:when>
+ <xsl:when test="not($type-expr-mode) and $capitalize">Convertible to </xsl:when>
+ <xsl:when test="not($type-expr-mode) and not($capitalize)">convertible to </xsl:when>
+ </xsl:choose>
+ <type>
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="$constraint/*[1]"/>
+ <xsl:with-param name="definition_list" select="definition_list"/>
+ </xsl:call-template>
+ </type>
</xsl:when>
<xsl:when test="name($constraint)='derived-from'">
- <xsl:choose>
- <xsl:when test="$type-expr-mode">derived from </xsl:when>
- <xsl:when test="not($type-expr-mode) and $capitalize">Derived from </xsl:when>
- <xsl:when test="not($type-expr-mode) and not($capitalize)">derived from </xsl:when>
- </xsl:choose>
- <type>
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="$constraint/*[1]"/>
- <xsl:with-param name="definition_list" select="definition_list"/>
- </xsl:call-template>
- </type>
+ <xsl:choose>
+ <xsl:when test="$type-expr-mode">derived from </xsl:when>
+ <xsl:when test="not($type-expr-mode) and $capitalize">Derived from </xsl:when>
+ <xsl:when test="not($type-expr-mode) and not($capitalize)">derived from </xsl:when>
+ </xsl:choose>
+ <type>
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="$constraint/*[1]"/>
+ <xsl:with-param name="definition_list" select="definition_list"/>
+ </xsl:call-template>
+ </type>
</xsl:when>
<xsl:when test="name($constraint)='assignable-to'">
- <xsl:choose>
- <xsl:when test="$type-expr-mode">assignable to </xsl:when>
- <xsl:when test="not($type-expr-mode) and $capitalize">Assignable to </xsl:when>
- <xsl:when test="not($type-expr-mode) and not($capitalize)">assignable to </xsl:when>
- </xsl:choose>
- <type>
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="$constraint/*[1]"/>
- <xsl:with-param name="definition_list" select="definition_list"/>
- </xsl:call-template>
- </type>
+ <xsl:choose>
+ <xsl:when test="$type-expr-mode">assignable to </xsl:when>
+ <xsl:when test="not($type-expr-mode) and $capitalize">Assignable to </xsl:when>
+ <xsl:when test="not($type-expr-mode) and not($capitalize)">assignable to </xsl:when>
+ </xsl:choose>
+ <type>
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="$constraint/*[1]"/>
+ <xsl:with-param name="definition_list" select="definition_list"/>
+ </xsl:call-template>
+ </type>
</xsl:when>
<xsl:when test="name($constraint)='models-as-first-arg'">
- <xsl:choose>
- <xsl:when test="$type-expr-mode"> a model </xsl:when>
- <xsl:when test="not($type-expr-mode) and $capitalize"> Models </xsl:when>
- <xsl:when test="not($type-expr-mode) and not($capitalize)"> models </xsl:when>
- </xsl:choose>
- <xsl:if test="$constraint/*"><xsl:comment/>
- (along with <xsl:for-each select="$constraint/*"><type>
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="."/>
- <xsl:with-param name="definition_list" select="definition_list"/>
- </xsl:call-template>
- </type>
- <xsl:choose>
- <xsl:when test="position()=last()"/>
- <xsl:when test="position()=last()-1 and last()=2"> and </xsl:when>
- <xsl:when test="position()=last()-1 and last()!=2">, and </xsl:when>
- <xsl:otherwise>, </xsl:otherwise>
- </xsl:choose><xsl:comment/>
- </xsl:for-each><xsl:comment/>) <xsl:comment/>
- </xsl:if><xsl:comment/>
- <xsl:if test="$type-expr-mode"> of </xsl:if>
+ <xsl:choose>
+ <xsl:when test="$type-expr-mode"> a model </xsl:when>
+ <xsl:when test="not($type-expr-mode) and $capitalize"> Models </xsl:when>
+ <xsl:when test="not($type-expr-mode) and not($capitalize)"> models </xsl:when>
+ </xsl:choose>
+ <xsl:if test="$constraint/*"><xsl:comment/>
+ (along with <xsl:for-each select="$constraint/*"><type>
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="."/>
+ <xsl:with-param name="definition_list" select="definition_list"/>
+ </xsl:call-template>
+ </type>
+ <xsl:choose>
+ <xsl:when test="position()=last()"/>
+ <xsl:when test="position()=last()-1 and last()=2"> and </xsl:when>
+ <xsl:when test="position()=last()-1 and last()!=2">, and </xsl:when>
+ <xsl:otherwise>, </xsl:otherwise>
+ </xsl:choose><xsl:comment/>
+ </xsl:for-each><xsl:comment/>) <xsl:comment/>
+ </xsl:if><xsl:comment/>
+ <xsl:if test="$type-expr-mode"> of </xsl:if>
<xsl:call-template name="concept.link">
<xsl:with-param name="name" select="$constraint/@concept"/>
</xsl:call-template>
@@ -504,35 +502,35 @@
<xsl:choose>
<xsl:when test="$typedefs">
- <xsl:variable name="type_definition">
- <xsl:if test="name($typedefs[1]/*[1])!='description'">
- <xsl:call-template name="unparse-cpp">
- <xsl:with-param name="typeref" select="$typedefs[1]/*[1]"/>
- <xsl:with-param name="definition_list" select="$definition_list"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:variable>
-
- <xsl:variable name="new_type_definition">
- <xsl:choose>
- <xsl:when test="name($typedefs[1])='associated-type'">
- <xsl:value-of select="$typedefs[1]/@name"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$type_definition"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:call-template name="make-definition-list">
- <xsl:with-param name="typedefs" select="$typedefs[position()!=1]"/>
- <xsl:with-param name="definition_list" select="concat($definition_list, ' @(@', $typedefs[1]/@name, '=', $new_type_definition, '@)@')"/>
- </xsl:call-template>
+ <xsl:variable name="type_definition">
+ <xsl:if test="name($typedefs[1]/*[1])!='description'">
+ <xsl:call-template name="unparse-cpp">
+ <xsl:with-param name="typeref" select="$typedefs[1]/*[1]"/>
+ <xsl:with-param name="definition_list" select="$definition_list"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:variable>
+
+ <xsl:variable name="new_type_definition">
+ <xsl:choose>
+ <xsl:when test="name($typedefs[1])='associated-type'">
+ <xsl:value-of select="$typedefs[1]/@name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$type_definition"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:call-template name="make-definition-list">
+ <xsl:with-param name="typedefs" select="$typedefs[position()!=1]"/>
+ <xsl:with-param name="definition_list" select="concat($definition_list, ' @(@', $typedefs[1]/@name, '=', $new_type_definition, '@)@')"/>
+ </xsl:call-template>
</xsl:when>
<xsl:otherwise> <!-- End of expression list, emit the results that have accumulated -->
- <xsl:value-of select="$definition_list"/>
+ <xsl:value-of select="$definition_list"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
@@ -551,7 +549,7 @@
<tgroup cols="2">
<tbody>
<xsl:apply-templates select="associated-type" mode="sgi">
- <xsl:with-param name="definition_list"
+ <xsl:with-param name="definition_list"
select="$definition_list"/>
</xsl:apply-templates>
</tbody>
@@ -561,7 +559,7 @@
<xsl:when test="$boost.concept.layout='austern'">
<itemizedlist>
<xsl:apply-templates select="associated-type" mode="austern">
- <xsl:with-param name="definition_list"
+ <xsl:with-param name="definition_list"
select="$definition_list"/>
</xsl:apply-templates>
</itemizedlist>
@@ -588,7 +586,7 @@
</seg>
</seglistitem>
</xsl:for-each>
- </segmentedlist>
+ </segmentedlist>
</xsl:when>
</xsl:choose>
</refsect1>
@@ -600,11 +598,11 @@
<xsl:if test="$list!=''">
<term><varname>
- <xsl:if test="substring-before($list,' ')=''"><xsl:value-of select="$list"/></xsl:if>
- <xsl:value-of select="substring-before($list,' ')"/>
+ <xsl:if test="substring-before($list,' ')=''"><xsl:value-of select="$list"/></xsl:if>
+ <xsl:value-of select="substring-before($list,' ')"/>
</varname></term>
<xsl:call-template name="comma-list">
- <xsl:with-param name="list" select="substring-after($list,' ')"/>
+ <xsl:with-param name="list" select="substring-after($list,' ')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
@@ -629,7 +627,7 @@
<listitem>
<para>
<emphasis role="bold"><xsl:value-of select="@name"/></emphasis>
-
+
<xsl:call-template name="preformatted">
<xsl:with-param name="text">
<xsl:call-template name="unparse-cpp">
@@ -638,7 +636,7 @@
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
-
+
<xsl:for-each select="description">
<xsl:apply-templates/>
</xsl:for-each>
@@ -672,11 +670,11 @@
<xsl:if test="position()=last() and last()!=1"> and </xsl:if>
<xsl:call-template name="unparse-constraint">
<xsl:with-param name="constraint" select="."/>
- <xsl:with-param name="definition_list"
+ <xsl:with-param name="definition_list"
select="$definition_list"/>
<xsl:with-param name="capitalize" select="position()=1"/>
</xsl:call-template>
- </xsl:for-each>
+ </xsl:for-each>
</simpara>
</entry>
</xsl:if>
@@ -732,7 +730,7 @@
<xsl:for-each select="notation">
<xsl:variable name="notation_name">
<xsl:call-template name="comma-list">
- <xsl:with-param name="list"
+ <xsl:with-param name="list"
select="normalize-space(@variables)"/>
</xsl:call-template>
</xsl:variable>
@@ -755,7 +753,7 @@
</varlistentry>
</xsl:for-each>
</variablelist>
- </refsect1>
+ </refsect1>
</xsl:template>
<xsl:template name="concept.link">
@@ -763,7 +761,7 @@
<xsl:param name="warn" select="true()"/>
<xsl:param name="text" select="$name"/>
<xsl:variable name="node" select="key('concepts', $name)"/>
-
+
<xsl:choose>
<xsl:when test="count($node)=0">
<xsl:if test="$warn">
@@ -785,7 +783,7 @@
<xsl:with-param name="text" select="$text"/>
</xsl:call-template>
</xsl:otherwise>
- </xsl:choose>
+ </xsl:choose>
</xsl:template>
<xsl:template name="remove-whitespace">
@@ -796,7 +794,7 @@
<xsl:when test="contains($normalized, ' ')">
<xsl:value-of select="substring-before($normalized, ' ')"/>
<xsl:call-template name="remove-whitespace">
- <xsl:with-param name="text"
+ <xsl:with-param name="text"
select="substring-after($normalized, ' ')"/>
</xsl:call-template>
</xsl:when>
Modified: branches/release/tools/boostbook/xsl/chunk-common.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/chunk-common.xsl (original)
+++ branches/release/tools/boostbook/xsl/chunk-common.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!--
Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
Modified: branches/release/tools/boostbook/xsl/docbook.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/docbook.xsl (original)
+++ branches/release/tools/boostbook/xsl/docbook.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
version="1.0">
<xsl:include href="reference.xsl"/>
@@ -52,7 +53,7 @@
<xsl:if test="not(title)">
<title>
<xsl:text>Reference</xsl:text>
- </title>
+ </title>
</xsl:if>
<xsl:if test="concept">
@@ -73,7 +74,7 @@
</xsl:choose>
<title>Concepts</title>
-
+
<itemizedlist>
<xsl:for-each select="concept">
<listitem>
@@ -116,7 +117,7 @@
</title>
<xsl:apply-templates select="para|section" mode="annotation"/>
-
+
<xsl:if test="macro">
<xsl:call-template name="synopsis">
<xsl:with-param name="text">
@@ -133,7 +134,7 @@
|descendant::typedef">
<xsl:call-template name="synopsis">
<xsl:with-param name="text">
- <xsl:apply-templates mode="synopsis"
+ <xsl:apply-templates mode="synopsis"
select="namespace|class|struct|union
|function|free-function-group
|overloaded-function|enum
@@ -262,7 +263,7 @@
</xsl:if>
<xsl:if test="not($highlight)">
<xsl:value-of select="$text"/>
- </xsl:if>
+ </xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:message>
@@ -290,7 +291,7 @@
<refnamediv>
<refname><xsl:value-of select="$refname"/></refname>
<refpurpose>
- <xsl:apply-templates mode="annotation" select="$purpose"/>
+ <xsl:apply-templates mode="purpose" select="$purpose"/>
</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -339,7 +340,7 @@
<xsl:for-each select="./@*">
<xsl:choose>
<xsl:when test="local-name(.)='last-revision'">
- <xsl:attribute
+ <xsl:attribute
name="rev:last-revision"
namespace="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision">
<xsl:value-of select="."/>
@@ -385,7 +386,7 @@
</xsl:attribute>
<xsl:if test="@last-revision">
- <xsl:attribute
+ <xsl:attribute
name="rev:last-revision"
namespace="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision">
<xsl:value-of select="@last-revision"/>
@@ -443,7 +444,7 @@
<xsl:template match="*" mode="namespace-reference">
<xsl:apply-templates select="." mode="reference"/>
</xsl:template>
-
+
<!-- Make the various blocks immediately below a "part" be
"chapter"-s. Must also take into account turning
chapters within chpaters into sections. -->
@@ -460,7 +461,7 @@
<xsl:template match="part/part/partinfo|part/article/articleinfo">
<chapterinfo><xsl:apply-templates/></chapterinfo>
</xsl:template>
- <xsl:template match="part/part/chapter">
+ <xsl:template match="part/part/chapter|part/part/appendix">
<section>
<xsl:for-each select="./@*">
<xsl:attribute name="{name(.)}">
@@ -470,7 +471,7 @@
<xsl:apply-templates/>
</section>
</xsl:template>
- <xsl:template match="part/part/chapter/chapterinfo">
+ <xsl:template match="part/part/chapter/chapterinfo|part/part/appendix/appendixinfo">
<sectioninfo><xsl:apply-templates/></sectioninfo>
</xsl:template>
</xsl:stylesheet>
Modified: branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl (original)
+++ branches/release/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -46,7 +46,7 @@
<xsl:key name="compounds-by-kind" match="compounddef" use="@kind"/>
<xsl:key name="compounds-by-id" match="compounddef" use="@id"/>
- <xsl:key name="inner-classes" match="compounddef[not(attribute::kind='namespace') and not(attribute::kind='file')]/innerclass" use="@refid"/>
+ <xsl:key name="members-by-id" match="memberdef" use="@id" />
<xsl:strip-space elements="briefdescription detaileddescription"/>
@@ -184,8 +184,8 @@
<xsl:param name="with-namespace-refs"/>
<xsl:if test="contains(string(location/attribute::file),
- concat('/', $in-file)) and
- not (key('inner-classes', @id))">
+ concat('/', $in-file)) ">
+
<!-- The short name of this class -->
<xsl:variable name="name-with-spec">
<xsl:call-template name="strip-qualifiers">
@@ -413,6 +413,16 @@
</xsl:if>
</xsl:template>
+ <xsl:template match="sectiondef" mode="toplevel">
+ <xsl:param name="in-file" select="''"/>
+
+ <xsl:apply-templates mode="toplevel"
+ select="memberdef[generate-id() =
+ generate-id(key('members-by-id', @id))]">
+ <xsl:with-param name="in-file" select="$in-file"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
<xsl:template match="memberdef" mode="toplevel">
<xsl:param name="with-namespace-refs"/>
<xsl:param name="in-file"/>
@@ -448,6 +458,19 @@
<xsl:apply-templates select="detaileddescription" mode="passthrough"/>
</macro>
</xsl:when>
+
+ <xsl:when test="@kind='function'">
+ <xsl:call-template name="function" />
+ </xsl:when>
+
+ <xsl:when test="@kind='typedef'">
+ <xsl:call-template name="typedef" />
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:message>Cannot handle toplevel memberdef element with
+ kind=<xsl:value-of select="@kind"/></xsl:message>
+ </xsl:otherwise>
</xsl:choose>
</xsl:template>
@@ -666,6 +689,12 @@
<xsl:when test="@kind='user-defined'">
<xsl:apply-templates/>
</xsl:when>
+ <xsl:when test="@kind=''">
+ <xsl:apply-templates select="memberdef[generate-id() =
+ generate-id(key('members-by-id', @id))]">
+ <xsl:with-param name="in-file" select="$in-file"/>
+ </xsl:apply-templates>
+ </xsl:when>
<xsl:otherwise>
<xsl:message>
Cannot handle sectiondef with kind=<xsl:value-of select="@kind"/>
@@ -1328,4 +1357,61 @@
<xsl:apply-templates select="*|text()" mode="passthrough"/>
</xsl:template>
+ <!--
+ Eric Niebler: 4-4-2007
+ Here is some half-baked support for LaTeX formulas in
+ Doxygen comments. Doxygen doesn't generate the PNG files
+ when outputting XML. In order to use this code, you must
+ run Doxygen first to generate HTML (and the PNG files for
+ the formulas), then copy the PNG files into the images/
+ directory, and then build the docs with bjam. Commented
+ out until something better comes along.
+ <xsl:template match="formula" mode="passthrough">
+ <xsl:choose>
+ <xsl:when test="substring(*|text(), 1, 2) = '\['">
+ <equation>
+ <alt>
+ <xsl:value-of select="*|text()"/>
+ </alt>
+ <mediaobject>
+ <imageobject role="html">
+ <imagedata format="PNG" align="center">
+ <xsl:attribute name="fileref">
+ <xsl:value-of select="concat(concat('images/form_', @id), '.png')"/>
+ </xsl:attribute>
+ </imagedata>
+ </imageobject>
+ <textobject role="tex">
+ <phrase>
+ <xsl:value-of select="*|text()"/>
+ </phrase>
+ </textobject>
+ </mediaobject>
+ </equation>
+ </xsl:when>
+ <xsl:otherwise>
+ <inlineequation>
+ <alt>
+ <xsl:value-of select="*|text()"/>
+ </alt>
+ <inlinemediaobject>
+ <imageobject role="html">
+ <imagedata format="PNG">
+ <xsl:attribute name="fileref">
+ <xsl:value-of select="concat(concat('images/form_', @id), '.png')"/>
+ </xsl:attribute>
+ </imagedata>
+ </imageobject>
+ <textobject role="tex">
+ <phrase>
+ <xsl:value-of select="*|text()"/>
+ </phrase>
+ </textobject>
+ </inlinemediaobject>
+ </inlineequation>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ -->
</xsl:stylesheet>
+
\ No newline at end of file
Modified: branches/release/tools/boostbook/xsl/fo.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/fo.xsl (original)
+++ branches/release/tools/boostbook/xsl/fo.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -14,7 +14,7 @@
<xsl:param name="chapter.autolabel" select="0"/>
<xsl:param name="refentry.generate.name" select="0"/>
<xsl:param name="refentry.generate.title" select="1"/>
- <xsl:param name="fop.extensions" select="1"/>
+ <xsl:param name="fop1.extensions" select="1"/>
<xsl:param name="make.year.ranges" select="1"/>
<xsl:param name="ulink.show" select="0"/>
@@ -119,4 +119,94 @@
</fo:list-item>
</xsl:template>
+<!--
+
+ The following rules apply syntax highlighting to phrases
+ that have been appropriately marked up, the highlighting
+ used is the same as that used by our CSS style sheets,
+ but potentially we have the option to do better here
+ since we can add bold and italic formatting quite easily
+
+ -->
+
+<xsl:template match="//programlisting/phrase[@role='keyword']">
+ <fo:inline color="#0000AA"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='special']">
+ <fo:inline color="#707070"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='preprocessor']">
+ <fo:inline color="#402080"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='char']">
+ <fo:inline color="teal"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='comment']">
+ <fo:inline color="#800000"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='string']">
+ <fo:inline color="teal"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='number']">
+ <fo:inline color="teal"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='white_bkd']">
+ <fo:inline color="#FFFFFF"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+<xsl:template match="//programlisting/phrase[@role='dk_grey_bkd']">
+ <fo:inline color="#999999"><xsl:apply-templates/></fo:inline>
+</xsl:template>
+
+<!--
+Make all hyperlinks blue colored:
+-->
+<xsl:attribute-set name="xref.properties">
+ <xsl:attribute name="color">blue</xsl:attribute>
+</xsl:attribute-set>
+
+<!--
+Put a box around admonishments and keep them together:
+-->
+<xsl:attribute-set name="graphical.admonition.properties">
+ <xsl:attribute name="border-color">#FF8080</xsl:attribute>
+ <xsl:attribute name="border-width">1px</xsl:attribute>
+ <xsl:attribute name="border-style">solid</xsl:attribute>
+ <xsl:attribute name="padding-left">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-right">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-top">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-bottom">0.2cm</xsl:attribute>
+ <xsl:attribute name="keep-together">1</xsl:attribute>
+</xsl:attribute-set>
+
+<!--
+Put a box around code blocks, also set the font size
+and keep the block together if we can:
+-->
+<xsl:attribute-set name="monospace.verbatim.properties">
+ <xsl:attribute name="border-color">#DCDCDC</xsl:attribute>
+ <xsl:attribute name="border-width">1px</xsl:attribute>
+ <xsl:attribute name="border-style">solid</xsl:attribute>
+ <xsl:attribute name="padding-left">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-right">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-top">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-bottom">0.2cm</xsl:attribute>
+ <xsl:attribute name="keep-together">1</xsl:attribute>
+ <xsl:attribute name="font-size">9pt</xsl:attribute>
+</xsl:attribute-set>
+
+<xsl:attribute-set name="table.cell.padding">
+ <xsl:attribute name="padding-left">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-right">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-top">0.2cm</xsl:attribute>
+ <xsl:attribute name="padding-bottom">0.2cm</xsl:attribute>
+</xsl:attribute-set>
+
+<xsl:attribute-set name="table.properties">
+ <xsl:attribute name="keep-together">1</xsl:attribute>
+</xsl:attribute-set>
+
+ <xsl:param name="table.frame.border.color">#DCDCDC</xsl:param>
+<xsl:param name="table.cell.border.color">#DCDCDC</xsl:param>
+
</xsl:stylesheet>
+
Modified: branches/release/tools/boostbook/xsl/function.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/function.xsl (original)
+++ branches/release/tools/boostbook/xsl/function.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
@@ -9,7 +9,7 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
- <xsl:strip-space elements="requires effects postconditions returns throws
+ <xsl:strip-space elements="requires effects postconditions returns throws
complexity notes rationale purpose"/>
<!-- When true, the stylesheet will emit compact definitions of
@@ -126,7 +126,7 @@
</xsl:choose>
</xsl:variable>
- <xsl:if test="not ($standalone) or
+ <xsl:if test="not ($standalone) or
(local-name(.)='signature' and (position() > 1))
or $suppress-template">
<xsl:text> </xsl:text>
@@ -136,7 +136,7 @@
<xsl:call-template name="indent">
<xsl:with-param name="indentation" select="$indentation"/>
</xsl:call-template>
-
+
<!-- Build the template header -->
<xsl:variable name="template-length">
<xsl:choose>
@@ -148,7 +148,7 @@
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
-
+
<!-- Build a full parameter string (without line breaks) -->
<xsl:variable name="param-string">
<xsl:text>(</xsl:text>
@@ -168,21 +168,21 @@
</xsl:variable>
<!-- Build the full declaration text -->
- <xsl:variable name="decl-string"
+ <xsl:variable name="decl-string"
select="concat($type, $function-name, $param-string, $postdeclarator)"/>
- <xsl:variable name="end-column"
+ <xsl:variable name="end-column"
select="$template-length + string-length($decl-string) + $indentation"/>
-
+
<xsl:choose>
<!-- Check if we should put the template header on its own line to
save horizontal space. -->
- <xsl:when test="($template-length > 0) and
+ <xsl:when test="($template-length > 0) and
($end-column > $max-columns)">
<!-- Emit template header on its own line -->
<xsl:apply-templates select="template" mode="synopsis">
<xsl:with-param name="indentation" select="$indentation"/>
</xsl:apply-templates>
-
+
<!-- Emit the rest of the function declaration (without the
template header) indented two extra spaces. -->
<xsl:call-template name="function">
@@ -249,17 +249,17 @@
<xsl:text>(</xsl:text>
<xsl:call-template name="function-parameters">
<xsl:with-param name="include-names" select="$include-names"/>
- <xsl:with-param name="indentation"
+ <xsl:with-param name="indentation"
select="$indentation + $template-length + string-length($type)
+ string-length($function-name) + 1"/>
<xsl:with-param name="final" select="true()"/>
- </xsl:call-template>
+ </xsl:call-template>
<xsl:text>)</xsl:text>
<xsl:call-template name="source-highlight">
<xsl:with-param name="text" select="$postdeclarator"/>
</xsl:call-template>
- <xsl:text>;</xsl:text>
+ <xsl:text>;</xsl:text>
</xsl:when>
<!-- This declaration will take multiple lines -->
@@ -320,11 +320,11 @@
<xsl:text>(</xsl:text>
<xsl:call-template name="function-parameters">
<xsl:with-param name="include-names" select="$include-names"/>
- <xsl:with-param name="indentation"
- select="$indentation + $type-length
+ <xsl:with-param name="indentation"
+ select="$indentation + $type-length
+ string-length($function-name) + 1"/>
<xsl:with-param name="final" select="true()"/>
- </xsl:call-template>
+ </xsl:call-template>
<xsl:text>)</xsl:text>
<xsl:call-template name="source-highlight">
<xsl:with-param name="text" select="$postdeclarator"/>
@@ -332,7 +332,7 @@
<xsl:text>;</xsl:text>
</xsl:otherwise>
</xsl:choose>
- </xsl:template>
+ </xsl:template>
<!-- Synopsis of function parameters, e.g., "(const T&, int x = 5)" -->
<xsl:template name="function-parameters">
@@ -394,18 +394,18 @@
</xsl:variable>
<xsl:variable name="text" select="concat($type, $name, $default)"/>
-
- <xsl:variable name="end-column"
+
+ <xsl:variable name="end-column"
select="$column + string-length($prefix) + string-length($text)"/>
<xsl:choose>
<!-- Parameter goes on this line -->
- <xsl:when test="$first-on-line or ($end-column < $max-columns)
+ <xsl:when test="$first-on-line or ($end-column < $max-columns)
or not($wrap)">
<xsl:choose>
<xsl:when test="$final">
<xsl:value-of select="$prefix"/>
- <xsl:apply-templates
+ <xsl:apply-templates
select="$parameter/paramtype/*|$parameter/paramtype/text()"
mode="annotation">
<xsl:with-param name="highlight" select="true()"/>
@@ -423,7 +423,7 @@
<xsl:with-param name="include-names" select="$include-names"/>
<xsl:with-param name="wrap" select="$wrap"/>
<xsl:with-param name="final" select="$final"/>
- <xsl:with-param name="parameters"
+ <xsl:with-param name="parameters"
select="$parameters[position()!=1]"/>
<xsl:with-param name="prefix" select="', '"/>
<xsl:with-param name="column" select="$end-column"/>
@@ -441,7 +441,7 @@
</xsl:call-template>
<xsl:choose>
<xsl:when test="$final">
- <xsl:apply-templates
+ <xsl:apply-templates
select="$parameter/paramtype/*|$parameter/paramtype/text()"
mode="annotation">
<xsl:with-param name="highlight" select="true()"/>
@@ -460,10 +460,10 @@
<xsl:with-param name="include-names" select="$include-names"/>
<xsl:with-param name="wrap" select="$wrap"/>
<xsl:with-param name="final" select="$final"/>
- <xsl:with-param name="parameters"
+ <xsl:with-param name="parameters"
select="$parameters[position()!=1]"/>
<xsl:with-param name="prefix" select="', '"/>
- <xsl:with-param name="column"
+ <xsl:with-param name="column"
select="1 + string-length($text) + $indentation"/>
<xsl:with-param name="first-on-line" select="false()"/>
</xsl:call-template>
@@ -479,7 +479,7 @@
<!-- True if we should compact this function -->
<xsl:variable name="compact"
select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
($boost.compact.function='1') and
not (local-name(.)='method')"/>
@@ -524,7 +524,7 @@
<!-- True if we should compact this function -->
<xsl:variable name="compact"
select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
($boost.compact.function='1') and
not (local-name(.)='overloaded-method')"/>
@@ -537,7 +537,7 @@
<xsl:call-template name="indent">
<xsl:with-param name="indentation" select="$indentation"/>
</xsl:call-template>
-
+
<xsl:call-template name="highlight-comment">
<xsl:with-param name="text">
<xsl:text>// </xsl:text>
@@ -566,7 +566,7 @@
<xsl:with-param name="name" select="$name"/>
<xsl:with-param name="link-to" select="$link-to"/>
</xsl:call-template>
- </xsl:for-each>
+ </xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="signature">
@@ -598,7 +598,7 @@
</xsl:if>
<xsl:text> </xsl:text>
<xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$indentation"/>
+ <xsl:with-param name="indentation" select="$indentation"/>
</xsl:call-template>
<emphasis>
<xsl:text>// </xsl:text>
@@ -634,8 +634,12 @@
<xsl:with-param name="text" select="''"/>
</xsl:call-template>
<xsl:call-template name="monospaced">
- <xsl:with-param name="text" select="@name"/>
+ <xsl:with-param name="text">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
</xsl:call-template>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="access-name"/>
<xsl:text> construct/copy/destruct</xsl:text>
</xsl:with-param>
<xsl:with-param name="text">
@@ -658,7 +662,9 @@
<xsl:call-template name="function">
<xsl:with-param name="indentation" select="0"/>
<xsl:with-param name="is-reference" select="true()"/>
- <xsl:with-param name="constructor-for" select="../@name"/>
+ <xsl:with-param name="constructor-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
<xsl:with-param name="standalone" select="true()"/>
</xsl:call-template>
</xsl:with-param>
@@ -668,7 +674,7 @@
</xsl:with-param>
</xsl:call-template>
</xsl:template>
-
+
<xsl:template match="copy-assignment" mode="reference">
<xsl:call-template name="function.documentation">
<xsl:with-param name="text">
@@ -678,7 +684,9 @@
<xsl:call-template name="function">
<xsl:with-param name="indentation" select="0"/>
<xsl:with-param name="is-reference" select="true()"/>
- <xsl:with-param name="copy-assign-for" select="../@name"/>
+ <xsl:with-param name="copy-assign-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
<xsl:with-param name="standalone" select="true()"/>
</xsl:call-template>
</xsl:with-param>
@@ -698,7 +706,9 @@
<xsl:call-template name="function">
<xsl:with-param name="indentation" select="0"/>
<xsl:with-param name="is-reference" select="true()"/>
- <xsl:with-param name="destructor-for" select="../@name"/>
+ <xsl:with-param name="destructor-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
<xsl:with-param name="standalone" select="true()"/>
</xsl:call-template>
</xsl:with-param>
@@ -826,7 +836,7 @@
<!-- True if we should compact this function -->
<xsl:variable name="compact"
select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
($boost.compact.function='1') and
not (local-name(.)='method')"/>
@@ -856,7 +866,7 @@
<!-- True if we should compact this function -->
<xsl:variable name="compact"
select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
($boost.compact.function='1')"/>
<xsl:if test="not ($compact)">
@@ -891,8 +901,8 @@
<xsl:with-param name="namespace-reference" select="true()"/>
</xsl:call-template>
</xsl:with-param>
- </xsl:call-template>
- </xsl:if>
+ </xsl:call-template>
+ </xsl:if>
</xsl:template>
<xsl:template match="overloaded-function" mode="reference">
@@ -901,9 +911,9 @@
<!-- True if we should compact this function -->
<xsl:variable name="compact"
select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
($boost.compact.function='1')"/>
-
+
<xsl:if test="not ($compact)">
<xsl:call-template name="function.documentation">
<xsl:with-param name="text">
@@ -911,7 +921,7 @@
<xsl:attribute name="id">
<xsl:call-template name="generate.id"/>
</xsl:attribute>
-
+
<xsl:call-template name="preformatted">
<xsl:with-param name="text">
<xsl:for-each select="signature">
@@ -935,7 +945,7 @@
<!-- True if we should compact this function -->
<xsl:variable name="compact"
select="not (para|description|requires|effects|postconditions|returns|
- throws|complexity|notes|rationale) and
+ throws|complexity|notes|rationale) and
($boost.compact.function='1')"/>
<xsl:variable name="name" select="@name"/>
@@ -975,8 +985,8 @@
<xsl:with-param name="namespace-reference" select="true()"/>
</xsl:call-template>
</xsl:with-param>
- </xsl:call-template>
- </xsl:if>
+ </xsl:call-template>
+ </xsl:if>
</xsl:template>
<xsl:template match="overloaded-method" mode="reference">
@@ -985,12 +995,13 @@
<xsl:call-template name="function.documentation">
<xsl:with-param name="text">
<para>
- <xsl:attribute name="id">
- <xsl:call-template name="generate.id"/>
- </xsl:attribute>
-
<xsl:call-template name="preformatted">
<xsl:with-param name="text">
+ <xsl:call-template name="anchor">
+ <xsl:with-param name="to">
+ <xsl:call-template name="generate.id"/>
+ </xsl:with-param>
+ </xsl:call-template>
<xsl:for-each select="signature">
<xsl:call-template name="function">
<xsl:with-param name="indentation" select="0"/>
@@ -1025,7 +1036,7 @@
<xsl:with-param name="text" select="string(@name)"/>
</xsl:call-template>
</emphasis>
- <xsl:apply-templates select="method|overloaded-method"
+ <xsl:apply-templates select="method|overloaded-method"
mode="synopsis">
<xsl:with-param name="indentation" select="$indentation"/>
</xsl:apply-templates>
@@ -1044,7 +1055,9 @@
<xsl:with-param name="text" select="''"/>
</xsl:call-template>
<xsl:call-template name="monospaced">
- <xsl:with-param name="text" select="../@name"/>
+ <xsl:with-param name="text">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
</xsl:call-template>
<xsl:text> </xsl:text>
<xsl:value-of select="@name"/>
@@ -1057,7 +1070,7 @@
</xsl:with-param>
</xsl:call-template>
</xsl:if>
- </xsl:template>
+ </xsl:template>
<!-- Group free functions together under a category name (synopsis)-->
<xsl:template match="free-function-group" mode="synopsis">
@@ -1105,5 +1118,5 @@
</orderedlist>
</xsl:with-param>
</xsl:call-template>
- </xsl:template>
+ </xsl:template>
</xsl:stylesheet>
Modified: branches/release/tools/boostbook/xsl/html.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/html.xsl (original)
+++ branches/release/tools/boostbook/xsl/html.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
@@ -13,6 +13,8 @@
<!-- Import the HTML chunking stylesheet -->
<xsl:import
href="http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl"/>
+ <xsl:import
+ href="http://docbook.sourceforge.net/release/xsl/current/html/math.xsl"/>
<xsl:import href="chunk-common.xsl"/>
<xsl:import href="docbook-layout.xsl"/>
@@ -20,6 +22,7 @@
<xsl:import href="admon.xsl"/>
<xsl:import href="xref.xsl"/>
<xsl:import href="relative-href.xsl"/>
+ <xsl:import href="callout.xsl"/>
<xsl:param name="admon.style"/>
<xsl:param name="admon.graphics">1</xsl:param>
@@ -36,8 +39,14 @@
<xsl:param name="doc.standalone">false</xsl:param>
<xsl:param name="chunker.output.indent">yes</xsl:param>
<xsl:param name="toc.max.depth">2</xsl:param>
-
-<xsl:param name="admon.style">
+ <xsl:param name="callout.graphics.number.limit">15</xsl:param>
+ <xsl:param name = "admon.graphics.path"
+ select = "concat($boost.root, '/doc/html/images/')"/>
+ <xsl:param name = "navig.graphics.path"
+ select = "concat($boost.root, '/doc/html/images/')"/>
+
+
+ <xsl:param name="admon.style">
<!-- Remove the style. Let the CSS do the styling -->
</xsl:param>
@@ -69,22 +78,22 @@
<xsl:param name="text"/>
<!-- Remove the "$Date: " -->
- <xsl:variable name="text.noprefix"
+ <xsl:variable name="text.noprefix"
select="substring-after($text, '$Date: ')"/>
<!-- Grab the year -->
<xsl:variable name="year" select="substring-before($text.noprefix, '/')"/>
- <xsl:variable name="text.noyear"
+ <xsl:variable name="text.noyear"
select="substring-after($text.noprefix, '/')"/>
<!-- Grab the month -->
<xsl:variable name="month" select="substring-before($text.noyear, '/')"/>
- <xsl:variable name="text.nomonth"
+ <xsl:variable name="text.nomonth"
select="substring-after($text.noyear, '/')"/>
<!-- Grab the year -->
<xsl:variable name="day" select="substring-before($text.nomonth, ' ')"/>
- <xsl:variable name="text.noday"
+ <xsl:variable name="text.noday"
select="substring-after($text.nomonth, ' ')"/>
<!-- Get the time -->
@@ -116,27 +125,27 @@
<xsl:param name="text"/>
<!-- Remove the "$Date: " -->
- <xsl:variable name="text.noprefix"
+ <xsl:variable name="text.noprefix"
select="substring-after($text, '$Date: ')"/>
<!-- Grab the year -->
<xsl:variable name="year" select="substring-before($text.noprefix, '-')"/>
- <xsl:variable name="text.noyear"
+ <xsl:variable name="text.noyear"
select="substring-after($text.noprefix, '-')"/>
<!-- Grab the month -->
<xsl:variable name="month" select="substring-before($text.noyear, '-')"/>
- <xsl:variable name="text.nomonth"
+ <xsl:variable name="text.nomonth"
select="substring-after($text.noyear, '-')"/>
<!-- Grab the year -->
<xsl:variable name="day" select="substring-before($text.nomonth, ' ')"/>
- <xsl:variable name="text.noday"
+ <xsl:variable name="text.noday"
select="substring-after($text.nomonth, ' ')"/>
<!-- Get the time -->
<xsl:variable name="time" select="substring-before($text.noday, ' ')"/>
- <xsl:variable name="text.notime"
+ <xsl:variable name="text.notime"
select="substring-after($text.noday, ' ')"/>
<!-- Get the timezone -->
@@ -163,7 +172,7 @@
$time, ' ', $timezone)"/>
</xsl:template>
-
+ <!-- Footer Copyright -->
<xsl:template match="copyright" mode="boost.footer">
<xsl:if test="position() > 1">
<br/>
@@ -186,23 +195,28 @@
<xsl:apply-templates select="holder" mode="titlepage.mode"/>
</xsl:template>
+ <!-- Footer License -->
+ <xsl:template match="legalnotice" mode="boost.footer">
+ <xsl:apply-templates select="para" mode="titlepage.mode" />
+ </xsl:template>
+
<xsl:template name="user.footer.content">
<table width="100%">
<tr>
<td align="left">
- <xsl:variable name="revision-nodes"
+ <xsl:variable name="revision-nodes"
select="ancestor-or-self::*
[not (attribute::rev:last-revision='')]"/>
<xsl:if test="count($revision-nodes) > 0">
<xsl:variable name="revision-node"
select="$revision-nodes[last()]"/>
<xsl:variable name="revision-text">
- <xsl:value-of
+ <xsl:value-of
select="normalize-space($revision-node/attribute::rev:last-revision)"/>
</xsl:variable>
<xsl:if test="string-length($revision-text) > 0">
- <small>
- <p>
+ <p>
+ <small>
<xsl:text>Last revised: </xsl:text>
<xsl:choose>
<xsl:when test="contains($revision-text, '/')">
@@ -216,16 +230,18 @@
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
- </p>
- </small>
+ </small>
+ </p>
</xsl:if>
</xsl:if>
</td>
<td align="right">
- <small>
- <xsl:apply-templates select="ancestor::*/*/copyright"
+ <div class = "copyright-footer">
+ <xsl:apply-templates select="ancestor::*/*/copyright"
+ mode="boost.footer"/>
+ <xsl:apply-templates select="ancestor::*/*/legalnotice"
mode="boost.footer"/>
- </small>
+ </div>
</td>
</tr>
</table>
Modified: branches/release/tools/boostbook/xsl/library.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/library.xsl (original)
+++ branches/release/tools/boostbook/xsl/library.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -120,7 +120,7 @@
<xsl:template match="libraryinfo">
<chapterinfo>
- <xsl:apply-templates select="author|copyright|legalnotice"/>
+ <xsl:apply-templates select="author|authorgroup/author|copyright|legalnotice"/>
</chapterinfo>
</xsl:template>
Modified: branches/release/tools/boostbook/xsl/lookup.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/lookup.xsl (original)
+++ branches/release/tools/boostbook/xsl/lookup.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
@@ -14,7 +14,15 @@
<!-- Generate an ID for the entity referenced -->
<xsl:template name="generate.id">
<xsl:param name="node" select="."/>
- <xsl:apply-templates select="$node" mode="generate.id"/>
+ <xsl:choose>
+ <xsl:when test="ancestor::class-specialization|ancestor::struct-specialization|ancestor::union-specialization">
+ <xsl:value-of select="generate-id(.)"/>
+ <xsl:text>-bb</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="$node" mode="generate.id"/>
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:template>
<xsl:template match="*" mode="generate.id">
@@ -22,19 +30,102 @@
<xsl:text>-bb</xsl:text>
</xsl:template>
+ <xsl:template name="strip-qualifiers-non-template">
+ <xsl:param name="name"/>
+ <xsl:choose>
+ <xsl:when test="contains($name, '>')">
+ <xsl:call-template name="strip-qualifiers-non-template">
+ <xsl:with-param name="name" select="substring-after($name, '>')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="contains($name, '::')">
+ <xsl:call-template name="strip-qualifiers-non-template">
+ <xsl:with-param name="name" select="substring-after($name, '::')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="strip-balanced">
+ <xsl:param name="name"/>
+ <xsl:param name="open" select="'<'"/>
+ <xsl:param name="close" select="'>'"/>
+ <xsl:param name="depth" select="0"/>
+ <xsl:choose>
+ <xsl:when test="contains($name, $open)
+ and not(contains(substring-before($name, $open), $close))">
+ <xsl:call-template name="strip-balanced">
+ <xsl:with-param name="name" select="substring-after($name, $open)"/>
+ <xsl:with-param name="open" select="$open"/>
+ <xsl:with-param name="close" select="$close"/>
+ <xsl:with-param name="depth" select="$depth + 1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="contains($name, $close) and ($depth > 1)">
+ <xsl:call-template name="strip-balanced">
+ <xsl:with-param name="name" select="substring-after($name, $close)"/>
+ <xsl:with-param name="open" select="$open"/>
+ <xsl:with-param name="close" select="$close"/>
+ <xsl:with-param name="depth" select="$depth - 1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="substring-after($name, $close)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="strip-qualifiers-template">
+ <xsl:param name="name"/>
+ <xsl:choose>
+ <xsl:when test="contains($name, '::')
+ and not(contains(substring-before($name, '::'), '<'))">
+ <xsl:call-template name="strip-qualifiers-template">
+ <xsl:with-param name="name" select="substring-after($name, '::')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="rest">
+ <xsl:call-template name="strip-balanced">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$rest != ''">
+ <xsl:call-template name="strip-qualifiers-template">
+ <xsl:with-param name="name" select="$rest"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
<!-- Strip the qualifiers off a qualified name and return the unqualified
name. For instance, "boost::python::function" would become just
- "function". -->
+ "function".
+ Must handle ns::foo -> foo
+ Must handle ns::foo<bar::baz> -> foo<bar::baz>
+ Must handle ns::foo<bar::baz>::nested -> nested
+ Must handle ns::foo<x>::bar<y> -> bar<y> -->
<xsl:template name="strip-qualifiers">
<xsl:param name="name"/>
<xsl:choose>
- <xsl:when test="contains($name, '::') and not(contains(substring-before($name, '::'), '<'))">
- <xsl:call-template name="strip-qualifiers">
- <xsl:with-param name="name" select="substring-after($name, '::')"/>
+ <xsl:when test="substring($name, string-length($name)) = '>'">
+ <xsl:call-template name="strip-qualifiers-template">
+ <xsl:with-param name="name" select="$name"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
- <xsl:value-of select="$name"/>
+ <xsl:call-template name="strip-qualifiers-non-template">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
@@ -66,8 +157,10 @@
<xsl:param name="depth" select="1"/>
<!-- Determine the set of ancestor namespaces -->
- <xsl:variable name="ancestors"
- select="ancestor::namespace|ancestor::class|ancestor::struct|ancestor::union"/>
+ <xsl:variable name="ancestors"
+ select="ancestor::namespace|
+ ancestor::class|ancestor::struct|ancestor::union|
+ ancestor::class-specialization|ancestor::struct-specialization|ancestor::union-specialization"/>
<xsl:choose>
<xsl:when test="$depth > count($ancestors)">
@@ -92,6 +185,29 @@
<xsl:value-of select="@name"/>
</xsl:template>
+ <xsl:template name="print-specialization-name">
+ <xsl:value-of select="@name"/>
+ <xsl:text><</xsl:text>
+ <xsl:value-of select="specialization/template-arg[position() = 1]/text()"/>
+ <xsl:for-each select="specialization/template-arg[position() > 1]">
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="text()"/>
+ </xsl:for-each>
+ <xsl:text>></xsl:text>
+ </xsl:template>
+
+ <xsl:template match="struct-specialization" mode="print-name">
+ <xsl:call-template name="print-specialization-name"/>
+ </xsl:template>
+
+ <xsl:template match="class-specialization" mode="print-name">
+ <xsl:call-template name="print-specialization-name"/>
+ </xsl:template>
+
+ <xsl:template match="union-specialization" mode="print-name">
+ <xsl:call-template name="print-specialization-name"/>
+ </xsl:template>
+
<xsl:template name="name-matches-node">
<!-- The name we are looking for -->
<xsl:param name="name"/>
@@ -155,23 +271,24 @@
<xsl:with-param name="node" select="$node"/>
</xsl:call-template>
</xsl:variable>
-
+
<!-- The set of using directives for this context node -->
<xsl:variable name="directives"
select="$context/ancestor::*/using-namespace |
$context/ancestor::namespace |
$context/ancestor::*/using-class |
- $context/ancestor::class"/>
-
+ $context/ancestor::class |
+ $context/ancestor::struct"/>
+
<!-- The name of the current directive -->
<xsl:variable name="this-context">
<xsl:apply-templates select="$directives[$index]" mode="print-name"/>
</xsl:variable>
-
+
<!-- Check if we have a match -->
- <xsl:variable name="have-match"
+ <xsl:variable name="have-match"
select="$fully-qualified-name = concat($prefix, $name)"/>
-
+
<xsl:if test="$have-match">
<xsl:choose>
<xsl:when test="$mode='matches'">
@@ -189,7 +306,7 @@
</xsl:when>
</xsl:choose>
</xsl:if>
-
+
<xsl:if test="(not($index > count($directives))) and
(not($have-match) or ($mode = 'matches'))">
<xsl:variable name="first-branch">
@@ -207,7 +324,7 @@
</xsl:call-template>
</xsl:if>
</xsl:variable>
-
+
<xsl:choose>
<xsl:when test="string($first-branch) != ''">
<xsl:copy-of select="$first-branch"/>
@@ -221,12 +338,12 @@
<xsl:with-param name="node" select="$node"/>
<xsl:with-param name="mode" select="$mode"/>
<xsl:with-param name="index" select="$index + 1"/>
- <xsl:with-param name="prefix"
+ <xsl:with-param name="prefix"
select="concat($this-context, '::')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
- </xsl:if>
+ </xsl:if>
</xsl:when>
</xsl:choose>
</xsl:template>
@@ -255,19 +372,19 @@
<xsl:template name="cxx-link-name">
<!-- The actual lookup node -->
- <xsl:param name="lookup"/>
+ <xsl:param name="lookup"/>
<!-- The type of name to lookup (e.g., class) -->
- <xsl:param name="type"/>
+ <xsl:param name="type"/>
<!-- The name we are looking for -->
- <xsl:param name="name"/>
+ <xsl:param name="name"/>
<!-- The name we will display -->
<xsl:param name="display-name"/>
<!-- The name we are looking for (unqualified)-->
- <xsl:param name="unqualified-name"/>
+ <xsl:param name="unqualified-name"/>
<!-- The list of nodes that match the lookup node in both name and type -->
<xsl:param name="nodes"/>
Modified: branches/release/tools/boostbook/xsl/navbar.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/navbar.xsl (original)
+++ branches/release/tools/boostbook/xsl/navbar.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -54,7 +54,7 @@
<xsl:variable name = "home" select = "/*[1]"/>
<xsl:variable name = "up" select = "parent::*"/>
- <table cellpadding = "2" width = "100%">
+ <table cellpadding = "2" width = "100%"><tr>
<xsl:if test = "$nav.border = 'Boost'">
<xsl:attribute name = "class">boost-head</xsl:attribute>
</xsl:if>
@@ -77,7 +77,7 @@
<xsl:call-template name = "header.navdata-vert"/>
</xsl:when>
</xsl:choose>
- </table>
+ </tr></table>
<hr/>
<xsl:choose>
<xsl:when test = "$nav.flow = 'DocBook'">
Modified: branches/release/tools/boostbook/xsl/reference.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/reference.xsl (original)
+++ branches/release/tools/boostbook/xsl/reference.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
@@ -21,7 +21,7 @@
<xsl:include href="macro.xsl"/>
<xsl:include href="testing/testsuite.xsl"/>
<xsl:include href="caramel/concept2docbook.xsl"/>
-
+
<xsl:template name="namespace-synopsis">
<xsl:param name="indentation" select="0"/>
<!-- Open namespace-->
@@ -32,7 +32,7 @@
<xsl:with-param name="text" select="concat('namespace ',@name)"/>
</xsl:call-template>
<xsl:text> {</xsl:text>
-
+
<!-- Emit namespace types -->
<xsl:apply-templates select="class|class-specialization|
struct|struct-specialization|
@@ -40,19 +40,19 @@
typedef|enum|data-member" mode="synopsis">
<xsl:with-param name="indentation" select="$indentation + 2"/>
</xsl:apply-templates>
-
+
<!-- Emit namespace functions -->
- <xsl:apply-templates
- select="free-function-group|function|overloaded-function"
+ <xsl:apply-templates
+ select="free-function-group|function|overloaded-function"
mode="synopsis">
<xsl:with-param name="indentation" select="$indentation + 2"/>
</xsl:apply-templates>
-
+
<!-- Emit namespaces -->
<xsl:apply-templates select="namespace" mode="synopsis">
<xsl:with-param name="indentation" select="$indentation + 2"/>
</xsl:apply-templates>
-
+
<!-- Close namespace -->
<xsl:text> </xsl:text>
<xsl:call-template name="indent">
@@ -82,14 +82,14 @@
<!-- Emit namespace reference -->
<xsl:template match="namespace" mode="reference">
- <xsl:apply-templates select="namespace|typedef|free-function-group"
+ <xsl:apply-templates select="namespace|free-function-group"
mode="reference">
<xsl:with-param name="indentation" select="0"/>
</xsl:apply-templates>
<xsl:apply-templates select="class|class-specialization|
struct|struct-specialization|
union|union-specialization|enum|function|
- overloaded-function|data-member"
+ overloaded-function|data-member|typedef"
mode="namespace-reference"/>
</xsl:template>
Modified: branches/release/tools/boostbook/xsl/template.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/template.xsl (original)
+++ branches/release/tools/boostbook/xsl/template.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -404,7 +404,7 @@
<xsl:choose>
<xsl:when test="$highlight">
- <xsl:apply-templates select="$parameter/default/*" mode="highlight"/>
+ <xsl:apply-templates select="$parameter/default/*|$parameter/default/text()" mode="highlight"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$def"/>
Modified: branches/release/tools/boostbook/xsl/type.xsl
==============================================================================
--- branches/release/tools/boostbook/xsl/type.xsl (original)
+++ branches/release/tools/boostbook/xsl/type.xsl 2007-11-15 11:31:06 EST (Thu, 15 Nov 2007)
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+ Copyright (c) 2007 Frank Mori Hess <fmhess_at_[hidden]>
+
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
@@ -20,6 +21,11 @@
separate refentry element for the enum. -->
<xsl:param name="boost.compact.enum">1</xsl:param>
+ <!-- When true, the stylesheet will emit compact definitions of
+ typedefs when the typedef does not have any detailed
+ description. -->
+ <xsl:param name="boost.compact.typedef">1</xsl:param>
+
<xsl:template match="class|struct|union" mode="generate.id">
<xsl:call-template name="fully-qualified-name">
<xsl:with-param name="node" select="."/>
@@ -27,6 +33,13 @@
</xsl:call-template>
</xsl:template>
+ <xsl:template match="typedef" mode="generate.id">
+ <xsl:call-template name="fully-qualified-name">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="separator" select="'.'"/>
+ </xsl:call-template>
+ </xsl:template>
+
<xsl:template match="enum" mode="generate.id">
<xsl:call-template name="fully-qualified-name">
<xsl:with-param name="node" select="."/>
@@ -48,7 +61,7 @@
<xsl:template name="type.display.name">
<xsl:choose>
<xsl:when test="contains(local-name(.), 'class')">
- <xsl:text>Class </xsl:text>
+ <xsl:text>Class </xsl:text>
</xsl:when>
<xsl:when test="contains(local-name(.), 'struct')">
<xsl:text>Struct </xsl:text>
@@ -73,7 +86,7 @@
<xsl:value-of select="@name"/>
<xsl:apply-templates select="specialization"/>
</xsl:with-param>
- </xsl:call-template>
+ </xsl:call-template>
</xsl:template>
<!-- Determine the class key for the given node -->
@@ -86,7 +99,7 @@
<xsl:otherwise>
<xsl:value-of select="local-name($node)"/>
</xsl:otherwise>
- </xsl:choose>
+ </xsl:choose>
</xsl:template>
<!-- Emit class synopsis -->
@@ -94,7 +107,7 @@
struct|struct-specialization|
union|union-specialization" mode="synopsis">
<xsl:param name="indentation"/>
-
+
<!-- The keyword used to declare this class type, e.g., class,
struct, or union. -->
<xsl:variable name="class-key">
@@ -123,7 +136,7 @@
</xsl:variable>
<xsl:choose>
- <xsl:when test="(string-length($full-decl-string) +
+ <xsl:when test="(string-length($full-decl-string) +
string-length($indentation)) < $max-columns">
<xsl:call-template name="indent">
<xsl:with-param name="indentation" select="$indentation"/>
@@ -158,11 +171,11 @@
<xsl:with-param name="indentation" select="$indentation"/>
</xsl:apply-templates>
<xsl:text> </xsl:text>
-
+
<!-- Indent class templates' names in the synopsis -->
<xsl:text> </xsl:text>
</xsl:if>
-
+
<!-- Class name -->
<xsl:call-template name="indent">
<xsl:with-param name="indentation" select="$indentation"/>
@@ -193,10 +206,38 @@
<!-- Emit a typedef synopsis -->
<xsl:template name="type.typedef.display.aligned">
+ <xsl:param name="compact"/>
<xsl:param name="indentation"/>
+ <xsl:param name="is-reference"/>
<xsl:param name="max-type-length"/>
<xsl:param name="max-name-length"/>
+ <!-- What type of link the typedef name should have. This shall
+ be one of 'anchor' (the typedef output will be the target of
+ links), 'link' (the typedef output will link to a definition), or
+ 'none' (the typedef output will not be either a link or a link
+ target) -->
+ <xsl:param name="link-type">
+ <xsl:choose>
+ <xsl:when test="$is-reference">
+ <xsl:text>anchor</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>link</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:param>
+
+ <!-- The id we should link to or anchor as -->
+ <xsl:param name="link-to">
+ <xsl:call-template name="generate.id"/>
+ </xsl:param>
+
+ <!-- The id we should link to or anchor as -->
+ <xsl:param name="typedef-name">
+ <xsl:value-of select="@name"/>
+ </xsl:param>
+
<!-- Padding for the typedef types -->
<xsl:variable name="type-padding">
<xsl:call-template name="indent">
@@ -216,21 +257,21 @@
<!-- Create a vertical ellipsis -->
<xsl:when test="@name = '...'">
<xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$indentation + 3"/>
- </xsl:call-template>
+ <xsl:with-param name="indentation" select="$indentation + 3"/>
+ </xsl:call-template>
<xsl:text>. </xsl:text>
<xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$indentation + 3"/>
+ <xsl:with-param name="indentation" select="$indentation + 3"/>
</xsl:call-template>
<xsl:text>. </xsl:text>
<xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$indentation + 3"/>
+ <xsl:with-param name="indentation" select="$indentation + 3"/>
</xsl:call-template>
<xsl:text>.</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$indentation"/>
+ <xsl:with-param name="indentation" select="$indentation"/>
</xsl:call-template>
<xsl:call-template name="highlight-keyword">
<xsl:with-param name="keyword" select="'typedef'"/>
@@ -259,32 +300,39 @@
<xsl:value-of select="@type"/>
</xsl:when>
<xsl:otherwise>
- <xsl:apply-templates select="type/*|type/text()"
+ <xsl:apply-templates select="type/*|type/text()"
mode="highlight"/>
<!--
<xsl:call-template name="source-highlight">
<xsl:with-param name="text">
<xsl:apply-templates select="type/*|type/text()"/>
</xsl:with-param>
- </xsl:call-template>
+ </xsl:call-template>
-->
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="$max-type-length > 0">
- <xsl:value-of select="substring($type-padding, 1,
+ <xsl:value-of select="substring($type-padding, 1,
$max-type-length - $type-length)"/>
<xsl:text> </xsl:text>
- <xsl:value-of select="substring(concat(@name, ';', $name-padding),
+ <xsl:value-of select="substring(concat(@name, ';', $name-padding),
1, $max-name-length)"/>
</xsl:when>
<xsl:otherwise>
- <xsl:value-of select="concat(' ',@name,';')"/>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="link-or-anchor">
+ <xsl:with-param name="to" select="$link-to"/>
+ <xsl:with-param name="text" select="$typedef-name"/>
+ <xsl:with-param name="link-type" select="$link-type"/>
+ <xsl:with-param name="highlight" select="true()"/>
+ </xsl:call-template>
+ <xsl:text>;</xsl:text>
</xsl:otherwise>
</xsl:choose>
- <xsl:if test="purpose">
+ <xsl:if test="$compact and purpose">
<xsl:text> </xsl:text>
<xsl:call-template name="highlight-comment">
<xsl:with-param name="text">
@@ -301,21 +349,89 @@
<xsl:param name="indentation"/>
<xsl:param name="max-type-length" select="0"/>
<xsl:param name="max-name-length" select="0"/>
-
- <!-- Spacing -->
- <xsl:if test="not (local-name(preceding-sibling::*[position()=1])=local-name(.)) and (position() > 1)">
- <xsl:text> </xsl:text>
- </xsl:if>
- <xsl:call-template name="type.typedef.display.aligned">
- <xsl:with-param name="indentation" select="$indentation"/>
- <xsl:with-param name="max-type-length" select="$max-type-length"/>
- <xsl:with-param name="max-name-length" select="$max-name-length"/>
- </xsl:call-template>
+ <!-- True if we should compact this typedef -->
+ <xsl:variable name="compact"
+ select="not (para|description) and ($boost.compact.typedef='1')"/>
+
+ <xsl:choose>
+ <xsl:when test="$compact">
+ <!-- Spacing -->
+ <xsl:if test="not (local-name(preceding-sibling::*[position()=1])=local-name(.)) and (position() > 1)">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+
+ <xsl:call-template name="type.typedef.display.aligned">
+ <xsl:with-param name="compact" select="$compact"/>
+ <xsl:with-param name="indentation" select="$indentation"/>
+ <xsl:with-param name="is-reference" select="true()"/>
+ <xsl:with-param name="max-type-length" select="$max-type-length"/>
+ <xsl:with-param name="max-name-length" select="$max-name-length"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="type.typedef.display.aligned">
+ <xsl:with-param name="compact" select="$compact"/>
+ <xsl:with-param name="indentation" select="$indentation"/>
+ <xsl:with-param name="is-reference" select="false()"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:template>
- <!-- TBD: Implement this -->
- <xsl:template match="typedef" mode="reference"/>
+ <!-- Emit a typedef reference entry -->
+ <xsl:template match="typedef" mode="namespace-reference">
+ <!-- True if this typedef was compacted -->
+ <xsl:variable name="compact"
+ select="not (para|description) and ($boost.compact.typedef='1')"/>
+
+ <xsl:if test="not ($compact)">
+ <xsl:call-template name="reference-documentation">
+ <xsl:with-param name="refname" select="@name"/>
+ <xsl:with-param name="purpose" select="purpose/*|purpose/text()"/>
+ <xsl:with-param name="anchor">
+ <xsl:call-template name="generate.id"/>
+ </xsl:with-param>
+ <xsl:with-param name="name">
+ <xsl:text>Type definition </xsl:text>
+ <xsl:call-template name="monospaced">
+ <xsl:with-param name="text" select="@name"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="synopsis">
+ <xsl:call-template name="type.typedef.display.aligned">
+ <xsl:with-param name="compact" select="false()"/>
+ <xsl:with-param name="indentation" select="0"/>
+ <xsl:with-param name="is-reference" select="true()"/>
+ <xsl:with-param name="link-type" select="'none'"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="text">
+ <xsl:apply-templates select="description"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="typedef" mode="reference">
+ <!-- True if this typedef was compacted -->
+ <xsl:variable name="compact"
+ select="not (para|description) and ($boost.compact.typedef='1')"/>
+
+ <xsl:if test="not ($compact)">
+ <listitem>
+ <para>
+ <xsl:call-template name="type.typedef.display.aligned">
+ <xsl:with-param name="compact" select="false()"/>
+ <xsl:with-param name="indentation" select="0"/>
+ <xsl:with-param name="is-reference" select="true()"/>
+ <xsl:with-param name="link-type" select="'anchor'"/>
+ </xsl:call-template>
+ </para>
+ <xsl:apply-templates select="description"/>
+ </listitem>
+ </xsl:if>
+ </xsl:template>
<!-- Emit a list of static constants -->
<xsl:template match="static-constant" mode="synopsis">
@@ -331,10 +447,10 @@
<xsl:call-template name="source-highlight">
<xsl:with-param name="text">
- <xsl:apply-templates select="type/*|type/text()"/>
+ <xsl:apply-templates select="type/*|type/text()"/>
</xsl:with-param>
</xsl:call-template>
-
+
<xsl:if test="not(@name = '')">
<xsl:text> </xsl:text>
<xsl:value-of select="@name"/>
@@ -367,7 +483,7 @@
<xsl:template name="print.base.classes.multi">
<xsl:param name="indentation"/>
-
+
<xsl:variable name="n" select="count(inherit)"/>
<xsl:for-each select="inherit">
<!-- Indentation -->
@@ -448,20 +564,20 @@
</xsl:variable>
<xsl:choose>
- <xsl:when test="$single-line-candidate and
+ <xsl:when test="$single-line-candidate and
(string-length($single-line) + $indentation + 3
< $max-columns)">
+ <xsl:text> : </xsl:text>
<xsl:call-template name="print.base.classes.single"/>
<xsl:text> {</xsl:text>
</xsl:when>
<xsl:when test="$single-line-candidate and
- (string-length($single-line) + $base-indentation + 5
+ (string-length($single-line) + $base-indentation + 2
< $max-columns)">
- <xsl:text> </xsl:text>
+ <xsl:text> : </xsl:text>
<xsl:call-template name="indent">
- <xsl:with-param name="indentation" select="$base-indentation"/>
+ <xsl:with-param name="indentation" select="$base-indentation + 2"/>
</xsl:call-template>
- <xsl:text> : </xsl:text>
<xsl:call-template name="print.base.classes.single"/>
<xsl:text> </xsl:text>
<xsl:call-template name="indent">
@@ -487,7 +603,6 @@
<xsl:template match="inherit">
<xsl:choose>
<xsl:when test="position()=1">
- <xsl:text> : </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>, </xsl:text>
@@ -549,7 +664,7 @@
<xsl:with-param name="typedefs" select="$rest"/>
<xsl:with-param name="max-length" select="$max-length"/>
<xsl:with-param name="want-name" select="$want-name"/>
- </xsl:call-template>
+ </xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
@@ -557,7 +672,7 @@
<xsl:value-of select="$max-length"/>
</xsl:otherwise>
</xsl:choose>
- </xsl:template>
+ </xsl:template>
<xsl:template match="constructor" mode="synopsis">
<xsl:param name="indentation"/>
@@ -565,7 +680,9 @@
<xsl:with-param name="indentation" select="$indentation"/>
<xsl:with-param name="context" select="../@name"/>
<xsl:with-param name="is-reference" select="false()"/>
- <xsl:with-param name="constructor-for" select="../@name"/>
+ <xsl:with-param name="constructor-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
</xsl:call-template>
</xsl:template>
@@ -575,7 +692,9 @@
<xsl:with-param name="indentation" select="$indentation"/>
<xsl:with-param name="context" select="../@name"/>
<xsl:with-param name="is-reference" select="false()"/>
- <xsl:with-param name="copy-assign-for" select="../@name"/>
+ <xsl:with-param name="copy-assign-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
</xsl:call-template>
</xsl:template>
@@ -585,7 +704,128 @@
<xsl:with-param name="indentation" select="$indentation"/>
<xsl:with-param name="context" select="../@name"/>
<xsl:with-param name="is-reference" select="false()"/>
- <xsl:with-param name="destructor-for" select="../@name"/>
+ <xsl:with-param name="destructor-for">
+ <xsl:call-template name="object-name"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template name="class-members-synopsis">
+ <xsl:param name="indentation" select="0"/>
+
+ <!-- Typedefs -->
+ <xsl:if test="typedef">
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="indent">
+ <xsl:with-param name="indentation" select="$indentation + 2"/>
+ </xsl:call-template>
+ <emphasis>
+ <xsl:text>// </xsl:text>
+ <!-- True if there are any non-compacted typedefs -->
+ <xsl:variable name="have-typedef-references"
+ select="typedef and ((typedef/para|typedef/description) or ($boost.compact.typedef='0'))"/>
+ <xsl:choose>
+ <xsl:when test="$have-typedef-references">
+ <xsl:call-template name="internal-link">
+ <xsl:with-param name="to">
+ <xsl:call-template name="generate.id"/>
+ <xsl:text>types</xsl:text>
+ </xsl:with-param>
+ <xsl:with-param name="text" select="'types'"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>types</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </emphasis>
+
+ <xsl:variable name="max-type-length">
+ <xsl:call-template name="find-max-type-length"/>
+ </xsl:variable>
+ <xsl:variable name="max-name-length">
+ <xsl:call-template name="find-max-type-length">
+ <xsl:with-param name="want-name" select="true()"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:apply-templates select="typedef" mode="synopsis">
+ <xsl:with-param name="indentation" select="$indentation + 2"/>
+ <xsl:with-param name="max-type-length"
+ select="$max-type-length"/>