[boost-doc-zh] r425 committed - 升级至1.44.0,第一批,libs/目录d-f子目录...

  • From: boost-doc-zh@xxxxxxxxxxxxxx
  • To: boost-doc-zh-notify@xxxxxxxxxxxxx
  • Date: Mon, 23 Aug 2010 06:38:15 +0000

Revision: 425
Author: alai04
Date: Sun Aug 22 23:21:17 2010
Log: 升级至1.44.0,第一批,libs/目录d-f子目录
新增 msm, polygon 两个子库
http://code.google.com/p/boost-doc-zh/source/detail?r=425

Added:
 /trunk/libs/detail
 /trunk/libs/detail/utf8_codecvt_facet.cpp
 /trunk/libs/filesystem/v2
 /trunk/libs/filesystem/v2/build
 /trunk/libs/filesystem/v2/build/Jamfile.v2
 /trunk/libs/filesystem/v3
 /trunk/libs/filesystem/v3/build
 /trunk/libs/filesystem/v3/build/Jamfile.v2
 /trunk/libs/filesystem/v3/doc
 /trunk/libs/filesystem/v3/doc/Jamfile.v2
 /trunk/libs/filesystem/v3/doc/POSIX_filename_encoding.txt
 /trunk/libs/filesystem/v3/doc/deprecated.html
 /trunk/libs/filesystem/v3/doc/design.htm
 /trunk/libs/filesystem/v3/doc/do_list.html
 /trunk/libs/filesystem/v3/doc/faq.htm
 /trunk/libs/filesystem/v3/doc/index.htm
 /trunk/libs/filesystem/v3/doc/path_table.cpp
 /trunk/libs/filesystem/v3/doc/path_table.txt
 /trunk/libs/filesystem/v3/doc/portability_guide.htm
 /trunk/libs/filesystem/v3/doc/reference.html
 /trunk/libs/filesystem/v3/doc/tutorial.html
 /trunk/libs/filesystem/v3/doc/v3.html
 /trunk/libs/filesystem/v3/doc/v3_design.html
 /trunk/libs/filesystem/v3/example
 /trunk/libs/filesystem/v3/example/Jamfile.v2
 /trunk/libs/filesystem/v3/example/error_demo.cpp
 /trunk/libs/filesystem/v3/example/file_size.cpp
 /trunk/libs/filesystem/v3/example/mbcopy.cpp
 /trunk/libs/filesystem/v3/example/mbpath.cpp
 /trunk/libs/filesystem/v3/example/mbpath.hpp
 /trunk/libs/filesystem/v3/example/path_info.cpp
 /trunk/libs/filesystem/v3/example/simple_ls.cpp
 /trunk/libs/filesystem/v3/example/tchar.cpp
 /trunk/libs/filesystem/v3/example/test
 /trunk/libs/filesystem/v3/example/test/Jamfile.v2
 /trunk/libs/filesystem/v3/example/test/bld.bat
 /trunk/libs/filesystem/v3/example/test/bld.sh
 /trunk/libs/filesystem/v3/example/test/setup.bat
 /trunk/libs/filesystem/v3/example/test/setup.sh
 /trunk/libs/filesystem/v3/example/tut0.cpp
 /trunk/libs/filesystem/v3/example/tut1.cpp
 /trunk/libs/filesystem/v3/example/tut2.cpp
 /trunk/libs/filesystem/v3/example/tut3.cpp
 /trunk/libs/filesystem/v3/example/tut4.cpp
 /trunk/libs/filesystem/v3/example/tut5.cpp
 /trunk/libs/filesystem/v3/index.html
 /trunk/libs/filesystem/v3/src
 /trunk/libs/filesystem/v3/src/codecvt_error_category.cpp
 /trunk/libs/filesystem/v3/src/operations.cpp
 /trunk/libs/filesystem/v3/src/path.cpp
 /trunk/libs/filesystem/v3/src/path_traits.cpp
 /trunk/libs/filesystem/v3/src/portability.cpp
 /trunk/libs/filesystem/v3/src/unique_path.cpp
 /trunk/libs/filesystem/v3/src/utf8_codecvt_facet.cpp
 /trunk/libs/filesystem/v3/src/windows_file_codecvt.cpp
 /trunk/libs/filesystem/v3/src/windows_file_codecvt.hpp
 /trunk/libs/filesystem/v3/test
 /trunk/libs/filesystem/v3/test/Jamfile.v2
 /trunk/libs/filesystem/v3/test/convenience_test.cpp
 /trunk/libs/filesystem/v3/test/deprecated_test.cpp
 /trunk/libs/filesystem/v3/test/design_use_cases.cpp
 /trunk/libs/filesystem/v3/test/equivalent.cpp
 /trunk/libs/filesystem/v3/test/fstream_test.cpp
 /trunk/libs/filesystem/v3/test/large_file_support_test.cpp
 /trunk/libs/filesystem/v3/test/msvc
 /trunk/libs/filesystem/v3/test/msvc/common.vsprops
 /trunk/libs/filesystem/v3/test/msvc/convenience_test
/trunk/libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj
 /trunk/libs/filesystem/v3/test/msvc/deprecated_test
 /trunk/libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj
 /trunk/libs/filesystem/v3/test/msvc/error_demo
 /trunk/libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj
 /trunk/libs/filesystem/v3/test/msvc/filesystem-v3.sln
 /trunk/libs/filesystem/v3/test/msvc/filesystem_dll
 /trunk/libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj
 /trunk/libs/filesystem/v3/test/msvc/fstream_test
 /trunk/libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj
 /trunk/libs/filesystem/v3/test/msvc/operations_test
 /trunk/libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj
 /trunk/libs/filesystem/v3/test/msvc/operations_unit_test
/trunk/libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj
 /trunk/libs/filesystem/v3/test/msvc/path_test
 /trunk/libs/filesystem/v3/test/msvc/path_test/path_test.vcproj
 /trunk/libs/filesystem/v3/test/msvc/path_test_dynamic_link
/trunk/libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj
 /trunk/libs/filesystem/v3/test/msvc/path_unit_test
 /trunk/libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj
 /trunk/libs/filesystem/v3/test/msvc/simple_ls
 /trunk/libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj
 /trunk/libs/filesystem/v3/test/msvc/system_dll
 /trunk/libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj
 /trunk/libs/filesystem/v3/test/msvc/tchar_example
 /trunk/libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj
 /trunk/libs/filesystem/v3/test/msvc/tut0
 /trunk/libs/filesystem/v3/test/msvc/tut0/tut0.vcproj
 /trunk/libs/filesystem/v3/test/msvc/tut1
 /trunk/libs/filesystem/v3/test/msvc/tut1/tut1.vcproj
 /trunk/libs/filesystem/v3/test/msvc/tut2
 /trunk/libs/filesystem/v3/test/msvc/tut2/tut2.vcproj
 /trunk/libs/filesystem/v3/test/msvc/tut3
 /trunk/libs/filesystem/v3/test/msvc/tut3/tut3.vcproj
 /trunk/libs/filesystem/v3/test/msvc/tut4
 /trunk/libs/filesystem/v3/test/msvc/tut4/tut4.vcproj
 /trunk/libs/filesystem/v3/test/msvc/wide_test
 /trunk/libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj
 /trunk/libs/filesystem/v3/test/msvc10
 /trunk/libs/filesystem/v3/test/msvc10/common.props
 /trunk/libs/filesystem/v3/test/msvc10/convenience_test
/trunk/libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/deprecated_test
/trunk/libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/filesystem-v3.sln
 /trunk/libs/filesystem/v3/test/msvc10/filesystem_dll
 /trunk/libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/fstream_test
 /trunk/libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/operations_test
/trunk/libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/operations_unit_test
/trunk/libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/path_test
 /trunk/libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/path_unit_test
 /trunk/libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/system_dll
 /trunk/libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/tut1
 /trunk/libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/tut2
 /trunk/libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/tut3
 /trunk/libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj
 /trunk/libs/filesystem/v3/test/msvc10/tut4
 /trunk/libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj
 /trunk/libs/filesystem/v3/test/operations_test.cpp
 /trunk/libs/filesystem/v3/test/operations_unit_test.cpp
 /trunk/libs/filesystem/v3/test/path_test.cpp
 /trunk/libs/filesystem/v3/test/path_unit_test.cpp
 /trunk/libs/filesystem/v3/test/test_codecvt.hpp
 /trunk/libs/format/test
 /trunk/libs/format/test/Jamfile.v2
 /trunk/libs/format/test/format_test1.cpp
 /trunk/libs/format/test/format_test2.cpp
 /trunk/libs/format/test/format_test3.cpp
 /trunk/libs/format/test/format_test_enum.cpp
 /trunk/libs/format/test/format_test_wstring.cpp
 /trunk/libs/functional/hash/test/implicit_fail_test.cpp
 /trunk/libs/functional/hash/test/shared_ptr_fail_test.cpp
/trunk/libs/fusion/doc/html/fusion/algorithm/iteration/functions/iter_fold.html /trunk/libs/fusion/doc/html/fusion/algorithm/iteration/functions/reverse_fold.html /trunk/libs/fusion/doc/html/fusion/algorithm/iteration/functions/reverse_iter_fold.html /trunk/libs/fusion/doc/html/fusion/algorithm/iteration/metafunctions/iter_fold.html /trunk/libs/fusion/doc/html/fusion/algorithm/iteration/metafunctions/reverse_fold.html /trunk/libs/fusion/doc/html/fusion/algorithm/iteration/metafunctions/reverse_iter_fold.html
 /trunk/libs/fusion/doc/html/fusion/view/repetitive_view.html
 /trunk/libs/fusion/test/algorithm/fold.hpp
 /trunk/libs/fusion/test/algorithm/fold2.cpp
 /trunk/libs/fusion/test/algorithm/iter_fold.cpp
 /trunk/libs/fusion/test/algorithm/reverse_fold.cpp
 /trunk/libs/fusion/test/algorithm/reverse_iter_fold.cpp
 /trunk/libs/msm
 /trunk/libs/msm/doc
 /trunk/libs/msm/doc/HTML
 /trunk/libs/msm/doc/HTML/boostbook.css
 /trunk/libs/msm/doc/HTML/ch01.html
 /trunk/libs/msm/doc/HTML/ch02.html
 /trunk/libs/msm/doc/HTML/ch02s02.html
 /trunk/libs/msm/doc/HTML/ch02s03.html
 /trunk/libs/msm/doc/HTML/ch03.html
 /trunk/libs/msm/doc/HTML/ch03s02.html
 /trunk/libs/msm/doc/HTML/ch03s03.html
 /trunk/libs/msm/doc/HTML/ch03s04.html
 /trunk/libs/msm/doc/HTML/ch03s05.html
 /trunk/libs/msm/doc/HTML/ch04.html
 /trunk/libs/msm/doc/HTML/ch04s02.html
 /trunk/libs/msm/doc/HTML/ch04s03.html
 /trunk/libs/msm/doc/HTML/ch04s04.html
 /trunk/libs/msm/doc/HTML/ch04s05.html
 /trunk/libs/msm/doc/HTML/ch05.html
 /trunk/libs/msm/doc/HTML/ch06.html
 /trunk/libs/msm/doc/HTML/ch06s02.html
 /trunk/libs/msm/doc/HTML/ch06s03.html
 /trunk/libs/msm/doc/HTML/ch06s04.html
 /trunk/libs/msm/doc/HTML/ch07.html
 /trunk/libs/msm/doc/HTML/ch07s02.html
 /trunk/libs/msm/doc/HTML/ch08.html
 /trunk/libs/msm/doc/HTML/ch09.html
 /trunk/libs/msm/doc/HTML/ch10.html
 /trunk/libs/msm/doc/HTML/examples
 /trunk/libs/msm/doc/HTML/examples/AnonymousTutorial.cpp
 /trunk/libs/msm/doc/HTML/examples/AnonymousTutorialEuml.cpp
 /trunk/libs/msm/doc/HTML/examples/AnonymousTutorialWithFunctors.cpp
 /trunk/libs/msm/doc/HTML/examples/BoostCon09Full.cpp
 /trunk/libs/msm/doc/HTML/examples/CompilerStressTestEuml.cpp
 /trunk/libs/msm/doc/HTML/examples/CompositeTutorial.cpp
 /trunk/libs/msm/doc/HTML/examples/CompositeTutorialEuml.cpp
 /trunk/libs/msm/doc/HTML/examples/DirectEntryEuml.cpp
 /trunk/libs/msm/doc/HTML/examples/DirectEntryTutorial.cpp
 /trunk/libs/msm/doc/HTML/examples/EumlInternal.cpp
 /trunk/libs/msm/doc/HTML/examples/EumlInternalDistributed.cpp
 /trunk/libs/msm/doc/HTML/examples/EumlSimple.cpp
 /trunk/libs/msm/doc/HTML/examples/Flags.cpp
 /trunk/libs/msm/doc/HTML/examples/History.cpp
 /trunk/libs/msm/doc/HTML/examples/HistoryEuml.cpp
 /trunk/libs/msm/doc/HTML/examples/MsmComposite.cpp
 /trunk/libs/msm/doc/HTML/examples/MsmSimple.cpp
 /trunk/libs/msm/doc/HTML/examples/MsmSimpleFunctors.cpp
 /trunk/libs/msm/doc/HTML/examples/Orthogonal-deferred.cpp
 /trunk/libs/msm/doc/HTML/examples/Orthogonal-deferred2.cpp
 /trunk/libs/msm/doc/HTML/examples/OrthogonalDeferredEuml.cpp
 /trunk/libs/msm/doc/HTML/examples/OrthogonalDeferredEuml2.cpp
 /trunk/libs/msm/doc/HTML/examples/ParsingDigits.cpp
 /trunk/libs/msm/doc/HTML/examples/SCComposite.cpp
 /trunk/libs/msm/doc/HTML/examples/SCSimple.cpp
 /trunk/libs/msm/doc/HTML/examples/SM-2Arg.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleTimer.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleTutorial.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleTutorial2.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleTutorialEuml.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleTutorialEuml2.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleTutorialInternal.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleTutorialInternal2.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleTutorialInternalFunctors.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleWithFunctors.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleWithFunctors2.cpp
 /trunk/libs/msm/doc/HTML/examples/SimpleWithFunctors3.cpp
 /trunk/libs/msm/doc/HTML/examples/TestInternal.cpp
 /trunk/libs/msm/doc/HTML/examples/char_event_dispatcher.hpp
 /trunk/libs/msm/doc/HTML/examples/distributed_table
 /trunk/libs/msm/doc/HTML/examples/distributed_table/DistributedTable.cpp
 /trunk/libs/msm/doc/HTML/examples/distributed_table/Empty.cpp
 /trunk/libs/msm/doc/HTML/examples/distributed_table/Empty.hpp
 /trunk/libs/msm/doc/HTML/examples/distributed_table/Events.hpp
 /trunk/libs/msm/doc/HTML/examples/distributed_table/Open.cpp
 /trunk/libs/msm/doc/HTML/examples/distributed_table/Open.hpp
 /trunk/libs/msm/doc/HTML/examples/iPodEuml.cpp
 /trunk/libs/msm/doc/HTML/examples/iPodSearch.cpp
 /trunk/libs/msm/doc/HTML/examples/iPodSearchEuml.cpp
 /trunk/libs/msm/doc/HTML/examples/iPod_distributed
 /trunk/libs/msm/doc/HTML/examples/iPod_distributed/Events.hpp
 /trunk/libs/msm/doc/HTML/examples/iPod_distributed/MenuMode.cpp
 /trunk/libs/msm/doc/HTML/examples/iPod_distributed/MenuMode.hpp
 /trunk/libs/msm/doc/HTML/examples/iPod_distributed/PlayingMode.cpp
 /trunk/libs/msm/doc/HTML/examples/iPod_distributed/PlayingMode.hpp
 /trunk/libs/msm/doc/HTML/examples/iPod_distributed/iPod.cpp
 /trunk/libs/msm/doc/HTML/examples/ipod_functors.hpp
 /trunk/libs/msm/doc/HTML/examples/logging_functors.h
 /trunk/libs/msm/doc/HTML/index.html
 /trunk/libs/msm/doc/HTML/pr01.html
 /trunk/libs/msm/doc/HTML/pt01.html
 /trunk/libs/msm/doc/HTML/pt02.html
 /trunk/libs/msm/doc/HTML/re01.html
 /trunk/libs/msm/doc/HTML/re02.html
 /trunk/libs/msm/doc/HTML/re03.html
 /trunk/libs/msm/doc/PDF
 /trunk/libs/msm/doc/PDF/examples
 /trunk/libs/msm/doc/PDF/examples/AnonymousTutorial.cpp
 /trunk/libs/msm/doc/PDF/examples/AnonymousTutorialEuml.cpp
 /trunk/libs/msm/doc/PDF/examples/AnonymousTutorialWithFunctors.cpp
 /trunk/libs/msm/doc/PDF/examples/BoostCon09Full.cpp
 /trunk/libs/msm/doc/PDF/examples/CompilerStressTestEuml.cpp
 /trunk/libs/msm/doc/PDF/examples/CompositeTutorial.cpp
 /trunk/libs/msm/doc/PDF/examples/CompositeTutorialEuml.cpp
 /trunk/libs/msm/doc/PDF/examples/DirectEntryEuml.cpp
 /trunk/libs/msm/doc/PDF/examples/DirectEntryTutorial.cpp
 /trunk/libs/msm/doc/PDF/examples/EumlInternal.cpp
 /trunk/libs/msm/doc/PDF/examples/EumlInternalDistributed.cpp
 /trunk/libs/msm/doc/PDF/examples/EumlSimple.cpp
 /trunk/libs/msm/doc/PDF/examples/Flags.cpp
 /trunk/libs/msm/doc/PDF/examples/History.cpp
 /trunk/libs/msm/doc/PDF/examples/HistoryEuml.cpp
 /trunk/libs/msm/doc/PDF/examples/MsmComposite.cpp
 /trunk/libs/msm/doc/PDF/examples/MsmSimple.cpp
 /trunk/libs/msm/doc/PDF/examples/MsmSimpleFunctors.cpp
 /trunk/libs/msm/doc/PDF/examples/Orthogonal-deferred.cpp
 /trunk/libs/msm/doc/PDF/examples/Orthogonal-deferred2.cpp
 /trunk/libs/msm/doc/PDF/examples/OrthogonalDeferredEuml.cpp
 /trunk/libs/msm/doc/PDF/examples/OrthogonalDeferredEuml2.cpp
 /trunk/libs/msm/doc/PDF/examples/ParsingDigits.cpp
 /trunk/libs/msm/doc/PDF/examples/SCComposite.cpp
 /trunk/libs/msm/doc/PDF/examples/SCSimple.cpp
 /trunk/libs/msm/doc/PDF/examples/SM-2Arg.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleTimer.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleTutorial.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleTutorial2.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleTutorialEuml.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleTutorialEuml2.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleTutorialInternal.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleTutorialInternal2.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleTutorialInternalFunctors.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleWithFunctors.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleWithFunctors2.cpp
 /trunk/libs/msm/doc/PDF/examples/SimpleWithFunctors3.cpp
 /trunk/libs/msm/doc/PDF/examples/TestInternal.cpp
 /trunk/libs/msm/doc/PDF/examples/char_event_dispatcher.hpp
 /trunk/libs/msm/doc/PDF/examples/distributed_table
 /trunk/libs/msm/doc/PDF/examples/distributed_table/DistributedTable.cpp
 /trunk/libs/msm/doc/PDF/examples/distributed_table/Empty.cpp
 /trunk/libs/msm/doc/PDF/examples/distributed_table/Empty.hpp
 /trunk/libs/msm/doc/PDF/examples/distributed_table/Events.hpp
 /trunk/libs/msm/doc/PDF/examples/distributed_table/Open.cpp
 /trunk/libs/msm/doc/PDF/examples/distributed_table/Open.hpp
 /trunk/libs/msm/doc/PDF/examples/iPodEuml.cpp
 /trunk/libs/msm/doc/PDF/examples/iPodSearch.cpp
 /trunk/libs/msm/doc/PDF/examples/iPodSearchEuml.cpp
 /trunk/libs/msm/doc/PDF/examples/iPod_distributed
 /trunk/libs/msm/doc/PDF/examples/iPod_distributed/Events.hpp
 /trunk/libs/msm/doc/PDF/examples/iPod_distributed/MenuMode.cpp
 /trunk/libs/msm/doc/PDF/examples/iPod_distributed/MenuMode.hpp
 /trunk/libs/msm/doc/PDF/examples/iPod_distributed/PlayingMode.cpp
 /trunk/libs/msm/doc/PDF/examples/iPod_distributed/PlayingMode.hpp
 /trunk/libs/msm/doc/PDF/examples/iPod_distributed/iPod.cpp
 /trunk/libs/msm/doc/PDF/examples/ipod_functors.hpp
 /trunk/libs/msm/doc/PDF/examples/logging_functors.h
 /trunk/libs/msm/doc/PDF/msm.pdf
 /trunk/libs/msm/doc/images
 /trunk/libs/msm/doc/images/AnnexA.jpg
 /trunk/libs/msm/doc/images/Anonymous.jpg
 /trunk/libs/msm/doc/images/CompositeTutorial.jpg
 /trunk/libs/msm/doc/images/FlagsTutorial.jpg
 /trunk/libs/msm/doc/images/HistoryTutorial.jpg
 /trunk/libs/msm/doc/images/Orthogonal-deferred.jpg
 /trunk/libs/msm/doc/images/ParsingDigits.jpg
 /trunk/libs/msm/doc/images/SimpleTutorial.jpg
 /trunk/libs/msm/doc/images/completion.gif
 /trunk/libs/msm/doc/images/conflict1.gif
 /trunk/libs/msm/doc/images/conflict2.gif
 /trunk/libs/msm/doc/images/entry_point.gif
 /trunk/libs/msm/doc/images/entrytutorial.jpg
 /trunk/libs/msm/doc/images/error_no_regions.jpg
 /trunk/libs/msm/doc/images/exit.gif
 /trunk/libs/msm/doc/images/explicit.gif
 /trunk/libs/msm/doc/images/fork.gif
 /trunk/libs/msm/doc/images/history.gif
 /trunk/libs/msm/doc/images/init_state.gif
 /trunk/libs/msm/doc/images/regions.gif
 /trunk/libs/msm/doc/images/sm.gif
 /trunk/libs/msm/doc/images/state.gif
 /trunk/libs/msm/doc/images/terminate.gif
 /trunk/libs/msm/doc/images/transition.jpg
 /trunk/libs/msm/doc/src
 /trunk/libs/msm/doc/src/msm.xml
 /trunk/libs/msm/index.html
 /trunk/libs/msm/test
 /trunk/libs/msm/test/Anonymous.cpp
 /trunk/libs/msm/test/AnonymousEuml.cpp
 /trunk/libs/msm/test/CompositeEuml.cpp
 /trunk/libs/msm/test/CompositeMachine.cpp
 /trunk/libs/msm/test/Constructor.cpp
 /trunk/libs/msm/test/Entries.cpp
 /trunk/libs/msm/test/History.cpp
 /trunk/libs/msm/test/Jamfile.v2
 /trunk/libs/msm/test/OrthogonalDeferred.cpp
 /trunk/libs/msm/test/OrthogonalDeferred2.cpp
 /trunk/libs/msm/test/OrthogonalDeferredEuml.cpp
 /trunk/libs/msm/test/SimpleEuml.cpp
 /trunk/libs/msm/test/SimpleEuml2.cpp
 /trunk/libs/msm/test/SimpleInternal.cpp
 /trunk/libs/msm/test/SimpleInternalEuml.cpp
 /trunk/libs/msm/test/SimpleInternalFunctors.cpp
 /trunk/libs/msm/test/SimpleMachine.cpp
 /trunk/libs/msm/test/SimpleWithFunctors.cpp
 /trunk/libs/polygon
 /trunk/libs/polygon/Jamfile.v2
 /trunk/libs/polygon/doc
 /trunk/libs/polygon/doc/GTL_boostcon2009.pdf
 /trunk/libs/polygon/doc/GTL_boostcon_draft03.pdf
 /trunk/libs/polygon/doc/analysis.htm
 /trunk/libs/polygon/doc/gtl_connectivity_extraction.htm
 /trunk/libs/polygon/doc/gtl_connectivity_extraction_45.htm
 /trunk/libs/polygon/doc/gtl_connectivity_extraction_90.htm
 /trunk/libs/polygon/doc/gtl_connectivity_extraction_usage.htm
 /trunk/libs/polygon/doc/gtl_coordinate_concept.htm
 /trunk/libs/polygon/doc/gtl_custom_point.htm
 /trunk/libs/polygon/doc/gtl_custom_polygon.htm
 /trunk/libs/polygon/doc/gtl_custom_polygon_set.htm
 /trunk/libs/polygon/doc/gtl_design_overview.htm
 /trunk/libs/polygon/doc/gtl_interval_concept.htm
 /trunk/libs/polygon/doc/gtl_isotropy.htm
 /trunk/libs/polygon/doc/gtl_minkowski_tutorial.htm
 /trunk/libs/polygon/doc/gtl_point_concept.htm
 /trunk/libs/polygon/doc/gtl_point_usage.htm
 /trunk/libs/polygon/doc/gtl_polygon_45_concept.htm
 /trunk/libs/polygon/doc/gtl_polygon_45_set_concept.htm
 /trunk/libs/polygon/doc/gtl_polygon_45_with_holes_concept.htm
 /trunk/libs/polygon/doc/gtl_polygon_90_concept.htm
 /trunk/libs/polygon/doc/gtl_polygon_90_set_concept.htm
 /trunk/libs/polygon/doc/gtl_polygon_90_with_holes_concept.htm
 /trunk/libs/polygon/doc/gtl_polygon_concept.htm
 /trunk/libs/polygon/doc/gtl_polygon_set_concept.htm
 /trunk/libs/polygon/doc/gtl_polygon_set_usage.htm
 /trunk/libs/polygon/doc/gtl_polygon_usage.htm
 /trunk/libs/polygon/doc/gtl_polygon_with_holes_concept.htm
 /trunk/libs/polygon/doc/gtl_property_merge.htm
 /trunk/libs/polygon/doc/gtl_property_merge_45.htm
 /trunk/libs/polygon/doc/gtl_property_merge_90.htm
 /trunk/libs/polygon/doc/gtl_property_merge_usage.htm
 /trunk/libs/polygon/doc/gtl_rectangle_concept.htm
 /trunk/libs/polygon/doc/gtl_tutorial.htm
 /trunk/libs/polygon/doc/images
 /trunk/libs/polygon/doc/images/NAND.PNG
 /trunk/libs/polygon/doc/images/boost.png
 /trunk/libs/polygon/doc/images/concept_table.png
 /trunk/libs/polygon/doc/images/convolution1.PNG
 /trunk/libs/polygon/doc/images/convolution2.PNG
 /trunk/libs/polygon/doc/images/convolve_edges.PNG
 /trunk/libs/polygon/doc/images/foo.PNG
 /trunk/libs/polygon/doc/images/hand.png
 /trunk/libs/polygon/doc/images/intlogo.gif
 /trunk/libs/polygon/doc/images/nands.PNG
 /trunk/libs/polygon/doc/images/perf_graph.PNG
 /trunk/libs/polygon/doc/images/perimeter_convolve.PNG
 /trunk/libs/polygon/doc/images/refinements.png
 /trunk/libs/polygon/doc/index.htm
 /trunk/libs/polygon/doc/tutorial
 /trunk/libs/polygon/doc/tutorial/compare_schematics.hpp
 /trunk/libs/polygon/doc/tutorial/connectivity_database.hpp
 /trunk/libs/polygon/doc/tutorial/device.hpp
 /trunk/libs/polygon/doc/tutorial/extract.cpp
 /trunk/libs/polygon/doc/tutorial/extract_devices.hpp
 /trunk/libs/polygon/doc/tutorial/layout_database.hpp
 /trunk/libs/polygon/doc/tutorial/layout_pin.hpp
 /trunk/libs/polygon/doc/tutorial/layout_rectangle.hpp
 /trunk/libs/polygon/doc/tutorial/minkowski.cpp
 /trunk/libs/polygon/doc/tutorial/nand.layout
 /trunk/libs/polygon/doc/tutorial/nand.schematic
 /trunk/libs/polygon/doc/tutorial/nand_short.layout
 /trunk/libs/polygon/doc/tutorial/nor.layout
 /trunk/libs/polygon/doc/tutorial/nor.schematic
 /trunk/libs/polygon/doc/tutorial/parse_layout.hpp
 /trunk/libs/polygon/doc/tutorial/schematic_database.hpp
 /trunk/libs/polygon/index.html
 /trunk/libs/polygon/test
 /trunk/libs/polygon/test/Jamfile.v2
 /trunk/libs/polygon/test/gtl_boost_unit_test.cpp
Deleted:
 /trunk/libs/function/doc/html
Modified:
 /trunk/libs/date_time/xmldoc/Jamfile.v2
 /trunk/libs/date_time/xmldoc/changes.xml
 /trunk/libs/date_time/xmldoc/format_flags.xml
 /trunk/libs/exception/doc/boost_exception_get_error_info_hpp.html
 /trunk/libs/exception/doc/get_error_info.html
 /trunk/libs/exception/test/no_exceptions_test.cpp
 /trunk/libs/exception/test/refcount_ptr_test.cpp
 /trunk/libs/filesystem/index.html
 /trunk/libs/flyweight/doc/release_notes.html
 /trunk/libs/flyweight/example/composite.cpp
 /trunk/libs/foreach/doc/Jamfile.v2
 /trunk/libs/format/doc/format.html
 /trunk/libs/function/doc/Jamfile.v2
 /trunk/libs/function_types/doc/Jamfile
/trunk/libs/function_types/doc/html/boost_functiontypes/about_tag_types.html /trunk/libs/function_types/doc/html/boost_functiontypes/acknowledgements.html
 /trunk/libs/function_types/doc/html/boost_functiontypes/introduction.html
 /trunk/libs/function_types/doc/html/boost_functiontypes/rationale.html
/trunk/libs/function_types/doc/html/boost_functiontypes/reference/classification.html /trunk/libs/function_types/doc/html/boost_functiontypes/reference/decomposition.html /trunk/libs/function_types/doc/html/boost_functiontypes/reference/macros.html /trunk/libs/function_types/doc/html/boost_functiontypes/reference/synthesis.html /trunk/libs/function_types/doc/html/boost_functiontypes/reference/tag_types.html
 /trunk/libs/function_types/doc/html/boost_functiontypes/reference.html
 /trunk/libs/function_types/doc/html/boost_functiontypes/use_cases.html
 /trunk/libs/function_types/doc/html/index.html
 /trunk/libs/functional/hash/doc/changes.qbk
 /trunk/libs/functional/hash/test/Jamfile.v2
 /trunk/libs/fusion/changelist.txt
 /trunk/libs/fusion/doc/Jamfile
 /trunk/libs/fusion/doc/adapted.qbk
 /trunk/libs/fusion/doc/algorithm.qbk
 /trunk/libs/fusion/doc/changelog.qbk
 /trunk/libs/fusion/doc/container.qbk
 /trunk/libs/fusion/doc/fusion.qbk
 /trunk/libs/fusion/doc/html/fusion/acknowledgements.html
 /trunk/libs/fusion/doc/html/fusion/adapted/adapt_assoc.html
 /trunk/libs/fusion/doc/html/fusion/adapted/adapt_assoc_struct_named.html
 /trunk/libs/fusion/doc/html/fusion/adapted/adapt_assoc_tpl_struct.html
 /trunk/libs/fusion/doc/html/fusion/adapted/adapt_struct.html
 /trunk/libs/fusion/doc/html/fusion/adapted/adapt_struct_named.html
 /trunk/libs/fusion/doc/html/fusion/adapted/adapt_tpl_struct.html
 /trunk/libs/fusion/doc/html/fusion/adapted/array.html
 /trunk/libs/fusion/doc/html/fusion/adapted/boost__array.html
 /trunk/libs/fusion/doc/html/fusion/adapted/boost__tuple.html
 /trunk/libs/fusion/doc/html/fusion/adapted/define_assoc_struct.html
 /trunk/libs/fusion/doc/html/fusion/adapted/define_assoc_tpl_struct.html
 /trunk/libs/fusion/doc/html/fusion/adapted/define_struct.html
 /trunk/libs/fusion/doc/html/fusion/adapted/define_tpl_struct.html
 /trunk/libs/fusion/doc/html/fusion/adapted/mpl_sequence.html
 /trunk/libs/fusion/doc/html/fusion/adapted/std__pair.html
 /trunk/libs/fusion/doc/html/fusion/adapted.html
/trunk/libs/fusion/doc/html/fusion/algorithm/iteration/functions/accumulate.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/iteration/functions/fold.html
/trunk/libs/fusion/doc/html/fusion/algorithm/iteration/functions/for_each.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/iteration/functions.html
/trunk/libs/fusion/doc/html/fusion/algorithm/iteration/metafunctions/accumulate.html /trunk/libs/fusion/doc/html/fusion/algorithm/iteration/metafunctions/fold.html /trunk/libs/fusion/doc/html/fusion/algorithm/iteration/metafunctions/for_each.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/iteration/metafunctions.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/iteration.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/functions/all.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/functions/any.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/functions/count.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/functions/count_if.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/functions/find.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/functions/find_if.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/functions/none.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/functions.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/metafunctions/all.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/metafunctions/any.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/metafunctions/count.html
/trunk/libs/fusion/doc/html/fusion/algorithm/query/metafunctions/count_if.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/metafunctions/find.html
/trunk/libs/fusion/doc/html/fusion/algorithm/query/metafunctions/find_if.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/metafunctions/none.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query/metafunctions.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/query.html
/trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/clear.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/erase.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/erase_key.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/filter.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/filter_if.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/insert.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/insert_range.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/join.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/pop_back.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/pop_front.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/push_back.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/push_front.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/remove.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/remove_if.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/replace.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/replace_if.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/reverse.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/transform.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions/zip.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/functions.html
/trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/clear.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/erase.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/erase_key.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/filter.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/filter_if.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/insert.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/insert_range.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/join.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/pop_back.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/pop_front.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/push_back.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/push_front.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/remove.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/remove_if.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/replace.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/replace_if.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/reverse.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/transform.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions/zip.html /trunk/libs/fusion/doc/html/fusion/algorithm/transformation/metafunctions.html
 /trunk/libs/fusion/doc/html/fusion/algorithm/transformation.html
 /trunk/libs/fusion/doc/html/fusion/algorithm.html
 /trunk/libs/fusion/doc/html/fusion/change_log.html
 /trunk/libs/fusion/doc/html/fusion/container/cons.html
/trunk/libs/fusion/doc/html/fusion/container/conversion/functions/as_list.html /trunk/libs/fusion/doc/html/fusion/container/conversion/functions/as_map.html /trunk/libs/fusion/doc/html/fusion/container/conversion/functions/as_set.html /trunk/libs/fusion/doc/html/fusion/container/conversion/functions/as_vector.html
 /trunk/libs/fusion/doc/html/fusion/container/conversion/functions.html
/trunk/libs/fusion/doc/html/fusion/container/conversion/metafunctions/as_list.html /trunk/libs/fusion/doc/html/fusion/container/conversion/metafunctions/as_map.html /trunk/libs/fusion/doc/html/fusion/container/conversion/metafunctions/as_set.html /trunk/libs/fusion/doc/html/fusion/container/conversion/metafunctions/as_vector.html
 /trunk/libs/fusion/doc/html/fusion/container/conversion/metafunctions.html
 /trunk/libs/fusion/doc/html/fusion/container/conversion.html
/trunk/libs/fusion/doc/html/fusion/container/generation/functions/list_tie.html /trunk/libs/fusion/doc/html/fusion/container/generation/functions/make_cons.html /trunk/libs/fusion/doc/html/fusion/container/generation/functions/make_list.html /trunk/libs/fusion/doc/html/fusion/container/generation/functions/make_map.html /trunk/libs/fusion/doc/html/fusion/container/generation/functions/make_set.html /trunk/libs/fusion/doc/html/fusion/container/generation/functions/make_vector.html /trunk/libs/fusion/doc/html/fusion/container/generation/functions/map_tie.html /trunk/libs/fusion/doc/html/fusion/container/generation/functions/tiers.html /trunk/libs/fusion/doc/html/fusion/container/generation/functions/vector_tie.html
 /trunk/libs/fusion/doc/html/fusion/container/generation/functions.html
/trunk/libs/fusion/doc/html/fusion/container/generation/metafunctions/list_tie.html /trunk/libs/fusion/doc/html/fusion/container/generation/metafunctions/make_cons.html /trunk/libs/fusion/doc/html/fusion/container/generation/metafunctions/make_list.html /trunk/libs/fusion/doc/html/fusion/container/generation/metafunctions/make_map.html /trunk/libs/fusion/doc/html/fusion/container/generation/metafunctions/make_set.html /trunk/libs/fusion/doc/html/fusion/container/generation/metafunctions/make_vector.html /trunk/libs/fusion/doc/html/fusion/container/generation/metafunctions/map_tie.html /trunk/libs/fusion/doc/html/fusion/container/generation/metafunctions/vector_tie.html
 /trunk/libs/fusion/doc/html/fusion/container/generation/metafunctions.html
 /trunk/libs/fusion/doc/html/fusion/container/generation.html
 /trunk/libs/fusion/doc/html/fusion/container/list.html
 /trunk/libs/fusion/doc/html/fusion/container/map.html
 /trunk/libs/fusion/doc/html/fusion/container/set.html
 /trunk/libs/fusion/doc/html/fusion/container/vector.html
 /trunk/libs/fusion/doc/html/fusion/container.html
 /trunk/libs/fusion/doc/html/fusion/extension/ext_full.html
 /trunk/libs/fusion/doc/html/fusion/extension/iterator_facade.html
 /trunk/libs/fusion/doc/html/fusion/extension/sequence_facade.html
 /trunk/libs/fusion/doc/html/fusion/extension.html
 /trunk/libs/fusion/doc/html/fusion/functional/adapters/fused.html
/trunk/libs/fusion/doc/html/fusion/functional/adapters/fused_function_object.html
 /trunk/libs/fusion/doc/html/fusion/functional/adapters/fused_procedure.html
 /trunk/libs/fusion/doc/html/fusion/functional/adapters/limits.html
 /trunk/libs/fusion/doc/html/fusion/functional/adapters/unfused.html
 /trunk/libs/fusion/doc/html/fusion/functional/adapters/unfused_typed.html
 /trunk/libs/fusion/doc/html/fusion/functional/adapters.html
 /trunk/libs/fusion/doc/html/fusion/functional/concepts/callable.html
 /trunk/libs/fusion/doc/html/fusion/functional/concepts/def_callable.html
 /trunk/libs/fusion/doc/html/fusion/functional/concepts/poly.html
 /trunk/libs/fusion/doc/html/fusion/functional/concepts/reg_callable.html
 /trunk/libs/fusion/doc/html/fusion/functional/concepts.html
/trunk/libs/fusion/doc/html/fusion/functional/generation/functions/mk_fused.html /trunk/libs/fusion/doc/html/fusion/functional/generation/functions/mk_fused_fobj.html /trunk/libs/fusion/doc/html/fusion/functional/generation/functions/mk_fused_proc.html /trunk/libs/fusion/doc/html/fusion/functional/generation/functions/mk_unfused.html
 /trunk/libs/fusion/doc/html/fusion/functional/generation/functions.html
/trunk/libs/fusion/doc/html/fusion/functional/generation/metafunctions/mk_fused.html /trunk/libs/fusion/doc/html/fusion/functional/generation/metafunctions/mk_fused_fobj.html /trunk/libs/fusion/doc/html/fusion/functional/generation/metafunctions/mk_fused_proc.html /trunk/libs/fusion/doc/html/fusion/functional/generation/metafunctions/mk_unfused.html
 /trunk/libs/fusion/doc/html/fusion/functional/generation/metafunctions.html
 /trunk/libs/fusion/doc/html/fusion/functional/generation.html
/trunk/libs/fusion/doc/html/fusion/functional/invocation/functions/invoke.html /trunk/libs/fusion/doc/html/fusion/functional/invocation/functions/invoke_fobj.html /trunk/libs/fusion/doc/html/fusion/functional/invocation/functions/invoke_proc.html
 /trunk/libs/fusion/doc/html/fusion/functional/invocation/functions.html
 /trunk/libs/fusion/doc/html/fusion/functional/invocation/limits.html
/trunk/libs/fusion/doc/html/fusion/functional/invocation/metafunctions/invoke.html /trunk/libs/fusion/doc/html/fusion/functional/invocation/metafunctions/invoke_fobj.html /trunk/libs/fusion/doc/html/fusion/functional/invocation/metafunctions/invoke_proc.html
 /trunk/libs/fusion/doc/html/fusion/functional/invocation/metafunctions.html
 /trunk/libs/fusion/doc/html/fusion/functional/invocation.html
 /trunk/libs/fusion/doc/html/fusion/functional.html
 /trunk/libs/fusion/doc/html/fusion/introduction.html
/trunk/libs/fusion/doc/html/fusion/iterator/concepts/associative_iterator.html /trunk/libs/fusion/doc/html/fusion/iterator/concepts/bidirectional_iterator.html
 /trunk/libs/fusion/doc/html/fusion/iterator/concepts/forward_iterator.html
/trunk/libs/fusion/doc/html/fusion/iterator/concepts/random_access_iterator.html
 /trunk/libs/fusion/doc/html/fusion/iterator/concepts.html
 /trunk/libs/fusion/doc/html/fusion/iterator/functions/advance.html
 /trunk/libs/fusion/doc/html/fusion/iterator/functions/advance_c.html
 /trunk/libs/fusion/doc/html/fusion/iterator/functions/deref.html
 /trunk/libs/fusion/doc/html/fusion/iterator/functions/deref_data.html
 /trunk/libs/fusion/doc/html/fusion/iterator/functions/distance.html
 /trunk/libs/fusion/doc/html/fusion/iterator/functions/next.html
 /trunk/libs/fusion/doc/html/fusion/iterator/functions/prior.html
 /trunk/libs/fusion/doc/html/fusion/iterator/functions.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/advance.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/advance_c.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/deref.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/deref_data.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/distance.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/equal_to.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/key_of.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/next.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/prior.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/value_of.html
/trunk/libs/fusion/doc/html/fusion/iterator/metafunctions/value_of_data.html
 /trunk/libs/fusion/doc/html/fusion/iterator/metafunctions.html
 /trunk/libs/fusion/doc/html/fusion/iterator/operator/operator_equality.html
/trunk/libs/fusion/doc/html/fusion/iterator/operator/operator_inequality.html /trunk/libs/fusion/doc/html/fusion/iterator/operator/operator_unary_star.html
 /trunk/libs/fusion/doc/html/fusion/iterator/operator.html
 /trunk/libs/fusion/doc/html/fusion/iterator.html
 /trunk/libs/fusion/doc/html/fusion/notes.html
 /trunk/libs/fusion/doc/html/fusion/organization.html
 /trunk/libs/fusion/doc/html/fusion/preface.html
 /trunk/libs/fusion/doc/html/fusion/quick_start.html
 /trunk/libs/fusion/doc/html/fusion/references.html
/trunk/libs/fusion/doc/html/fusion/sequence/concepts/associative_sequence.html /trunk/libs/fusion/doc/html/fusion/sequence/concepts/bidirectional_sequence.html
 /trunk/libs/fusion/doc/html/fusion/sequence/concepts/forward_sequence.html
/trunk/libs/fusion/doc/html/fusion/sequence/concepts/random_access_sequence.html
 /trunk/libs/fusion/doc/html/fusion/sequence/concepts.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_c.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/at_key.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/back.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/begin.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/empty.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/end.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/front.html
/trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/has_key.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/size.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions/swap.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/functions.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at.html
/trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_c.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/at_key.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/back.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/begin.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/empty.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/end.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/front.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/has_key.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/size.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/swap.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/value_at.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/value_at_c.html /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions/value_at_key.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic/metafunctions.html
 /trunk/libs/fusion/doc/html/fusion/sequence/intrinsic.html
 /trunk/libs/fusion/doc/html/fusion/sequence/operator/comparison/equal.html
/trunk/libs/fusion/doc/html/fusion/sequence/operator/comparison/greater_than.html /trunk/libs/fusion/doc/html/fusion/sequence/operator/comparison/greater_than_equal.html /trunk/libs/fusion/doc/html/fusion/sequence/operator/comparison/less_than.html /trunk/libs/fusion/doc/html/fusion/sequence/operator/comparison/less_than_equal.html /trunk/libs/fusion/doc/html/fusion/sequence/operator/comparison/not_equal.html
 /trunk/libs/fusion/doc/html/fusion/sequence/operator/comparison.html
 /trunk/libs/fusion/doc/html/fusion/sequence/operator/i_o/in.html
 /trunk/libs/fusion/doc/html/fusion/sequence/operator/i_o/out.html
 /trunk/libs/fusion/doc/html/fusion/sequence/operator/i_o.html
 /trunk/libs/fusion/doc/html/fusion/sequence/operator.html
 /trunk/libs/fusion/doc/html/fusion/sequence.html
 /trunk/libs/fusion/doc/html/fusion/support/category_of.html
 /trunk/libs/fusion/doc/html/fusion/support/deduce.html
 /trunk/libs/fusion/doc/html/fusion/support/deduce_sequence.html
 /trunk/libs/fusion/doc/html/fusion/support/is_sequence.html
 /trunk/libs/fusion/doc/html/fusion/support/is_view.html
 /trunk/libs/fusion/doc/html/fusion/support/pair.html
 /trunk/libs/fusion/doc/html/fusion/support/tag_of.html
 /trunk/libs/fusion/doc/html/fusion/support.html
/trunk/libs/fusion/doc/html/fusion/tuple/class_template_tuple/construction.html /trunk/libs/fusion/doc/html/fusion/tuple/class_template_tuple/element_access.html /trunk/libs/fusion/doc/html/fusion/tuple/class_template_tuple/relational_operators.html /trunk/libs/fusion/doc/html/fusion/tuple/class_template_tuple/tuple_creation_functions.html /trunk/libs/fusion/doc/html/fusion/tuple/class_template_tuple/tuple_helper_classes.html
 /trunk/libs/fusion/doc/html/fusion/tuple/class_template_tuple.html
 /trunk/libs/fusion/doc/html/fusion/tuple/pairs.html
 /trunk/libs/fusion/doc/html/fusion/tuple.html
 /trunk/libs/fusion/doc/html/fusion/view/filter_view.html
 /trunk/libs/fusion/doc/html/fusion/view/iterator_range.html
 /trunk/libs/fusion/doc/html/fusion/view/joint_view.html
 /trunk/libs/fusion/doc/html/fusion/view/nview.html
 /trunk/libs/fusion/doc/html/fusion/view/reverse_view.html
 /trunk/libs/fusion/doc/html/fusion/view/single_view.html
 /trunk/libs/fusion/doc/html/fusion/view/transform_view.html
 /trunk/libs/fusion/doc/html/fusion/view/zip_view.html
 /trunk/libs/fusion/doc/html/fusion/view.html
 /trunk/libs/fusion/doc/html/index.html
 /trunk/libs/fusion/doc/view.qbk
 /trunk/libs/fusion/test/Jamfile
 /trunk/libs/fusion/test/algorithm/all.cpp
 /trunk/libs/fusion/test/algorithm/any.cpp
 /trunk/libs/fusion/test/algorithm/fold.cpp
 /trunk/libs/fusion/test/algorithm/none.cpp
 /trunk/libs/fusion/test/functional/unfused_typed.cpp
 /trunk/libs/fusion/test/sequence/adapt_assoc_class.cpp
 /trunk/libs/fusion/test/sequence/adapt_assoc_class_named.cpp
 /trunk/libs/fusion/test/sequence/adapt_assoc_struct.cpp
 /trunk/libs/fusion/test/sequence/adapt_assoc_struct_named.cpp
 /trunk/libs/fusion/test/sequence/adapt_assoc_tpl_class.cpp
 /trunk/libs/fusion/test/sequence/adapt_assoc_tpl_struct.cpp
 /trunk/libs/fusion/test/sequence/adapt_class.cpp
 /trunk/libs/fusion/test/sequence/adapt_class_named.cpp
 /trunk/libs/fusion/test/sequence/adapt_struct.cpp
 /trunk/libs/fusion/test/sequence/adapt_struct_named.cpp
 /trunk/libs/fusion/test/sequence/adapt_tpl_class.cpp
 /trunk/libs/fusion/test/sequence/adapt_tpl_struct.cpp
 /trunk/libs/fusion/test/sequence/cons.cpp
 /trunk/libs/fusion/test/sequence/define_assoc_struct.cpp
 /trunk/libs/fusion/test/sequence/define_assoc_tpl_struct.cpp
 /trunk/libs/fusion/test/sequence/define_struct.cpp
 /trunk/libs/fusion/test/sequence/define_tpl_struct.cpp
 /trunk/libs/fusion/test/sequence/filter_view.cpp
 /trunk/libs/fusion/test/sequence/iterator_range.cpp
 /trunk/libs/fusion/test/sequence/joint_view.cpp
 /trunk/libs/fusion/test/sequence/map.cpp
 /trunk/libs/fusion/test/sequence/misc.hpp
 /trunk/libs/fusion/test/sequence/nview.cpp
 /trunk/libs/fusion/test/sequence/set.cpp
 /trunk/libs/fusion/test/sequence/tr1_tuple_auto_conv.cpp
 /trunk/libs/fusion/todo.txt

=======================================
--- /dev/null
+++ /trunk/libs/detail/utf8_codecvt_facet.cpp   Sun Aug 22 23:21:17 2010
@@ -0,0 +1,285 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// utf8_codecvt_facet.cpp
+
+// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@xxxxxxxxxx)
+// Andrew Lumsdaine, Indiana University (lums@xxxxxxxxxx).
+// 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)
+
+// Please see the comments in <boost/detail/utf8_codecvt_facet.hpp> to
+// learn how this file should be used.
+
+#include <boost/detail/utf8_codecvt_facet.hpp>
+
+#include <cstdlib> // for multi-byte converson routines
+#include <cassert>
+
+#include <boost/limits.hpp>
+#include <boost/config.hpp>
+
+// If we don't have wstring, then Unicode support
+// is not available anyway, so we don't need to even
+// compiler this file. This also fixes the problem
+// with mingw, which can compile this file, but will
+// generate link error when building DLL.
+#ifndef BOOST_NO_STD_WSTRING
+
+BOOST_UTF8_BEGIN_NAMESPACE
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation for wchar_t
+
+// Translate incoming UTF-8 into UCS-4
+std::codecvt_base::result utf8_codecvt_facet::do_in(
+    std::mbstate_t& /*state*/,
+    const char * from,
+    const char * from_end,
+    const char * & from_next,
+    wchar_t * to,
+    wchar_t * to_end,
+    wchar_t * & to_next
+) const {
+    // Basic algorithm:  The first octet determines how many
+    // octets total make up the UCS-4 character.  The remaining
+    // "continuing octets" all begin with "10". To convert, subtract
+    // the amount that specifies the number of octets from the first
+    // octet.  Subtract 0x80 (1000 0000) from each continuing octet,
+    // then mash the whole lot together.  Note that each continuing
+    // octet only uses 6 bits as unique values, so only shift by
+    // multiples of 6 to combine.
+    while (from != from_end && to != to_end) {
+
+        // Error checking   on the first octet
+        if (invalid_leading_octet(*from)){
+            from_next = from;
+            to_next = to;
+            return std::codecvt_base::error;
+        }
+
+        // The first octet is   adjusted by a value dependent upon
+        // the number   of "continuing octets" encoding the character
+        const   int cont_octet_count = get_cont_octet_count(*from);
+        const   wchar_t octet1_modifier_table[] =   {
+            0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc
+        };
+
+        // The unsigned char conversion is necessary in case char is
+        // signed   (I learned this the hard way)
+        wchar_t ucs_result =
+ (unsigned char)(*from++) - octet1_modifier_table[cont_octet_count];
+
+        // Invariants   :
+ // 1) At the start of the loop, 'i' continuing characters have been
+        //    processed
+ // 2) *from points to the next continuing character to be processed.
+        int i   = 0;
+        while(i != cont_octet_count && from != from_end) {
+
+            // Error checking on continuing characters
+            if (invalid_continuing_octet(*from)) {
+                from_next   = from;
+                to_next =   to;
+                return std::codecvt_base::error;
+            }
+
+            ucs_result *= (1 << 6);
+
+ // each continuing character has an extra (10xxxxxx)b attached to
+            // it that must be removed.
+            ucs_result += (unsigned char)(*from++) - 0x80;
+            ++i;
+        }
+
+        // If   the buffer ends with an incomplete unicode character...
+        if (from == from_end && i   != cont_octet_count) {
+            // rewind "from" to before the current character translation
+            from_next = from - (i+1);
+            to_next = to;
+            return std::codecvt_base::partial;
+        }
+        *to++   = ucs_result;
+    }
+    from_next = from;
+    to_next = to;
+
+    // Were we done converting or did we run out of destination space?
+    if(from == from_end) return std::codecvt_base::ok;
+    else return std::codecvt_base::partial;
+}
+
+std::codecvt_base::result utf8_codecvt_facet::do_out(
+    std::mbstate_t& /*state*/,
+    const wchar_t *   from,
+    const wchar_t * from_end,
+    const wchar_t * & from_next,
+    char * to,
+    char * to_end,
+    char * & to_next
+) const
+{
+    // RG - consider merging this table with the other one
+    const wchar_t octet1_modifier_table[] = {
+        0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc
+    };
+
+    wchar_t max_wchar = (std::numeric_limits<wchar_t>::max)();
+    while (from != from_end && to != to_end) {
+
+        // Check for invalid UCS-4 character
+        if (*from  > max_wchar) {
+            from_next = from;
+            to_next = to;
+            return std::codecvt_base::error;
+        }
+
+        int cont_octet_count = get_cont_octet_out_count(*from);
+
+        // RG  - comment this formula better
+        int shift_exponent = (cont_octet_count) *   6;
+
+        // Process the first character
+        *to++ = static_cast<char>(octet1_modifier_table[cont_octet_count] +
+            (unsigned char)(*from / (1 << shift_exponent)));
+
+        // Process the continuation characters
+        // Invariants: At   the start of the loop:
+        //   1) 'i' continuing octets   have been generated
+        //   2) '*to'   points to the next location to place an octet
+        //   3) shift_exponent is   6 more than needed for the next octet
+        int i   = 0;
+        while   (i != cont_octet_count && to != to_end) {
+            shift_exponent -= 6;
+ *to++ = static_cast<char>(0x80 + ((*from / (1 << shift_exponent)) % (1 << 6)));
+            ++i;
+        }
+        // If   we filled up the out buffer before encoding the character
+        if(to   == to_end && i != cont_octet_count) {
+            from_next = from;
+            to_next = to - (i+1);
+            return std::codecvt_base::partial;
+        }
+        ++from;
+    }
+    from_next = from;
+    to_next = to;
+    // Were we done or did we run out of destination space
+    if(from == from_end) return std::codecvt_base::ok;
+    else return std::codecvt_base::partial;
+}
+
+// How many char objects can I process to get <= max_limit
+// wchar_t objects?
+int utf8_codecvt_facet::do_length(
+    BOOST_CODECVT_DO_LENGTH_CONST std::mbstate_t &,
+    const char * from,
+    const char * from_end,
+    std::size_t max_limit
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+) const throw()
+#else
+) const
+#endif
+{
+    // RG - this code is confusing!  I need a better way to express it.
+    // and test cases.
+
+    // Invariants:
+    // 1) last_octet_count has the size of the last measured character
+    // 2) char_count holds the number of characters shown to fit
+    // within the bounds so far (no greater than max_limit)
+    // 3) from_next points to the octet 'last_octet_count' before the
+    // last measured character.
+    int last_octet_count=0;
+    std::size_t char_count = 0;
+    const char* from_next = from;
+    // Use "<" because the buffer may represent incomplete characters
+ while (from_next+last_octet_count <= from_end && char_count <= max_limit) {
+        from_next += last_octet_count;
+        last_octet_count = (get_octet_count(*from_next));
+        ++char_count;
+    }
+    return static_cast<int>(from_next-from_end);
+}
+
+unsigned int utf8_codecvt_facet::get_octet_count(
+    unsigned char   lead_octet
+){
+    // if the 0-bit (MSB) is 0, then 1 character
+    if (lead_octet <= 0x7f) return 1;
+
+    // Otherwise the count number of consecutive 1 bits starting at MSB
+//    assert(0xc0 <= lead_octet && lead_octet <= 0xfd);
+
+    if (0xc0 <= lead_octet && lead_octet <= 0xdf) return 2;
+    else if (0xe0 <= lead_octet && lead_octet <= 0xef) return 3;
+    else if (0xf0 <= lead_octet && lead_octet <= 0xf7) return 4;
+    else if (0xf8 <= lead_octet && lead_octet <= 0xfb) return 5;
+    else return 6;
+}
+BOOST_UTF8_END_NAMESPACE
+
+namespace {
+template<std::size_t s>
+int get_cont_octet_out_count_impl(wchar_t word){
+    if (word < 0x80) {
+        return 0;
+    }
+    if (word < 0x800) {
+        return 1;
+    }
+    return 2;
+}
+
+template<>
+int get_cont_octet_out_count_impl<4>(wchar_t word){
+    if (word < 0x80) {
+        return 0;
+    }
+    if (word < 0x800) {
+        return 1;
+    }
+
+ // Note that the following code will generate warnings on some platforms + // where wchar_t is defined as UCS2. The warnings are superfluous as the
+    // specialization is never instantitiated with such compilers, but this
+ // can cause problems if warnings are being treated as errors, so we guard + // against that. Including <boost/detail/utf8_codecvt_facet.hpp> as we do
+    // should be enough to get WCHAR_MAX defined.
+#if !defined(WCHAR_MAX)
+#   error WCHAR_MAX not defined!
+#endif
+    // cope with VC++ 7.1 or earlier having invalid WCHAR_MAX
+#if defined(_MSC_VER) && _MSC_VER <= 1310 // 7.1 or earlier
+    return 2;
+#elif WCHAR_MAX > 0x10000
+
+   if (word < 0x10000) {
+        return 2;
+    }
+    if (word < 0x200000) {
+        return 3;
+    }
+    if (word < 0x4000000) {
+        return 4;
+    }
+    return 5;
+
+#else
+    return 2;
+#endif
+}
+
+} // namespace anonymous
+
+BOOST_UTF8_BEGIN_NAMESPACE
+// How many "continuing octets" will be needed for this word
+// ==   total octets - 1.
+int utf8_codecvt_facet::get_cont_octet_out_count(
+    wchar_t word
+) const {
+    return get_cont_octet_out_count_impl<sizeof(wchar_t)>(word);
+}
+BOOST_UTF8_END_NAMESPACE
+
+#endif
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v2/build/Jamfile.v2  Sun Aug 22 23:21:17 2010
@@ -0,0 +1,31 @@
+# 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
+ : usage-requirements # pass these requirement to dependents (i.e. users)
+      <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
+    ;
+
+SOURCES =
+    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
+    :
+ : # Boost.Filesystem uses some of Boost.System functions in inlined/templated + # functions, so clients that use Boost.Filesystem will have direct references + # to Boost.System symbols. On Windows, Darwin, and some other platforms, this + # means those clients have to be directly linked to Boost.System. For static + # linking this happens anyway, but for shared we need to make it happen. Since + # doing so is harmless even when not needed, we do it for all platforms.
+      <link>shared:<library>../../system/build//boost_system
+    ;
+
+boost-install boost_filesystem ;
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/build/Jamfile.v2  Sun Aug 22 23:21:17 2010
@@ -0,0 +1,32 @@
+# 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
+ : usage-requirements # pass these requirement to dependents (i.e. users)
+      <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
+    ;
+
+SOURCES =
+ operations path path_traits portability unique_path utf8_codecvt_facet windows_file_codecvt codecvt_error_category ;
+
+lib boost_filesystem
+    : $(SOURCES).cpp ../../system/build//boost_system
+ : <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1 # tell source we're building dll's
+    :
+ : # Boost.Filesystem uses some of Boost.System functions in inlined/templated + # functions, so clients that use Boost.Filesystem will have direct references + # to Boost.System symbols. On Windows, Darwin, and some other platforms, this + # means those clients have to be directly linked to Boost.System. For static + # linking this happens anyway, but for shared we need to make it happen. Since + # doing so is harmless even when not needed, we do it for all platforms.
+      <link>shared:<library>../../system/build//boost_system
+    ;
+
+boost-install boost_filesystem ;
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/Jamfile.v2    Sun Aug 22 23:21:17 2010
@@ -0,0 +1,19 @@
+# Boost Filesystem Library Example Jamfile
+
+# Copyright Beman Dawes 2010
+
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+    : requirements
+      <library>/boost/filesystem//boost_filesystem
+      <library>/boost/system//boost_system
+      <toolset>msvc:<asynch-exceptions>on
+      <link>static
+    ;
+
+exe path_table : path_table.cpp ;
+install path_table-copy : path_table : <location>. ;
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/POSIX_filename_encoding.txt Sun Aug 22 23:21:17 2010
@@ -0,0 +1,55 @@
+http://www.linuxfromscratch.org/blfs/view/svn/introduction/locale-issues.html
+
+"The POSIX standard mandates that the filename encoding is the encoding implied by the current LC_CTYPE locale category."
+
+-------
+
+http://mail.nl.linux.org/linux-utf8/2001-02/msg00103.html
+
+From: Markus Kuhn
+
+Tom Tromey wrote on 2001-02-05 00:36 UTC:
+> Kai> IMAO, a *real* filesystem should use some encoding of ISO 10646 -
+> Kai> UTF-8, UTF-16, or UTF-32 are all viable options. The same should
+> Kai> be true for the kernel filename interfaces.
+>
+> I like this, but what should I do right now?
+
+The POSIX kernel file system interface is engraved into stone and
+extremely unlikely to change. File names are arbitrary binary strings,
+with only the '/' and '\0' bytes having any special semantics. You can
+use arbitrary coded character sets on it as long as they do not
+introduce '/' and '\0' bytes spuriously. Writers and readers have to
+somehow agree on what encoding to use and the only really practical way
+is to use the same encoding on all systems that share files. Eventually,
+everyone will be using UTF-8 for file names on POSIX systems. Right now,
+I would recommend users to use only ASCII for filenames, as this is
+already UTF-8 and therefore simplifies migration. Using the ISO 8859,
+JIS, etc. filenames should soon be considered deprecated practice.
+
+> I work on libgcj, the runtime component of gcj, the Java front end to
+> GCC.  In libgcj of course we use UCS-2 everywhere, since that is what
+> Java does.  Currently, for Unixy systems, we assume that all file
+> names are UTF-8.
+
+The best solution is to assume that the file names are in the
+locale-specific multi-byte encoding. Simply use mbrtowc and wcrtomb to
+convert between Unicode and the locale-dependent multi-byte encoding
+used in file names and text files if the ISO C 99 symbol
+__STDC_ISO_10646__ is defined (which guarantees that wchar_t = UCS). On
+Linux, this has been the case since glibc 2.2.
+
+> (Actually, we do something notably worse, which is
+> assume that file names are Java-style UTF-8, with the weird encoding
+> for \u0000.)
+
+\u0000 = NUL was never a character allowed in filenames under POSIX.
+Raise an exception if someone tries to use it in a filename. Problem
+solved.
+
+I never understood, why Java found it necessary to introduce two
+distinct ASCII NUL characters.
+
+------
+
+Interesting idea. Use iconv to create shift-jis or other mbcs test cases.
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/deprecated.html       Sun Aug 22 23:21:17 2010
@@ -0,0 +1,385 @@
+<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 Deprecated Features</title>
+<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../../index.htm">
+<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Deprecated Features</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="../../../../index.htm">Boost Home</a> &nbsp;&nbsp;
+    <a href="index.htm">Library Home</a> &nbsp;&nbsp;
+    <a href="reference.html">Reference</a> &nbsp;&nbsp;
+    <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
+    <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
+    <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
+    <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
+    <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
+    <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
+    </td>
+</table>
+
+<h2><a name="Deprecated-names">Deprecated names</a> and features</h2>
+<p style="font-size: 10pt">As the library evolves over time, names sometimes +change or old features are removed to make way for new features. To ease transition, Boost.Filesystem deprecates +the old names and features, but by default continues to provide many of them. +The deprecated names and other workarounds can be suppressed by defining macro <code> +BOOST_FILESYSTEM_NO_DEPRECATED</code>, and this is recommended for all new code.</p> +<p style="font-size: 10pt">In the table, &#10004; indicates a synonym or other
+workaround is provided unless <code>
+BOOST_FILESYSTEM_NO_DEPRECATED</code> is defined.</p>
+<table border="1" cellpadding="5" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <b><i>Component or location</i></b></td>
+    <td style="font-size: 10pt" valign="top">
+    <p style="font-size: 10pt"><b><i>Old name, now deprecated</i></b></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <p style="font-size: 10pt"><b><i>New name</i></b></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+ <td style="font-size: 10pt" valign="top"><code>branch_path()</code></td>
+    <td style="font-size: 10pt" valign="top">&#10004;</td>
+ <td style="font-size: 10pt" valign="top"><code>parent_path()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>canonize()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &nbsp;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>default_name_check()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>default_name_check(name_check)</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>default_name_check_writable()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+ <td style="font-size: 10pt" valign="top"><code>directory_string()</code></td>
+    <td style="font-size: 10pt" valign="top">&#10004;</td>
+    <td style="font-size: 10pt" valign="top"><code>string</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+ <td style="font-size: 10pt" valign="top"><code>external_directory_string()</code></td>
+    <td style="font-size: 10pt" valign="top">&#10004;</td>
+    <td style="font-size: 10pt" valign="top"><code>native()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+ <td style="font-size: 10pt" valign="top"><code>external_file_string()</code></td>
+    <td style="font-size: 10pt" valign="top">&#10004;</td>
+    <td style="font-size: 10pt" valign="top"><code>native()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+ <td style="font-size: 10pt" valign="top"><code>file_string()</code></td>
+    <td style="font-size: 10pt" valign="top">&#10004;</td>
+    <td style="font-size: 10pt" valign="top"><code>string()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+ <td style="font-size: 10pt" valign="top"><code>has_branch_path()</code></td>
+    <td style="font-size: 10pt" valign="top">&#10004;</td>
+ <td style="font-size: 10pt" valign="top"><code>has_parent_path()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>has_leaf()</code></td>
+    <td style="font-size: 10pt" valign="top">&#10004;</td>
+ <td style="font-size: 10pt" valign="top"><code>has_filename()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+ <td style="font-size: 10pt" valign="top"><code>is_complere()</code></td>
+    <td style="font-size: 10pt" valign="top">&#10004;</td>
+ <td style="font-size: 10pt" valign="top"><code>is_absolute()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>leaf()</code></td>
+    <td style="font-size: 10pt" valign="top">&#10004;</td>
+    <td style="font-size: 10pt" valign="top"><code>filename()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>native_directory_string()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>string()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>native_file_string()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>string()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>normalize()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>path(const string_type&amp; str, name_check)</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed. Workaround ignores </i><code>name_check</code><i>
+    argument.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+ <code>path(const string_type::value_type* s,&nbsp; name_check)</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed. Workaround ignores </i><code>name_check</code><i>
+    argument.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <p style="font-size: 10pt"><code>remove_leaf()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <p style="font-size: 10pt"><code>remove_filename()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>path.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>template&lt;class String, class Traits&gt;<br>
+&nbsp; class basic_path;</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &nbsp;</td>
+    <td style="font-size: 10pt" valign="top">
+ Class template <code>basic_path</code> is replaced by <code>class path</code>. + No workaround for an explicitly coded <code>basic_path</code> is provided,
+    but see the next row - <code>path</code>.</td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>path.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+ <code>typedef basic_path&lt;std::string, path_traits&gt; path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>path.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+ <code>typedef basic_path&lt;std::wstring, wpath_traits&gt; wpath</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+ <i>Removed; use </i><code>class path</code><i> instead. Workaround provides
+    </i><code>typedef path wpath</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>operations.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>initial_path()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>operations.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <p dir="ltr"><code>template &lt;class Path&gt;<br>
+    Path complete(const Path&amp; p,<br>
+&nbsp;const Path&amp; base=<br>
+&nbsp;&nbsp; initial_path&lt;Path&gt;())</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+ <p dir="ltr"><code>path absolute(const path&amp; p, const path&amp; base=<br>
+&nbsp; current_path())</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>operations.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>is_regular(file_status f)</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+    <p dir="ltr">
+    <code>is_regular_file(file_status f)</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>operations.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>symbolic_link_exists(const path&amp; ph)</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &nbsp;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class directory_entry</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>filename()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+ <i>Function removed, use </i><code>path().filename()</code><i> instead.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class directory_entry</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>leaf()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+ <i>Function removed, use </i><code>path().filename()</code><i> instead.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class directory_entry</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>string()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &#10004;</td>
+    <td style="font-size: 10pt" valign="top">
+ <i>Function removed, use </i><code>path().string()</code><i> instead.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    Macro definitions</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>BOOST_WINDOW_API</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &nbsp;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>No longer supported; API selection is always automatic.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    Macro definitions</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>BOOST_POSIX_API</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &nbsp;</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>No longer supported; API selection is always automatic.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    Macro definitions</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>BOOST_WINDOW_PATH</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &nbsp;</td>
+    <td style="font-size: 10pt" valign="top">
+ <i>No longer supported; native path format selection is always automatic.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    Macro definitions</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>BOOST_POSIX_PATH</code></td>
+    <td style="font-size: 10pt" valign="top">
+    &nbsp;</td>
+    <td style="font-size: 10pt" valign="top">
+ <i>No longer supported; native path format selection is always automatic.</i></td>
+  </tr>
+</table>
+
+<h2>Deprecation rationale</h2>
+<h3><code>initial_path</code> function</h3>
+<p dir="ltr">Full implementation of <code>initial_path()</code> would require
+support from the C++ runtime startup code, and that doesn't seem likely to
+happen. Depending on the user to call <code>initial_path()</code> at the
+beginning of <code>main()</code> is too error prone.&nbsp; An equivalent
+function can trivially be provided by a user.</p>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->02 July, 2010<!--webbot bot="Timestamp" endspan i-checksum="21056" --></p>
+
+<p>&copy; Copyright Beman Dawes, 2002-2005, 2010</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>
+
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/design.htm    Sun Aug 22 23:21:17 2010
@@ -0,0 +1,353 @@
+<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>Boost Filesystem Library Design</title>
+<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+</head>
+
+<body bgcolor="#FFFFFF">
+
+<h1>
+<img border="0" src="../../../../boost.png" align="center" width="277" height="86">Filesystem
+Library Design</h1>
+
+<p><a href="#Introduction">Introduction</a><br>
+<a href="#Requirements">Requirements</a><br>
+<a href="#Realities">Realities</a><br>
+<a href="#Rationale">Rationale</a><br>
+<a href="#Abandoned_Designs">Abandoned_Designs</a><br>
+<a href="#References">References</a></p>
+
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>The primary motivation for beginning work on the Filesystem Library was
+frustration with Boost administrative tools.&nbsp; Scripts were written in
+Python, Perl, Bash, and Windows command languages.&nbsp; There was no single +scripting language familiar and acceptable to all Boost administrators. Yet they +were all skilled C++ programmers - why couldn't C++ be used as the scripting
+language?</p>
+
+<p>The key feature C++ lacked for script-like applications was the ability to +perform portable filesystem operations on directories and their contents. The
+Filesystem Library was developed to fill that void.</p>
+
+<p>The intent is not to compete with traditional scripting languages, but to
+provide a solution for situations where C++ is already the language
+of choice..</p>
+
+<h2><a name="Requirements">Requirements</a></h2>
+<ul>
+ <li>Be able to write portable script-style filesystem operations in modern
+  C++.<br>
+  <br>
+  Rationale: This is a common programming need. It is both an
+ embarrassment and a hardship that this is not possible with either the current
+  C++ or Boost libraries.&nbsp; The need is particularly acute
+  when C++ is the only toolset allowed in the tool chain.&nbsp; File system
+ operations are provided by many languages&nbsp;used on multiple platforms,
+  such as Perl and Python, as well as by many platform specific scripting
+  languages. All operating systems provide some form of API for filesystem
+  operations, and the POSIX bindings are increasingly available even on
+ operating systems not normally associated with POSIX, such as the Mac, z/OS,
+  or OS/390.<br>
+&nbsp;</li>
+ <li>Work within the <a href="#Realities">realities</a> described below.<br>
+  <br>
+ Rationale: This isn't a research project. The need is for something that works on
+  today's platforms, including some of the embedded operating systems
+  with limited file systems. Because of the emphasis on portability, such a
+ library would be much more useful if standardized. That means being able to + work with a much wider range of platforms that just Unix or Windows and their
+  clones.<br>
+&nbsp;</li>
+ <li>Avoid dangerous programming practices. Particularly, all-too-easy-to-ignore error notifications + and use of global variables.&nbsp;If a dangerous feature is provided, identify it as such.<br>
+  <br>
+ Rationale: Normally this would be covered by &quot;the usual Boost requirements...&quot;,
+  but it is mentioned explicitly because the equivalent native platform and
+ scripting language interfaces often depend on all-too-easy-to-ignore error
+  notifications and global variables like &quot;current
+  working directory&quot;.<br>
+&nbsp;</li>
+ <li>Structure the library so that it is still useful even if some functionality + does not map well onto a given platform or directory tree. Particularly, much
+  useful functionality should be portable even to flat
+(non-hierarchical) filesystems.<br>
+  <br>
+  Rationale: Much functionality which does not
+ require a hierarchical directory structure is still useful on flat-structure
+  filesystems.&nbsp; There are many systems, particularly embedded systems,
+  where even very limited functionality is still useful.</li>
+</ul>
+<ul>
+  <li>Interface smoothly with current C++ Standard Library input/output
+  facilities.&nbsp; For example, paths should be
+  easy to use in std::basic_fstream constructors.<br>
+  <br>
+  Rationale: One of the most common uses of file system functionality is to
+  manipulate paths for eventual use in input/output operations.&nbsp;
+  Thus the need to interface smoothly with standard library I/O.<br>
+&nbsp;</li>
+ <li>Suitable for eventual standardization. The implication of this requirement
+  is that the interface be close to minimal, and that great care be take
+  regarding portability.<br>
+  <br>
+  Rationale: The lack of file system operations is a serious hole
+ in the current standard, with no other known candidates to fill that hole. + Libraries with elaborate interfaces and difficult to port specifications are much less likely to be accepted for
+  standardization.<br>
+&nbsp;</li>
+ <li>The usual Boost <a href="http://www.boost.org/more/lib_guide.htm";>requirements and
+  guidelines</a> apply.<br>
+&nbsp;</li>
+  <li>Encourage, but do not require, portability in path names.<br>
+  <br>
+ Rationale: For paths which originate from user input it is unreasonable to
+  require portable path syntax.<br>
+&nbsp;</li>
+ <li>Avoid giving the illusion of portability where portability in fact does not
+  exist.<br>
+  <br>
+ Rationale: Leaving important behavior unspecified or &quot;implementation defined&quot; does a + great disservice to programmers using a library because it makes it appear + that code relying on the behavior is portable, when in fact there is nothing + portable about it. The only case where such under-specification is acceptable is when both users and implementors know from + other sources exactly what behavior is required, yet for some reason it isn't
+  possible to specify it exactly.</li>
+</ul>
+<h2><a name="Realities">Realities</a></h2>
+<ul>
+  <li>Some operating systems have a single directory tree root, others have
+  multiple roots.<br>
+&nbsp;</li>
+ <li>Some file systems provide both a long and short form of filenames.<br>
+&nbsp;</li>
+  <li>Some file systems have different syntax for file paths and directory
+  paths.<br>
+&nbsp;</li>
+  <li>Some file systems have different rules for valid file names and valid
+  directory names.<br>
+&nbsp;</li>
+ <li>Some file systems (ISO-9660, level 1, for example) use very restricted
+  (so-called 8.3) file names.<br>
+&nbsp;</li>
+  <li>Some operating systems allow file systems with different
+ characteristics to be &quot;mounted&quot; within a directory tree.&nbsp; Thus a
+  ISO-9660 or Windows
+  file system may end up as a sub-tree of a POSIX directory tree.<br>
+&nbsp;</li>
+ <li>Wide-character versions of directory and file operations are available on some operating
+  systems, and not available on others.<br>
+&nbsp;</li>
+ <li>There is no law that says directory hierarchies have to be specified in
+  terms of left-to-right decent from the root.<br>
+&nbsp;</li>
+ <li>Some file systems have a concept of file &quot;version number&quot; or &quot;generation
+  number&quot;.&nbsp; Some don't.<br>
+&nbsp;</li>
+ <li>Not all operating systems use single character separators in path names.&nbsp; Some use
+  paired notations. A typical fully-specified OpenVMS filename
+  might look something like this:<br>
+  <br>
+ <code>&nbsp;&nbsp; DISK$SCRATCH:[GEORGE.PROJECT1.DAT]BIG_DATA_FILE.NTP;5<br>
+  </code><br>
+  The general OpenVMS format is:<br>
+  <br>
+&nbsp;&nbsp;&nbsp;&nbsp;
+ <i>Device:[directories.dot.separated]filename.extension;version_number</i><br>
+&nbsp;</li>
+  <li>For common file systems, determining if two descriptors are for same
+ entity is extremely difficult or impossible.&nbsp; For example, the concept of + equality can be different for each portion of a path - some portions may be + case or locale sensitive, others not. Case sensitivity is a property of the + pathname itself, and not the platform. Determining collating sequence is even
+  worse.<br>
+&nbsp;</li>
+ <li>Race-conditions may occur. Directory trees, directories, files, and file attributes are in effect shared between all threads, processes, and computers which have access to the + filesystem.&nbsp; That may well include computers on the other side of the + world or in orbit around the world. This implies that file system operations
+  may fail in unexpected ways.&nbsp;For example:<br>
+  <br>
+ <code>&nbsp;&nbsp;&nbsp;&nbsp; assert( exists(&quot;foo&quot;) == exists(&quot;foo&quot;) );
+  // may fail!<br>
+&nbsp;&nbsp;&nbsp;&nbsp; assert( is_directory(&quot;foo&quot;) == is_directory(&quot;foo&quot;);
+  // may fail!<br>
+  </code><br>
+  In the first example, the file may have been deleted between calls to
+ exists().&nbsp; In the second example, the file may have been deleted and then + replaced by a directory of the same name between the calls to is_directory().<br>
+&nbsp;</li>
+ <li>Even though an application may be portable, it still will have to traffic
+  in system specific paths occasionally; user provided input is a common
+  example.<br>
+&nbsp;</li>
+ <li><a name="symbolic-link-use-case">Symbolic</a> links cause canonical and + normal form of some paths to represent different files or directories. For + example, given the directory hierarchy <code>/a/b/c</code>, with a symbolic + link in <code>/a</code> named <code>x</code>&nbsp; pointing to <code>b/c</code>, + then under POSIX Pathname Resolution rules a path of <code>&quot;/a/x/..&quot;</code> + should resolve to <code>&quot;/a/b&quot;</code>. If <code>&quot;/a/x/..&quot;</code> were first + normalized to <code>&quot;/a&quot;</code>, it would resolve incorrectly. (Case supplied
+  by Walter Landry.)</li>
+</ul>
+
+<h2><a name="Rationale">Rationale</a></h2>
+
+<p>The <a href="#Requirements">Requirements</a> and <a href="#Realities">
+Realities</a> above drove much of the C++ interface design.&nbsp; In particular,
+the desire to make script-like code straightforward caused a great deal of
+effort to go into ensuring that apparently simple expressions like <i>exists( &quot;foo&quot;
+)</i> work as expected.</p>
+
+<p>See the <a href="faq.htm">FAQ</a> for the rationale behind many detailed
+design decisions.</p>
+
+<p>Several key insights went into the <i>path</i> class design:</p>
+<ul>
+ <li>Decoupling of the input formats, internal conceptual (<i>vector&lt;string&gt;</i>
+  or other sequence)
+  model, and output formats.</li>
+  <li>Providing two input formats (generic and O/S specific) broke a major
+  design deadlock.</li>
+  <li>Providing several output formats solved another set of previously
+  intractable problems.</li>
+ <li>Several non-obvious functions (particularly decomposition and composition)
+  are required to support portable code. (Peter Dimov, Thomas Witt, Glen
+  Knowles, others.)</li>
+</ul>
+
+<p>Error checking was a particularly difficult area. One key insight was that
+with file and directory names, portability isn't a universal truth.&nbsp;
+Rather, the programmer must think out the question &quot;What operating systems do I +want this path to be portable to?&quot;&nbsp; By providing support for several +answers to that question, the Filesystem Library alerts programmers of the need
+to ask it in the first place.</p>
+<h2><a name="Abandoned_Designs">Abandoned Designs</a></h2>
+<h3>operations.hpp</h3>
+<p>Dietmar Kühl's original dir_it design and implementation supported
+wide-character file and directory names. It was abandoned after extensive
+discussions among Library Working Group members failed to identify portable
+semantics for wide-character names on systems not providing native support. See
+<a href="faq.htm#wide-character_names">FAQ</a>.</p>
+<p>Previous iterations of the interface design used explicitly named functions providing a
+large number of convenience operations, with no compile-time or run-time
+options. There were so many function names that they were very confusing to use, +and the interface was much larger. Any benefits seemed theoretical rather than
+real. </p>
+<p>Designs based on compile time (rather than runtime) flag and option selection +(via policy, enum, or int template parameters) became so complicated that they +were abandoned, often after investing quite a bit of time and effort. The need +to qualify attribute or option names with namespaces, even aliases, made use in +template parameters ugly; that wasn't fully appreciated until actually writing
+real code.</p>
+<p>Yet another set of convenience functions ( for example, <i>remove</i> with
+permissive, prune, recurse, and other options, plus predicate, and possibly
+other, filtering features) were abandoned because the details became both
+complex and contentious.</p>
+
+<p>What is left is a toolkit of low-level operations from which the user can
+create more complex convenience operations, plus a very small number of
+convenience functions which were found to be useful enough to justify inclusion.</p>
+
+<h3>path.hpp</h3>
+
+<p>There were so many abandoned path designs, I've lost track. Policy-based
+class templates in several flavors, constructor supplied runtime policies,
+operation specific runtime policies, they were all considered, often
+implemented, and ultimately abandoned as far too complicated for any small
+benefits observed.</p>
+
+<p>Additional design considerations apply to <a href="v3_design.html">Internationalization</a>. </p>
+
+<h3>error checking</h3>
+
+<p>A number of designs for the error checking machinery were abandoned, some +after experiments with implementations. Totally automatic error checking was +attempted in particular. But automatic error checking tended to make the overall
+library design much more complicated.</p>
+
+<p>Some designs associated error checking mechanisms with paths.&nbsp; Some with +operations functions.&nbsp; A policy-based error checking template design was
+partially implemented, then abandoned as too complicated for everyday
+script-like programs.</p>
+
+<p>The final design, which depends partially on explicit error checking function +calls,&nbsp; is much simpler and straightforward, although it does depend to +some extent on programmer discipline.&nbsp; But it should allow programmers who +are concerned about portability to be reasonably sure that their programs will
+work correctly on their choice of target systems.</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="13%" valign="top">[<a name="IBM-01">IBM-01</a>]</td>
+    <td width="87%">IBM Corporation, <i>z/OS V1R3.0 C/C++ Run-Time
+Library Reference</i>, SA22-7821-02, 2001,
+<a href="http://www-1.ibm.com/servers/eserver/zseries/zos/bkserv/";>
+    www-1.ibm.com/servers/eserver/zseries/zos/bkserv/</a></td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="ISO-9660">ISO-9660</a>]</td>
+    <td width="87%">International Standards Organization, 1988</td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="Kuhn">Kuhn</a>]</td>
+    <td width="87%">UTF-8 and Unicode FAQ for Unix/Linux,
+<a href="http://www.cl.cam.ac.uk/~mgk25/unicode.html";>
+    www.cl.cam.ac.uk/~mgk25/unicode.html</a></td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="MSDN">MSDN</a>] </td>
+    <td width="87%">Microsoft Platform SDK for Windows, Storage Start
+Page,
+<a href="http://msdn.microsoft.com/library/en-us/fileio/base/storage_start_page.asp";> + msdn.microsoft.com/library/en-us/fileio/base/storage_start_page.asp</a></td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="POSIX-01">POSIX-01</a>]</td>
+ <td width="87%">IEEE&nbsp;Std&nbsp;1003.1-2001, ISO/IEC 9945:2002, 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="13%" valign="top">[<a name="URI">URI</a>]</td>
+    <td width="87%">RFC-2396, Uniform Resource Identifiers (URI): Generic
+Syntax, <a href="http://www.ietf.org/rfc/rfc2396.txt";>
+    www.ietf.org/rfc/rfc2396.txt</a></td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="UTF-16">UTF-16</a>]</td>
+    <td width="87%">Wikipedia, UTF-16,
+<a href="http://en.wikipedia.org/wiki/UTF-16";>
+    en.wikipedia.org/wiki/UTF-16</a></td>
+  </tr>
+  <tr>
+ <td width="13%" valign="top">[<a name="Wulf-Shaw-73">Wulf-Shaw-73</a>]</td>
+    <td width="87%">William Wulf, Mary Shaw, <i>Global
+Variable Considered Harmful</i>, ACM SIGPLAN Notices, 8, 2, 1973, pp. 23-34</td>
+  </tr>
+</table>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->18 February, 2010<!--webbot bot="Timestamp" endspan i-checksum="40538" --></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 <a href="http://www.boost.org/LICENSE_1_0.txt";>
+www.boost.org/LICENSE_1_0.txt</a>)</p>
+
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/do_list.html  Sun Aug 22 23:21:17 2010
@@ -0,0 +1,146 @@
+<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>Do List</title>
+<style type="text/css">
+  body    { font-family: sans-serif; margin: 1em; }
+  p, td, li, blockquote { font-size: 10pt; }
+  pre     { font-size: 9pt; }
+</style>
+</head>
+
+<body>
+
+<h1>Boost Filesystem Do List<br>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->24 June 2010<!--webbot bot="Timestamp" endspan i-checksum="17552" --></h1>
+
+<h2>Beta 1 comments</h2>
+<ul>
+  <li dir="ltr">
+
+<p dir="ltr">Zach Laine:</li>
+</ul>
+<blockquote>
+ <pre dir="ltr">The descriptions for portable_name() and portable_directory_name()
+appear to be at odds.
+
+portable_name() : ... &amp;&amp; (name is &quot;.&quot; or &quot;..&quot;, and the first character
+not a period or hyphen)
+
+portable_directory_name(): ... &amp;&amp; (name is &quot;.&quot; or &quot;..&quot; &nbsp;or contains no periods)
+
+Should portable_name() be &quot;... &amp;&amp; (name is &quot;.&quot; or &quot;..&quot;, or contains no +periods) &amp;&amp; (first character not a hyphen)&quot;? &nbsp;Maybe I'm missing
+something?</pre>
+</blockquote>
+<ul>
+  <li dir="ltr">
+<p dir="ltr">Scott McMurray - treat as Wish List:</li>
+</ul>
+<blockquote>
+  <pre dir="ltr">- uncomplete(p, base)
+
+My pet request. &nbsp;It may be useful to simplify other functions as well,
+since there's no current way to go from an absolute path to a relative
+one, meaning that most functions need to handle relative ones even
+when that might not be natural. &nbsp;With this functionality,
+preconditions requiring absolute paths would be less onerous.
+
+&nbsp; &nbsp;Precondition: p.is_absolute() &amp;&amp; base.is_absolute()
+
+&nbsp; &nbsp;Effects: Extracts a path, rp, from p relative to base such that +canonical(p) == complete(rp, base). &nbsp;Any &quot;..&quot; path elements in rp form
+a prefix.
+
+&nbsp; &nbsp;Returns: The extracted path.
+
+&nbsp; &nbsp;Postconditions: For the returned path, rp, rp.is_relative() ==
+(p.root_name() == b.root_name()).
+
+[Notes: This function simplifies paths by omitting context. &nbsp;It is
+particularly useful for serializing paths such that it can be usefully
+moved between hosts where the context may be different, such as inside
+source control trees. &nbsp;It can also be helpful for display to users,
+such as in shells where paths are often shown relative to $HOME.
+
+In the presence of symlinks, the result of this function may differ
+between implementations, as some may expand symlinks that others may
+not. &nbsp;The simplest implementation uses canonical to expand both p and
+base, then removes the common prefix and prepends the requisite &quot;..&quot;
+elements. &nbsp;Smarter implementations will avoid expanding symlinks
+unnecessarily. &nbsp;No implementation is expected to discover new symlinks
+to return paths with fewer elements.]</pre>
+</blockquote>
+<h2 dir="ltr">Docs</h2>
+<ul>
+  <li>Reorganize files - delete examples that no longer apply.</li>
+  <li>Should minimal.css be changed to used relative font sizes? See
+ <a href="http://www.w3schools.com/CSS/pr_font_font-size.asp/";>http://www.w3schools.com/CSS/pr_font_font-size.asp\</a></li> + <li>Document behavior of path::replace_extension has change WRT argument w/o a
+  dot.</li>
+ <li style="font-size: 10pt">Document leading //: no longer treated specially.
+  But is that really correct?</li>
+ <li style="font-size: 10pt">Behavior of root_path() has been changed. Change
+  needs to be propagated to trunk?</li>
+  <li style="font-size: 10pt">Regenerate path decomposition table.</li>
+</ul>
+
+<h2>Code</h2>
+<h3>All</h3>
+<ul>
+  <li style="font-size: 10pt">Move semantics.</li>
+  <li style="font-size: 10pt">Use BOOST_DELETED, BOOST_DEFAULTED, where
+  appropriate.</li>
+  <li style="font-size: 10pt">Other C++0x features.</li>
+</ul>
+<h3>Class path</h3>
+<ul>
+ <li>Windows, POSIX, conversions for char16_t, char32_t for C++0x compilers.</li> + <li>Add Windows Alternate Data Stream test cases. See http://en.wikipedia.org/wiki/NTFS
+  Features.</li>
+ <li>Add test case: relational operators on paths differing only in trailing
+  separator. Rationale?</li>
+ <li>Provide the name check functions for more character types? Templatize?
+  take a path argument?</li>
+  <li style="font-size: 10pt">Add codepage 936/950/etc test cases.</li>
+  <li style="font-size: 10pt">Should UDT's be supported?</li>
+ <li style="font-size: 10pt">Should path iteration to a separator result in:<br>
+  -- the actual separator used<br>
+  -- the preferred separator<br>
+ -- the generic separator &lt;-- makes it easier to write portable code<br>
+  -- a dot</li>
+</ul>
+<h3>Operations</h3>
+<ul>
+  <li>Would complete(), system_complete() be clearer if renamed absolute(),
+  absolute_system() (or absolute_native())?</li>
+ <li>Review all operations.cpp code for race conditions similar to #2925. Fix
+  or document.</li>
+  <li>Enable all BOOST_FILESYSTEM_NO_DEPRECATED code.</li>
+  <li>rename and remove names are problems. If users says &quot;using
+  namespace boost::filesystem&quot;<br>
+ and some header included stdio, there is just too much chance of silent error.</li>
+  <li>create_directories error handling needs work.</li>
+  <li>Fold convenience.hpp into operations.hpp</li>
+ <li>Two argument recursive_directory_iterator ctor isn't recognizing throws(). + Would it be better to fold into a single two argument ctor with default?</li> + <li>Add the push_directory class from tools/release/required_files.cpp</li>
+</ul>
+
+<h3>Miscellaneous</h3>
+<ul>
+ <li style="font-size: 10pt"><i>Regular</i> classes need hash functions.</li>
+</ul>
+
+<hr>
+<p>© Copyright Beman Dawes, 2010</p>
+<p>Distributed under the Boost Software License, Version 1.0. See
+<a href="http://www.boost.org/LICENSE_1_0.txt";>www.boost.org/LICENSE_1_0.txt</a></p>
+
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/faq.htm       Sun Aug 22 23:21:17 2010
@@ -0,0 +1,147 @@
+<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/src/minimal.css">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../../index.htm">
+<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem FAQ</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="../../../../index.htm">Boost Home</a> &nbsp;&nbsp;
+    <a href="index.htm">Library Home</a> &nbsp;&nbsp;
+    <a href="reference.html">Reference</a> &nbsp;&nbsp;
+    <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
+    <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
+    <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
+    <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
+    <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
+    <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
+    </td>
+  </tr>
+</table>
+
+<h1 dir="ltr">
+Frequently Asked Questions</h1>
+<h2>General questions</h2>
+<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.&nbsp;Features specific to a particular operating system or file system
+can always be accessed by using the operating system's API.</p>
+
+<h2 dir="ltr">
+Class <code><font size="6">path</font></code> questions </h2>
+<p><b>Why base the generic pathname format on POSIX?</b></p>
+<p><a href="design.htm#POSIX-01">POSIX</a> is an ISO Standard. It is the basis for the most familiar
+pathname formats,
+not just for POSIX-based operating systems but also for Windows  and the
+URL portion of URI's. It is ubiquitous and
+familiar.&nbsp; 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><a href="design.htm#URI">URI's</a> 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.&nbsp; Thus for the primary &quot;portable script-style file system +operations&quot; 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?&nbsp; 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 coding errors and decrease code
+readability. There was no apparent upside benefit.</p>
+<p><b>Why do path decomposition functions yielding a single element return a
+path rather than a string?</b></p>
+<p>Interface simplicity. If they returned strings, flavors would be needed for
+<code>string</code>, <code>wstring</code>, <code>u16string</code>, <code>
+u32string</code>, and generic strings.</p>
+<p><b>Why don't path member functions have overloads with error_code&amp; arguments?</b></p>
+<p>They have not been requested by users; the need for error reporting via
+error_code seems limited to operations failures rather than path failures.</p>
+<h2>Operations function questions</h2>
+<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 &quot;portable script-style +file system operations&quot; 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.&nbsp;&nbsp;&nbsp; </p>
+<p>The case for the &quot;handle&quot; (opaque data type to identify a file) +style may be strongest for directory iterator value type.&nbsp; (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 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.&nbsp;
+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.&nbsp; OTOH, the specific functionality needed for several trial
+applications was very easy for the user to construct from the lower-level
+toolkit functions.&nbsp; 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, <code>remove_all()</code>.</p>
+<p><b>Why are there 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 the operations 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
+race conditions.</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 &quot;read-only&quot; turned out to be so +system depend as to be disqualified as a &quot;guaranteed presence&quot; operation.)</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.&nbsp; +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
+path</i> member
+functions, while operations performed by the operating system are provided as
+free functions.</p>
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->17 February, 2010<!--webbot bot="Timestamp" endspan i-checksum="40536" --></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>
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/index.htm     Sun Aug 22 23:21:17 2010
@@ -0,0 +1,472 @@
+<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 Home</title>
+<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../../index.htm">
+<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Library<br>
+    Version 3</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="../../../../index.htm">Boost Home</a> &nbsp;&nbsp;
+    <a href="index.htm">Library Home</a> &nbsp;&nbsp;
+    <a href="reference.html">Reference</a> &nbsp;&nbsp;
+    <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
+    <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
+    <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
+    <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
+    <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
+    <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
+    </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">
+    <a href="#Introduction">Introduction</a><br>
+    <a href="#Documentation">Documentation</a><br>
+    <a href="#Using">Using the library</a><br>
+    <a href="#Coding-guidelines">Coding guidelines</a><br>
+    <a href="#Cautions">Cautions</a><br>
+    <a href="#Headers">Headers</a><br>
+    <a href="#Examples">Example programs</a><br>
+    <a href="#Implementation">Implementation</a><br>
+    <a href="#Macros">Macros</a><br>
+    <a href="#Building">Building the object-library</a><br>
+    <a href="#Cgywin">Notes for Cygwin users</a><br>
+    <a href="#Change-history">Version history<br>
+&nbsp; with acknowledgements</a></td>
+  </tr>
+  </table>
+
+<div align="center">
+  <center>
+ <table border="1" cellpadding="10" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
+    <tr>
+      <td>
+ <p align="center"><b>This is Version 3 of the Filesystem library.</b></p> + <p align="center">Version 3 is a major revision with many new and improved
+      features. It breaks some Version 2 code.</p>
+ <p align="center"><a href="../../v2/doc/index.htm">Version 2</a> is the default version for Boost release 1.44 + only. Version 3 will become the default starting with release 1.45.</p>
+      <p align="center"><b>For this release only, you must define macro
+      BOOST_FILESYSTEM_VERSION as 3 to use Version 3. You may do this via a
+ compiler argument or via <code>#define BOOST_FILESYSTEM_VERSION 3</code></b></p> + <p align="center">Existing code should be moved to Version 3 as soon as
+      convenient. New code should be written for Version 3.</p>
+ <p align="center">Version 2 is deprecated, and will be removed from Boost
+      releases at the end of a transition period.</p>
+      </td>
+    </tr>
+  </table>
+  </center>
+</div>
+
+<h2><a name="Introduction">Introduction</a></h2>
+<p>The Boost.Filesystem library provides facilities to manipulate files and directories,
+and the paths that identify them.</p>
+
+<p>The features of the library include:</p>
+
+<ul>
+  <li><b>A modern C++ interface, highly compatible with the C++ standard
+  library.</b></li>
+</ul>
+<blockquote>
+  <blockquote>
+
+<p>Many users say the interface is their primary motivation for using
+Boost.Filesystem. They like its use of familiar idioms based on standard library
+containers, iterators, and algorithms. They like having errors reported by
+throwing exceptions.</p>
+
+  </blockquote>
+</blockquote>
+<ul>
+  <li><b>Portability between operating systems.</b><br>
+&nbsp;<ul>
+ <li>At the C++ syntax level, it is convenient to learn and use one interface
+    regardless of the operating system.</li>
+ <li>At the semantic level, behavior of code is reasonably portable across
+    operating systems.</li>
+    <li>Dual generic or native path format support encourages program
+ portability, yet still allows communication with users in system specific
+    formats.<br>
+&nbsp;</li>
+  </ul>
+  </li>
+ <li><b>Error handling and reporting via C++ exceptions (the default) or error
+  codes.</b><br>
+&nbsp;<ul>
+    <li>C++ exceptions are the preferred error reporting mechanism for most
+    applications. The exception thrown includes the detailed error code
+ information important for diagnosing the exact cause of file system errors.</li> + <li>Error reporting via error code allows user code that provides detailed + error recovery to avoid becoming so littered with try-catch blocks as to be
+    unmaintainable. <br>
+&nbsp;</li>
+  </ul>
+  </li>
+  <li><b>Suitable for a broad spectrum of applications, ranging from simple
+  script-like operations to extremely complex production code.</b><br>
+&nbsp;<ul>
+    <li>At the simple script-like end of the spectrum, the intent is not to
+    compete with Python, Perl, or shell languages, but rather to provide
+    filesystem operations when C++ is already the language of choice.</li>
+ <li>Finer grained control over operations and error handling is available to + support more complex applications or other cases where throwing exceptions
+    isn't desired.</li>
+  </ul>
+  </li>
+</ul>
+
+<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. That proposal was based on version 2 of
+Boost.Filesystem; presumably the final TR2 form will be based on version 3.</p>
+
+<h2><a name="Documentation">Documentation</a></h2>
+
+<p><b><a href="tutorial.html">Tutorial</a></b> - A gentle introduction to
+the library, with example programs provided for you to experiment with.</p>
+
+<p><b><a href="reference.html">Reference</a></b> - Formal documentation in the
+style of the C++ standard for
+every component of the library.</p>
+
+<p><b><a href="faq.htm">FAQ</a></b> - Frequently asked questions.</p>
+
+<p><b><a href="portability_guide.htm">Portability Guide</a></b> - Help for those
+concerned with writing code to run on multiple operating systems.</p>
+
+<p><b><a href="deprecated.html">Deprecated Features</a></b> - Identifies
+deprecated features and their replacements.</p>
+
+<p><b><a href="v3.html">Version 3 Introduction</a></b> - Aimed at users of prior
+Boost.Filesystem versions.</p>
+
+<p><b><a href="v3_design.html">Version 3 Design</a></b> - Historical document
+from the start of the Version 3 design process.</p>
+
+<p><b><a href="design.htm">Original Design</a></b> - Historical document from
+the start of the Version 1 design process.</p>
+
+<p><b><a href="do_list.html">Do List</a></b> - Boost.Filesystem development work
+in the pipeline.</p>
+
+<h2><a name="Using">Using</a> the library</h2>
+<p>Boost.Filesystem is implemented as a separately compiled library, so you must install +binaries in a location that can be found by your linker. If you followed the +<a href="http://www.boost.org/doc/libs/release/more/getting_started/index.html";>Boost Getting Started</a> instructions, that's already been done for you.</p>
+<h2><a name="Coding-guidelines">Coding guidelines</a></h2>
+<p>For new code, defining <code>BOOST_FILESYSTEM_NO_DEPRECATED</code> before +including filesystem headers is strongly recommended. This prevents inadvertent +use of old features, particularly legacy function names, that have been replaced
+and are going to go away in the future.</p>
+<h2><a name="Cautions">Cautions</a></h2>
+<p>After reading the tutorial you can dive right into  simple,
+script-like programs using the Filesystem Library! Before doing any serious
+work, however, there a few cautions to be aware of:</p>
+<h4><b>Effects and Postconditions not guaranteed in the presence of race-conditions</b></h4> +<p>Filesystem function specifications follow the C++ Standard Library form, specifying behavior in terms of
+effects and postconditions. If
+a <a href="reference.html#Race-condition">race-condition</a> exists, a function's +postconditions may no longer be true by the time the function returns to the
+caller.</p>
+<blockquote>
+<p><b><i>Explanation: </i></b>The state of files and directories is often
+globally shared, and thus may be changed unexpectedly by other threads,
+processes, or even other computers having network access to the filesystem. As an
+example of the difficulties this can cause, note that the following asserts
+may fail:</p>
+<blockquote>
+<p><code>assert( exists( &quot;foo&quot; ) == exists( &quot;foo&quot; ) );&nbsp; //
+(1)<br>
+<br>
+remove_all( &quot;foo&quot; );<br>
+assert( !exists( &quot;foo&quot; ) );&nbsp; // (2)<br>
+<br>
+assert( is_directory( &quot;foo&quot; ) == is_directory( &quot;foo&quot; ) ); //
+(3)</code></p>
+</blockquote>
+<p>(1) will fail if a non-existent &quot;foo&quot; comes into existence, or an +existent &quot;foo&quot; is removed, between the first and second call to <i>exists()</i>. +This could happen if, during the execution of the example code, another thread, +process, or computer is also performing operations in the same directory.</p>
+<p>(2) will fail if between the call to <i>remove_all()</i> and the call to
+<i>exists()</i> a new file or directory named &quot;foo&quot; is created by another
+thread, process, or computer.</p>
+<p>(3) will fail if another thread, process, or computer removes an
+existing file &quot;foo&quot; and then creates a directory named &quot;foo&quot;, between the
+example code's two calls to <i>is_directory()</i>.</p>
+</blockquote>
+<h4><b>May throw exceptions</b></h4>
+<p>Unless otherwise specified, Boost.Filesystem functions throw <i>
+<a href="reference.html#basic_filesystem_error-constructors">basic_filesystem_error</a></i>
+exceptions if they cannot successfully complete their operational
+specifications. Also, implementations may use C++ Standard Library functions,
+which may throw <i>std::bad_alloc</i>. These exceptions may be thrown even
+though the error condition leading to the exception is not explicitly specified
+in the function's &quot;Throws&quot; paragraph.</p>
+<p>All exceptions thrown by the Filesystem
+Library are implemented by calling <a href="../../utility/throw_exception.html">
+boost::throw_exception()</a>. Thus exact behavior may differ depending on
+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="Headers">Headers</a></h2>
+
+<p>The Boost.Filesystem library provides several&nbsp;headers:</p>
+
+<ul>
+ <li>Header &lt;<a href="../../../boost/filesystem.hpp">boost/filesystem.hpp</a>&gt;
+  provides access to all features of the library, except file streams.<br>
+&nbsp;</li>
+ <li>Header &lt;<a href="../../../boost/filesystem/fstream.hpp">boost/filesystem<i>/</i>fstream.hpp</a>&gt;
+  inherits the same components as the C++ Standard
+ Library's <i>fstream</i> header, but files are identified by <code>const path&amp;</code>
+  arguments rather that <code>const char*</code> arguments.</li>
+</ul>
+<h2><a name="Examples">Example programs</a></h2>
+<p>See the <a href="tutorial.html">tutorial</a> for example programs.</p>
+<h3>Other examples</h3>
+<p>The programs used to generate the Boost regression test status tables use the
+Filesystem Library extensively.&nbsp; See:</p>
+<ul>
+ <li><a href="../../../tools/regression/src/process_jam_log.cpp">process_jam_log.cpp</a></li> + <li><a href="../../../tools/regression/src/compiler_status.cpp">compiler_status.cpp</a></li>
+</ul>
+<h2><a name="Implementation">Implementation</a></h2>
+<p>The current implementation supports operating systems which provide
+the POSIX or Windows API's.</p>
+<p>The library is in regular use on Apple  OS X, HP-UX, IBM AIX, Linux,
+Microsoft Windows, SGI IRIX, and Sun Solaris operating systems using a variety
+of compilers.</p>
+<h2><a name="Macros">Macros</a></h2>
+<p>Users may defined the following macros if desired. Sensible defaults are
+provided, so users can ignore these macros unless they have special needs.</p> +<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td><b><i>Macro Name</i></b></td>
+    <td><b><i>Default</i></b></td>
+    <td><b><i>Effect if defined</i></b></td>
+  </tr>
+  <tr>
+    <td valign="top"><code>BOOST_FILESYSTEM_NO_DEPRECATED</code></td>
+    <td valign="top">Not defined.</td>
+    <td valign="top">Deprecated features are excluded from headers.</td>
+  </tr>
+  <tr>
+    <td valign="top"><code>BOOST_FILESYSTEM_DYN_LINK</code></td>
+    <td valign="top">Defined if <code>BOOST_ALL_DYN_LINK</code> is defined,
+    otherwise not defined.</td>
+ <td valign="top">The Boost.Filesystem library is dynamically linked. If not defined,
+    static linking is assumed.</td>
+  </tr>
+  <tr>
+    <td valign="top"><code>BOOST_FILESYSTEM_NO_LIB</code></td>
+    <td valign="top">Defined if <code>BOOST_ALL_NO_LIB</code> is defined,
+    otherwise not defined.</td>
+ <td valign="top">Boost.Filesystem library does not use the Boost auto-link
+    facility.</td>
+  </tr>
+  </table>
+<p>User-defined BOOST_POSIX_API and BOOST_WINDOWS_API macros are no longer
+supported.</p>
+<h2><a name="Building">Building</a> the object-library</h2>
+<p>The object-library will be built automatically if you are using the Boost
+build system. See
+<a href="../../../more/getting_started.html">Getting Started</a>. It can also be
+built manually using a <a href="../build/Jamfile.v2">Jamfile</a>
+supplied in directory libs/filesystem/build, or the user can construct an IDE
+project or make file which includes the object-library source files.</p>
+<p>The object-library source files are
+supplied in directory <a href="../src">libs/filesystem/src</a>. These source files implement the +library for POSIX or Windows compatible operating systems; no implementation is
+supplied for other operating systems. Note that many operating systems not
+normally thought of as POSIX  systems, such as mainframe legacy
+operating systems or embedded operating systems, support POSIX compatible file
+systems and so will work with the Filesystem Library.</p>
+<p>The object-library can be built for static or dynamic (shared/dll) linking.
+This is controlled by the BOOST_ALL_DYN_LINK or BOOST_FILESYSTEM_DYN_LINK
+macros. See the <a href="http://www.boost.org/development/separate_compilation.html";>Separate
+Compilation</a> page for a description of the techniques used.</p>
+<h3>Note for <a name="Cgywin">Cygwin</a> users</h3>
+<p> <a href="http://www.cygwin.com/";>Cygwin</a> version 1.7 or later is
+required because only versions of GCC with wide character strings are supported.</p>
+
+<p> The library's implementation code treats Cygwin as a Windows platform, and
+thus uses the Windows API and uses Windows path syntax as the native path
+syntax.</p>
+
+<h2><a name="Change-history">Version history</a></h2>
+
+<h3>Version 3</h3>
+
+<p>Boost <span style="background-color: #FFFF00">1.??.0 - ???, 2010</span> - Internationalization via single class <code>path</code>.
+More uniform error handling.</p>
+
+<p>Peter Dimov suggested use of a single path class rather than a <code>basic_path</code>
+class template. That idea was the basis for the Version 3 redesign.</p>
+
+<p>Thanks for comments from Robert Stewart, Zach Laine, Peter Dimov, Gregory
+Peele, Scott McMurray, John Bytheway, Jeff Flinn, Jeffery Bosboom.</p>
+
+<h3>Version 2</h3>
+
+<p>Boost 1.34.0 - May, 2007 - Internationalization via <code>basic_path</code>
+template.</p>
+
+<p>So many people have contributed comments and bug reports that it isn't any +longer possible to acknowledge them individually. That said, Peter Dimov and Rob +Stewart need to be specially thanked for their many constructive criticisms and
+suggestions. Terence
+Wilson and Chris Frey contributed timing programs which helped illuminate
+performance issues.</p>
+
+<h3>Version 1</h3>
+
+<p>Boost 1.30.0 - March, 2003 - Initial official Boost release.</p>
+
+<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 Kuehl, 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>
+
+<p>Key <a href="design.htm#Requirements">design requirements</a> and
+<a href="design.htm#Realities">design realities</a> were developed during
+extensive discussions on the Boost mailing list, followed by comments on the +initial implementation. Numerous helpful comments were then received during the
+Formal Review.<p>Participants included
+Aaron Brashears,
+Alan Bellingham,
+Aleksey Gurtovoy,
+Alex Rosenberg,
+Alisdair Meredith,
+Andy Glew,
+Anthony Williams,
+Baptiste Lepilleur,
+Beman Dawes,
+Bill Kempf,
+Bill Seymour,
+Carl Daniel,
+Chris Little,
+Chuck Allison,
+Craig Henderson,
+Dan Nuffer,
+Dan'l Miller,
+Daniel Frey,
+Darin Adler,
+David Abrahams,
+David Held,
+Davlet Panech,
+Dietmar Kuehl,
+Douglas Gregor,
+Dylan Nicholson,
+Ed Brey,
+Eric Jensen,
+Eric Woodruff,
+Fedder Skovgaard,
+Gary Powell,
+Gennaro Prota,
+Geoff Leyland,
+George Heintzelman,
+Giovanni Bajo,
+Glen Knowles,
+Hillel Sims,
+Howard Hinnant,
+Jaap Suter,
+James Dennett,
+Jan Langer,
+Jani Kajala,
+Jason Stewart,
+Jeff Garland,
+Jens Maurer,
+Jesse Jones,
+Jim Hyslop,
+Joel de Guzman,
+Joel Young,
+John Levon,
+John Maddock,
+John Williston,
+Jonathan Caves,
+Jonathan Biggar,
+Jurko,
+Justus Schwartz,
+Keith Burton,
+Ken Hagen,
+Kostya Altukhov,
+Mark Rodgers,
+Martin Schuerch,
+Matt Austern,
+Matthias Troyer,
+Mattias Flodin,
+Michiel Salters,
+Mickael Pointier,
+Misha Bergal,
+Neal Becker,
+Noel Yap,
+Parksie,
+Patrick Hartling, Pavel Vozenilek,
+Pete Becker,
+Peter Dimov,
+Rainer Deyke,
+Rene Rivera,
+Rob Lievaart,
+Rob Stewart,
+Ron Garcia,
+Ross Smith,
+Sashan,
+Steve Robbins,
+Thomas Witt,
+Tom Harris,
+Toon Knapen,
+Victor Wagner,
+Vincent Finn,
+Vladimir Prus, and
+Yitzhak Sapir
+
+<p>A lengthy discussion on the C++ committee's library reflector illuminated the &quot;illusion +of portability&quot; problem, particularly in postings by PJ Plauger and Pete Becker.</p>
+
+<p>Walter Landry provided much help illuminating symbolic link use cases for
+version 1.31.0.&nbsp;</p>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->11 June, 2010<!--webbot bot="Timestamp" endspan i-checksum="19839" --></p>
+
+<p>&copy; Copyright Beman Dawes, 2002-2005</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>
+
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/path_table.cpp        Sun Aug 22 23:21:17 2010
@@ -0,0 +1,260 @@
+// Generate an HTML table showing path decomposition ---------------------------------//
+
+//  Copyright Beman Dawes 2005.
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  See http://www.boost.org/libs/filesystem for documentation.
+
+// For purposes of generating the table, support both POSIX and Windows paths
+
+#include "boost/filesystem.hpp"
+#include <iostream>
+#include <fstream>
+
+using boost::filesystem::path;
+using std::string;
+using std::cout;
+
+namespace
+{
+  std::ifstream infile;
+  std::ofstream posix_outfile;
+  std::ifstream posix_infile;
+  std::ofstream outfile;
+
+  bool posix;
+
+  const string empty_string;
+
+  struct column_base
+  {
+    virtual string heading() const = 0;
+    virtual string cell_value( const path & p ) const = 0;
+  };
+
+  struct c0 : public column_base
+  {
+    string heading() const { return string("<code>string()</code>"); }
+    string cell_value( const path & p ) const { return p.string(); }
+  } o0;
+
+    struct c1 : public column_base
+  {
+ string heading() const { return string("<code>generic_<br>string()</code>"); } + string cell_value( const path & p ) const { return p.generic_string(); }
+  } o1;
+
+  struct c2 : public column_base
+  {
+ string heading() const { return string("Iteration<br>over<br>Elements"); }
+    string cell_value( const path & p ) const
+    {
+      string s;
+      for( path::iterator i(p.begin()); i != p.end(); ++i )
+      {
+        if ( i != p.begin() ) s += ',';
+        s += (*i).string();
+      }
+      return s;
+    }
+  } o2;
+
+  struct c3 : public column_base
+  {
+ string heading() const { return string("<code>root_<br>path()</code>"); } + string cell_value( const path & p ) const { return p.root_path().string(); }
+  } o3;
+
+  struct c4 : public column_base
+  {
+ string heading() const { return string("<code>root_<br>name()</code>"); } + string cell_value( const path & p ) const { return p.root_name().string(); }
+  } o4;
+
+  struct c5 : public column_base
+  {
+ string heading() const { return string("<code>root_<br>directory()</code>"); } + string cell_value( const path & p ) const { return p.root_directory().string(); }
+  } o5;
+
+  struct c6 : public column_base
+  {
+ string heading() const { return string("<code>relative_<br>path()</code>"); } + string cell_value( const path & p ) const { return p.relative_path().string(); }
+  } o6;
+
+  struct c7 : public column_base
+  {
+ string heading() const { return string("<code>parent_<br>path()</code>"); } + string cell_value( const path & p ) const { return p.parent_path().string(); }
+  } o7;
+
+  struct c8 : public column_base
+  {
+    string heading() const { return string("<code>filename()</code>"); }
+ string cell_value( const path & p ) const { return p.filename().string(); }
+  } o8;
+
+ const column_base * column[] = { &o2, &o0, &o1, &o3, &o4, &o5, &o6, &o7, &o8 };
+
+ // do_cell ---------------------------------------------------------------//
+
+  void do_cell( const string & test_case, int i )
+  {
+    string temp = column[i]->cell_value(path(test_case));
+    string value;
+    outfile << "<td>";
+    if (temp.empty())
+      value = "<font size=\"-1\"><i>empty</i></font>";
+    else
+     value = string("<code>") + temp + "</code>";
+
+    if (posix)
+      posix_outfile << value << '\n';
+    else
+    {
+      std::getline(posix_infile, temp);
+      if (value != temp) // POSIX and Windows differ
+      {
+        value.insert(0, "<br>");
+        value.insert(0, temp);
+        value.insert(0, "<span style=\"background-color: #CCFFCC\">");
+        value += "</span>";
+      }
+      outfile << value;
+    }
+    outfile << "</td>\n";
+  }
+
+// do_row ------------------------------------------------------------------//
+
+  void do_row( const string & test_case )
+  {
+    outfile << "<tr>\n";
+
+    if (test_case.empty())
+      outfile << "<td><font size=\"-1\"><i>empty</i></font></td>\n";
+    else
+      outfile << "<td><code>" << test_case << "</code></td>\n";
+
+    for ( int i = 0; i < sizeof(column)/sizeof(column_base&); ++i )
+    {
+      do_cell( test_case, i );
+    }
+
+    outfile << "</tr>\n";
+  }
+
+// do_table ----------------------------------------------------------------//
+
+  void do_table()
+  {
+    outfile <<
+      "<h1>Path Decomposition Table</h1>\n"
+ "<p>Shaded entries indicate cases where <i>POSIX</i> and <i>Windows</i>\n"
+      "implementations yield different results. The top value is the\n"
+ "<i>POSIX</i> result and the bottom value is the <i>Windows</i> result.\n"
+      "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n"
+      "<p>\n"
+      ;
+
+    // generate the column headings
+
+    outfile << "<tr><td><b>Constructor<br>argument</b></td>\n";
+
+    for ( int i = 0; i < sizeof(column)/sizeof(column_base&); ++i )
+    {
+      outfile << "<td><b>" << column[i]->heading() << "</b></td>\n";
+    }
+
+    outfile << "</tr>\n";
+
+    // generate a row for each input line
+
+    string test_case;
+    while ( std::getline( infile, test_case ) )
+    {
+      if (!test_case.empty() && *--test_case.end() == '\r')
+        test_case.erase(test_case.size()-1);
+      if (test_case.empty() || test_case[0] != '#')
+        do_row( test_case );
+    }
+
+    outfile << "</table>\n";
+  }
+
+} // unnamed namespace
+
+// main ------------------------------------------------------------------------------//
+
+#define BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE
+#include <boost/test/included/prg_exec_monitor.hpp>
+
+int cpp_main( int argc, char * argv[] ) // note name!
+{
+  if ( argc != 5 )
+  {
+    std::cerr <<
+ "Usage: path_table \"POSIX\"|\"Windows\" input-file posix-file output-file\n"
+      "Run on POSIX first, then on Windows\n"
+      "  \"POSIX\" causes POSIX results to be save in posix-file;\n"
+      "  \"Windows\" causes POSIX results read from posix-file\n"
+      "  input-file contains the paths to appear in the table.\n"
+      "  posix-file will be used for POSIX results\n"
+      "  output-file will contain the generated HTML.\n"
+      ;
+    return 1;
+  }
+
+  infile.open( argv[2] );
+  if ( !infile )
+  {
+    std::cerr << "Could not open input file: " << argv[2] << std::endl;
+    return 1;
+  }
+
+  if (string(argv[1]) == "POSIX")
+  {
+    posix = true;
+    posix_outfile.open( argv[3] );
+    if ( !posix_outfile )
+    {
+ std::cerr << "Could not open POSIX output file: " << argv[3] << std::endl;
+      return 1;
+    }
+  }
+  else
+  {
+    posix = false;
+    posix_infile.open( argv[3] );
+    if ( !posix_infile )
+    {
+ std::cerr << "Could not open POSIX input file: " << argv[3] << std::endl;
+      return 1;
+    }
+  }
+
+  outfile.open( argv[4] );
+  if ( !outfile )
+  {
+    std::cerr << "Could not open output file: " << argv[2] << std::endl;
+    return 1;
+  }
+
+  outfile << "<html>\n"
+          "<head>\n"
+          "<title>Path Decomposition Table</title>\n"
+          "</head>\n"
+          "<body bgcolor=\"#ffffff\" text=\"#000000\">\n"
+          ;
+
+  do_table();
+
+  outfile << "</body>\n"
+          "</html>\n"
+          ;
+
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/path_table.txt        Sun Aug 22 23:21:17 2010
@@ -0,0 +1,50 @@
+# Paths for the reference.html Path Decomposition Table
+#
+# This is the input file for path_table, which generates the actual html
+#
+# Copyright Beman Dawes 2010
+#
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+#
+# Note that an empty line is treated as input rather than as a comment
+
+.
+..
+foo
+/
+/foo
+foo/
+/foo/
+foo/bar
+/foo/bar
+//net
+//net/foo
+///foo///
+///foo///bar
+/.
+./
+/..
+../
+foo/.
+foo/..
+foo/./
+foo/./bar
+foo/..
+foo/../
+foo/../bar
+c:
+c:/
+c:foo
+c:/foo
+c:foo/
+c:/foo/
+c:/foo/bar
+prn:
+c:\
+c:foo
+c:\foo
+c:foo\
+c:\foo\
+c:\foo/
+c:/foo\bar
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/portability_guide.htm Sun Aug 22 23:21:17 2010
@@ -0,0 +1,241 @@
+<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>Portability Guide</title>
+<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+</head>
+
+<body bgcolor="#FFFFFF">
+
+<h1>
+<img border="0" src="../../../../boost.png" align="center" width="300" height="86">Path
+Name Portability
+Guide</h1>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="../../../../index.htm">Boost Home</a> &nbsp;&nbsp;
+    <a href="index.htm">Library Home</a> &nbsp;&nbsp;
+    <a href="reference.html">Reference</a> &nbsp;&nbsp;
+    <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
+    <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
+    <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
+    <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
+    <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
+    <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
+    </td>
+  </tr>
+</table>
+
+<p>
+<a href="#Introduction">Introduction</a><br>
+<a href="#name_check­_functions">name_check functions</a><br>
+<a href="#recommendations">File and directory name recommendations</a></p>
+<h2><a name="Introduction">Introduction</a></h2>
+<p>Like any other C++ program which performs I/O operations, there is no
+guarantee that a program using Boost.Filesystem will be portable between
+operating systems. Critical aspects of I/O such as how the operating system
+interprets paths are unspecified by the C and C++ Standards.</p>
+<p>It is not possible to know  if a file or directory name will be
+valid (and thus portable) for an unknown operating system. There is always the possibility that an operating system could use
+names which are unusual (numbers less than 4096, for example) or very
+limited in size (maximum of six character names, for example). In other words,
+portability is never absolute; it is always relative to specific operating
+systems or
+file systems.</p>
+<p>It is possible, however, to know in advance if a directory or file name is likely to be valid for a particular
+operating system.&nbsp;It is also possible to construct names which are
+likely to be portable to a large number of modern and legacy operating systems.</p>
+
+<p>Almost all modern operating systems support multiple file systems. At the +minimum, they support a native file system plus a CD-ROM file system (Generally
+ISO-9669, often with Juliet extensions).</p>
+
+<p>Each file system
+may have its own naming rules. For example, modern versions of Windows support NTFS, FAT, FAT32, and ISO-9660 file systems, among others, and the naming rules
+for those file systems differ. Each file system may also have
+differing rules for overall path validity, such as a maximum length or number of +sub-directories. Some legacy systems have different rules for directory names
+versus regular file names.</p>
+
+<p>As a result, Boost.Filesystem's <i>name_check</i> functions
+cannot guarantee directory and file name portability. Rather, they are intended to +give the programmer a &quot;fighting chance&quot; to achieve portability by early
+detection of common naming problems.</p>
+
+<h2><a name="name_check­_functions">name_check functions</a></h2>
+
+<p>A <i>name_check</i> function
+returns true if its argument is valid as a directory and regular file name for a +particular operating or file system. A number of these functions are provided.</p>
+
+<p>The <a href="#portable_name">portable_name</a> function is of particular
+interest because it has been carefully designed to provide wide
+portability yet not overly restrict expressiveness.</p>
+
+<table border="1" cellpadding="5" cellspacing="0">
+  <tr>
+ <td align="center" colspan="2"><b>Library Supplied name_check Functions</b></td>
+  </tr>
+  <tr>
+    <td align="center"><b>Function</b></td>
+    <td align="center"><b>Description</b></td>
+  </tr>
+  <tr>
+ <td align="left" valign="top"><code><a name="portable_posix_name">portable_posix_name</a>(const
+    std::string&amp;<i> name</i>)</code></td>
+ <td><b>Returns:</b> <i>true</i> if <code>!name.empty() &amp;&amp; name</code> contains only the characters + specified in<i> Portable Filename Character Set</i> rules as defined in by + POSIX (<a href="http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap03.html";>www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap03.html</a>).<br> + The allowed characters are <code>0-9</code>, <code>a-z</code>, <code>A-Z</code>,
+    <code>'.'</code>, <code>'_'</code>, and <code>'-'</code>.<p><b>Use:</b>
+    applications which must be portable to any POSIX system.</td>
+  </tr>
+  <tr>
+ <td align="left" valign="top"><code><a name="windows_name">windows_name</a>(const
+    std::string&amp;<i> name</i>)</code></td>
+ <td><b>Returns:</b>&nbsp; <i>true</i> if <code>!name.empty() &amp;&amp; name</code> contains
+    only the characters specified by the Windows platform SDK as valid
+ regardless of the file system <code>&amp;&amp; (name</code> is <code>&quot;.&quot;</code> or + <code>&quot;..&quot;</code>&nbsp; or does not end with a trailing space or period<code>)</code>.&nbsp; + The allowed characters are anything except <code>0x0-0x1F</code>, <code>'&lt;'</code>, + <code>'&gt;'</code>, <code>':'</code>, <code>'&quot;'</code>, <code>'/'</code>,
+    <code>'\'</code>, and <code>'|'</code>.<p>
+    <b>Use:</b> applications which must be portable to Windows.</p>
+ <p><b>Note:</b> Reserved device names are not valid as file names, but are + not being detected because they are still valid as a path. Specifically, + CON, PRN, AUX, CLOCK$, NUL, COM[1-9], LPT[1-9], and these names followed by
+    an extension (for example, NUL.tx7).</td>
+  </tr>
+  <tr>
+ <td align="left" valign="top"><code><a name="portable_name">portable_name</a>(const
+    std::string&amp;<i> name</i>)</code></td>
+ <td><b>Returns:</b> <code>&nbsp;windows_name(name) &amp;&amp; portable_posix_name(name) + &amp;&amp; (name</code> is <code>&quot;.&quot;</code> or <code>&quot;..&quot;</code>, and the first character not a period or hyphen<code>)</code>.<p><b>Use:</b> applications which must be portable to a wide variety of + modern operating systems, large and small, and to some legacy O/S's. The
+    first character not a period or hyphen restriction is a requirement of
+    several older operating systems.</td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code><a name="portable_directory_name">
+ portable_directory_name</a>(const std::string&amp;<i> name</i>)</code></td> + <td><b>Returns:</b> <code>portable_name(name) &amp;&amp; (name</code> is <code>&quot;.&quot;</code> + or <code>&quot;..&quot;</code>&nbsp; or contains no periods<code>)</code>.<p><b>Use:</b> applications + which must be portable to a wide variety of platforms, including OpenVMS.</td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code><a name="portable_file_name">
+    portable_file_name</a>(const std::string&amp;<i> name</i>)</code></td>
+ <td><b>Returns:</b> <code>portable_name(name) &amp;&amp; </code>any period is followed by one to three additional
+    non-period characters.<p><b>Use:</b>
+    applications which must be portable to a wide variety of platforms,
+ including OpenVMS and other systems which have a concept of &quot;file extension&quot;
+    but limit its length.</td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code><a name="native">native</a>(const
+    std::string&amp;<i> name</i>)</code></td>
+    <td><b>Returns:</b> Implementation defined. Returns <i>
+ true</i> for names considered valid by the operating system's native file + systems.<p><b>Note:</b> May return <i>true</i> for some names not considered valid + by the operating system under all conditions (particularly on operating systems which support
+    multiple file systems.)</td>
+  </tr>
+</table>
+
+<h2>File and directory name <a name="recommendations">recommendations</a></h2>
+
+<table border="1" cellpadding="5" cellspacing="0">
+
+  <tr>
+    <td align="center" valign="top"><strong>Recommendation</strong></td>
+    <td align="center" valign="top"><strong>Rationale</strong></td>
+  </tr>
+  <tr>
+ <td valign="top">Limit file and directory names to the characters A-Z, a-z, 0-9, period, hyphen, and + underscore.<p>Use any of the &quot;portable_&quot; <a href="#name_check­_functions">
+    name check functions</a> to enforce this recommendation.</td>
+ <td valign="top">These are the characters specified by the POSIX standard for portable directory and + file names, and are also valid for Windows, Mac, and many other modern file systems.</td>
+  </tr>
+  <tr>
+    <td valign="top">Do not use a period or hyphen as the first
+ character of a name. Do not use period as the last character of a name.<p>
+    Use <a href="#portable_name">portable_name</a>,
+    <a href="#portable_directory_name">portable_directory_name</a>, or
+    <a href="#portable_file_name">portable_file_name</a> to enforce this
+    recommendation.</td>
+ <td valign="top">Some operating systems treat have special rules for the + first character of names. POSIX, for example. Windows does not permit period
+    as the last character.</td>
+  </tr>
+  <tr>
+    <td valign="top">Do not use periods in directory names.<p>Use
+ <a href="#portable_directory_name">portable_directory_name</a> to enforce
+    this recommendation.</td>
+ <td valign="top">Requirement for ISO-9660 without Juliet extensions, OpenVMS filesystem, and other legacy systems.</td>
+  </tr>
+  <tr>
+ <td valign="top">Do not use more that one period in a file name, and limit
+    the portion after the period to three characters.<p>Use
+    <a href="#portable_file_name">portable_file_name</a> to enforce this
+    recommendation.</td>
+ <td valign="top">Requirement for ISO-9660 level 1, OpenVMS filesystem, and
+    other legacy systems. </td>
+  </tr>
+  <tr>
+ <td valign="top">Do not assume names are case sensitive. For example, do not expected a directory to be + able to hold separate elements named &quot;Foo&quot; and &quot;foo&quot;. </td> + <td valign="top">Some file systems are case insensitive.&nbsp; For example, Windows + NTFS is case preserving in the way it stores names, but case insensitive in + searching for names (unless running under the POSIX sub-system, it which
+    case it does case sensitive searches). </td>
+  </tr>
+  <tr>
+ <td valign="top">Do not assume names are case insensitive.&nbsp; For example, do not expect a file + created with the name of &quot;Foo&quot; to be opened successfully with the name of &quot;foo&quot;.</td> + <td valign="top">Some file systems are case sensitive.&nbsp; For example, POSIX.</td>
+  </tr>
+  <tr>
+    <td valign="top">Don't use hyphens in names.</td>
+ <td valign="top">ISO-9660 level 1, and possibly some legacy systems, do not permit
+    hyphens.</td>
+  </tr>
+  <tr>
+ <td valign="top">Limit the length of the string returned by path::string() to
+    255 characters.&nbsp;
+ Note that ISO 9660 has an explicit directory tree depth limit of 8, although
+    this depth limit is removed by the Juliet extensions.</td>
+ <td valign="top">Some operating systems place limits on the total path length.&nbsp; For example,
+    Windows 2000 limits paths to 260 characters total length.</td>
+  </tr>
+  <tr>
+ <td valign="top">Limit the length of any one name in a path.&nbsp; Pick the specific limit according to
+    the operating systems and or file systems you wish portability to:<br>
+    &nbsp;&nbsp; Not a concern::&nbsp; POSIX, Windows, MAC OS X.<br>
+    &nbsp;&nbsp; 31 characters: Classic Mac OS<br>
+&nbsp;&nbsp; 8 characters + period + 3 characters: ISO 9660 level 1<br>
+&nbsp;&nbsp; 32 characters: ISO 9660 level 2 and 3<br>
+&nbsp;&nbsp; 128 characters (64 if Unicode): ISO 9660 with Juliet extensions</td> + <td valign="top">Limiting name length can markedly reduce the expressiveness of file names, yet placing
+    only very high limits on lengths inhibits widest portability.</td>
+  </tr>
+</table>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->17 February, 2010<!--webbot bot="Timestamp" endspan i-checksum="40536" --></p>
+
+<p>© Copyright Beman Dawes, 2002, 2003</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>
+
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/reference.html        Sun Aug 22 23:21:17 2010
@@ -0,0 +1,3059 @@
+<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 Reference
+</title>
+<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../../index.htm">
+<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Library<br>
+    </font>
+    <font size="6">Version 3</font></td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="../../../../index.htm">Boost Home</a> &nbsp;&nbsp;
+    <a href="index.htm">Library Home</a> &nbsp;&nbsp;
+    <a href="reference.html">Reference</a> &nbsp;&nbsp;
+    <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
+    <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
+    <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
+    <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
+    <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
+    <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
+    </td>
+    </td>
+  </tr>
+</table>
+
+<h1>Reference Documentation</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="33%" valign="top"><a href="#Introduction">Introduction</a><br>
+    <a href="#Definitions">Definitions</a><br>
+    <a href="#Conformance">Conformance</a><br>
+    <a href="#Header-filesystem-synopsis">
+    Header &lt;filesystem&gt; synopsis</a><br>
+    <a href="#Error-reporting">Error reporting</a><br>
+    <a href="#class-path">Class path</a><br>
+ &nbsp;&nbsp;&nbsp; <a href="#path-constructors">path constructors</a><br>
+&nbsp;&nbsp;&nbsp; <a href="#path-assignments">path assignments</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-appends">path appends</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-modifiers">path modifiers</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-native-format-observers">path native
+    format observers</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-generic-format-observers">path generic
+    format observers</a><br>
+&nbsp;&nbsp;&nbsp; <a href="#path-decomposition">path decomposition</a><br>
+&nbsp;&nbsp;&nbsp; <a href="#path-query">path query</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-iterators">path iterators</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-deprecated-functions">path deprecated functions</a><br> +&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-non-member-functions">path non-member functions</a><br> +&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-inserter-extractor">path inserters and extractor</a>s<span style="background-color: #FFFFFF"><br> +</span> &nbsp;<a href="#Class-filesystem_error">Class filesystem_error</a><br>
+&nbsp;&nbsp;&nbsp; <a href="#filesystem_error-members">filesystem_error
+    constructors</a><br>
+&nbsp;&nbsp;&nbsp; f<a href="#filesystem_error-path1">ilesystem_error path1</a><br> +&nbsp;&nbsp;&nbsp; <a href="#filesystem_error-path2">filesystem_error path2</a><br> +&nbsp;&nbsp;&nbsp; <a href="#filesystem_error-what">filesystem_error what</a><br>
+<a href="#Class-directory_entry">Class directory_entry</a><br>
+&nbsp;&nbsp;&nbsp;
+<a href="#directory_entry-constructors">directory_entry constructors</a><br> +&nbsp;&nbsp;&nbsp;&nbsp;<a href="#directory_entry-modifiers">directory_entry modifiers</a><br> +&nbsp;&nbsp;&nbsp;&nbsp;<a href="#directory_entry-observers">directory_entry observers</a><br>
+<a href="#Class-directory_iterator">Class  directory_iterator</a><br>
+&nbsp;&nbsp;&nbsp; <a href="#directory_iterator-members">directory_iterator
+    members</a><br>
+<a href="#Class-recursive_directory_iterator">Class recursive_directory_iterator</a><br>
+    <a href="#file_status">Class
+    file_status</a><br>
+    &nbsp;</td>
+    <td width="33%" valign="top">
+    <a href="#Operational-functions">
+    Operational functions</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#absolute">absolute</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp; <a href="#copy_file">copy_file</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#create_directories">create_directories</a><br> +&nbsp;&nbsp;&nbsp;&nbsp <a href="#create_directory">create_directory</a><br> +&nbsp;&nbsp;&nbsp;&nbsp <a href="#create_hard_link">create_hard_link</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#create_symlink">create_symlink</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#current_path">current_path</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#exists">exists</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#equivalent">equivalent</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#file_size">file_size</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp  i<a href="#is_directory">s_directory</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_empty">is_empty</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_other">is_other</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_regular_file">is_regular_file</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_symlink">is_symlink</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#last_write_time">last_write_time</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp; <a href="#read_symlink">read_symlink</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#remove">remove</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#remove_all">remove_all</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#rename">rename</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp; <a href="#resize_file">resize_file</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#space">space</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#status">status</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#status_known">status_known</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#symlink_status">symlink_status</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#system_complete">system_complete</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp; <a href="#unique_path">unique_path</a></td>
+    <td width="34%" valign="top">
+    <a href="#File-streams">File streams</a><br>
+<a href="#Path-decomposition-table">Path decomposition table</a><br>
+<a href="#Acknowledgements">Acknowledgements</a><br>
+<a href="#References">References</a><br>
+&nbsp;</td>
+  </tr>
+</table>
+
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>This reference documentation describes components that C++ programs may use +to perform operations involving file systems, including paths, regular files,
+and directories.</p>
+<h2><a name="Definitions">Definitions</a></h2>
+<p>The following definitions shall apply throughout this reference documentation:</p> +<p><i><b><a name="File">File</a>:</b> </i>An object that can be written to, or read from, or both. A file +has certain attributes, including type. Common types of files include regular files +and directories. Other types of files, such as symbolic links, may be supported by the
+implementation.</p>
+<p><b><i><a name="File-system">File system</a>:</i></b> A collection of files and certain of their attributes.</p> +<p><b><i><a name="Filename">Filename</a>:</i></b> The name of a file. Slash and 0
+characters are not permitted. Implementations may define additional
+characters or specific names that are not permitted. Filenames <code>.</code>&nbsp;
+and <code>..</code>&nbsp; have special meaning. Implementations may define
+additional filenames that have special meaning.</p>
+<blockquote>
+ <p><i>[Note:</i> Most operating systems prohibit the ANSI control characters
+  (0x00-0x31) in filenames.</p>
+  <p>Windows prohibits the characters 0x00-0x31, <code>&quot;</code>,<code>
+ *</code>,<code>&nbsp;:</code>,<code> &lt;</code>,<code> &gt;</code>,<code>&nbsp;?</code>,<code>
+  \</code>,<code> /</code>, and<code> |</code>&nbsp;<i>--end note]</i></p>
+</blockquote>
+<p><b><i><a name="Path">Path</a>:</i></b> A sequence of elements that identify +a location within a filesystem. The elements are the <i>root-name<sub>opt</sub></i>, <i> +root-directory<sub>opt</sub></i>, and an optional sequence of filenames. [<i>Note:</i> +A <a href="#Pathname">pathname</a> is the concrete representation of a path. <i>--end note</i>]</p> +<p><b><i><a name="Absolute-path">Absolute path</a>:</i></b> A path that uniquely
+identifies a file. The format is implementation defined. </p>
+<blockquote>
+  <p><i>[Note:</i> For POSIX-like implementations, including<b> </b>Unix
+  variants, Linux, and Mac OS X, only paths
+  that begin with a slash are absolute paths.</p>
+ <p>For Windows-like implementations, including <a href="http://www.cygwin.com/";>
+  Cygwin</a> and
+ <a href="http://www.mingw.org/";>MinGW</a>, only paths that begin with a drive + specifier followed by a slash, or begin with two slashes, are absolute paths.&nbsp;<i>--end
+  note]</i></p>
+</blockquote>
+<p><b><a name="Relative-path">Relative path</a>:</b> A path that uniquely
+identifies a file only when considered relative to some other path. [<i>Note:</i> +Paths &quot;.&quot; and &quot;..&quot; are considered to be relative paths. <i>--end note</i>]</p> +<p><i><b><a name="Pathname">Pathname</a>:</b> </i>A character string that represents a +path. Pathnames are formatted according to the generic pathname format or the
+native pathname format.</p>
+<p><b><i><a name="generic-pathname-format">Generic pathname format:</a></i></b></p>
+<blockquote>
+<p><i>pathname:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root-name<sub>opt</sub>
+root-directory<sub>opt</sub> relative-path<sub>opt</sub></i></p>
+<p><i>root-name:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+implementation-defined</i></p>
+<blockquote>
+  <blockquote>
+<p>[<i>Note:</i> Most POSIX and Windows based operating system define a name
+beginning with two slashes (or backslashes, for Windows) as a root-name
+identifying network locations. Windows defines a single letter followed by a +<code>&quot;:&quot;</code> as a root-name identifying a disc drive. <i>--end note</i>]</p>
+  </blockquote>
+</blockquote>
+<p><i>root-directory:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+directory-separator</i></p>
+<p><i>relative-path:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+filename<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relative-path
+directory-separator<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relative-path
+directory-separator filename</i></p>
+<p><i>filename:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </i><code>&quot;.&quot;</code><i><br> +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </i><code>
+&quot;..&quot;</code></p>
+<p><i>directory-separator:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code>&quot;/&quot;<br> +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;/&quot;</code> directory-separator</i></p> +<p>Multiple successive <i>directory-separator</i> characters are considered to +be the same as one <i>directory-separator</i> character. The <i>filename</i> +<code>&quot;.&quot;</code> is considered to be a reference to the current directory. The +<i>filename</i> <code>&quot;..&quot;</code> is considered to be a reference to the current +directory. Specific <i>filenames</i> may have special meaning for a particular
+operating system.</p>
+</blockquote>
+<p><b><i><a name="native-pathname-format">Native pathname format:</a></i></b>&nbsp;
+An implementation defined format. [<i>Note:</i> For POSIX-like operating
+systems, the native format is the same as the generic format. For Windows, the
+native format is similar to the generic format, but the directory-separator
+characters can be either slashes or backslashes. <i>--end note</i>]</p>
+<p><i><b><a name="Link">Link</a>:</b> </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><b><i><a name="Hard-link">Hard link</a>:</i></b> 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">S<b>ymbolic link</b></a><b>:</b> </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
+&quot;dangling&quot; symbolic link.<i> -- end note</i>]<i> </i></p>
+</blockquote>
+<p><b><i><a name="Race-condition">Race condition</a>:</i></b> The condition that occurs
+when multiple threads, processes, or computers interleave access and
+modification of
+the same object within a file system.</p>
+<p><b><i><a name="Dot">Dot</a>, Dot Dot:</i></b> Synonyms for the filenames <code>&quot;.&quot;</code> +and <code>&quot;..&quot;</code>, respectively. The dot filename names the current
+directory. The dot dot filename names the parent directory.</p>
+<h2><a name="Conformance">Conformance</a></h2>
+<p>Behavior is sometimes specified by reference to ISO/IEC 9945:2003, <i>
+<a href="http://www.unix.org/single_unix_specification/";>POSIX</a></i>. How such behavior is actually implemented is unspecified.</p>
+<blockquote>
+<p>[<i>Note:</i> This constitutes an &quot;as if&quot; rule for implementation of +operating system dependent behavior. Presumably implementations will usually 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 and file 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>filesystem_error</code> exception, a special
+return value, or some other manner. <i>--end note</i>]</p>
+</blockquote>
+<p>Specific operating systems such as <i>OpenMVS</i>,
+<i>UNIX</i>, and <i>Windows</i> are mentioned only for purposes of illustration or to +give guidance to implementers. No slight to other operating systems is implied
+or intended.</p>
+<p>The <i>Effects</i> and <i>Postconditions</i> of functions described in this
+reference
+may not be achieved in
+the presence of <a href="#Race-condition">race conditions</a>. No diagnostic is required.</p> +<p>If the possibility of race conditions would make 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>
+<h2><a name="Header-filesystem-synopsis">Header <code>&lt;boost/filesystem&gt;</code> synopsis</a></h2>
+<pre>  namespace boost
+  {
+    namespace filesystem
+    {
+      class <a href="#class-path">path</a>;
+
+      void swap(path&amp; lhs, path&amp; rhs);
+ bool lexicographical_compare(path::iterator first1, path::iterator last1, + path::iterator first2, path::iterator last2);
+
+      bool operator==(const path&amp; lhs, const path&amp; rhs);
+      bool operator!=(const path&amp; lhs, const path&amp; rhs);
+      bool operator&lt; (const path&amp; lhs, const path&amp; rhs);
+      bool operator&lt;=(const path&amp; lhs, const path&amp; rhs);
+      bool operator&gt; (const path&amp; lhs, const path&amp; rhs);
+      bool operator&gt;=(const path&amp; lhs, const path&amp; rhs);
+
+      path operator/ (const path&amp; lhs, const path&amp; rhs);
+
+ std::ostream&amp; operator&lt;&lt;( std::ostream&amp; os, const path&amp; p ); + std::wostream&amp; operator&lt;&lt;( std::wostream&amp; os, const path&amp; p ); + std::istream&amp; operator&gt;&gt;( std::istream&amp; is, path&amp; p ); + std::wistream&amp; operator&gt;&gt;( std::wistream&amp; is, path&amp; p )
+
+ <span style="background-color: #FFFFFF">class <a href="#Class-filesystem_error">filesystem_error</a>;</span><span style="background-color: #FFFF00">
+</span>
+ <span style="background-color: #FFFFFF">class <a href="#Class-directory_entry">directory_entry</a>;
+
+</span> class <a href="#Class-directory_iterator">directory_iterator</a>;
+
+ class <a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a>;
+
+ enum <a name="file_type">file_type</a> { status_error, file_not_found, regular_file, directory_file, + symlink_file, block_file, character_file, fifo_file, socket_file,
+                       type_unknown
+                     };
+
+      class <a href="#file_status">file_status</a>;
+
+ <span style="background-color: #FFFFFF">struct <a name="space_info">space_info</a> // returned by </span><a href="#space" style="text-decoration: none"><span style="background-color: #FFFFFF">space</span></a><span style="background-color: #FFFFFF"> function
+      {
+        uintmax_t capacity;
+        uintmax_t free;
+ uintmax_t available; // free space available to a non-privileged process
+      };
+
+      BOOST_SCOPED_ENUM_START(<a name="copy_option">copy_option</a>)
+      {
+        fail_if_exists,
+        overwrite_if_exists
+      };
+      BOOST_SCOPED_ENUM_END
+
+      // <a href="#Operational-functions">operational functions</a>
+
+</span> path <a href="#absolute">absolute</a>(const path&amp; p, const path&amp; base=current_path());
+
+ void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to); + void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to, system::error_code&amp; ec); + void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to, BOOST_SCOPED_ENUM(<a href="#copy_option">copy_option</a>) option); + void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to, BOOST_SCOPED_ENUM(<a href="#copy_option">copy_option</a>) option,
+                             system::error_code&amp; ec);
+
+ bool <a href="#create_directories">create_directories</a>(const path&amp; p); + bool <a href="#create_directories">create_directories</a>(const path&amp; p, system::error_code&amp; ec);
+
+ bool <a href="#create_directory">create_directory</a>(const path&amp; p); + bool <a href="#create_directory">create_directory</a>(const path&amp; p, system::error_code&amp; ec);
+
+ void <a href="#create_hard_link">create_hard_link</a>(const path&amp; to, const path&amp; from); + void <a href="#create_hard_link">create_hard_link</a>(const path&amp; to, const path&amp; from, system::error_code&amp; ec);
+
+<span style="background-color: #FFFFFF"> void <a href="#create_symlink">create_symlink</a>(const path&amp; to, const path&amp; from); + void <a href="#create_symlink">create_symlink</a>(const path&amp; to, const path&amp; from</span>, system::error_code&amp; ec<span style="background-color: #FFFFFF">);
+
+</span>      path         <a href="#current_path">current_path</a>();
+ path <a href="#current_path">current_path</a>(system::error_code&amp; ec); + void <a href="#current_path">current_path</a>(const path&amp; p); + void <a href="#current_path">current_path</a>(const path&amp; p, system::error_code&amp; ec);
+
+      bool         <a href="#exists">exists</a>(file_status s);
+      bool         <a href="#exists">exists</a>(const path&amp; p);
+ bool <a href="#exists">exists</a>(const path&amp; p, system::error_code&amp; ec);
+
+ bool <a href="#equivalent">equivalent</a>(const path&amp; p1, const path&amp; p2); + bool <a href="#equivalent">equivalent</a>(const path&amp; p1, const path&amp; p2, system::error_code&amp; ec);
+
+ <span style="background-color: #FFFFFF; ">uintmax_t</span> <a href="#file_size">file_size</a>(const path&amp; p); + <span style="background-color: #FFFFFF; ">uintmax_t</span> <a href="#file_size">file_size</a>(const path&amp; p, system::error_code&amp; ec);
+
+      bool         <a href="#is_directory">is_directory</a>(file_status s);
+ bool <a href="#is_directory2">is_directory</a>(const path&amp; p); + bool <a href="#is_directory2">is_directory</a>(const path&amp; p, system::error_code&amp; ec);
+
+      bool         <a href="#is_empty">is_empty</a>(const path&amp; p);
+ bool <a href="#is_empty">is_empty</a>(const path&amp; p, system::error_code&amp; ec);
+
+      bool         <a href="#is_other">is_other</a>(file_status s);
+      bool         <a href="#is_other2">is_other</a>(const path&amp; p,);
+ bool <a href="#is_other2">is_other</a>(const path&amp; p, system::error_code&amp; ec);
+
+ bool <a href="#is_regular_file">is_regular_file</a>(file_status s); + bool i<a href="#is_regular_file2">s_regular_file</a>(const path&amp; p); + bool i<a href="#is_regular_file2">s_regular_file</a>(const path&amp; p, system::error_code&amp; ec);
+
+      bool         <a href="#is_symlink">is_symlink</a>(file_status s);
+ bool <a href="#is_symlink2">is_symlink</a>(const path&amp; p); + bool <a href="#is_symlink2">is_symlink</a>(const path&amp; p, system::error_code&amp; ec);
+
+ std::time_t <a href="#last_write_time">last_write_time</a>(const path&amp; p); + std::time_t <a href="#last_write_time">last_write_time</a>(const path&amp; p, system::error_code&amp; ec); + void <a href="#last_write_time2">last_write_time</a>(const path&amp; p, const std::time_t new_time); + void <a href="#last_write_time2">last_write_time</a>(const path&amp; p, const std::time_t new_time, system::error_code&amp; ec);
+
+ path <a href="#read_symlink">read_symlink</a>(const path&amp; p); + path <a href="#read_symlink">read_symlink</a>(const path&amp; p, system::error_code&amp; ec);
+
+      bool         <a href="#remove">remove</a>(const path&amp; p);
+ bool <a href="#remove">remove</a>(const path&amp; p, system::error_code&amp; ec);
+
+      uintmax_t    <a href="#remove_all">remove_all</a>(const path&amp; p);
+ uintmax_t <a href="#remove_all">remove_all</a>(const path&amp; p, system::error_code&amp; ec);
+
+ void <a href="#rename">rename</a>(const path&amp; from, const path&amp; to); + void <a href="#rename">rename</a>(const path&amp; from, const path&amp; to, system::error_code&amp; ec);
+
+<span style="background-color: #FFFFFF"> <a href="#space_info">space_info</a> <a href="#space">space</a>(const path&amp; p); + <a href="#space_info">space_info</a> <a href="#space">space</a>(const path&amp; p</span>, system::error_code&amp; ec<span style="background-color: #FFFFFF">);
+</span><span style="background-color: #FFFF00">
+</span> <a href="#file_status">file_status</a> <a href="#status">status</a>(const path&amp; p); + <a href="#file_status">file_status</a> <a href="#status">status</a>(const path&amp; p, system::error_code&amp; ec);
+
+      bool         <a href="#status_known">status_known</a>(file_status s);
+
+ <a href="#file_status">file_status</a> <a href="#symlink_status">symlink_status</a>(const path&amp; p); + <a href="#file_status">file_status</a> <a href="#symlink_status">symlink_status</a>(const path&amp; p, system::error_code&amp; ec);
+
+ path <a href="#system_complete">system_complete</a>(const path&amp; p); + path <a href="#system_complete">system_complete</a>(const path&amp; p, system::error_code&amp; ec);
+
+ path <a href="#unique_path">unique_path</a>(const path&amp; model=&quot;%%%%-%%%%-%%%%-%%%%&quot;); + path <a href="#unique_path">unique_path</a>(const path&amp; model, system::error_code&amp; ec);
+
+    } // namespace filesystem
+  } // namespace boost</pre>
+<h2><a name="Error-reporting">Error reporting</a></h2>
+<p>Filesystem library functions often provide two overloads, one that
+throws an exception to report file system errors, and another that sets an
+<code>error_code</code>.</p>
+<blockquote>
+<p>[<i>Note:</i> This supports two common use cases:</p>
+<ul>
+  <li>Uses where file system
+errors are truly exceptional and indicate a serious failure. Throwing an
+ exception is the most appropriate response. This is the preferred default for
+  most everyday programming.<br>
+&nbsp;</li>
+ <li>Uses where file system system errors are routine and do not necessarily represent + failure. Returning an error code is the most appropriate response. This allows + application specific error handling, including simply ignoring the error.</li>
+</ul>
+  <p><i>--end note</i>]</p>
+</blockquote>
+<p>Functions <b>not</b> having an argument of type
+<code>system::error_code&amp;</code>
+report errors as follows, unless otherwise specified:</p>
+  <ul>
+  <li>When a call by the
+ implementation to an operating system or other underlying API results in an + error that prevents the function from meeting its specifications, an exception
+  of type
+<code>filesystem_error</code> is thrown.<br>
+&nbsp;</li>
+ <li>Failure to allocate storage is reported by throwing an exception as described in the C++ standard,
+  17.6.4.10 [res.on.exception.handling].<br>
+&nbsp;</li>
+  <li>Destructors throw nothing.</li>
+  </ul>
+  <p>Functions having an argument of type
+<code>system::error_code&amp;</code> report errors as follows, unless otherwise
+  specified:</p>
+<ul>
+  <li>If a call by the
+ implementation to an operating system or other underlying API results in an
+  error that prevents the function from meeting its specifications, the
+<code>system::error_code&amp;</code> argument is set as
+ appropriate appropriate for the specific error. Otherwise, <code>clear()</code>
+  is called on the
+<code>system::error_code&amp;</code> argument.<br>
+&nbsp;</li>
+  <li>Failure to allocate storage is reported by
+  throwing an exception as described in the C++ standard,
+  17.6.4.10 [res.on.exception.handling].</li>
+</ul>
+<h2><a name="class-path">Class <code>path</code></a></h2>
+<p>An object of class <code>path</code> represents a <a href="#Path">path</a>, +and contains a <a href="#Pathname">pathname</a> Such an object is concerned only with the lexical and syntactic aspects +of a path. The path may not actually exist in external storage, and may contain pathnames which are not even valid for the current operating
+system. </p>
+<pre>  namespace boost
+  {
+    namespace filesystem
+    {
+      class path
+      {
+      public:
+ typedef <b><i><a href="#value_type">see below</a></i></b> value_type; // char for POSIX, wchar_t for Windows + typedef std::basic_string&lt;value_type&gt; string_type; + typedef std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; codecvt_type;
+
+        // <a href="#path-constructors">constructors</a> and destructor
+        path();
+        path(const path&amp; p);
+
+        template &lt;class <a href="#Source">Source</a>&gt;
+ path(Source const&amp; source, const codecvt_type&amp; cvt=codecvt());
+
+        template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
+ path(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());
+
+       ~path();
+
+        // <a href="#path-assignments">assignments</a>
+        path&amp; operator=(const path&amp; p);
+
+        template &lt;class <a href="#Source">Source</a>&gt;
+          path&amp; operator=(Source const&amp; source);
+
+        template &lt;class <a href="#Source">Source</a>&gt;
+ path&amp; assign(Source const&amp; source, const codecvt_type&amp; cvt)
+
+        template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
+ path&amp; assign(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());
+
+        // <a href="#path-appends">appends</a>
+        path&amp; operator/=(const path&amp; p);
+
+        template &lt;class <a href="#Source">Source</a>&gt;
+          path&amp; operator/=(Source const&amp; source);
+
+        template &lt;class <a href="#Source">Source</a>&gt;
+ path&amp; append(Source const&amp; source, const codecvt_type&amp; cvt);
+
+        template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
+ path&amp; append(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());
+
+        // <a href="#path-modifiers">modifiers</a>
+        void  <a href="#path-clear">clear</a>();
+ path&amp; <a href="#absolute">make_absolute</a>(const path&amp; base); + path&amp; <a href="#path-make_preferred">make_preferred</a>(); // POSIX: no effect. Windows: convert slashes to backslashes
+        path&amp; <a href="#path-remove_filename">remove_filename</a>();
+ path&amp; <a href="#path-replace_extension">replace_extension</a>(const path&amp; new_extension = path());
+        void  <a href="#path-swap">swap</a>(path&amp; rhs);
+
+ // <a href="#path-native-format-observers">native format observers</a>
+        const string_type&amp;  native() const;  // native format, encoding
+        const value_type*   c_str() const;   // native().c_str()
+
+        template &lt;class String&gt;
+ String string(const codecvt_type&amp; cvt=codecvt()) const; // native format
+
+ const string string(const codecvt_type&amp; cvt=codecvt()) const; // native format + const wstring wstring(const codecvt_type&amp; cvt=codecvt()) const; // ditto + const u16string u16string() const; // ditto + const u32string u32string() const; // ditto
+
+ // <a href="#path-generic-format-observers">generic format observers</a>
+        template &lt;class String&gt;
+        String generic_string() const;
+
+ const string generic_string(const codecvt_type&amp; cvt=codecvt()) const; // generic format + const wstring generic_wstring(const codecvt_type&amp; cvt=codecvt()) const; // ditto + const u16string generic_u16string() const; // ditto + const u32string generic_u32string() const; // ditto
+
+        // <a href="#path-decomposition">decomposition</a>
+        path  <a href="#path-root_name">root_name</a>() const;
+        path  <a href="#path-root_directory">root_directory</a>() const;
+        path  <a href="#path-root_path">root_path</a>() const;
+        path  <a href="#path-relative_path">relative_path</a>() const;
+        path  <a href="#path-parent_path">parent_path</a>() const;
+        path  <a href="#path-filename">filename</a>() const;
+        path  <a href="#path-stem">stem</a>() const;
+        path  <a href="#path-extension">extension</a>() const;
+
+        // <a href="#path-query">query</a>
+        bool <a href="#path-query">empty</a>() const;
+        bool <a href="#path-has_root_name">has_root_name</a>() const;
+ bool <a href="#path-has_root_directory">has_root_directory</a>() const;
+        bool <a href="#path-has_root_path">has_root_path</a>() const;
+ bool <a href="#path-has_relative_path">has_relative_path</a>() const;
+        bool <a href="#path-has_parent_path">has_parent_path</a>() const;
+        bool <a href="#path-has_filename">has_filename</a>() const;
+        bool <a href="#path-has_stem">has_stem</a>() const;
+        bool <a href="#path-has_extension">has_extension</a>() const;
+        bool <a href="#path-is_absolute">is_absolute</a>() const;
+        bool <a href="#path-is_relative">is_relative</a>() const;
+
+        // <a href="#path-iterators">iterators</a>
+        class iterator;
+        typedef iterator const_iterator;
+
+        iterator begin() const;
+        iterator end() const;
+
+        // encoding conversion
+        static std::locale imbue( const std::locale&amp; loc );
+        static const codecvt_type &amp; codecvt();
+
+      private:
+        string_type pathname;  // <b><i>exposition only</i></b>
+      };
+
+    } // namespace filesystem
+  } // namespace boost</pre>
+<p><code><a name="value_type">value_type</a></code> is an implementation-defined typedef for the
+character type used by the implementation to represent pathnames.</p>
+<blockquote>
+<p><i>[Note:</i> For POSIX-like implementations, including<b> </b>Unixes, Linux,
+and Mac OS X, <code>path::value_type</code>
+is <code>char</code> .</p>
+<p>For Windows-like implementations, including
+  <a href="http://www.cygwin.com/";>Cygwin</a> and
+<a href="http://www.mingw.org/";>MinGW</a>, <code>path::value_type</code> is <code>
+wchar_t</code>.&nbsp;<i>--end note]</i></p>
+</blockquote>
+<p>For member functions described as returning <code>const string</code>, <code> +const wstring</code>, <code>const u16string</code>, or <code>const u32string</code>, +implementations are permitted to return <code>const string&amp;</code>, <code>const +wstring&amp;</code>, <code>const u16string&amp;</code>, or <code>const u32string&amp;</code>,
+respectively.</p>
+<blockquote>
+<p>[<i>Note:</i> This allows implementations to avoid unnecessary copies when no
+conversion is required.
+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>
+<p><code><a name="InputIterator">InputIterator</a></code> is required meet the
+requirements for a C++ standard library <code>RandomIterator</code>
+compliant iterator. The iterator's value type is required to be <code>char</code>, <code>
+  wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</p>
+<p><code><a name="Source">Source</a></code> is required to be one of:</p>
+<ul>
+  <li>A container with a value type of <code>char</code>, <code>
+  wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</li>
+ <li>An iterator for a null terminated byte-string. The value type is required + to be <code>char</code>, <code>wchar_t</code>, <code>char16_t</code>, or <code>
+  char32_t</code>.</li>
+  <li>A C-array. The value type is required to be <code>char</code>, <code>
+  wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</li>
+  <li>A <code>boost::filesystem::directory_entry</code>.</li>
+</ul>
+<p>The specifications for certain <code>path</code> functions require that
+arguments in the generic pathname format be converted to native pathname format
+as they are stored in <code>pathname</code>. If the native format requires
+regular file paths and directory paths to be formatted differently, the
+implementation shall determine which format to use according to whether or not +the last element of the generic format string is a separator. [<i>Example:</i>
+On <a href="http://en.wikipedia.org/wiki/OpenVMS";>OpenVMS</a>, a path
+constructed from <code>&quot;/cats/jane&quot;</code> would considered a regular file +path, and have a native format of <code>&quot;[CATS]JANE&quot;</code>, while a +path constructed from <code>&quot;/cats/jane/&quot;</code> would be considered a +directory path, and have a native format of <code>&quot;[CATS.JANE]&quot;</code>. +<i>--end example</i>] [<i>Note</i>: POSIX and Windows use the same native format +for regular file and directory pathnames, so this paragraph does not apply to
+them. <i>--end note</i>]</p>
+
+<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+  <tr>
+    <td style="font-size: 10pt">
+    Class <code>path</code> does not currently map invalid characters in
+ filenames to valid characters. In the future we might add something like
+    this:<blockquote>
+<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>
+</blockquote>
+    </blockquote>
+    </td>
+  </tr>
+</table>
+
+<h3> <a name="path-constructors"> <code>
+<font size="4">path</font></code> constructors</a></h3>
+<pre>path();</pre>
+<blockquote>
+  <p><i>Postconditions:</i> <code>empty()</code>.</p>
+  </blockquote>
+<pre>template &lt;class <a href="#Source">Source</a>&gt;
+ path(Source const&amp; source, const codecvt_type&amp; cvt=codecvt());</pre>
+<pre>template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
+ path(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());</pre>
+<blockquote>
+ <p><i>Effects:</i> Stores the contents [<code>begin</code>,<code>end</code>) + or <code>source</code> in <code>pathname</code>. If the contents are in the + generic format, they are converted to the native format. [<i>Note:</i> For
+  POSIX and Windows based implementations, the generic format is already
+  acceptable as a native format, so no generic to native conversion is
+  performed. <i>--end note</i>]</p>
+  <p>
+ <i>Remarks:</i> If the value type of&nbsp; [<code>begin</code>,<code>end</code>) + or <code>source</code> is not <code>value_type</code>, conversion is performed
+  by <code>cvt</code>.</p>
+</blockquote>
+<h3> <a name="path-assignments"> <code>
+<font size="4">path</font></code> assignments</a></h3>
+<pre>template &lt;class <a href="#Source">Source</a>&gt;
+  path&amp; operator=(Source const&amp; source);</pre>
+<pre>template &lt;class <a href="#Source">Source</a>&gt;
+ path&amp; assign(Source const&amp; source, const codecvt_type&amp; cvt);</pre>
+<pre>template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
+ path&amp; assign(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());</pre>
+<blockquote>
+ <p><i>Effects:</i> Stores the contents [<code>begin</code>,<code>end</code>) + or <code>source</code> in <code>pathname</code>. If the contents are in the + generic format, they are converted to the native format. [<i>Note:</i> For
+  POSIX and Windows based implementations, the generic format is already
+  acceptable as a native format, so no generic to native conversion is
+  performed. <i>--end note</i>]</p>
+  <p>
+  <i>Returns: </i><code>*this</code></p>
+  <p>
+ <i>Remarks:</i> If the value type of&nbsp; [<code>begin</code>,<code>end</code>) + or <code>source</code> is not <code>value_type</code>, conversion is performed
+  by <code>cvt</code>.</p>
+  </blockquote>
+<h3> <a name="path-appends"><code><font size="4"> path</font></code> appends</a></h3> + <p>The append operations use <code>operator/=</code> to denote their semantic + effect of appending the platform's preferred directory separator when needed. The
+  preferred
+  directory separator is implementation-defined.</p>
+<blockquote>
+ <p align="left">[<i>Note: </i>For POSIX-like implementations, including<b> </b> + Unix variants, Linux, and Mac OS X, the preferred directory separator is a
+    single forward slash.</p>
+    <p align="left">For Windows-like implementations, including
+  <a href="http://www.cygwin.com/";>Cygwin</a> and
+    <a href="http://www.mingw.org/";>MinGW</a>, the preferred directory
+    separator is a single backslash.<i>--end note</i>]</p>
+      </blockquote>
+<pre>path&amp; operator/=(const path&amp; p);</pre>
+<blockquote>
+  <p><i>Effects:</i></p>
+  <blockquote>
+ Appends the preferred directory separator to the contained pathname, unless:<ul>
+    <li>an added separator
+    would be redundant, or</li>
+    <li>would change an relative path to an absolute path, or</li>
+    <li><code>p.empty()</code>, or</li>
+    <li><code>*p.native().cbegin()</code> is a directory separator.</li>
+  </ul>
+    <p>Appends <code>p.native()</code> to <code>pathname</code>.</p>
+  </blockquote>
+  <p><i>Returns: </i><code>*this</code></p>
+</blockquote>
+<pre>template &lt;class <a href="#Source">Source</a>&gt;
+  path&amp; operator/=(Source const &amp; source);</pre>
+<pre>template &lt;class <a href="#Source">Source</a>&gt;
+ path&amp; append(Source const &amp; source, const codecvt_type&amp; cvt);</pre>
+<pre>template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
+ path&amp; append(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());</pre>
+<blockquote>
+  <p><i>Effects:</i></p>
+  <blockquote>
+ <p>Appends a native directory separator to the contained pathname, unless:</p>
+    <ul>
+    <li>an added separator
+    would be redundant, or</li>
+    <li>would change an relative path to an absoute path, or</li>
+    <li><code>p.empty()</code>, or</li>
+    <li><code>*p.native().cbegin()</code> is a separator.</li>
+  </ul>
+    <p>Appends the contents [<code>begin</code>,<code>end</code>)
+ or <code>source</code> to <code>pathname</code>. If the contents are in the + generic format, they are converted to the native format. [<i>Note:</i> For
+    POSIX and Windows based implementations, the generic format is already
+    acceptable as a native format, so no generic to native conversion is
+    performed. <i>--end note</i>]</p>
+  </blockquote>
+ <p><i>Remarks:</i> If the value type of&nbsp; [<code>begin</code>,<code>end</code>) + or <code>source</code> is not <code>value_type</code>, conversion is performed
+  by <code>cvt</code>.</p>
+  <p><i>Returns: </i><code>*this</code></p>
+  </blockquote>
+
+<h3> <a name="path-modifiers"> <code>
+<font size="4">path</font></code> modifiers</a></h3>
+<pre>void <a name="path-clear">clear</a>();</pre>
+<blockquote>
+<p><i>Postcondition:</i> <code>this-&gt;empty()</code> is true.</p>
+</blockquote>
+<pre>path&amp; <a name="path-make_preferred">make_preferred</a>();</pre>
+<blockquote>
+ <p><i>Effects:</i> The contained pathname is converted to the preferred native
+  format. [<i>Note:</i> On Windows, the effect is to replace slashes with
+  backslashes. On POSIX, there is no effect. <i>-- end note</i>]</p>
+  <p><i>Returns:</i> <code>*this</code></p>
+</blockquote>
+
+<pre>path&amp; <a name="path-remove_filename">remove_filename</a>();</pre>
+<blockquote>
+  <p><i>Returns: </i>As if, <code>*this = parent_path();</code></p>
+  <p>[<i>Note:</i> This function is needed to efficiently implement <code>
+ directory_iterator</code>. It is exposed to allow additional uses. The actual + implementation may be much more efficient than <code>*this = parent_path()</code>&nbsp; <i>-- end
+  note</i>]</p>
+</blockquote>
+<pre>path&amp; <a name="path-replace_extension">replace_extension</a>(const path&amp; new_extension = path());</pre>
+<blockquote>
+  <p><i>Postcondition: </i> <code>extension() == <i>replacement</i></code>,
+ where <code><i>replacement</i></code> is <code>new_extension</code> if <code>
+  new_extension.empty() || new_extension[0] ==</code> the dot character,
+ otherwise <code><i>replacement</i></code> is the dot character followed by
+  <code>new_extension</code>.</p>
+  <p><i>Returns:</i> <code>*this</code></p>
+</blockquote>
+<pre><code><span style="background-color: #FFFFFF">void <a name="path-swap">swap</a>(path&amp; 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">Complexity: </span></i>
+  <span style="background-color: #FFFFFF">constant time.</span></p>
+</blockquote>
+
+<h3> <a name="path-native-format-observers"><code><font size="4">path</font></code>
+native format observers</a></h3>
+<p>The string returned by all native format observers is in the
+<a href="#native-pathname-format">native pathname format</a>.</p>
+<pre>const string_type&amp;  native() const;</pre>
+<blockquote>
+<p><i>Returns:</i> <code>pathname</code>.</p>
+<p><i>Throws:</i> nothing.</p>
+</blockquote>
+<pre>const value_type* c_str() const;</pre>
+<blockquote>
+<p><i>Returns:</i> <code>pathname.c_str()</code>.</p>
+<p><i>Throws:</i> nothing.</p>
+</blockquote>
+<pre>template &lt;class String&gt;
+String string(const codecvt_type&amp; cvt=codecvt()) const;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>pathname</code>.</p>
+<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>
+String</code>, conversion is performed by <code>cvt</code>.</p>
+</blockquote>
+<pre>const string string(const codecvt_type&amp; cvt=codecvt()) const;
+const wstring wstring(const codecvt_type&amp; cvt=codecvt()) const;
+const u16string u16string() const;
+const u32wstring u32wstring() const; </pre>
+<blockquote>
+<p><i>Returns:</i> <code>pathname</code>.</p>
+<p><i>Remarks:</i> If <code>string_type</code> is a different type than
+function's return type, conversion is performed by <code>cvt</code>.</p>
+<p>If <code>string_type</code> is the same type as the
+function's return type, the function is permitted to return by <code>const&amp;</code> +rather than <code>const</code> value. [<i>Note:</i> For POSIX, this occurs for +<code>string()</code>, for Windows, <code>wstring()</code>. <i>--end note</i>]</p>
+</blockquote>
+
+<h3> <a name="path-generic-format-observers"><code><font size="4">path</font></code>
+generic format observers</a></h3>
+<p>The string returned by all generic format observers is in the
+<a href="#generic-pathname-format">generic pathname format</a>.</p>
+<p>[<i>Note:</i> For POSIX, no conversion occurs, since the native format and +generic format are the same. For Windows, backslashes are converted to slashes
+<i>--end note</i>]</p>
+<pre>template &lt;class String&gt;
+String generic_string(const codecvt_type&amp; cvt=codecvt()) const;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>pathname</code>.</p>
+<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>
+String</code>, conversion is performed by
+<code>cvt</code>.</p>
+</blockquote>
+<pre>const string generic_string(const codecvt_type&amp; cvt=codecvt()) const;
+const wstring generic_wstring(const codecvt_type&amp; cvt=codecvt()) const;
+const u16string generic_u16string() const;
+const u32wstring generic_u32wstring() const; </pre>
+<blockquote>
+<p><i>Returns:</i> <code>pathname</code>.</p>
+<p><i>Remarks:</i>&nbsp; If <code>string_type</code> is a different type than
+function's return type, conversion is performed by <code>cvt</code>.</p>
+<p>If <code>string_type</code> is of the same type as the
+function's return type, and the generic format is the same as the native format, +the function is permitted to return by <code>const&amp;</code> rather than <code> +const</code> value. [<i>Note:</i> For POSIX, this occurs for <code>string()</code>. +It never occurs for Windows, because backslashes must be converted to slashes.
+<i>--end note</i>]</p>
+</blockquote>
+
+<h3> <a name="path-decomposition"> <code><font size="4">path</font></code>
+decomposition</a></h3>
+<p><span style="background-color: #E0E0E0"><i>See the
+<a href="#Path-decomposition-table">Path decomposition table</a> for examples
+for values returned by decomposition functions. The
+<a href="tutorial.html#Using-path-decomposition">Tutorial</a> may also be
+helpful.</i></span></p>
+<pre>path <a name="path-root_name">root_name</a>() const;</pre>
+<blockquote>
+<p><i>Returns:</i> <i>root-name,</i> if <code>pathname</code> includes <i>
+root-name</i>, otherwise <code>path()</code>. </p>
+</blockquote>
+<pre>path <a name="path-root_directory">root_directory</a>() const;</pre>
+<blockquote>
+<p><i>Returns:</i> <i>root-directory</i>, if <code>pathname</code> includes <i>
+root-directory</i>, otherwise <code>path()</code>.</p>
+<p>If <i>root-directory</i> is composed of <i>slash name</i>, <i>slash</i> is
+excluded from the returned string.</p>
+</blockquote>
+<pre>path <a name="path-root_path">root_path</a>() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>root_name() / root_directory()</code></p>
+</blockquote>
+<pre>path <a name="path-relative_path">relative_path</a>() const;</pre>
+<blockquote>
+<p><i>Returns:</i> A <code>path</code> composed from <code>pathname</code>, if <code>
+!empty()</code>, beginning
+with the first <i>filename</i> after <i>root-path</i>. Otherwise, <code>path()</code>.</p>
+</blockquote>
+<pre>path <a name="path-parent_path">parent_path</a>() const;</pre>
+<blockquote>
+ <p><i>Returns:</i> <code>(empty() || begin() == --end()) ? path() : <i>pp</i></code>, where
+  <code><i>pp</i></code> is constructed as if by
+  starting with an empty <code>path</code> and successively applying <code>
+ operator/=</code> for each element in the range <code>begin()</code>, <code>
+  --end()</code>.</p>
+</blockquote>
+<pre>path <a name="path-filename">filename</a>() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>empty() ? path() : *--end()</code></p>
+  <p>[<i>Example:</i></p>
+  <blockquote>
+ <pre><code>std::cout &lt;&lt; path(&quot;/foo/bar.txt&quot;).filename();</code> // outputs &quot;<code>bar.txt</code>&quot; (without the quotes)</pre>
+  </blockquote>
+  <p> <i>--end example</i>]</p>
+</blockquote>
+<pre>path <a name="path-stem">stem</a>(const path&amp; p) const;</pre>
+<blockquote>
+ <p><i>Returns:</i> if <code>p.filename()</code>contains a dot but does not
+  consist solely of one or to two dots, returns
+  the substring of <code>p.filename()</code> starting at its beginning and
+  ending at the last dot (the dot is not included). Otherwise,
+  returns <code>
+  p.filename()</code>.</p>
+  <p>[<i>Example:</i></p>
+  <blockquote>
+ <pre><code>std::cout &lt;&lt; path(&quot;/foo/bar.txt&quot;).stem();</code> // outputs &quot;<code>bar</code>&quot; (without the quotes)</pre>
+    <pre>path p = &quot;foo.bar.baz.tar&quot;;
+for (; !p.extension().empty(); p = p.stem())
+  std::cout &lt;&lt; p.extension() &lt;&lt; '\n';
+  // outputs: .tar
+  //          .baz
+  //          .bar</pre>
+  </blockquote>
+  <p> <i>--end example</i>]</p>
+</blockquote>
+<pre>path <a name="path-extension">extension</a>(const path&amp; p) const;</pre>
+<blockquote>
+ <p><i>Returns:</i> if <code>p.filename()</code> contains a dot but does not
+  consist solely of one or to two dots, returns
+  the substring of <code>p.filename()</code> starting at the rightmost dot
+ and ending at the path's end. Otherwise, returns an empty <code>path</code>
+  object. </p>
+ <p><i>Remarks:</i> Implementations are permitted but not required to define additional + behavior for file systems which append additional elements to extensions, such
+  as alternate data streams or partitioned dataset names.</p>
+  <p>[<i>Example:</i></p>
+  <blockquote>
+ <pre><code>std::cout &lt;&lt; path(&quot;/foo/bar.txt&quot;).extension(); //</code> outputs &quot;<code>.txt</code>&quot; (without the quotes)</pre>
+  </blockquote>
+  <p> <i>--end example</i>]</p>
+  <p>[<i>Note:<b> </b></i>The dot is included in the return value so that
+ it is possible to distinguish between no extension and an empty extension. See
+  <a href="http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744";>
+  http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744</a> for more
+  extensive rationale.&nbsp; <i>-- end note</i>]</p>
+</blockquote>
+<h3> <a name="path-query"> <code><font size="4">path</font></code> query</a></h3>
+<pre>bool <a name="path-empty">empty</a>() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>m_pathname.empty()</code>.</p>
+</blockquote>
+<pre>bool <a name="path-has_root_path">has_root_path</a>() const;</pre>
+<blockquote>
+ <p><i>Returns:</i> <code>!<a href="#path-root_path">root_path</a>().empty()</code></p>
+</blockquote>
+<pre>bool <a name="path-has_root_name">has_root_name</a>() const;</pre>
+<blockquote>
+ <p><i>Returns:</i> <code>!<a href="#path-root_name">root_name</a>().empty()</code></p>
+</blockquote>
+<pre>bool <a name="path-has_root_directory">has_root_directory</a>() const;</pre>
+<blockquote>
+ <p><i>Returns:</i> <code>!<a href="#path-root_directory">root_directory</a>().empty()</code></p>
+</blockquote>
+<pre>bool <a name="path-has_relative_path">has_relative_path</a>() const;</pre>
+<blockquote>
+ <p><i>Returns:</i> <code>!<a href="#path-has_relative_path">relative_path</a>().empty()</code></p>
+</blockquote>
+<pre>bool <a name="path-has_parent_path">has_parent_path</a>() const;</pre>
+<blockquote>
+ <p><i>Returns:</i> <code>!<a href="#path-parent_path">parent_path</a>().empty()</code></p>
+</blockquote>
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/tutorial.html Sun Aug 22 23:21:17 2010
@@ -0,0 +1,1128 @@
+<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 Tutorial</title>
+<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../../index.htm">
+<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Tutorial</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="../../../../index.htm">Boost Home</a> &nbsp;&nbsp;
+    <a href="index.htm">Library Home</a> &nbsp;&nbsp;
+    <a href="reference.html">Reference</a> &nbsp;&nbsp;
+    <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
+    <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
+    <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
+    <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
+    <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
+    <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
+    </td>
+  </tr>
+</table>
+<p>
+      <a href="#Introduction">Introduction</a><br>
+      <a href="#Preliminaries">Preliminaries</a><br>
+ <a href="#Reporting-size">Reporting the size of a file - (tut1.cpp)</a><br> + <a href="#Using-status-queries">Using status queries to determine file existence and type - (tut2.cpp)</a><br>
+      <a href="#Directory-iteration">Directory iteration plus catching
+      exceptions - (tut3.cpp)</a><br>
+ <a href="#Using-path-decomposition">Using path decomposition, plus sorting results - (tut4.cpp)</a><br> + <a href="#Class-path-Constructors">Class path: Constructors, including
+      Unicode - (tut5.cpp)</a><br>
+ <a href="#Class-path-formats">Class path: Generic format vs. Native format</a><br> + <a href="#Class path-iterators-etc">Class path: Iterators, observers, composition, decomposition, and query - (path_info.cpp)</a><br>
+      <a href="#Error-reporting">Error reporting</a><br>
+</p>
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>This tutorial develops a little command line program to list information
+about files and directories - essentially a much simplified version of the POSIX <code>ls</code> or Windows <code>dir</code> +commands. We'll start with the simplest possible version and progress to more +complex functionality. Along the way we'll digress to cover topics you'll need
+to know about to understand Boost.Filesystem.</p>
+
+<p>Source code for each  of the tutorial programs is available, and you
+are encouraged to compile, test, and experiment with it. To conserve space, we won't
+always show boilerplate code here, but the provided source is complete and
+ready to build.</p>
+
+<h2><a name="Preliminaries">Preliminaries</a></h2>
+
+<p>Install the Boost distribution if you haven't already done so. See the
+<a href="http://www.boost.org/more/getting_started/index.html";>Boost Getting
+Started</a> docs.</p>
+
+<p>This tutorial assumes you are going to compile and test the examples using
+the provided scripts. That's highly recommended.</p>
+
+<blockquote>
+
+<p><b>If you are planning to compile and test the examples but not use the
+scripts, make sure your build setup knows where to
+locate or build the Boost library binaries.</b></p>
+
+</blockquote>
+<p>Fire up your command line interpreter, and type the following commands:</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt">
+      <pre>$ cd <i><b>boost-root</b></i>/libs/filesystem/example/test
+$ ./setup
+$ ./bld
+$ ./tut1
+Usage: tut1 path</pre>
+      </td>
+      <td style="font-size: 10pt">
+      <pre>&gt;cd <i><b>boost-root</b></i>\libs\filesystem\example\test
+&gt;setup
+&gt;bld
+&gt;tut1
+Usage: tut1 path</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>If the <code>tut1</code> command outputs &quot;<code>Usage: tut1 path</code>&quot;, all +is well. A set of tutorial programs has been copied (by <code>setup</code>) to
+<i><b><code>boost-root</code></b></i><code>/libs/filesystem/example/test</code>
+and then built. You are encouraged to modify and experiment with them as the +tutorial progresses. Just invoke the <code>bld</code> script again to rebuild.</p>
+
+<p>If something didn't work right, here are troubleshooting suggestions:</p>
+
+  <ul>
+    <li>The <code>bjam</code> program executable isn't being found.
+    Check your path environmental variable if it should have been found,
+    otherwise see
+    <a href="http://www.boost.org/more/getting_started/windows.html";>Boost
+    Getting Started</a>.<br>
+&nbsp;</li>
+    <li>Look at <code>bjam.log</code> to try to spot an indication of the
+    problem.</li>
+  </ul>
+
+<h2><a name="Reporting-size">Reporting the size of a file</a> - (<a href="../example/tut1.cpp">tut1.cpp</a>)</h2>
+
+<p>Let's get started. One of the simplest things we can do is report the size of
+a file.</p>
+
+<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+  <tr>
+    <td style="font-size: 10pt">
+    <pre><a href="../example/tut1.cpp">tut1.cpp</a></pre>
+    <blockquote style="font-size: 10pt">
+      <pre>#include &lt;iostream&gt;
+#include &lt;boost/filesystem.hpp&gt;
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc &lt; 2)
+  {
+    std::cout &lt;&lt; &quot;Usage: tut1 path\n&quot;;
+    return 1;
+  }
+ std::cout &lt;&lt; argv[1] &lt;&lt; &quot; &quot; &lt;&lt; file_size(argv[1]) &lt;&lt; '\n';
+  return 0;
+}</pre>
+    </blockquote>
+    </td>
+  </tr>
+</table>
+
+<p>The Boost.Filesystem <code><a href="reference.html#file_size">file_size</a></code>
+function returns a <code>uintmax_t</code>
+containing the size of the file named by the argument. The declaration looks
+like this:</p>
+
+<blockquote>
+ <pre><span style="background-color: #FFFFFF; ">uintmax_t</span> <a name="file_size">file_size</a>(const path&amp; p);</pre>
+</blockquote>
+<p>For now, all you need to know is that class path has constructors that take +<code>const char *</code> and many other useful types. (If you can't wait to +find out more, skip ahead to the <a href="#Class-path-Constructors">class path</a> section of
+the tutorial.)</p>
+<p>Please take a minute to try out <code>tut1</code> on your system, using a +file that is known to exist, such as <code>tut1.cpp</code>. Here is what the
+results look like on two different operating systems:</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt" valign="top">
+      <pre>$ ./tut1 tut1.cpp
+tut1.cpp 569</pre>
+      <pre>$ ls -l tut1.cpp
+-rwxrwxrwx 1 root root 569 2010-02-01 07:31 tut1.cpp</pre>
+      </td>
+      <td style="font-size: 10pt" valign="top">
+      <pre>&gt;tut1 tut1.cpp
+tut1.cpp 592
+&gt;dir tut1.cpp
+...
+01/30/2010 10:47 AM 592 tut1.cpp
+...</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>So far, so good. The reported Linux and Windows sizes are different because +the Linux tests used <code>&quot;\n&quot;</code> line endings, while the Windows tests
+used <code>&quot;\r\n&quot;</code> line endings.</p>
+  <p>Now try again, but give a path that doesn't exist:</p>
+
+  <table align="center" border="1" cellpadding="5" cellspacing="0"
+ style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt" valign="top">
+      <pre>$ ./tut1 foo
+terminate called after throwing an instance of 'boost::exception_detail::
+clone_impl&lt;boost::exception_detail::error_info_injector&lt;boost::
+filesystem::filesystem_error&gt; &gt;'
+ what(): boost::filesystem::file_size: No such file or directory: &quot;foo&quot;
+Aborted</pre>
+      </td>
+      <td style="font-size: 10pt" valign="top">
+      <pre>&gt;tut1 foo</pre>
+ <p><b><i>An exception is thrown; the exact form of the response depends on
+      Windows system options.</i></b></td>
+    </tr>
+  </table>
+
+  <p>What happens?
+  There's no file named <code>foo</code> in the current directory, so an
+exception is thrown.</p>
+  <p>Try this:</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt">
+      <pre>$ ./tut1 .
+terminate called after throwing an instance of 'boost::exception_detail::
+clone_impl&lt;boost::exception_detail::error_info_injector&lt;boost::
+filesystem::filesystem_error&gt; &gt;'
+ what(): boost::filesystem::file_size: Operation not permitted &quot;.&quot;
+Aborted</pre>
+      </td>
+      <td style="font-size: 10pt" valign="top">
+      <pre>&gt;tut1 .</pre>
+ <p><b><i>An exception is thrown; the exact form of the response depends on
+      Windows system options.</i></b></td>
+    </tr>
+  </table>
+
+ <p>The current directory exists, but <code>file_size()</code> works on regular
+  files, not directories, so again, an exception is thrown.</p>
+
+  <p>We'll deal with those situations in <code>tut2.cpp</code>.</p>
+
+<h2><a name="Using-status-queries">Using status queries to determine file existence and type</a> - (<a href="../example/tut2.cpp">tut2.cpp</a>)</h2>
+
+<p>Boost.Filesystem includes status query functions such as <code>
+<a href="reference.html#exists-path">exists</a></code>,
+<code><a href="reference.html#is_directory-path">is_directory</a></code>, and <code> +<a href="reference.html#is_regular_file-path">is_regular_file</a></code>. These return
+<code>bool</code>'s, and will return <code>true</code> if the condition
+described by their name is met. Otherwise they return <code>false</code>,
+including when any element
+of the path argument can't be found.</p>
+
+<p>tut2.cpp uses several of the status query functions to cope with non-existent
+files and with different kinds of files:</p>
+
+<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+  <tr>
+    <td style="font-size: 10pt">
+    <pre><a href="../example/tut2.cpp">tut2.cpp</a></pre>
+    <blockquote style="font-size: 10pt">
+      <pre>int main(int argc, char* argv[])
+{
+ <a href="reference.html#class-path">path</a> p (argv[1]); // p reads clearer than argv[1] in the following code
+
+ if (<a href="reference.html#exists-path">exists</a>(p)) // does p actually exist?
+  {
+ if (<a href="reference.html#is_regular_file-path">is_regular_file</a>(p)) // is p a regular file? + cout &lt;&lt; p &lt;&lt; &quot; size is &quot; &lt;&lt; <a href="reference.html#file_size">file_size</a>(p) &lt;&lt; '\n';
+
+ else if (<a href="reference.html#is_directory-path">is_directory</a>(p)) // is p a directory?
+      cout &lt;&lt; p &lt;&lt; &quot;is a directory\n&quot;;
+
+    else
+ cout &lt;&lt; p &lt;&lt; &quot;exists, but is neither a regular file nor a directory\n&quot;;
+  }
+  else
+    cout &lt;&lt; p &lt;&lt; &quot;does not exist\n&quot;;
+
+  return 0;
+}</pre>
+    </blockquote>
+    </td>
+  </tr>
+</table>
+
+<p>Give it a try:</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt" valign="top">
+      <pre>$ ./tut2 tut2.cpp
+tut2 size is cpp 1037
+$ ./tut2 foo
+foo does not exist
+$ ./tut2 .
+. is a directory</pre>
+      </td>
+      <td style="font-size: 10pt" valign="top">
+      <pre>&gt;tut2 tut2.cpp
+tut2.cpp size is 1079
+
+&gt;tut2 foo
+foo does not exist
+
+&gt;tut2 .
+. is a directory</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>Although tut2 works OK in these tests, the output is less than satisfactory +for a directory. We'd typically like to see a list of the directory's contents. In <code>tut3.cpp</code>
+we will see how to iterate over directories.</p>
+
+<p>But first, let's try one more test:</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt" valign="top">
+      <pre>$ ls /home/jane/foo
+ls: cannot access /home/jane/foo: Permission denied
+$ ./tut2 /home/jane/foo
+terminate called after throwing an instance of 'boost::exception_detail::
+clone_impl&lt;boost::exception_detail::error_info_injector&lt;boost::
+filesystem::filesystem_error&gt; &gt;'
+   what(): boost::filesystem::status: Permission denied:
+     &quot;/home/jane/foo&quot;
+Aborted</pre>
+      </td>
+      <td style="font-size: 10pt" valign="top">
+      <pre>&gt;dir e:\
+The device is not ready.
+&gt;tut2 e:\</pre>
+ <p><b><i>An exception is thrown; the exact form of the response depends on
+      Windows system options.</i></b></td>
+    </tr>
+  </table>
+
+<p>On the Linux system, the test was being run from an account that did not have +permission to access <code>/home/jane/foo</code>. On the Windows system, <code>
+e:</code> was a Compact Disc reader/writer that was not ready. End users
+shouldn't have to interpret cryptic exceptions reports, so as we move on to <code>tut3.cpp</code>
+we will increase the robustness of the code, too.</p>
+
+<h2><a name="Directory-iteration">Directory iteration</a> plus catching
+exceptions - (<a href="../example/tut3.cpp">tut3.cpp</a>)</h2>
+
+<p>Boost.Filesystem's <code><a href="reference.html#directory_iterator">
+directory_iterator</a></code> class is just what we need here. It follows the +general pattern of the standard library's <code>istream_iterator</code>. Constructed from +a path, it iterates over the contents of the directory. A default constructed <code>directory_iterator</code>
+acts as the end iterator.</p>
+
+<p>The value type of <code>directory_iterator</code> is <code>
+<a href="reference.html#directory_entry">directory_entry</a></code>. A <code> +directory_entry</code> object contains a <code>path</code> and <code><a href="reference.html#file_status">file_status</a></code>
+information.&nbsp; A <code>
+directory_entry</code> object
+can be used directly, but can also be passed to <code>path</code> arguments in function calls.</p>
+
+<p>The other need is increased robustness in the face of the many kinds of
+errors that can affect file system operations. We could do that at the level of +each call to a Boost.Filesystem function (see <a href="#Error-reporting">Error
+reporting</a>), but it is easier to supply an overall try/catch block.</p>
+
+<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+  <tr>
+    <td style="font-size: 10pt">
+    <pre><a href="../example/tut3.cpp">tut3.cpp</a></pre>
+    <blockquote>
+      <pre>int main(int argc, char* argv[])
+{
+ <a href="reference.html#class-path">path</a> p (argv[1]); // p reads clearer than argv[1] in the following code
+
+  try
+  {
+ if (<a href="reference.html#exists-path">exists</a>(p)) // does p actually exist?
+    {
+ if (<a href="reference.html#is_regular_file-path">is_regular_file</a>(p)) // is p a regular file? + cout &lt;&lt; p &lt;&lt; &quot; size is &quot; &lt;&lt; <a href="reference.html#file_size">file_size</a>(p) &lt;&lt; '\n';
+
+ else if (<a href="reference.html#is_directory-path">is_directory</a>(p)) // is p a directory?
+      {
+        cout &lt;&lt; p &lt;&lt; &quot; is a directory containing:\n&quot;;
+
+ copy(directory_iterator(p), directory_iterator(), // directory_iterator::value_type + ostream_iterator&lt;directory_entry&gt;(cout, &quot;\n&quot;)); // is directory_entry, which is + // converted to a path by the + // path stream inserter
+      }
+
+      else
+ cout &lt;&lt; p &lt;&lt; &quot; exists, but is neither a regular file nor a directory\n&quot;;
+    }
+    else
+      cout &lt;&lt; p &lt;&lt; &quot; does not exist\n&quot;;
+  }
+
+  catch (const filesystem_error&amp; ex)
+  {
+    cout &lt;&lt; ex.what() &lt;&lt; '\n';
+  }
+
+  return 0;
+}</pre>
+    </blockquote>
+    </td>
+  </tr>
+</table>
+
+<p>Give <code>tut3</code> a try, passing it a path to a directory as a command line argument. +Here is a run on a checkout of the Boost Subversion trunk, followed by a repeat
+of the test cases that caused exceptions on Linux and Windows:</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt" valign="top">
+      <pre>$ ./tut3 ~/boost/trunk
+/home/beman/boost/trunk is a directory containing:
+  /home/beman/boost/trunk/tools
+  /home/beman/boost/trunk/boost-build.jam
+  /home/beman/boost/trunk/dist
+  /home/beman/boost/trunk/doc
+  /home/beman/boost/trunk/bootstrap.sh
+  /home/beman/boost/trunk/index.html
+  /home/beman/boost/trunk/bootstrap.bat
+  /home/beman/boost/trunk/boost.css
+  /home/beman/boost/trunk/INSTALL
+  /home/beman/boost/trunk/rst.css
+  /home/beman/boost/trunk/boost
+  /home/beman/boost/trunk/people
+  /home/beman/boost/trunk/wiki
+  /home/beman/boost/trunk/boost.png
+  /home/beman/boost/trunk/LICENSE_1_0.txt
+  /home/beman/boost/trunk/more
+  /home/beman/boost/trunk/Jamroot
+  /home/beman/boost/trunk/.svn
+  /home/beman/boost/trunk/libs
+  /home/beman/boost/trunk/index.htm
+  /home/beman/boost/trunk/status
+  /home/beman/boost/trunk/CMakeLists.txt</pre>
+      </td>
+      <td style="font-size: 10pt" valign="top">
+      <pre>&gt;tut3 c:\boost\trunk
+c:\boost\trunk is a directory containing:
+   c:\boost\trunk\.svn
+   c:\boost\trunk\boost
+   c:\boost\trunk\boost-build.jam
+   c:\boost\trunk\boost.css
+   c:\boost\trunk\boost.png
+   c:\boost\trunk\bootstrap.bat
+   c:\boost\trunk\bootstrap.sh
+   c:\boost\trunk\CMakeLists.txt
+   c:\boost\trunk\dist
+   c:\boost\trunk\doc
+   c:\boost\trunk\index.htm
+   c:\boost\trunk\index.html
+   c:\boost\trunk\INSTALL
+   c:\boost\trunk\Jamroot
+   c:\boost\trunk\libs
+   c:\boost\trunk\LICENSE_1_0.txt
+   c:\boost\trunk\more
+   c:\boost\trunk\people
+   c:\boost\trunk\rst.css
+   c:\boost\trunk\status
+   c:\boost\trunk\tools
+   c:\boost\trunk\wiki
+
+&gt;tut3 e:\
+boost::filesystem::status: The device is not ready: &quot;e:\&quot;</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>Not bad, but we can make further improvements:</p>
+
+    <ul>
+      <li>The listing would be much easier to read if only the filename was
+      displayed, rather than the full path.<br>
+&nbsp;</li>
+      <li>The Linux listing isn't sorted. That's because the ordering of
+ directory iteration is unspecified. Ordering depends on the underlying + operating system API and file system specifics. So we need to sort the
+      results ourselves. </li>
+    </ul>
+
+<p>Move on to <code>tut4.cpp</code> to see how those changes play out!</p>
+
+<h2><a name="Using-path-decomposition">Using path decomposition, plus sorting results</a> - (<a href="../example/tut4.cpp">tut4.cpp</a>)</h2>
+
+<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+  <tr>
+    <td style="font-size: 10pt">
+    <pre><a href="../example/tut4.cpp">tut4.cpp</a></pre>
+    <blockquote style="font-size: 10pt">
+      <pre>int main(int argc, char* argv[])
+{
+ <a href="reference.html#class-path">path</a> p (argv[1]); // p reads clearer than argv[1] in the following code
+
+  try
+  {
+ if (<a href="reference.html#exists-path">exists</a>(p)) // does p actually exist?
+    {
+ if (<a href="reference.html#is_regular_file-path">is_regular_file</a>(p)) // is p a regular file? + cout &lt;&lt; p &lt;&lt; &quot; size is &quot; &lt;&lt; <a href="reference.html#file_size">file_size</a>(p) &lt;&lt; '\n';
+
+ else if (<a href="reference.html#is_directory-path">is_directory</a>(p)) // is p a directory?
+      {
+        cout &lt;&lt; p &lt;&lt; &quot; is a directory containing:\n&quot;;
+
+        typedef vector&lt;path&gt; vec;             // store paths,
+        vec v;                                // so we can sort them later
+
+ copy(directory_iterator(p), directory_iterator(), back_inserter(v));
+
+ sort(v.begin(), v.end()); // sort, since directory iteration + // is not ordered on some file systems
+
+        for (vec::const_iterator it (v.begin()); it != v.end(); ++it)
+        {
+          cout &lt;&lt; &quot;   &quot; &lt;&lt; *it &lt;&lt; '\n';
+        }
+      }
+
+      else
+ cout &lt;&lt; p &lt;&lt; &quot; exists, but is neither a regular file nor a directory\n&quot;;
+    }
+    else
+      cout &lt;&lt; p &lt;&lt; &quot; does not exist\n&quot;;
+  }
+
+  catch (const filesystem_error&amp; ex)
+  {
+    cout &lt;&lt; ex.what() &lt;&lt; '\n';
+  }
+
+  return 0;
+}</pre>
+    </blockquote>
+    </td>
+  </tr>
+</table>
+
+ <p>The key difference between <code>tut3.cpp</code> and <code>tut4.cpp</code> is
+    what happens in the directory iteration loop. We changed:</p>
+    <blockquote>
+ <pre>cout &lt;&lt; &quot; &quot; &lt;&lt; *it &lt;&lt; '\n'; // *it returns a <a href="reference.html#Class-directory_entry">directory_entry</a>,</pre>
+    </blockquote>
+    <p>to:</p>
+    <blockquote>
+ <pre>path fn = it-&gt;path().filename(); // extract the filename from the path +v.push_back(fn); // push into vector for later sorting</pre>
+    </blockquote>
+ <p><code><a href="reference.html#directory_entry-observers">path()</a></code>
+    is a <code>directory_entry</code> observer function. <code>
+    <a href="reference.html#path-filename">filename()</a></code> is one of
+ several path decomposition functions. It extracts the filename portion (<code>&quot;index.html&quot;</code>) + from a path (<code>&quot;/home/beman/boost/trunk/index.html&quot;</code>). These decomposition functions are + more fully explored in the <a href="#Class path-iterators-etc">Path iterators, observers,
+    composition, decomposition and query</a> portion of this tutorial.</p>
+ <p>The above was written as two lines of code for clarity. It could have
+    been written more concisely as:</p>
+    <blockquote>
+ <pre>v.push_back(it-&gt;path().filename()); // we only care about the filename</pre>
+    </blockquote>
+ <p>Here is the output from a test of <code><a href="../example/tut4.cpp">tut4.cpp</a></code>:</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt">
+      <pre>$ ./tut4 ~/boost/trunk
+/home/beman/boost/trunk is a directory containing:
+  .svn
+  CMakeLists.txt
+  INSTALL
+  Jamroot
+  LICENSE_1_0.txt
+  boost
+  boost-build.jam
+  boost.css
+  boost.png
+  bootstrap.bat
+  bootstrap.sh
+  doc
+  index.htm
+  index.html
+  libs
+  more
+  people
+  rst.css
+  status
+  tools
+  wiki</pre>
+      </td>
+      <td style="font-size: 10pt">
+      <pre>C:\v3d&gt;tut4 c:\boost\trunk
+c:\boost\trunk is a directory containing:
+  .svn
+  CMakeLists.txt
+  INSTALL
+  Jamroot
+  LICENSE_1_0.txt
+  boost
+  boost-build.jam
+  boost.css
+  boost.png
+  bootstrap.bat
+  bootstrap.sh
+  doc
+  index.htm
+  index.html
+  libs
+  more
+  people
+  rst.css
+  status
+  tools
+  wiki</pre>
+      </td>
+    </tr>
+  </table>
+
+ <p>That completes the main portion of this tutorial. If you haven't already + worked through the <a href="#Class-path-Constructors">Class path</a> sections of this tutorial, dig into them now. + The <a href="#Error-reporting">Error reporting</a> section may also be of + interest, although it can be skipped unless you are deeply concerned about
+    error handling issues.</p>
+
+<hr>
+
+<h2>&nbsp;<a name="Class-path-Constructors">Class path: Constructors</a>,
+including Unicode - (<a href="../example/tut5.cpp">tut5.cpp</a>)</h2>
+
+<p>Traditional C interfaces pass paths as <code>const char*</code> arguments. +C++ interfaces may add <code>const std::string&amp;</code> overloads, but adding +overloads becomes untenable if wide characters, containers, and iterator ranges
+need to be supported.</p>
+<p>Passing paths as <code>const path&amp;</code> arguments is far simpler, yet far +more flexible because class <code>path</code> itself is far more flexible:</p>
+<ol>
+ <li>Class <code>path</code> supports multiple character types and encodings, including Unicode, to
+  ease internationalization.</li>
+ <li>Class <code>path</code> supports multiple source types, such as iterators for null terminated + sequences, iterator ranges, containers (including <code>std::basic_string</code>), + and <code><a href="reference.html#Class-directory_entry">directory_entry</a></code>'s,
+  so functions taking paths don't need to provide several overloads.</li>
+ <li>Class <code>path</code> supports both native and generic pathname formats, so programs can be + portable between operating systems yet use native formats where desirable.</li> + <li>Class <code>path</code> supplies a full set of iterators, observers, composition,
+  decomposition, and query functions, making pathname manipulations easy,
+  convenient, reliable, and portable.</li>
+</ol>
+<p>Here is how (1) and (2) work. Class path constructors,
+assignments, and appends have member templates for sources. For example, here
+are the constructors that take sources:</p>
+
+<blockquote style="font-size: 10pt">
+  <pre>template &lt;class <a href="reference.html#Source">Source</a>&gt;
+  path(Source const&amp; source);</pre>
+  <pre>template &lt;class InputIterator&gt;
+  path(InputIterator begin, InputIterator end);</pre>
+</blockquote>
+<p>Let's look at a little program that shows how comfortable class <code>path</code> is with +both narrow and wide characters in C-style strings, C++ strings, and via C++
+iterators:</p>
+
+<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+  <tr>
+    <td style="font-size: 10pt">
+    <pre><a href="../example/tut4.cpp">tut5.cpp</a></pre>
+    <blockquote>
+      <pre>#include &lt;boost/filesystem.hpp&gt;
+#include &lt;string&gt;
+#include &lt;list&gt;
+namespace fs = boost::filesystem;
+
+int main()
+{
+  // \u263A is &quot;Unicode WHITE SMILING FACE = have a nice day!&quot;
+  std::string narrow_string (&quot;smile2&quot;);
+  std::wstring wide_string (L&quot;smile2\u263A&quot;);
+  std::list&lt;char&gt; narrow_list;
+  narrow_list.push_back('s');
+  narrow_list.push_back('m');
+  narrow_list.push_back('i');
+  narrow_list.push_back('l');
+  narrow_list.push_back('e');
+  narrow_list.push_back('3');
+  std::list&lt;wchar_t&gt; wide_list;
+  wide_list.push_back(L's');
+  wide_list.push_back(L'm');
+  wide_list.push_back(L'i');
+  wide_list.push_back(L'l');
+  wide_list.push_back(L'e');
+  wide_list.push_back(L'3');
+  wide_list.push_back(L'\u263A');
+
+  { fs::ofstream f(&quot;smile&quot;); }
+  { fs::ofstream f(L&quot;smile\u263A&quot;); }
+  { fs::ofstream f(narrow_string); }
+  { fs::ofstream f(wide_string); }
+  { fs::ofstream f(narrow_list); }
+  { fs::ofstream f(wide_list); }
+  narrow_list.pop_back();
+  narrow_list.push_back('4');
+  wide_list.pop_back();
+  wide_list.pop_back();
+  wide_list.push_back(L'4');
+  wide_list.push_back(L'\u263A');
+  { fs::ofstream f(fs::path(narrow_list.begin(), narrow_list.end())); }
+  { fs::ofstream f(fs::path(wide_list.begin(), wide_list.end())); }
+
+  return 0;
+}</pre>
+    </blockquote>
+    </td>
+  </tr>
+</table>
+
+<p>Testing <code>tut5</code>:</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt" valign="top">
+      <pre>$ ./tut5
+$ ls smile*
+smile smile&#9786; smile2 smile2&#9786; smile3 smile3&#9786; smile4 smile4&#9786;</pre>
+      </td>
+      <td style="font-size: 10pt" valign="top">
+      <pre>&gt;tut5
+&gt;dir /b smile*
+smile
+smile2
+smile2&#9786;
+smile3
+smile3&#9786;
+smile4
+smile4&#9786;
+smile&#9786;</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>Note that the exact appearance of the smiling face will depend on the font, +font size, and other settings for your command line window. The above tests were +run with out-of-the-box Ubuntu 9.10 and Windows 7, US Edition. If you don't get +the above results, take a look at the <code><i>boost-root</i>/libs/filesystem/example/test</code> +directory with your system's GUI file browser, such as Linux Nautilus, Mac OS X
+Finder, or Windows Explorer. These tend to be more comfortable with
+international character sets than command line interpreters.</p>
+
+ <p>Class <code>path</code> takes care of whatever character type or encoding + conversions are required by the particular operating system. Thus as <code> + tut5</code> demonstrates, it's no problem to pass a wide character string to a + Boost.Filesystem operational function even if the underlying operating system + uses narrow characters, and visa versa. And the same applies to user supplied
+  functions that take <code>const path&amp;</code> arguments.</p>
+
+ <p>Class <code>path</code> also provides path syntax that is portable across operating systems,
+  element iterators, and observer, composition, decomposition, and query
+  functions to manipulate the elements of a path. The next section of this
+  tutorial deals with path syntax.</p>
+
+    <hr>
+
+<h2><a name="Class-path-formats">Class path: Generic format vs. Native format</a></h2>
+
+<p dir="ltr">Class <code>path</code> deals with two different pathname
+formats - generic format and native format. For POSIX-like
+file systems, these formats are the same. But for users of Windows and
+other non-POSIX file systems, the distinction is important. Even
+programmers writing for POSIX-like systems need to understand the distinction if
+they want their code to be portable to non-POSIX systems.</p>
+
+<p dir="ltr">The <b>generic format</b> is the familiar <code>/my_directory/my_file.txt</code> format used by POSIX-like +operating systems such as the Unix variants, Linux, and Mac OS X. Windows also +recognizes the generic format, and it is the basis for the familiar Internet URL
+format. The directory
+separator character is always one or more slash characters.</p>
+
+<p dir="ltr">The <b>native format</b> is the format as defined by the particular +operating system. For Windows, either the slash or the backslash can be used as +the directory separator character, so <code>/my_directory\my_file.txt</code>
+would work fine. Of course, if you write that in a C++ string literal, it
+becomes <code>&quot;/my_directory\\my_file.txt&quot;</code>.</p>
+
+<p dir="ltr">If a drive specifier or a backslash appears
+in a pathname on a Windows system, it is always treated as the native format.</p>
+
+<p dir="ltr">Class <code>path</code> has observer functions that allow you to +obtain the string representation of a path object in either the native format +or the generic format. See the <a href="#Class path-iterators-etc">next section</a>
+for how that plays out.</p>
+
+ <p>The distinction between generic format and native format is important when + communicating with native C-style API's and with users. Both tend to expect + paths in the native format and may be confused by the generic format. The generic + format is great, however, for writing portable programs that work regardless
+  of operating system.</p>
+
+ <p>The next section covers class <code>path</code> observers, composition,
+  decomposition, query, and iteration over the elements of a path.</p>
+
+    <hr>
+
+<h2><a name="Class path-iterators-etc">Class path: Iterators, observers, composition, decomposition, and query</a>
+- (<a href="../example/path_info.cpp">path_info.cpp</a>)</h2>
+
+<p>The <code><a href="../example/path_info.cpp">path_info.cpp</a></code> program is handy for learning how class <code>path</code>
+iterators,
+observers, composition, decomposition, and query functions work on your system. +If it hasn't already already been built on your system, please build it now. Run +the examples below on your system, and try some different path arguments as we
+go along.</p>
+
+<p> <code>path_info</code> produces several dozen output lines every time it's +invoked. We will only show the output lines we are interested in at each step.</p>
+
+<p>First we'll look at iteration over the elements of a path, and then use
+iteration to illustrate the difference between generic and native format paths.</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt">
+      <pre>$ ./path_info /foo/bar/baa.txt
+...
+elements:
+  /
+  foo
+  bar
+  baa.txt</pre>
+      </td>
+      <td style="font-size: 10pt">
+      <pre>&gt;path_info /foo/bar/baa.txt
+...
+elements:
+  /
+  foo
+  bar
+  baa.txt</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>Thus on both POSIX and Windows based systems the path <code>&quot;/foo/bar/baa.txt&quot;</code>
+is seen as having four elements.</p>
+
+<p>Here is the code that produced the above listing:</p>
+
+<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+  <tr>
+    <td style="font-size: 10pt">
+    <blockquote style="font-size: 10pt">
+    <pre>cout &lt;&lt; &quot;\nelements:\n&quot;;
+
+for (path::iterator it = p.begin(); it != p.end(); ++it)
+  cout &lt;&lt; &quot; &quot; &lt;&lt; *it &lt;&lt; '\n';</pre>
+    </blockquote>
+    </td>
+  </tr>
+</table>
+<p><code>path::iterator::value_type</code> is <code>path::string_type</code>,
+and iteration treats <code>path</code> as a container of filenames.</p>
+
+<p dir="ltr">Let's look at some of the output from a slightly different
+example:</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt">
+      <pre>$ ./path_info /foo/bar/baa.txt
+
+composed path:
+  cout &lt;&lt; -------------: /foo/bar/baa.txt
+  preferred()----------: /foo/bar/baa.txt
+...
+observers, native format:
+  native()-------------: /foo/bar/baa.txt
+  c_str()--------------: /foo/bar/baa.txt
+  string()-------------: /foo/bar/baa.txt
+  wstring()------------: /foo/bar/baa.txt
+
+observers, generic format:
+  generic_string()-----: /foo/bar/baa.txt
+  generic_wstring()----: /foo/bar/baa.txt</pre>
+      </td>
+      <td style="font-size: 10pt">
+      <pre>&gt;path_info /foo/bar\baa.txt
+
+composed path:
+  cout &lt;&lt; -------------: /foo/bar/baa.txt
+  preferred()----------: \foo\bar\baa.txt
+...
+observers, native format:
+  native()-------------: /foo/bar\baa.txt
+  c_str()--------------: /foo/bar\baa.txt
+  string()-------------: /foo/bar\baa.txt
+  wstring()------------: /foo/bar\baa.txt
+
+observers, generic format:
+  generic_string()-----: /foo/bar/baa.txt
+  generic_wstring()----: /foo/bar/baa.txt</pre>
+      </td>
+    </tr>
+  </table>
+
+<p dir="ltr">Native format observers should be used when interacting with the
+operating system or with users; that's what they expect.</p>
+
+<p dir="ltr">Generic format observers should be used when the results need to be
+portable and uniform regardless of the operating system.</p>
+
+<p dir="ltr"><code>path</code> objects always hold pathnames in the native
+format, but otherwise leave them unchanged from their source. The
+<a href="reference.html#preferred">preferred()</a> function will convert to the +preferred form, if the native format has several forms. Thus on Windows, it will
+convert slashes to backslashes.</p>
+
+<p dir="ltr">Let's move on to decomposition and query functions:</p>
+
+ <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+    <tr>
+ <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> + <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td width="50%" style="font-size: 10pt">
+      <pre>$ ./path_info /foo/bar/baa.txt
+...
+decomposition:
+  root_name()----------:
+  root_directory()-----: /
+  root_path()----------: /
+  relative_path()------: foo/bar/baa.txt
+  parent_path()--------: /foo/bar
+  filename()-----------: baa.txt
+  stem()---------------: baa
+  extension()----------: .txt
+
+query:
+  empty()--------------: false
+ <span style="background-color: #FFFF00">is_absolute</span><span style="background-color: #FFFF00">()--------: true</span>
+  has_root_name()------: false
+  has_root_directory()-: true
+  has_root_path()------: true
+  has_relative_path()--: true
+  has_parent_path()----: true
+  has_filename()-------: true
+  has_stem()-----------: true
+  has_extension()------: true</pre>
+      </td>
+      <td style="font-size: 10pt">
+      <pre>&gt;path_info /foo/bar/baa.txt
+...
+decomposition:
+  root_name()----------:
+  root_directory()-----: /
+  root_path()----------: /
+  relative_path()------: foo/bar/baa.txt
+  parent_path()--------: /foo/bar
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/v3.html       Sun Aug 22 23:21:17 2010
@@ -0,0 +1,151 @@
+<html>
+
+<head>
+<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 V3 Intro</title>
+<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../../index.htm">
+<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem
+    Version 3<br>
+    Introduction</font></td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="../../../../index.htm">Boost Home</a> &nbsp;&nbsp;
+    <a href="index.htm">Library Home</a> &nbsp;&nbsp;
+    <a href="reference.html">Reference</a> &nbsp;&nbsp;
+    <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
+    <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
+    <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
+    <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
+    <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
+    <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
+    </td>
+  </tr>
+</table>
+
+<h1>Boost Filesystem Version 3</h1>
+
+<p>Version 3 is a major revision of the Boost Filesystem library. Important
+changes include:</p>
+
+<ul>
+  <li>A single class <code>path</code> handles all aspects of
+ internationalization, replacing the previous template and its <code>path</code>
+  and <code>wpath</code> instantiations. Character types <code>char</code>,
+ <code>wchar_t</code>, <code>char16_t</code>, and <code>char32_t</code> are
+  supported. This is a major simplification of the path abstraction,
+  particularly for functions that take path arguments.<br>
+&nbsp;</li>
+  <li>New <code>class path</code> members include:<br>
+&nbsp;<ul>
+ <li><code><a href="reference.html#path-has_stem">has_stem</a>()</code></li> + <li><code><a href="reference.html#path-has_extension">has_extension</a>()</code></li> + <li><code><a href="reference.html#path-is_absolute">is_absolute</a>()</code>. This renames <code>is_complete()</code>, which
+  is now deprecated.</li>
+ <li><code><a href="reference.html#path-is_relative">is_relative</a>()</code></li> + <li><code><a href="reference.html#path-make_preferred">make_preferred</a>()<br>
+&nbsp;</code></li>
+</ul>
+
+  </li>
+  <li>New or improved operations functions include:<br>
+&nbsp;<ul>
+ <li><code><a href="reference.html#absolute">absolute</a>()</code>. This replaces the operations function <code> + complete()</code>, which is now deprecated. Semantics are now provided for a + Windows corner case where the <code>base</code> argument was not an absolute
+    path. Previously this resulted in an exception being thrown.</li>
+ <li><code><a href="reference.html#create_symlink">create_symlink</a>()</code> now supported on both POSIX and Windows.</li> + <li><code><a href="reference.html#read_symlink">read_symlink</a>()</code> function added. Supported on both POSIX and
+    Windows. Used to read the contents of a symlink itself.</li>
+ <li><code><a href="reference.html#resize_file">resize_file</a>()</code> function added. Supported on both POSIX and
+    Windows. Used to shrink or grow a regular file.</li>
+ <li><code><a href="reference.html#unique_path">unique_path</a>()</code> function added. Supported on both POSIX and
+    Windows. Used to generate a secure temporary pathname.<br>
+&nbsp;</li>
+  </ul>
+  </li>
+ <li>Support for error reporting via <code>error_code</code> is now uniform
+  throughout the operations functions.<br>
+&nbsp;</li>
+ <li>Documentation has been reworked, including re-writes of major portions.<br>
+&nbsp;</li>
+  <li>A new <a href="tutorial.html">Tutorial</a> provides a hopefully much
+ gentler and more complete introduction for new users. Current users might want + to review the <a href="tutorial.html">three sections related to class path</a>.</li>
+</ul>
+
+<h2>Deprecated names and other features</h2>
+
+<p>See the <a href="deprecated.html">Deprecated Features page</a> for transition +aids that allow much existing code to compile without change using Version 3.</p>
+
+<h2>Breaking changes</h2>
+
+<p>To ease the transition, Versions 2 and 3 will both be included in the next +several Boost releases. Version 2 will be the default version for one release
+cycle, and then Version 3 will become the default version.</p>
+<h3>Class <code>path</code></h3>
+<ul>
+  <li>Class template <code>basic_path</code> and its specializations are
+  replaced by a single <code>class path</code>. Thus any code, such as
+ overloaded functions, that depends on <code>path</code> and <code>wpath</code>
+  being two distinct types will fail to compile and must be restructured.
+  Restructuring may be as simple as removing one of the overloads, but also
+  might require more complex redesign.<br>
+&nbsp;</li>
+ <li>Certain functions now return <code>path</code> objects rather than <code>
+  string or wstring</code> objects:<ul>
+    <li><code>root_name()</code></li>
+    <li><code>root_directory()</code></li>
+    <li><code>filename()</code></li>
+    <li><code>stem()</code></li>
+    <li><code>extension()</code></li>
+  </ul>
+ <p>Not all uses will fail; if the function is being called in a context that + accepts a <code>path</code>, all is well. If the result is being used in a + context requiring a <code>std::string</code> or <code>std::wstring</code>, + then <code>.string()</code> or <code>.wstring()</code> respectively must be
+  appended to the function call.<br>
+&nbsp;</li>
+  <li>&nbsp;<code>path::iterator::value_type</code> and&nbsp; <code>
+ path::const_iterator::value_type</code> is <code>path</code> rather than <code>
+  basic_string</code>.</li>
+</ul>
+<h3>Compiler support</h3>
+<ul>
+ <li>Compilers and standard libraries that do not fully support wide characters
+  and wide character strings (<code>std::wstring</code>) are no longer
+  supported.<br>
+&nbsp;</li>
+ <li>Cygwin versions prior to 1.7 are no longer supported because they lack + wide string support. Cygwin now compiles only for the Windows API and path
+  syntax.<br>
+&nbsp;</li>
+ <li>MinGW versions not supporting wide strings are no longer supported.<br>
+&nbsp;</li>
+  <li>Microsoft VC++ 7.1 and earlier are no longer supported.</li>
+</ul>
+
+<hr>
+<p>© Copyright Beman Dawes, 2009</p>
+<p>Distributed under the Boost Software License, Version 1.0. See
+<a href="http://www.boost.org/LICENSE_1_0.txt";>www.boost.org/LICENSE_1_0.txt</a></p>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->02 July 2010<!--webbot bot="Timestamp" endspan i-checksum="18762" --></p>
+
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/doc/v3_design.html        Sun Aug 22 23:21:17 2010
@@ -0,0 +1,192 @@
+<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 V3 Design</title>
+<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td>
+<a href="../../../../index.htm">
+<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" border="0" width="300" height="86"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Version 3<br>
+    Design</font></td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="../../../../index.htm">Boost Home</a> &nbsp;&nbsp;
+    <a href="index.htm">Library Home</a> &nbsp;&nbsp;
+    <a href="reference.html">Reference</a> &nbsp;&nbsp;
+    <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
+    <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
+    <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
+    <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
+    <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
+    <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
+    </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">
+    <a href="#Introduction">Introduction</a><br>
+    <a href="#Problem">Problem</a><br>
+    <a href="#Solution">Solution</a><br>
+    <a href="#Details">Details</a><br>
+    <a href="#Other-changes">Other changes</a><br>
+    <a href="#Acknowledgements">Acknowledgements</a></td>
+  </tr>
+  </table>
+
+<p><b>Caution:</b> This page documents thinking early in the V3 development
+process, and is intended to serve historical purposes. It is not updated to
+reflect the current state of the library.</p>
+
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>During the review of Boost.Filesystem.V2 (Internationalization), Peter Dimov +suggested that the<code> basic_path</code> class template was unwieldy, and that a single +path type that accommodated multiple character types and encodings would be more
+flexible. Although I wasn't willing to stop development at that time to
+explore how this idea might be implemented, or to break from the pattern for +Internationalization used the C++ standard library, I've often thought about +Peter's suggestion. With the advent of C++0x <code>char16_t</code> and <code>char32_t</code> character +types, the <code>basic_path</code> class template approach becomes even more unwieldy, so it
+is time to revisit the problem in light of Peter's suggestion.</p>
+
+<h2><b><a name="Problem">Problem</a></b></h2>
+
+<p>With Filesystem.V2, a path argument to a user defined function that is to
+accommodate multiple character types and encodings must be written as a
+template. Do-the-right-thing overloads or template metaprogramming must be
+employed to allow arguments to be written as string literals. Here's what it
+looks like:</p>
+
+<blockquote>
+  <pre>template&lt;class Path&gt;
+void foo( const Path &amp; p );</pre>
+  <pre>inline void foo( const path &amp; p )
+{
+  return foo&lt;path&gt;( p );
+}
+inline void foo( const wpath &amp; p )
+{
+  return foo&lt;wpath&gt;( p );
+}</pre>
+</blockquote>
+<p>That's really ugly for such a simple need, and there would be a combinatorial +explosion if the function took multiple Path arguments and each could be either +narrow or wide. It gets even worse if the C++0x <code>char16_t</code> and <code>
+char32_t</code> types are to be supported.</p>
+
+<h2><a name="Solution">Solution</a></h2>
+
+<p>Overview:</p>
+
+<ul>
+  <li>A single, non-template, <code>class path</code>.</li>
+  <li>Each member function is a template accommodating the various
+  applicable character types, including user-defined character types.</li>
+ <li>Hold the path internally in a string of the type used by the operating + system API; <code>std::string</code> for POSIX, <code>std::wstring</code> for Windows.</li>
+</ul>
+
+<p>The signatures presented in <a href="#Problem">Problem</a> collapse to
+simply:</p>
+<blockquote>
+  <pre>void foo( const path &amp; p );</pre>
+</blockquote>
+
+<p>That's a signification reduction in code complexity. Specification becomes +simpler, too. I believe it will be far easier to teach, and result in much more
+flexible user code.</p>
+
+<p>Other benefits:</p>
+<ul>
+  <li>All the polymorphism still occurs at compile time.</li>
+ <li>Efficiency is increased, in that conversions of the encoding, if required, + only occur once at the time of creation, not each time the path is used.</li>
+  <li>The size of the implementation code drops approximately in half and
+  becomes much more readable.</li>
+</ul>
+  <p>Possible problems:</p>
+<ul>
+ <li>The combination of member function templates and implicit constructors can + result in unclear error messages when the user makes simple commonplace coding + errors. This should be much less of a problem with C++ concepts, but in the + meantime work continues to restrict over aggressive templates via enable_if/disable_if.</li>
+</ul>
+  <h2><a name="Details">Details</a></h2>
+
+<table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
+  <tr>
+    <td width="33%" colspan="3">
+    <p align="center"><b><i>Encoding </i></b><i><b>Conversions</b></i></td>
+  </tr>
+  <tr>
+    <td width="33%">
+    <p align="center"><i><b>Host system</b></i></td>
+    <td width="33%">
+    <p align="center"><i><b>char string path arguments</b></i></td>
+    <td width="34%">
+    <p align="center"><i><b>wide string path arguments</b></i></td>
+  </tr>
+  <tr>
+ <td width="33%">Systems with <code>char</code> as the native API path character type (i.e.
+    POSIX-like systems)</td>
+    <td width="33%">No conversion.</td>
+ <td width="34%">Conversion occurs, performed by the current path locale's
+    <code>codecvt</code> facet.</td>
+  </tr>
+  <tr>
+ <td width="33%">Systems with <code>wchar_t</code> as the native API path character type
+    (i.e. Windows-like systems).</td>
+ <td width="33%">Conversion occurs, performed by the current path locale's
+    <code>codecvt</code> facet.</td>
+    <td width="34%">No conversion.</td>
+  </tr>
+</table>
+
+<p>When a class path function argument type matches the the operating system's +API argument type for paths, no conversion is performed rather than conversion
+to a specified encoding such as one of the Unicode encodings. This avoids
+unintended consequences, etc.</p>
+
+<h2><a name="Other-changes">Other changes</a></h2>
+
+<p><b>Uniform hybrid error handling: </b>The hybrid error handling idiom has
+been consistently applied to all applicable functions.</p>
+
+<h2><a name="Acknowledgements">Acknowledgements</a></h2>
+
+<p>Peter Dimov suggested the idea of a single path class that could cope with +multiple character types and encodings. Walter Landry contributed both the design and implementation of the copy_any,
+copy_directory, copy_symlink, and read_symlink functions.</p>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->18 February, 2010<!--webbot bot="Timestamp" endspan i-checksum="40538" --></p>
+
+<p>© Copyright Beman Dawes, 2008</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>
+
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/Jamfile.v2        Sun Aug 22 23:21:17 2010
@@ -0,0 +1,24 @@
+# Boost Filesystem Library Example Jamfile
+
+# (C) Copyright Vladimir Prus 2003
+
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+    : requirements
+      <library>/boost/filesystem//boost_filesystem
+      <library>/boost/system//boost_system
+      <toolset>msvc:<asynch-exceptions>on
+      <link>static
+    ;
+
+exe tut0 : tut0.cpp ;
+exe tut1 : tut1.cpp ;
+exe tut2 : tut2.cpp ;
+exe tut3 : tut3.cpp ;
+exe tut4 : tut4.cpp ;
+exe tut5 : tut5.cpp ;
+exe path_info : path_info.cpp ;
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/error_demo.cpp Sun Aug 22 23:21:17 2010
@@ -0,0 +1,185 @@
+// error_demo.cpp --------------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+// // +// The purpose of this program is to demonstrate how error reporting works. // +// //
+//--------------------------------------------------------------------------------------//
+
+#include <boost/filesystem.hpp>
+#include <boost/system/system_error.hpp>
+#include <iostream>
+
+using std::cout;
+using boost::filesystem::path;
+using boost::filesystem::filesystem_error;
+using boost::system::error_code;
+using boost::system::system_error;
+namespace fs = boost::filesystem;
+
+namespace
+{
+  void report_system_error(const system_error& ex)
+  {
+    cout << " threw system_error:\n"
+         << "    ex.code().value() is " << ex.code().value() << '\n'
+ << " ex.code().category().name() is " << ex.code().category().name() << '\n'
+         << "    ex.what() is " << ex.what() << '\n'
+         ;
+  }
+
+  void report_filesystem_error(const system_error& ex)
+  {
+    cout << "  threw filesystem_error exception:\n"
+         << "    ex.code().value() is " << ex.code().value() << '\n'
+ << " ex.code().category().name() is " << ex.code().category().name() << '\n'
+         << "    ex.what() is " << ex.what() << '\n'
+         ;
+  }
+
+  void report_status(fs::file_status s)
+  {
+    cout << "  file_status::type() is ";
+    switch (s.type())
+    {
+    case fs::status_error:
+      cout << "status_error\n"; break;
+    case fs::file_not_found:
+      cout << "file_not_found\n"; break;
+    case fs::regular_file:
+      cout << "regular_file\n"; break;
+    case fs::directory_file:
+      cout << "directory_file\n"; break;
+    case fs::symlink_file:
+      cout << "symlink_file\n"; break;
+    case fs::block_file:
+      cout << "block_file\n"; break;
+    case fs::character_file:
+      cout << "character_file\n"; break;
+    case fs::fifo_file:
+      cout << "fifo_file\n"; break;
+    case fs::socket_file:
+      cout << "socket_file\n"; break;
+    case fs::type_unknown:
+      cout << "type_unknown\n"; break;
+    default:
+      cout << "not a valid enumeration constant\n";
+    }
+  }
+
+  void report_error_code(const error_code& ec)
+  {
+    cout << "  ec:\n"
+         << "    value() is " << ec.value() << '\n'
+         << "    category().name() is " << ec.category().name() << '\n'
+         << "    message() is " <<  ec.message() << '\n'
+         ;
+  }
+
+  bool threw_exception;
+
+}
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: error_demo path\n";
+    return 1;
+  }
+
+  error_code ec;
+
+  ////  construct path - no error_code
+
+  //try { path p1(argv[1]); }
+  //catch (const system_error& ex)
+  //{
+  //  cout << "construct path without error_code";
+  //  report_system_error(ex);
+  //}
+
+  ////  construct path - with error_code
+
+  path p (argv[1]);
+
+  fs::file_status s;
+  bool            b (false);
+  fs::directory_iterator di;
+
+  //  get status - no error_code
+
+  cout << "\nstatus(\"" << p.string() << "\");\n";
+  threw_exception = false;
+
+  try { s = fs::status(p); }
+  catch (const system_error& ex)
+  {
+    report_filesystem_error(ex);
+    threw_exception = true;
+  }
+  if (!threw_exception)
+    cout << "  Did not throw exception\n";
+  report_status(s);
+
+  //  get status - with error_code
+
+  cout << "\nstatus(\"" << p.string() << "\", ec);\n";
+  s = fs::status(p, ec);
+  report_status(s);
+  report_error_code(ec);
+
+  //  query existence - no error_code
+
+  cout << "\nexists(\"" << p.string() << "\");\n";
+  threw_exception = false;
+
+  try { b = fs::exists(p); }
+  catch (const system_error& ex)
+  {
+    report_filesystem_error(ex);
+    threw_exception = true;
+  }
+  if (!threw_exception)
+  {
+    cout << "  Did not throw exception\n"
+         << "  Returns: " << (b ? "true" : "false") << '\n';
+  }
+
+  //  query existence - with error_code
+
+  //  directory_iterator - no error_code
+
+  cout << "\ndirectory_iterator(\"" << p.string() << "\");\n";
+  threw_exception = false;
+
+  try { di = fs::directory_iterator(p); }
+  catch (const system_error& ex)
+  {
+    report_filesystem_error(ex);
+    threw_exception = true;
+  }
+  if (!threw_exception)
+  {
+    cout << "  Did not throw exception\n"
+      << (di == fs::directory_iterator() ? "  Equal" : "  Not equal")
+      << " to the end iterator\n";
+  }
+
+  //  directory_iterator - with error_code
+
+  cout << "\ndirectory_iterator(\"" << p.string() << "\", ec);\n";
+  di = fs::directory_iterator(p, ec);
+  cout << (di == fs::directory_iterator() ? "  Equal" : "  Not equal")
+       << " to the end iterator\n";
+  report_error_code(ec);
+
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/file_size.cpp     Sun Aug 22 23:21:17 2010
@@ -0,0 +1,44 @@
+// file_size program -------------------------------------------------------//
+
+//  Copyright Beman Dawes, 2004
+
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/filesystem for documentation.
+
+#include <boost/filesystem/operations.hpp>
+#include <iostream>
+
+namespace fs = boost::filesystem;
+
+int main( int argc, char* argv[] )
+{
+
+  if ( argc != 2 )
+  {
+    std::cout << "Usage: file_size path\n";
+    return 1;
+  }
+
+  std::cout << "sizeof(intmax_t) is " << sizeof(boost::intmax_t) << '\n';
+
+  fs::path p( argv[1] );
+
+  if ( !fs::exists( p ) )
+  {
+    std::cout << "not found: " << argv[1] << std::endl;
+    return 1;
+  }
+
+  if ( !fs::is_regular( p ) )
+  {
+    std::cout << "not a regular file: " << argv[1] << std::endl;
+    return 1;
+  }
+
+  std::cout << "size of " << argv[1] << " is " << fs::file_size( p )
+    << std::endl;
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/mbcopy.cpp        Sun Aug 22 23:21:17 2010
@@ -0,0 +1,90 @@
+// Boost.Filesystem mbcopy.cpp ---------------------------------------------//
+
+//  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)
+
+// Copy the files in a directory, using mbpath to represent the new file names
+//  See http://../doc/path.htm#mbpath for more information
+
+//  See deprecated_test for tests of deprecated features
+#define BOOST_FILESYSTEM_NO_DEPRECATED
+
+#include <boost/filesystem/config.hpp>
+# ifdef BOOST_FILESYSTEM_NARROW_ONLY
+# error This compiler or standard library does not support wide-character strings or paths
+# endif
+
+#include "mbpath.hpp"
+#include <iostream>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/fstream.hpp>
+#include "../src/utf8_codecvt_facet.hpp"
+
+namespace fs = boost::filesystem;
+
+namespace
+{
+  // we can't use boost::filesystem::copy_file() because the argument types
+  // differ, so provide a not-very-smart replacement.
+
+  void copy_file( const fs::wpath & from, const user::mbpath & to )
+  {
+ fs::ifstream from_file( from, std::ios_base::in | std::ios_base::binary );
+    if ( !from_file ) { std::cout << "input open failed\n"; return; }
+
+    fs::ofstream to_file( to, std::ios_base::out | std::ios_base::binary );
+    if ( !to_file ) { std::cout << "output open failed\n"; return; }
+
+    char c;
+    while ( from_file.get(c) )
+    {
+      to_file.put(c);
+      if ( to_file.fail() ) { std::cout << "write error\n"; return; }
+    }
+
+    if ( !from_file.eof() ) { std::cout << "read error\n"; }
+  }
+}
+
+int main( int argc, char * argv[] )
+{
+  if ( argc != 2 )
+  {
+ std::cout << "Copy files in the current directory to a target directory\n"
+              << "Usage: mbcopy <target-dir>\n";
+    return 1;
+  }
+
+  // For encoding, use Boost UTF-8 codecvt
+  std::locale global_loc = std::locale();
+  std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet );
+  user::mbpath_traits::imbue( loc );
+
+  std::string target_string( argv[1] );
+ user::mbpath target_dir( user::mbpath_traits::to_internal( target_string ) );
+
+  if ( !fs::is_directory( target_dir ) )
+  {
+    std::cout << "Error: " << argv[1] << " is not a directory\n";
+    return 1;
+  }
+
+  for ( fs::wdirectory_iterator it( L"." );
+    it != fs::wdirectory_iterator(); ++it )
+  {
+    if ( fs::is_regular_file(it->status()) )
+    {
+      copy_file( *it, target_dir / it->path().filename() );
+    }
+  }
+
+  return 0;
+}
+
+
+
+
+
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/mbpath.cpp        Sun Aug 22 23:21:17 2010
@@ -0,0 +1,80 @@
+// Boost.Filesystem mbpath.cpp ---------------------------------------------//
+
+//  (c) 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 Boost.Filesystem home page at http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem/config.hpp>
+# ifdef BOOST_FILESYSTEM_NARROW_ONLY
+# error This compiler or standard library does not support wide-character strings or paths
+# endif
+
+#include "mbpath.hpp"
+#include <boost/system/system_error.hpp>
+#include <boost/scoped_array.hpp>
+
+namespace fs = boost::filesystem;
+
+namespace
+{
+  // ISO C calls this "the locale-specific native environment":
+  std::locale loc("");
+
+  const std::codecvt<wchar_t, char, std::mbstate_t> *
+    cvt( &std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
+           ( loc ) );
+}
+
+namespace user
+{
+  mbpath_traits::external_string_type
+  mbpath_traits::to_external( const mbpath & ph,
+    const internal_string_type & src )
+  {
+    std::size_t work_size( cvt->max_length() * (src.size()+1) );
+    boost::scoped_array<char> work( new char[ work_size ] );
+    std::mbstate_t state;
+    const internal_string_type::value_type * from_next;
+    external_string_type::value_type * to_next;
+    if ( cvt->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<fs::basic_filesystem_error<mbpath> >(
+        fs::basic_filesystem_error<mbpath>(
+          "user::mbpath::to_external conversion error",
+ ph, boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) );
+    *to_next = '\0';
+    return external_string_type( work.get() );
+  }
+
+  mbpath_traits::internal_string_type
+  mbpath_traits::to_internal( const external_string_type & src )
+  {
+      std::size_t work_size( src.size()+1 );
+      boost::scoped_array<wchar_t> work( new wchar_t[ work_size ] );
+      std::mbstate_t state;
+      const external_string_type::value_type * from_next;
+      internal_string_type::value_type * to_next;
+      if ( cvt->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<fs::basic_filesystem_error<mbpath> >(
+          fs::basic_filesystem_error<mbpath>(
+            "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() );
+  }
+
+  void mbpath_traits::imbue( const std::locale & new_loc )
+  {
+    loc = new_loc;
+    cvt = &std::use_facet
+      <std::codecvt<wchar_t, char, std::mbstate_t> >( loc );
+  }
+
+} // namespace user
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/mbpath.hpp        Sun Aug 22 23:21:17 2010
@@ -0,0 +1,44 @@
+// Boost.Filesystem mbpath.hpp ---------------------------------------------//
+
+//  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)
+
+//  Encodes wide character paths as MBCS
+//  See http://../doc/path.htm#mbpath for more information
+
+#include <boost/filesystem/path.hpp>
+#include <cwchar>     // for std::mbstate_t
+#include <string>
+#include <locale>
+
+namespace user
+{
+  struct mbpath_traits;
+
+ typedef boost::filesystem::basic_path<std::wstring, mbpath_traits> mbpath;
+
+  struct mbpath_traits
+  {
+    typedef std::wstring internal_string_type;
+    typedef std::string external_string_type;
+
+    static external_string_type to_external( const mbpath & ph,
+      const internal_string_type & src );
+
+ static internal_string_type to_internal( const external_string_type & src );
+
+    static void imbue( const std::locale & loc );
+  };
+} // namespace user
+
+namespace boost
+{
+  namespace filesystem
+  {
+    template<> struct is_basic_path<user::mbpath>
+      { static const bool value = true; };
+  }
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/path_info.cpp     Sun Aug 22 23:21:17 2010
@@ -0,0 +1,83 @@
+// path_info.cpp ---------------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace std;
+using namespace boost::filesystem;
+
+const char * say_what(bool b) { return b ? "true" : "false"; }
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: path_info path-portion...\n"
+             "Example: path_info foo/bar baz\n"
+#            ifdef BOOST_POSIX_API
+ " would report info about the composed path foo/bar/baz\n";
+#            else  // BOOST_WINDOWS_API
+ " would report info about the composed path foo/bar\\baz\n";
+#            endif
+    return 1;
+  }
+
+  path p;  //  compose a path from the command line arguments
+
+  for (; argc > 1; --argc, ++argv)
+    p /= argv[1];
+
+  cout  <<  "\ncomposed path:\n";
+  cout  <<  "  cout << -------------: " << p << "\n";
+ cout << " make_preferred()----------: " << path(p).make_preferred() << "\n";
+
+  cout << "\nelements:\n";
+
+  for (path::iterator it(p.begin()), it_end(p.end()); it != it_end; ++it)
+    cout << "  " << *it << '\n';
+
+  cout  <<  "\nobservers, native format:" << endl;
+# ifdef BOOST_POSIX_API
+  cout  <<  "  native()-------------: " << p.native() << endl;
+  cout  <<  "  c_str()--------------: " << p.c_str() << endl;
+# else  // BOOST_WINDOWS_API
+  wcout << L"  native()-------------: " << p.native() << endl;
+  wcout << L"  c_str()--------------: " << p.c_str() << endl;
+# endif
+  cout  <<  "  string()-------------: " << p.string() << endl;
+  wcout << L"  wstring()------------: " << p.wstring() << endl;
+
+  cout  <<  "\nobservers, generic format:\n";
+  cout  <<  "  generic_string()-----: " << p.generic_string() << endl;
+  wcout << L"  generic_wstring()----: " << p.generic_wstring() << endl;
+
+  cout  <<  "\ndecomposition:\n";
+  cout  <<  "  root_name()----------: " << p.root_name() << '\n';
+  cout  <<  "  root_directory()-----: " << p.root_directory() << '\n';
+  cout  <<  "  root_path()----------: " << p.root_path() << '\n';
+  cout  <<  "  relative_path()------: " << p.relative_path() << '\n';
+  cout  <<  "  parent_path()--------: " << p.parent_path() << '\n';
+  cout  <<  "  filename()-----------: " << p.filename() << '\n';
+  cout  <<  "  stem()---------------: " << p.stem() << '\n';
+  cout  <<  "  extension()----------: " << p.extension() << '\n';
+
+  cout  <<  "\nquery:\n";
+  cout  <<  "  empty()--------------: " << say_what(p.empty()) << '\n';
+ cout << " is_absolute()--------: " << say_what(p.is_absolute()) << '\n'; + cout << " has_root_name()------: " << say_what(p.has_root_name()) << '\n'; + cout << " has_root_directory()-: " << say_what(p.has_root_directory()) << '\n'; + cout << " has_root_path()------: " << say_what(p.has_root_path()) << '\n'; + cout << " has_relative_path()--: " << say_what(p.has_relative_path()) << '\n'; + cout << " has_parent_path()----: " << say_what(p.has_parent_path()) << '\n'; + cout << " has_filename()-------: " << say_what(p.has_filename()) << '\n';
+  cout  <<  "  has_stem()-----------: " << say_what(p.has_stem()) << '\n';
+ cout << " has_extension()------: " << say_what(p.has_extension()) << '\n';
+
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/simple_ls.cpp     Sun Aug 22 23:21:17 2010
@@ -0,0 +1,91 @@
+// simple_ls program -------------------------------------------------------//
+
+//  Copyright Jeff Garland and 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)
+
+//  See http://www.boost.org/libs/filesystem for documentation.
+
+#define BOOST_FILESYSTEM_VERSION 3
+
+//  As an example program, we don't want to use any deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+#  define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include "boost/filesystem/operations.hpp"
+#include "boost/filesystem/path.hpp"
+#include "boost/progress.hpp"
+#include <iostream>
+
+namespace fs = boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  fs::path p(fs::current_path());
+
+  if (argc > 1)
+    p = fs::system_complete(argv[1]);
+  else
+    std::cout << "\nusage:   simple_ls [path]" << std::endl;
+
+  unsigned long file_count = 0;
+  unsigned long dir_count = 0;
+  unsigned long other_count = 0;
+  unsigned long err_count = 0;
+
+  if (!fs::exists(p))
+  {
+    std::cout << "\nNot found: " << p << std::endl;
+    return 1;
+  }
+
+  if (fs::is_directory(p))
+  {
+    std::cout << "\nIn directory: " << p << "\n\n";
+    fs::directory_iterator end_iter;
+    for (fs::directory_iterator dir_itr(p);
+          dir_itr != end_iter;
+          ++dir_itr)
+    {
+      try
+      {
+        if (fs::is_directory(dir_itr->status()))
+        {
+          ++dir_count;
+          std::cout << dir_itr->path().filename() << " [directory]\n";
+        }
+        else if (fs::is_regular_file(dir_itr->status()))
+        {
+          ++file_count;
+          std::cout << dir_itr->path().filename() << "\n";
+        }
+        else
+        {
+          ++other_count;
+          std::cout << dir_itr->path().filename() << " [other]\n";
+        }
+
+      }
+      catch (const std::exception & ex)
+      {
+        ++err_count;
+ std::cout << dir_itr->path().filename() << " " << ex.what() << std::endl;
+      }
+    }
+    std::cout << "\n" << file_count << " files\n"
+              << dir_count << " directories\n"
+              << other_count << " others\n"
+              << err_count << " errors\n";
+  }
+  else // must be a file
+  {
+    std::cout << "\nFound: " << p << "\n";
+  }
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/tchar.cpp Sun Aug 22 23:21:17 2010
@@ -0,0 +1,39 @@
+// Example use of Microsoft TCHAR ----------------------------------------------------//
+
+//  Copyright Beman Dawes 2008
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <string>
+#include <cassert>
+#include <windows.h>
+#include <winnt.h>
+
+namespace fs = boost::filesystem;
+
+typedef std::basic_string<TCHAR> tstring;
+
+void func( const fs::path & p )
+{
+  assert( fs::exists( p ) );
+}
+
+int main()
+{
+  // get a path that is known to exist
+  fs::path cp = fs::current_path();
+
+  // demo: get tstring from the path
+  tstring cp_as_tstring = cp.string<tstring>();
+
+  // demo: pass tstring to filesystem function taking path
+  assert( fs::exists( cp_as_tstring ) );
+
+  // demo: pass tstring to user function taking path
+  func( cp_as_tstring );
+
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/test/Jamfile.v2 Sun Aug 22 23:21:17 2010
@@ -0,0 +1,31 @@
+# Boost Filesystem Library Tutorial Jamfile
+
+# (C) Copyright Beman Dawes 2010
+# (C) Copyright Vladimir Prus 2003
+
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+    : requirements
+      <library>/boost/filesystem//boost_filesystem
+      <library>/boost/system//boost_system
+      <toolset>msvc:<asynch-exceptions>on
+    ;
+
+exe tut1 : tut1.cpp ;
+exe tut2 : tut2.cpp ;
+exe tut3 : tut3.cpp ;
+exe tut4 : tut4.cpp ;
+exe tut5 : tut5.cpp ;
+exe path_info : path_info.cpp ;
+
+install tut1-copy : tut1 : <location>. ;
+install tut2-copy : tut2 : <location>. ;
+install tut3-copy : tut3 : <location>. ;
+install tut4-copy : tut4 : <location>. ;
+install tut5-copy : tut5 : <location>. ;
+install path_info-copy : path_info : <location>. ;
+
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/test/bld.bat      Sun Aug 22 23:21:17 2010
@@ -0,0 +1,7 @@
+@echo off
+rem Copyright Beman Dawes, 2010
+rem Distributed under the Boost Software License, Version 1.0.
+rem See www.boost.org/LICENSE_1_0.txt
+
+bjam %* >bjam.log
+find "error" <bjam.log
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/test/bld.sh       Sun Aug 22 23:21:17 2010
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+# Copyright Beman Dawes, 2010
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+bjam $* >bjam.log
+grep "error" <bjam.log
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/test/setup.bat Sun Aug 22 23:21:17 2010
@@ -0,0 +1,13 @@
+@echo off
+rem Copyright Beman Dawes, 2010
+rem Distributed under the Boost Software License, Version 1.0.
+rem See www.boost.org/LICENSE_1_0.txt
+
+copy /y ..\tut1.cpp >nul
+copy /y ..\tut2.cpp >nul
+copy /y ..\tut3.cpp >nul
+copy /y ..\tut4.cpp >nul
+copy /y ..\tut5.cpp >nul
+copy /y ..\path_info.cpp >nul
+del *.exe 2>nul
+del *.pdb 2>nul
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/test/setup.sh     Sun Aug 22 23:21:17 2010
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+# Copyright Beman Dawes, 2010
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+cp ../tut1.cpp .
+cp ../tut2.cpp .
+cp ../tut3.cpp .
+cp ../tut4.cpp .
+cp ../tut5.cpp .
+cp ../path_info.cpp .
+rm tut1 2>~/junk
+rm tut2 2>~/junk
+rm tut3 2>~/junk
+rm tut4 2>~/junk
+rm tut5 2>~/junk
+rm path_info 2>~/junk
+
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/tut0.cpp  Sun Aug 22 23:21:17 2010
@@ -0,0 +1,25 @@
+// filesystem tut0.cpp ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+namespace fs = boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    std::cout << "Usage: tut0 path\n";
+    return 1;
+  }
+
+  std::cout << argv[1] << '\n';
+
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/tut1.cpp  Sun Aug 22 23:21:17 2010
@@ -0,0 +1,23 @@
+// filesystem tut1.cpp ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    std::cout << "Usage: tut1 path\n";
+    return 1;
+  }
+  std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/tut2.cpp  Sun Aug 22 23:21:17 2010
@@ -0,0 +1,40 @@
+// filesystem tut2.cpp ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace std;
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: tut2 path\n";
+    return 1;
+  }
+
+  path p (argv[1]);   // p reads clearer than argv[1] in the following code
+
+  if (exists(p))    // does p actually exist?
+  {
+    if (is_regular_file(p))        // is p a regular file?
+      cout << p << " size is " << file_size(p) << '\n';
+
+    else if (is_directory(p))      // is p a directory?
+      cout << p << " is a directory\n";
+
+    else
+ cout << p << " exists, but is neither a regular file nor a directory\n";
+  }
+  else
+    cout << p << " does not exist\n";
+
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/tut3.cpp  Sun Aug 22 23:21:17 2010
@@ -0,0 +1,56 @@
+// filesystem tut3.cpp ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <iterator>
+#include <algorithm>
+#include <boost/filesystem.hpp>
+using namespace std;
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: tut3 path\n";
+    return 1;
+  }
+
+  path p (argv[1]);   // p reads clearer than argv[1] in the following code
+
+  try
+  {
+    if (exists(p))    // does p actually exist?
+    {
+      if (is_regular_file(p))        // is p a regular file?
+        cout << p << " size is " << file_size(p) << '\n';
+
+      else if (is_directory(p))      // is p a directory?
+      {
+        cout << p << " is a directory containing:\n";
+
+ copy(directory_iterator(p), directory_iterator(), // directory_iterator::value_type + ostream_iterator<directory_entry>(cout, "\n")); // is directory_entry, which is + // converted to a path by the + // path stream inserter
+      }
+      else
+ cout << p << " exists, but is neither a regular file nor a directory\n";
+    }
+    else
+      cout << p << " does not exist\n";
+  }
+
+  catch (const filesystem_error& ex)
+  {
+    cout << ex.what() << '\n';
+  }
+
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/tut4.cpp  Sun Aug 22 23:21:17 2010
@@ -0,0 +1,65 @@
+// filesystem tut4.cpp ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <iterator>
+#include <vector>
+#include <algorithm>
+#include <boost/filesystem.hpp>
+using namespace std;
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: tut4 path\n";
+    return 1;
+  }
+
+  path p (argv[1]);   // p reads clearer than argv[1] in the following code
+
+  try
+  {
+    if (exists(p))    // does p actually exist?
+    {
+      if (is_regular_file(p))        // is p a regular file?
+        cout << p << " size is " << file_size(p) << '\n';
+
+      else if (is_directory(p))      // is p a directory?
+      {
+        cout << p << " is a directory containing:\n";
+
+        typedef vector<path> vec;             // store paths,
+        vec v;                                // so we can sort them later
+
+ copy(directory_iterator(p), directory_iterator(), back_inserter(v));
+
+ sort(v.begin(), v.end()); // sort, since directory iteration + // is not ordered on some file systems
+
+ for (vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it)
+        {
+          cout << "   " << *it << '\n';
+        }
+      }
+      else
+ cout << p << " exists, but is neither a regular file nor a directory\n";
+    }
+    else
+      cout << p << " does not exist\n";
+  }
+
+  catch (const filesystem_error& ex)
+  {
+    cout << ex.what() << '\n';
+  }
+
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/example/tut5.cpp  Sun Aug 22 23:21:17 2010
@@ -0,0 +1,52 @@
+// filesystem tut5.cpp ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem/fstream.hpp>
+#include <string>
+#include <list>
+namespace fs = boost::filesystem;
+
+int main()
+{
+  // \u263A is "Unicode WHITE SMILING FACE = have a nice day!"
+  std::string narrow_string ("smile2");
+  std::wstring wide_string (L"smile2\u263A");
+  std::list<char> narrow_list;
+  narrow_list.push_back('s');
+  narrow_list.push_back('m');
+  narrow_list.push_back('i');
+  narrow_list.push_back('l');
+  narrow_list.push_back('e');
+  narrow_list.push_back('3');
+  std::list<wchar_t> wide_list;
+  wide_list.push_back(L's');
+  wide_list.push_back(L'm');
+  wide_list.push_back(L'i');
+  wide_list.push_back(L'l');
+  wide_list.push_back(L'e');
+  wide_list.push_back(L'3');
+  wide_list.push_back(L'\u263A');
+
+  { fs::ofstream f("smile"); }
+  { fs::ofstream f(L"smile\u263A"); }
+  { fs::ofstream f(narrow_string); }
+  { fs::ofstream f(wide_string); }
+  { fs::ofstream f(narrow_list); }
+  { fs::ofstream f(wide_list); }
+  narrow_list.pop_back();
+  narrow_list.push_back('4');
+  wide_list.pop_back();
+  wide_list.pop_back();
+  wide_list.push_back(L'4');
+  wide_list.push_back(L'\u263A');
+  { fs::ofstream f(fs::path(narrow_list.begin(), narrow_list.end())); }
+  { fs::ofstream f(fs::path(wide_list.begin(), wide_list.end())); }
+
+  return 0;
+}
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/index.html        Sun Aug 22 23:21:17 2010
@@ -0,0 +1,14 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=doc/index.htm">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="doc/index.htm">doc/index.htm</a>.
+<hr>
+<p>&copy; Copyright Beman Dawes, 2003</p>
+<p> Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt";>
+www.boost.org/LICENSE_1_0.txt</a>)</p>
+</body>
+</html>
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/src/codecvt_error_category.cpp Sun Aug 22 23:21:17 2010
@@ -0,0 +1,93 @@
+// codecvt_error_category implementation file ----------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt)
+
+//  Library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config.hpp>
+#if !defined( BOOST_NO_STD_WSTRING )
+// Boost.Filesystem V3 and later requires std::wstring support.
+// During the transition to V3, libraries are compiled with both V2 and V3 sources. +// On old compilers that don't support V3 anyhow, we just skip everything so the compile
+// will succeed and the library can be built.
+
+#include <boost/config/warning_disable.hpp>
+
+// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows +// the library is being built (possibly exporting rather than importing code)
+#define BOOST_FILESYSTEM_SOURCE
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/v3/config.hpp>
+#include <boost/filesystem/v3/path_traits.hpp>
+#include <boost/system/error_code.hpp>
+#include <locale>
+#include <vector>
+#include <cstdlib>
+#include <cassert>
+
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+  class codecvt_error_cat : public boost::system::error_category
+  {
+  public:
+    codecvt_error_cat(){}
+    const char*   name() const;
+    std::string    message(int ev) const;
+  };
+
+  const char* codecvt_error_cat::name() const
+  {
+    return "codecvt";
+  }
+
+  std::string codecvt_error_cat::message(int ev) const
+  {
+    std::string str;
+    switch (ev)
+    {
+    case std::codecvt_base::ok:
+      str = "ok";
+      break;
+    case std::codecvt_base::partial:
+      str = "partial";
+      break;
+    case std::codecvt_base::error:
+      str = "error";
+      break;
+    case std::codecvt_base::noconv:
+      str = "noconv";
+      break;
+    default:
+      str = "unknown error";
+    }
+    return str;
+  }
+
+} // unnamed namespace
+
+namespace boost
+{
+  namespace filesystem3
+  {
+
+ BOOST_FILESYSTEM_DECL const boost::system::error_category& codecvt_error_category()
+    {
+      static const codecvt_error_cat  codecvt_error_cat_const;
+      return codecvt_error_cat_const;
+    }
+
+  } // namespace filesystem3
+} // namespace boost
+
+#endif  // no wide character support
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/src/operations.cpp        Sun Aug 22 23:21:17 2010
@@ -0,0 +1,1841 @@
+// operations.cpp --------------------------------------------------------------------//
+
+//  Copyright 2002-2009 Beman Dawes
+//  Copyright 2001 Dietmar Kuehl
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  See library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config.hpp>
+#if !defined( BOOST_NO_STD_WSTRING )
+// Boost.Filesystem V3 and later requires std::wstring support.
+// During the transition to V3, libraries are compiled with both V2 and V3 sources. +// On old compilers that don't support V3 anyhow, we just skip everything so the compile
+// will succeed and the library can be built.
+
+// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows +// the library is being built (possibly exporting rather than importing code)
+
+#define BOOST_FILESYSTEM_SOURCE
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS  // Sun readdir_r()needs this
+#endif
+
+#if !(defined(__HP_aCC) && defined(_ILP32) && \
+      !defined(_STATVFS_ACPP_PROBLEMS_FIXED))
+#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.
+      // OTOH, defining them should kick in 64-bit off_t's (and thus
+      // st_size)on 32-bit systems that provide the Large File
+      // Support (LFS)interface, such as Linux, Solaris, and IRIX.
+      // The defines are given before any headers are included to
+      // ensure that they are available to all included headers.
+      // That is required at least on Solaris, and possibly on other
+      // systems as well.
+
+#include <boost/filesystem/v3/operations.hpp>
+#include <boost/scoped_array.hpp>
+#include <boost/detail/workaround.hpp>
+#include <cstdlib>  // for malloc, free
+
+#ifdef BOOST_FILEYSTEM_INCLUDE_IOSTREAM
+# include <iostream>
+#endif
+
+namespace fs = boost::filesystem3;
+using boost::filesystem3::path;
+using boost::filesystem3::filesystem_error;
+using boost::system::error_code;
+using boost::system::error_category;
+using boost::system::system_category;
+using std::string;
+using std::wstring;
+
+# ifdef BOOST_POSIX_API
+
+#   include <sys/types.h>
+#   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 "limits.h"
+
+# else // BOOST_WINDOW_API
+
+#   if (defined(__MINGW32__) || defined(__CYGWIN__)) && !defined(WINVER)
+ // Versions of MinGW or Cygwin that support Filesystem V3 support at least WINVER 0x501.
+      // See MinGW's windef.h
+#     define WINVER 0x501
+#   endif
+#   include <windows.h>
+#   include <winnt.h>
+#   if !defined(_WIN32_WINNT)
+#     define  _WIN32_WINNT   0x0500
+#   endif
+#   if defined(__BORLANDC__) || defined(__MWERKS__)
+#     if defined(__BORLANDC__)
+        using std::time_t;
+#     endif
+#     include <utime.h>
+#   else
+#     include <sys/utime.h>
+#   endif
+
+// REPARSE_DATA_BUFFER related definitions are found in ntifs.h, which is part of the +// Windows Device Driver Kit. Since that's inconvenient, the definitions are provided
+//  here. See http://msdn.microsoft.com/en-us/library/ms791514.aspx
+
+#if !defined(REPARSE_DATA_BUFFER_HEADER_SIZE) // mingw winnt.h does provide the defs
+
+#define SYMLINK_FLAG_RELATIVE 1
+
+typedef struct _REPARSE_DATA_BUFFER {
+  ULONG  ReparseTag;
+  USHORT  ReparseDataLength;
+  USHORT  Reserved;
+  union {
+    struct {
+      USHORT  SubstituteNameOffset;
+      USHORT  SubstituteNameLength;
+      USHORT  PrintNameOffset;
+      USHORT  PrintNameLength;
+      ULONG  Flags;
+      WCHAR  PathBuffer[1];
+  /*  Example of distinction between substitute and print names:
+        mklink /d ldrive c:\
+        SubstituteName: c:\\??\
+        PrintName: c:\
+  */
+     } SymbolicLinkReparseBuffer;
+    struct {
+      USHORT  SubstituteNameOffset;
+      USHORT  SubstituteNameLength;
+      USHORT  PrintNameOffset;
+      USHORT  PrintNameLength;
+      WCHAR  PathBuffer[1];
+      } MountPointReparseBuffer;
+    struct {
+      UCHAR  DataBuffer[1];
+    } GenericReparseBuffer;
+  };
+} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
+
+#define REPARSE_DATA_BUFFER_HEADER_SIZE \
+  FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
+
+#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE  ( 16 * 1024 )
+#endif
+
+# endif
+
+//  BOOST_FILESYSTEM_STATUS_CACHE enables file_status cache in
+//  dir_itr_increment. The config tests are placed here because some of the
+//  macros being tested come from dirent.h.
+//
+// TODO: find out what macros indicate dirent::d_type present in more libraries
+# if defined(BOOST_WINDOWS_API)\
+ || defined(_DIRENT_HAVE_D_TYPE)// defined by GNU C library if d_type present
+#   define BOOST_FILESYSTEM_STATUS_CACHE
+# endif
+
+#include <sys/stat.h>  // even on Windows some functions use stat()
+#include <string>
+#include <cstring>
+#include <cstdio>      // for remove, rename
+#include <cerrno>
+#include <cassert>
+// #include <iostream> // for debugging only; comment out when not in use
+
+// POSIX/Windows macros ----------------------------------------------------//
+
+// Portions of the POSIX and Windows API's are very similar, except for name, +// order of arguments, and meaning of zero/non-zero returns. The macros below +// abstract away those differences. They follow Windows naming and order of +// arguments, and return true to indicate no error occurred. [POSIX naming,
+//  order of arguments, and meaning of return were followed initially, but
+//  found to be less clear and cause more coding errors.]
+
+# if defined(BOOST_POSIX_API)
+
+//  POSIX uses a 0 return to indicate success
+#   define BOOST_ERRNO    errno
+#   define BOOST_SET_CURRENT_DIRECTORY(P)(::chdir(P)== 0)
+# define BOOST_CREATE_DIRECTORY(P)(::mkdir(P, S_IRWXU|S_IRWXG|S_IRWXO)== 0)
+#   define BOOST_CREATE_HARD_LINK(F,T)(::link(T, F)== 0)
+#   define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(::symlink(T, F)== 0)
+#   define BOOST_REMOVE_DIRECTORY(P)(::rmdir(P)== 0)
+#   define BOOST_DELETE_FILE(P)(::unlink(P)== 0)
+# define BOOST_COPY_DIRECTORY(F,T)(!(::stat(from.c_str(), &from_stat)!= 0\
+         || ::mkdir(to.c_str(),from_stat.st_mode)!= 0))
+# define BOOST_COPY_FILE(F,T,FailIfExistsBool)copy_file_api(F, T, FailIfExistsBool)
+#   define BOOST_MOVE_FILE(OLD,NEW)(::rename(OLD, NEW)== 0)
+#   define BOOST_RESIZE_FILE(P,SZ)(::truncate(P, SZ)== 0)
+
+#   define BOOST_ERROR_NOT_SUPPORTED ENOSYS
+#   define BOOST_ERROR_ALREADY_EXISTS EEXIST
+
+# else  // BOOST_WINDOWS_API
+
+//  Windows uses a non-0 return to indicate success
+#   define BOOST_ERRNO    ::GetLastError()
+#   define BOOST_SET_CURRENT_DIRECTORY(P)(::SetCurrentDirectoryW(P)!= 0)
+#   define BOOST_CREATE_DIRECTORY(P)(::CreateDirectoryW(P, 0)!= 0)
+#   define BOOST_CREATE_HARD_LINK(F,T)(create_hard_link_api(F, T, 0)!= 0)
+# define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(create_symbolic_link_api(F, T, Flag)!= 0)
+#   define BOOST_REMOVE_DIRECTORY(P)(::RemoveDirectoryW(P)!= 0)
+#   define BOOST_DELETE_FILE(P)(::DeleteFileW(P)!= 0)
+#   define BOOST_COPY_DIRECTORY(F,T)(::CreateDirectoryExW(F, T, 0)!= 0)
+# define BOOST_COPY_FILE(F,T,FailIfExistsBool)(::CopyFileW(F, T, FailIfExistsBool)!= 0) +# define BOOST_MOVE_FILE(OLD,NEW)(::MoveFileExW(OLD, NEW, MOVEFILE_REPLACE_EXISTING)!= 0)
+#   define BOOST_RESIZE_FILE(P,SZ)(resize_file_api(P, SZ)!= 0)
+#   define BOOST_READ_SYMLINK(P,T)
+
+#   define BOOST_ERROR_ALREADY_EXISTS ERROR_ALREADY_EXISTS
+#   define BOOST_ERROR_NOT_SUPPORTED ERROR_NOT_SUPPORTED
+
+# endif
+
+//--------------------------------------------------------------------------------------//
+// // +// helpers (all operating systems) // +// //
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+
+# ifdef BOOST_POSIX_API
+  const char dot = '.';
+# else
+  const wchar_t dot = L'.';
+# endif
+
+  boost::filesystem3::directory_iterator end_dir_itr;
+
+  const std::size_t buf_size(128);
+  const error_code ok;
+
+  bool error(bool was_error, error_code* ec, const string& message)
+  {
+    if (!was_error)
+    {
+      if (ec != 0) ec->clear();
+    }
+    else
+    { //  error
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(message,
+          error_code(BOOST_ERRNO, system_category())));
+      else
+        ec->assign(BOOST_ERRNO, system_category());
+    }
+    return was_error;
+  }
+
+ bool error(bool was_error, const path& p, error_code* ec, const string& message)
+  {
+    if (!was_error)
+    {
+      if (ec != 0) ec->clear();
+    }
+    else
+    { //  error
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(message,
+          p, error_code(BOOST_ERRNO, system_category())));
+      else
+        ec->assign(BOOST_ERRNO, system_category());
+    }
+    return was_error;
+  }
+
+ bool error(bool was_error, const path& p1, const path& p2, error_code* ec,
+    const string& message)
+  {
+    if (!was_error)
+    {
+      if (ec != 0) ec->clear();
+    }
+    else
+    { //  error
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(message,
+          p1, p2, error_code(BOOST_ERRNO, system_category())));
+      else
+        ec->assign(BOOST_ERRNO, system_category());
+    }
+    return was_error;
+  }
+
+  bool error(bool was_error, const error_code& result,
+    const path& p, error_code* ec, const string& message)
+    //  Overwrites ec if there has already been an error
+  {
+    if (!was_error)
+    {
+      if (ec != 0) ec->clear();
+    }
+    else
+    { //  error
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(message, p, result));
+      else
+        *ec = result;
+    }
+    return was_error;
+  }
+
+  bool error(bool was_error, const error_code& result,
+    const path& p1, const path& p2, error_code* ec, const string& message)
+    //  Overwrites ec if there has already been an error
+  {
+    if (!was_error)
+    {
+      if (ec != 0) ec->clear();
+    }
+    else
+    { //  error
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(message, p1, p2, result));
+      else
+        *ec = result;
+    }
+    return was_error;
+  }
+
+  bool is_empty_directory(const path& p)
+  {
+    return fs::directory_iterator(p)== end_dir_itr;
+  }
+
+  bool remove_directory(const path& p) // true if succeeds
+    { return BOOST_REMOVE_DIRECTORY(p.c_str()); }
+
+  bool remove_file(const path& p) // true if succeeds
+    { return BOOST_DELETE_FILE(p.c_str()); }
+
+  // called by remove and remove_all_aux
+ bool remove_file_or_directory(const path& p, fs::file_status sym_stat, error_code* ec)
+    // return true if file removed, false if not removed
+  {
+    if (sym_stat.type()== fs::file_not_found)
+    {
+      if (ec != 0) ec->clear();
+      return false;
+    }
+
+    if (fs::is_directory(sym_stat))
+    {
+      if (error(!remove_directory(p), p, ec, "boost::filesystem::remove"))
+        return false;
+    }
+    else
+    {
+      if (error(!remove_file(p), p, ec, "boost::filesystem::remove"))
+        return false;
+    }
+    return true;
+  }
+
+  boost::uintmax_t remove_all_aux(const path& p, fs::file_status sym_stat,
+    error_code* ec)
+  {
+    boost::uintmax_t count = 1;
+
+    if (!fs::is_symlink(sym_stat)// don't recurse symbolic links
+      && fs::is_directory(sym_stat))
+    {
+      for (fs::directory_iterator itr(p);
+            itr != end_dir_itr; ++itr)
+      {
+ fs::file_status tmp_sym_stat = fs::symlink_status(itr->path(), *ec);
+        if (ec != 0 && ec)
+          return count;
+        count += remove_all_aux(itr->path(), tmp_sym_stat, ec);
+      }
+    }
+    remove_file_or_directory(p, sym_stat, ec);
+    return count;
+  }
+
+#ifdef BOOST_POSIX_API
+
+//--------------------------------------------------------------------------------------//
+// // +// POSIX-specific helpers // +// //
+//--------------------------------------------------------------------------------------//
+
+  bool not_found_error(int errval)
+  {
+    return errno == ENOENT || errno == ENOTDIR;
+  }
+
+  bool // true if ok
+  copy_file_api(const std::string& from_p,
+    const std::string& to_p, bool fail_if_exists)
+  {
+    const std::size_t buf_sz = 32768;
+    boost::scoped_array<char> buf(new char [buf_sz]);
+    int infile=-1, outfile=-1;  // -1 means not open
+
+ // bug fixed: code previously did a stat()on the from_file first, but that + // introduced a gratuitous race condition; the stat()is now done after the open()
+
+    if ((infile = ::open(from_p.c_str(), O_RDONLY))< 0)
+      { return false; }
+
+    struct stat from_stat;
+    if (::stat(from_p.c_str(), &from_stat)!= 0)
+      { return false; }
+
+    int oflag = O_CREAT | O_WRONLY;
+    if (fail_if_exists)oflag |= O_EXCL;
+    if ((outfile = ::open(to_p.c_str(), oflag, from_stat.st_mode))< 0)
+    {
+      int open_errno = errno;
+      BOOST_ASSERT(infile >= 0);
+      ::close(infile);
+      errno = open_errno;
+      return false;
+    }
+
+    ssize_t sz, sz_read=1, sz_write;
+    while (sz_read > 0
+      && (sz_read = ::read(infile, buf.get(), buf_sz))> 0)
+    {
+ // Allow for partial writes - see Advanced Unix Programming (2nd Ed.),
+      // Marc Rochkind, Addison-Wesley, 2004, page 94
+      sz_write = 0;
+      do
+      {
+        if ((sz = ::write(outfile, buf.get() + sz_write,
+          sz_read - sz_write))< 0)
+        {
+          sz_read = sz; // cause read loop termination
+          break;        //  and error to be thrown after closes
+        }
+        sz_write += sz;
+      } while (sz_write < sz_read);
+    }
+
+    if (::close(infile)< 0)sz_read = -1;
+    if (::close(outfile)< 0)sz_read = -1;
+
+    return sz_read >= 0;
+  }
+
+# else
+
+//--------------------------------------------------------------------------------------//
+// // +// Windows-specific helpers // +// //
+//--------------------------------------------------------------------------------------//
+
+  bool not_found_error(int errval)
+  {
+    return errval == ERROR_FILE_NOT_FOUND
+      || errval == ERROR_PATH_NOT_FOUND
+ || errval == ERROR_INVALID_NAME // "tools/jam/src/:sys:stat.h", "//foo" + || errval == ERROR_INVALID_DRIVE // USB card reader with no card inserted
+      || errval == ERROR_NOT_READY  // CD/DVD drive with no disc inserted
+      || errval == ERROR_INVALID_PARAMETER  // ":sys:stat.h"
+      || errval == ERROR_BAD_PATHNAME  // "//nosuch" on Win64
+      || errval == ERROR_BAD_NETPATH;  // "//nosuch" on Win32
+  }
+
+  // these constants come from inspecting some Microsoft sample code
+  std::time_t to_time_t(const FILETIME & ft)
+  {
+    __int64 t = (static_cast<__int64>(ft.dwHighDateTime)<< 32)
+      + ft.dwLowDateTime;
+#   if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // > VC++ 7.0
+    t -= 116444736000000000LL;
+#   else
+    t -= 116444736000000000;
+#   endif
+    t /= 10000000;
+    return static_cast<std::time_t>(t);
+  }
+
+  void to_FILETIME(std::time_t t, FILETIME & ft)
+  {
+    __int64 temp = t;
+    temp *= 10000000;
+#   if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // > VC++ 7.0
+    temp += 116444736000000000LL;
+#   else
+    temp += 116444736000000000;
+#   endif
+    ft.dwLowDateTime = static_cast<DWORD>(temp);
+    ft.dwHighDateTime = static_cast<DWORD>(temp >> 32);
+  }
+
+  // Thanks to Jeremy Maitin-Shepard for much help and for permission to
+  // base the equivalent()implementation on portions of his
+  // file-equivalence-win32.cpp experimental code.
+
+  struct handle_wrapper
+  {
+    HANDLE handle;
+    handle_wrapper(HANDLE h)
+      : handle(h){}
+    ~handle_wrapper()
+    {
+      if (handle != INVALID_HANDLE_VALUE)
+        ::CloseHandle(handle);
+    }
+  };
+
+  HANDLE create_file_handle(path p, DWORD dwDesiredAccess,
+    DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+    DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
+    HANDLE hTemplateFile)
+  {
+    return ::CreateFileW(p.c_str(), dwDesiredAccess, dwShareMode,
+      lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
+      hTemplateFile);
+  }
+
+  inline std::size_t get_full_path_name(
+    const path& src, std::size_t len, wchar_t* buf, wchar_t** p)
+  {
+    return static_cast<std::size_t>(
+      ::GetFullPathNameW(src.c_str(), static_cast<DWORD>(len), buf, p));
+  }
+
+  BOOL resize_file_api(const wchar_t* p, boost::uintmax_t size)
+  {
+    HANDLE handle = CreateFileW(p, GENERIC_WRITE, 0, 0, OPEN_EXISTING,
+                                FILE_ATTRIBUTE_NORMAL, 0);
+    LARGE_INTEGER sz;
+    sz.QuadPart = size;
+    return handle != INVALID_HANDLE_VALUE
+      && ::SetFilePointerEx(handle, sz, 0, FILE_BEGIN)
+      && ::SetEndOfFile(handle)
+      && ::CloseHandle(handle);
+  }
+
+  //  Windows kernel32.dll functions that may or may not be present
+  //  must be accessed through pointers
+
+  typedef BOOL (WINAPI *PtrCreateHardLinkW)(
+    /*__in*/       LPCWSTR lpFileName,
+    /*__in*/       LPCWSTR lpExistingFileName,
+    /*__reserved*/ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+   );
+
+  PtrCreateHardLinkW create_hard_link_api = PtrCreateHardLinkW(
+    ::GetProcAddress(
+      ::GetModuleHandle(TEXT("kernel32.dll")), "CreateHardLinkW"));
+
+  typedef BOOLEAN (WINAPI *PtrCreateSymbolicLinkW)(
+    /*__in*/ LPCWSTR lpSymlinkFileName,
+    /*__in*/ LPCWSTR lpTargetFileName,
+    /*__in*/ DWORD dwFlags
+   );
+
+  PtrCreateSymbolicLinkW create_symbolic_link_api = PtrCreateSymbolicLinkW(
+    ::GetProcAddress(
+      ::GetModuleHandle(TEXT("kernel32.dll")), "CreateSymbolicLinkW"));
+#endif
+
+//#ifdef BOOST_WINDOWS_API
+//
+//
+//  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; }
+//
+//#endif
+
+} // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+// // +// operations functions declared in operations.hpp // +// in alphabetic order // +// //
+//--------------------------------------------------------------------------------------//
+
+namespace boost
+{
+namespace filesystem3
+{
+
+  BOOST_FILESYSTEM_DECL
+  path absolute(const path& p, const path& base)
+  {
+//    if ( p.empty() || p.is_absolute() )
+//      return p;
+//    //  recursively calling absolute is sub-optimal, but is simple
+//    path abs_base(base.is_absolute() ? base : absolute(base));
+//# ifdef BOOST_WINDOWS_API
+//    if (p.has_root_directory())
+//      return abs_base.root_name() / p;
+//    //  !p.has_root_directory
+//    if (p.has_root_name())
+//      return p.root_name()
+// / abs_base.root_directory() / abs_base.relative_path() / p.relative_path();
+//    //  !p.has_root_name()
+//# endif
+//    return abs_base / p;
+
+    //  recursively calling absolute is sub-optimal, but is sure and simple
+    path abs_base(base.is_absolute() ? base : absolute(base));
+
+    //  store expensive to compute values that are needed multiple times
+    path p_root_name (p.root_name());
+    path base_root_name (abs_base.root_name());
+    path p_root_directory (p.root_directory());
+
+    if (p.empty())
+      return abs_base;
+
+    if (!p_root_name.empty())  // p.has_root_name()
+    {
+      if (p_root_directory.empty())  // !p.has_root_directory()
+        return p_root_name / abs_base.root_directory()
+        / abs_base.relative_path() / p.relative_path();
+      // p is absolute, so fall through to return p at end of block
+    }
+
+    else if (!p_root_directory.empty())  // p.has_root_directory()
+    {
+#     ifdef BOOST_POSIX_API
+      // POSIX can have root name it it is a network path
+      if (base_root_name.empty())   // !abs_base.has_root_name()
+        return p;
+#     endif
+      return base_root_name / p;
+    }
+
+    else
+    {
+      return abs_base / p;
+    }
+
+    return p;  // p.is_absolute() is true
+  }
+
+namespace detail
+{
+  BOOST_FILESYSTEM_DECL bool possible_large_file_size_support()
+  {
+#   ifdef BOOST_POSIX_API
+    struct stat lcl_stat;
+    return sizeof(lcl_stat.st_size)> 4;
+#   else
+    return true;
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void copy(const path& from, const path& to, system::error_code* ec)
+  {
+    file_status s(symlink_status(from, *ec));
+    if (ec != 0 && ec)return;
+
+    if(is_symlink(s))
+    {
+      copy_symlink(from, to, *ec);
+    }
+    else if(is_directory(s))
+    {
+      copy_directory(from, to, *ec);
+    }
+    else if(is_regular_file(s))
+    {
+      copy_file(from, to, copy_option::fail_if_exists, *ec);
+    }
+    else
+    {
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::copy",
+ from, to, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category())));
+      ec->assign(BOOST_ERROR_NOT_SUPPORTED, system_category());
+    }
+  }
+
+  BOOST_FILESYSTEM_DECL
+ void copy_directory(const path& from, const path& to, system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+    struct stat from_stat;
+#   endif
+    error(!BOOST_COPY_DIRECTORY(from.c_str(), to.c_str()),
+      from, to, ec, "boost::filesystem::copy_directory");
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void copy_file(const path& from, const path& to,
+                  BOOST_SCOPED_ENUM(copy_option)option,
+                  error_code* ec)
+  {
+    error(!BOOST_COPY_FILE(from.c_str(), to.c_str(),
+      option == copy_option::fail_if_exists),
+        from, to, ec, "boost::filesystem::copy_file");
+  }
+
+  BOOST_FILESYSTEM_DECL
+ void copy_symlink(const path& from, const path& to, system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+    path p(read_symlink(from, ec));
+    if (ec != 0 && ec) return;
+    create_symlink(p, to, ec);
+
+#   elif _WIN32_WINNT < 0x0600  // SDK earlier than Vista and Server 2008
+ error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec,
+      "boost::filesystem::copy_symlink");
+
+#   else  // modern Windows
+
+    // see if actually supported by Windows runtime dll
+    if (error(!create_symbolic_link_api,
+        error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()),
+        to, from, ec,
+        "boost::filesystem3::copy_symlink"))
+      return;
+
+         // preconditions met, so attempt the copy
+         error(!::CopyFileExW(from.c_str(), to.c_str(), 0, 0, 0,
+                 COPY_FILE_COPY_SYMLINK | COPY_FILE_FAIL_IF_EXISTS), to, from, 
ec,
+                 "boost::filesystem3::copy_symlink");
+#   endif
+
+  }
+
+  BOOST_FILESYSTEM_DECL
+  bool create_directories(const path& p, system::error_code* ec)
+  {
+    if (p.empty() || exists(p))
+    {
+      if (!p.empty() && !is_directory(p))
+      {
+        if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(
+            "boost::filesystem::create_directories", p,
+ error_code(system::errc::file_exists, system::generic_category()))); + else ec->assign(system::errc::file_exists, system::generic_category());
+      }
+      return false;
+    }
+
+    // First create branch, by calling ourself recursively
+    create_directories(p.parent_path(), ec);
+    // Now that parent's path exists, create the directory
+    create_directory(p, ec);
+    return true;
+  }
+
+  BOOST_FILESYSTEM_DECL
+  bool create_directory(const path& p, error_code* ec)
+  {
+    if (BOOST_CREATE_DIRECTORY(p.c_str()))
+    {
+      if (ec != 0) ec->clear();
+      return true;
+    }
+
+    //  attempt to create directory failed
+    int errval(BOOST_ERRNO);  // save reason for failure
+    error_code dummy;
+    if (errval == BOOST_ERROR_ALREADY_EXISTS && is_directory(p, dummy))
+    {
+      if (ec != 0) ec->clear();
+      return false;
+    }
+
+    //  attempt to create directory failed && it doesn't already exist
+    if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::create_directory",
+        p, error_code(errval, system_category())));
+    else
+      ec->assign(errval, system_category());
+    return false;
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void create_directory_symlink(const path& to, const path& from,
+                                 system::error_code* ec)
+  {
+# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008
+
+ error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec,
+      "boost::filesystem::create_directory_symlink");
+#   else
+
+#     if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600
+        // see if actually supported by Windows runtime dll
+        if (error(!create_symbolic_link_api,
+            error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()),
+            to, from, ec,
+            "boost::filesystem::create_directory_symlink"))
+          return;
+#     endif
+
+ error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(), SYMBOLIC_LINK_FLAG_DIRECTORY),
+      to, from, ec, "boost::filesystem::create_directory_symlink");
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void create_hard_link(const path& to, const path& from, error_code* ec)
+  {
+
+# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0500 // SDK earlier than Win 2K
+
+ error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec,
+      "boost::filesystem::create_hard_link");
+#   else
+
+#     if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0500
+        // see if actually supported by Windows runtime dll
+        if (error(!create_hard_link_api,
+            error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()),
+            to, from, ec,
+            "boost::filesystem::create_hard_link"))
+          return;
+#     endif
+
+    error(!BOOST_CREATE_HARD_LINK(from.c_str(), to.c_str()), to, from, ec,
+      "boost::filesystem::create_hard_link");
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void create_symlink(const path& to, const path& from, error_code* ec)
+  {
+# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008 + error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec,
+      "boost::filesystem::create_directory_symlink");
+#   else
+
+#     if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600
+        // see if actually supported by Windows runtime dll
+        if (error(!create_symbolic_link_api,
+            error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()),
+            to, from, ec,
+            "boost::filesystem::create_directory_symlink"))
+          return;
+#     endif
+
+    error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(), 0),
+      to, from, ec, "boost::filesystem::create_directory_symlink");
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  path current_path(error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+    path cur;
+ for (long path_max = 128;; path_max *=2)// loop 'til buffer large enough
+    {
+      boost::scoped_array<char>
+        buf(new char[static_cast<std::size_t>(path_max)]);
+      if (::getcwd(buf.get(), static_cast<std::size_t>(path_max))== 0)
+      {
+        if (error(errno != ERANGE
+ // bug in some versions of the Metrowerks C lib on the Mac: wrong errno set +# if defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
+          && errno != 0
+#         endif
+          , ec, "boost::filesystem::current_path"))
+        {
+          break;
+        }
+      }
+      else
+      {
+        cur = buf.get();
+        if (ec != 0) ec->clear();
+        break;
+      }
+    }
+    return cur;
+
+#   else
+    DWORD sz;
+    if ((sz = ::GetCurrentDirectoryW(0, NULL))== 0)sz = 1;
+    boost::scoped_array<path::value_type> buf(new path::value_type[sz]);
+    error(::GetCurrentDirectoryW(sz, buf.get())== 0, ec,
+      "boost::filesystem::current_path");
+    return path(buf.get());
+#   endif
+  }
+
+
+  BOOST_FILESYSTEM_DECL
+  void current_path(const path& p, system::error_code* ec)
+  {
+    error(!BOOST_SET_CURRENT_DIRECTORY(p.c_str()),
+      p, ec, "boost::filesystem::current_path");
+  }
+
+  BOOST_FILESYSTEM_DECL
+  bool equivalent(const path& p1, const path& p2, system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+    struct stat s2;
+    int e2(::stat(p2.c_str(), &s2));
+    struct stat s1;
+    int e1(::stat(p1.c_str(), &s1));
+
+    if (e1 != 0 || e2 != 0)
+    {
+      // if one is invalid and the other isn't then they aren't equivalent,
+      // but if both are invalid then it is an error
+ error (e1 != 0 && e2 != 0, p1, p2, ec, "boost::filesystem::equivalent");
+      return false;
+    }
+
+    // both stats now known to be valid
+    return  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
+        // taken together uniquely identify the file within the system."
+        // Just to be sure, size and mod time are also checked.
+        && s1.st_size == s2.st_size && s1.st_mtime == s2.st_mtime;
+
+#   else  // Windows
+
+    // Note well: Physical location on external media is part of the
+ // equivalence criteria. If there are no open handles, physical location
+    // can change due to defragmentation or other relocations. Thus handles
+    // must be held open until location information for both paths has
+    // been retrieved.
+
+    // p2 is done first, so any error reported is for p1
+    handle_wrapper h2(
+      create_file_handle(
+          p2.c_str(),
+          0,
+          FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+          0,
+          OPEN_EXISTING,
+          FILE_FLAG_BACKUP_SEMANTICS,
+          0));
+
+    handle_wrapper h1(
+      create_file_handle(
+          p1.c_str(),
+          0,
+          FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+          0,
+          OPEN_EXISTING,
+          FILE_FLAG_BACKUP_SEMANTICS,
+          0));
+
+    if (h1.handle == INVALID_HANDLE_VALUE
+      || h2.handle == INVALID_HANDLE_VALUE)
+    {
+ // if one is invalid and the other isn't, then they aren't equivalent,
+      // but if both are invalid then it is an error
+      error(h1.handle == INVALID_HANDLE_VALUE
+        && h2.handle == INVALID_HANDLE_VALUE, p1, p2, ec,
+          "boost::filesystem::equivalent");
+      return false;
+    }
+
+    // at this point, both handles are known to be valid
+
+    BY_HANDLE_FILE_INFORMATION info1, info2;
+
+    if (error(!::GetFileInformationByHandle(h1.handle, &info1),
+      p1, p2, ec, "boost::filesystem::equivalent"))
+        return  false;
+
+    if (error(!::GetFileInformationByHandle(h2.handle, &info2),
+      p1, p2, ec, "boost::filesystem::equivalent"))
+        return  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
+        info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
+        && info1.nFileIndexHigh == info2.nFileIndexHigh
+        && info1.nFileIndexLow == info2.nFileIndexLow
+        && info1.nFileSizeHigh == info2.nFileSizeHigh
+        && info1.nFileSizeLow == info2.nFileSizeLow
+        && info1.ftLastWriteTime.dwLowDateTime
+          == info2.ftLastWriteTime.dwLowDateTime
+        && info1.ftLastWriteTime.dwHighDateTime
+          == info2.ftLastWriteTime.dwHighDateTime;
+
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  boost::uintmax_t file_size(const path& p, error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /trunk/libs/filesystem/v3/src/path.cpp      Sun Aug 22 23:21:17 2010
@@ -0,0 +1,807 @@
+// filesystem path.cpp ------------------------------------------------------------- //
+
+//  Copyright Beman Dawes 2008
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/config.hpp>
+#if !defined( BOOST_NO_STD_WSTRING )
+// Boost.Filesystem V3 and later requires std::wstring support.
+// During the transition to V3, libraries are compiled with both V2 and V3 sources. +// On old compilers that don't support V3 anyhow, we just skip everything so the compile
+// will succeed and the library can be built.
+
+// define BOOST_FILESYSTEM_SOURCE so that <boost/system/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_FILESYSTEM_SOURCE
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/v3/config.hpp>
+#include <boost/filesystem/v3/path.hpp>
+#include <boost/scoped_array.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/assert.hpp>
+#include <cstddef>
+#include <cstring>
+#include <cassert>
+
+#ifdef BOOST_WINDOWS_API
+# include "windows_file_codecvt.hpp"
+# include <windows.h>
+#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
+# include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
+#endif
+
+#ifdef BOOST_FILESYSTEM_DEBUG
+# include <iostream>
+# include <iomanip>
+#endif
+
+namespace fs = boost::filesystem3;
+
+using boost::filesystem3::path;
+
+using std::string;
+using std::wstring;
+
+using boost::system::error_code;
+
+#ifndef BOOST_FILESYSTEM_CODECVT_BUF_SIZE
+# define BOOST_FILESYSTEM_CODECVT_BUF_SIZE 256
+#endif
+
+//--------------------------------------------------------------------------------------//
+// // +// class path helpers // +// //
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+ //------------------------------------------------------------------------------------// + // miscellaneous class path helpers // + //------------------------------------------------------------------------------------//
+
+  typedef path::value_type        value_type;
+  typedef path::string_type       string_type;
+  typedef string_type::size_type  size_type;
+
+ const std::size_t default_codecvt_buf_size = BOOST_FILESYSTEM_CODECVT_BUF_SIZE;
+
+# ifdef BOOST_WINDOWS_API
+
+  const wchar_t separator = L'/';
+  const wchar_t preferred_separator = L'\\';
+  const wchar_t* const separators = L"/\\";
+  const wchar_t* separator_string = L"/";
+  const wchar_t* preferred_separator_string = L"\\";
+  const wchar_t colon = L':';
+  const wchar_t dot = L'.';
+  const fs::path dot_path(L".");
+  const fs::path dot_dot_path(L"..");
+
+# else
+
+  const char separator = '/';
+  const char preferred_separator = '/';
+  const char* const separators = "/";
+  const char* separator_string = "/";
+  const char* preferred_separator_string = "/";
+  const char colon = ':';
+  const char dot = '.';
+  const fs::path dot_path(".");
+  const fs::path dot_dot_path("..");
+
+# endif
+
+  inline bool is_separator(fs::path::value_type c)
+  {
+    return c == separator
+#     ifdef BOOST_WINDOWS_API
+      || c == preferred_separator
+#     endif
+      ;
+  }
+
+  bool is_non_root_separator(const string_type& str, size_type pos);
+    // pos is position of the separator
+
+  size_type filename_pos(const string_type& str,
+ size_type end_pos); // end_pos is past-the-end position
+  //  Returns: 0 if str itself is filename (or empty)
+
+  size_type root_directory_start(const string_type& path, size_type size);
+  //  Returns:  npos if no root_directory found
+
+  void first_element(
+      const string_type& src,
+      size_type& element_pos,
+      size_type& element_size,
+#     if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310) // VC++ 7.1
+      size_type size = string_type::npos
+#     else
+      size_type size = -1
+#     endif
+    );
+
+}  // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+// // +// class path implementation // +// //
+//--------------------------------------------------------------------------------------//
+
+namespace boost
+{
+namespace filesystem3
+{
+
+  path & path::operator/=(const path & p)
+  {
+    if (p.empty())
+      return *this;
+    if (!is_separator(*p.m_pathname.begin()))
+      m_append_separator_if_needed();
+    m_pathname += p.m_pathname;
+    return *this;
+  }
+
+# ifdef BOOST_WINDOWS_API
+
+  void path::m_portable()
+  {
+    for (string_type::iterator it = m_pathname.begin();
+          it != m_pathname.end(); ++it)
+    {
+      if (*it == L'\\')
+        *it = L'/';
+    }
+  }
+
+  const std::string path::generic_string(const codecvt_type& cvt) const
+  {
+    path tmp(*this);
+    tmp.m_portable();
+    return tmp.string(cvt);
+  }
+
+  const std::wstring path::generic_wstring() const
+  {
+    path tmp(*this);
+    tmp.m_portable();
+    return tmp.wstring();
+  }
+
+# endif  // BOOST_WINDOWS_API
+
+ // m_append_separator_if_needed ----------------------------------------------------//
+
+  path::string_type::size_type path::m_append_separator_if_needed()
+  {
+    if (!m_pathname.empty() &&
+#     ifdef BOOST_WINDOWS_API
+      *(m_pathname.end()-1) != colon &&
+#     endif
+      !is_separator(*(m_pathname.end()-1)))
+    {
+      string_type::size_type tmp(m_pathname.size());
+      m_pathname += preferred_separator;
+      return tmp;
+    }
+    return 0;
+  }
+
+ // m_erase_redundant_separator -----------------------------------------------------//
+
+  void path::m_erase_redundant_separator(string_type::size_type sep_pos)
+  {
+    if (sep_pos                         // a separator was added
+      && sep_pos < m_pathname.size()         // and something was appended
+      && (m_pathname[sep_pos+1] == separator // and it was also separator
+#      ifdef BOOST_WINDOWS_API
+ || m_pathname[sep_pos+1] == preferred_separator // or preferred_separator
+#      endif
+)) { m_pathname.erase(sep_pos, 1); } // erase the added separator
+  }
+
+ // modifiers -----------------------------------------------------------------------//
+
+# ifdef BOOST_WINDOWS_API
+  path & path::make_preferred()
+  {
+    for (string_type::iterator it = m_pathname.begin();
+          it != m_pathname.end(); ++it)
+    {
+      if (*it == L'/')
+        *it = L'\\';
+    }
+    return *this;
+  }
+# endif
+
+  path& path::remove_filename()
+  {
+    m_pathname.erase(m_parent_path_end());
+    return *this;
+  }
+
+  path & path::replace_extension(const path & source)
+  {
+    // erase existing extension if any
+    size_type pos(m_pathname.rfind(dot));
+    if (pos != string_type::npos)
+      m_pathname.erase(pos);
+
+    // append source extension if any
+    pos = source.m_pathname.rfind(dot);
+    if (pos != string_type::npos)
+      m_pathname += source.c_str() + pos;
+
+    return *this;
+  }
+
+ // decomposition -------------------------------------------------------------------//
+
+  path  path::root_path() const
+  {
+    path temp(root_name());
+ if (!root_directory().empty()) temp.m_pathname += root_directory().c_str();
+    return temp;
+  }
+
+  path path::root_name() const
+  {
+    iterator itr(begin());
+
+    return (itr.m_pos != m_pathname.size()
+      && (
+          (itr.m_element.m_pathname.size() > 1
+            && is_separator(itr.m_element.m_pathname[0])
+            && is_separator(itr.m_element.m_pathname[1])
+   )
+#       ifdef BOOST_WINDOWS_API
+ || itr.m_element.m_pathname[itr.m_element.m_pathname.size()-1] == colon
+#       endif
+  ))
+      ? itr.m_element
+      : path();
+  }
+
+  path path::root_directory() const
+  {
+    size_type pos(root_directory_start(m_pathname, m_pathname.size()));
+
+    return pos == string_type::npos
+      ? path()
+      : path(m_pathname.c_str() + pos, m_pathname.c_str() + pos + 1);
+  }
+
+  path path::relative_path() const
+  {
+    iterator itr(begin());
+
+    for (; itr.m_pos != m_pathname.size()
+      && (is_separator(itr.m_element.m_pathname[0])
+#     ifdef BOOST_WINDOWS_API
+ || itr.m_element.m_pathname[itr.m_element.m_pathname.size()-1] == colon
+#     endif
+    ); ++itr) {}
+
+    return path(m_pathname.c_str() + itr.m_pos);
+  }
+
+  string_type::size_type path::m_parent_path_end() const
+  {
+    size_type end_pos(filename_pos(m_pathname, m_pathname.size()));
+
+    bool filename_was_separator(m_pathname.size()
+      && is_separator(m_pathname[end_pos]));
+
+    // skip separators unless root directory
+    size_type root_dir_pos(root_directory_start(m_pathname, end_pos));
+    for (;
+      end_pos > 0
+      && (end_pos-1) != root_dir_pos
+      && is_separator(m_pathname[end_pos-1])
+      ;
+      --end_pos) {}
+
+   return (end_pos == 1 && root_dir_pos == 0 && filename_was_separator)
+     ? string_type::npos
+     : end_pos;
+  }
+
+  path path::parent_path() const
+  {
+   size_type end_pos(m_parent_path_end());
+   return end_pos == string_type::npos
+     ? path()
+     : path(m_pathname.c_str(), m_pathname.c_str() + end_pos);
+  }
+
+  path path::filename() const
+  {
+    size_type pos(filename_pos(m_pathname, m_pathname.size()));
+    return (m_pathname.size()
+              && pos
+              && is_separator(m_pathname[pos])
+              && is_non_root_separator(m_pathname, pos))
+      ? dot_path
+      : path(m_pathname.c_str() + pos);
+  }
+
+  path path::stem() const
+  {
+    path name(filename());
+    if (name == dot_path || name == dot_dot_path) return name;
+    size_type pos(name.m_pathname.rfind(dot));
+    return pos == string_type::npos
+      ? name
+      : path(name.m_pathname.c_str(), name.m_pathname.c_str() + pos);
+  }
+
+  path path::extension() const
+  {
+    path name(filename());
+    if (name == dot_path || name == dot_dot_path) return path();
+    size_type pos(name.m_pathname.rfind(dot));
+    return pos == string_type::npos
+      ? path()
+      : path(name.m_pathname.c_str() + pos);
+  }
+
+ // m_normalize ----------------------------------------------------------------------//
+
+  path& path::m_normalize()
+  {
+    if (m_pathname.empty()) return *this;
+
+    path temp;
+    iterator start(begin());
+    iterator last(end());
+    iterator stop(last--);
+    for (iterator itr(start); itr != stop; ++itr)
+    {
+      // ignore "." except at start and last
+      if (itr->native().size() == 1
+        && (itr->native())[0] == dot
+        && itr != start
+        && itr != last) continue;
+
+      // ignore a name and following ".."
+      if (!temp.empty()
+        && itr->native().size() == 2
+        && (itr->native())[0] == dot
+        && (itr->native())[1] == dot) // dot dot
+      {
+        string_type lf(temp.filename().native());
+        if (lf.size() > 0
+          && (lf.size() != 1
+            || (lf[0] != dot
+              && lf[0] != separator))
+          && (lf.size() != 2
+            || (lf[0] != dot
+              && lf[1] != dot
+#             ifdef BOOST_WINDOWS_API
+              && lf[1] != colon
+#             endif
+               )
+             )
+          )
+        {
+          temp.remove_filename();
+          // if not root directory, must also remove "/" if any
+          if (temp.m_pathname.size() > 0
+            && temp.m_pathname[temp.m_pathname.size()-1]
+              == separator)
+          {
+            string_type::size_type rds(
+ root_directory_start(temp.m_pathname, temp.m_pathname.size()));
+            if (rds == string_type::npos
+              || rds != temp.m_pathname.size()-1)
+              { temp.m_pathname.erase(temp.m_pathname.size()-1); }
+          }
+
+          iterator next(itr);
+          if (temp.empty() && ++next != stop
+            && next == last && *last == dot_path) temp /= dot_path;
+          continue;
+        }
+      }
+
+      temp /= *itr;
+    };
+
+    if (temp.empty()) temp /= dot_path;
+    m_pathname = temp.m_pathname;
+    return *this;
+  }
+
+}  // namespace filesystem3
+}  // namespace boost
+
+//--------------------------------------------------------------------------------------//
+// // +// class path helpers implementation // +// //
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+
+ // is_non_root_separator -------------------------------------------------//
+
+  bool is_non_root_separator(const string_type & str, size_type pos)
+    // pos is position of the separator
+  {
+    BOOST_ASSERT(!str.empty() && is_separator(str[pos])
+      && "precondition violation");
+
+    // subsequent logic expects pos to be for leftmost slash of a set
+    while (pos > 0 && is_separator(str[pos-1]))
+      --pos;
+
+    return  pos != 0
+      && (pos <= 2 || !is_separator(str[1])
+        || str.find_first_of(separators, 2) != pos)
+#     ifdef BOOST_WINDOWS_API
+      && (pos !=2 || str[1] != colon)
+#     endif
+        ;
+  }
+
+ // filename_pos --------------------------------------------------------------------//
+
+  size_type filename_pos(const string_type & str,
+ size_type end_pos) // end_pos is past-the-end position
+    // return 0 if str itself is filename (or empty)
+  {
+    // case: "//"
+    if (end_pos == 2
+      && is_separator(str[0])
+      && is_separator(str[1])) return 0;
+
+    // case: ends in "/"
+    if (end_pos && is_separator(str[end_pos-1]))
+      return end_pos-1;
+
+    // set pos to start of last element
+    size_type pos(str.find_last_of(separators, end_pos-1));
+
+#   ifdef BOOST_WINDOWS_API
+    if (pos == string_type::npos)
+      pos = str.find_last_of(colon, end_pos-2);
+#   endif
+
+ return (pos == string_type::npos // path itself must be a filename (or empty)
+      || (pos == 1 && is_separator(str[0]))) // or net
+        ? 0 // so filename is entire string
+        : pos + 1; // or starts after delimiter
+  }
+
+ // root_directory_start ------------------------------------------------------------//
+
+  size_type root_directory_start(const string_type & path, size_type size)
+  // return npos if no root_directory found
+  {
+
+#   ifdef BOOST_WINDOWS_API
+    // case "c:/"
+    if (size > 2
+      && path[1] == colon
+      && is_separator(path[2])) return 2;
+#   endif
+
+    // case "//"
+    if (size == 2
+      && is_separator(path[0])
+      && is_separator(path[1])) return string_type::npos;
+
+    // case "//net {/}"
+    if (size > 3
+      && is_separator(path[0])
+      && is_separator(path[1])
+      && !is_separator(path[2]))
+    {
+      string_type::size_type pos(path.find_first_of(separators, 2));
+      return pos < size ? pos : string_type::npos;
+    }
+
+    // case "/"
+    if (size > 0 && is_separator(path[0])) return 0;
+
+    return string_type::npos;
+  }
+
+ // first_element --------------------------------------------------------------------//
+  //   sets pos and len of first element, excluding extra separators
+  //   if src.empty(), sets pos,len, to 0,0.
+
+  void first_element(
+      const string_type & src,
+      size_type & element_pos,
+      size_type & element_size,
+      size_type size
+)
+  {
+    if (size == string_type::npos) size = src.size();
+    element_pos = 0;
+    element_size = 0;
+    if (src.empty()) return;
+
+    string_type::size_type cur(0);
+
+    // deal with // [network]
+    if (size >= 2 && is_separator(src[0])
+      && is_separator(src[1])
+      && (size == 2
+        || !is_separator(src[2])))
+    {
+      cur += 2;
+      element_size += 2;
+    }
+
+    // leading (not non-network) separator
+    else if (is_separator(src[0]))
+    {
+      ++element_size;
+      // bypass extra leading separators
+      while (cur+1 < size
+        && is_separator(src[cur+1]))
+      {
+        ++cur;
+        ++element_pos;
+      }
+      return;
+    }
+
+    // at this point, we have either a plain name, a network name,
+    // or (on Windows only) a device name
+
+    // find the end
+    while (cur < size
+#     ifdef BOOST_WINDOWS_API
+      && src[cur] != colon
+#     endif
+      && !is_separator(src[cur]))
+    {
+      ++cur;
+      ++element_size;
+    }
+
+#   ifdef BOOST_WINDOWS_API
+    if (cur == size) return;
+    // include device delimiter
+    if (src[cur] == colon)
+      { ++element_size; }
+#   endif
+
+    return;
+  }
+
+}  // unnammed namespace
+
+//--------------------------------------------------------------------------------------//
+// // +// class path::iterator implementation // +// //
+//--------------------------------------------------------------------------------------//
+
+namespace boost
+{
+namespace filesystem3
+{
+
+  path::iterator path::begin() const
+  {
+    iterator itr;
+    itr.m_path_ptr = this;
+    size_type element_size;
+    first_element(m_pathname, itr.m_pos, element_size);
+    itr.m_element = m_pathname.substr(itr.m_pos, element_size);
+    if (itr.m_element.m_pathname == preferred_separator_string)
+ itr.m_element.m_pathname = separator_string; // needed for Windows, harmless on POSIX
+    return itr;
+  }
+
+  path::iterator path::end() const
+  {
+    iterator itr;
+    itr.m_path_ptr = this;
+    itr.m_pos = m_pathname.size();
+    return itr;
+  }
+
+  void path::m_path_iterator_increment(path::iterator & it)
+  {
+ BOOST_ASSERT(it.m_pos < it.m_path_ptr->m_pathname.size() && "path::basic_iterator increment past end()");
+
+    // increment to position past current element
+    it.m_pos += it.m_element.m_pathname.size();
+
+    // if end reached, create end basic_iterator
+    if (it.m_pos == it.m_path_ptr->m_pathname.size())
+    {
+      it.m_element.clear();
+      return;
+    }
+
+ // both POSIX and Windows treat paths that begin with exactly two separators specially
+    bool was_net(it.m_element.m_pathname.size() > 2
+      && is_separator(it.m_element.m_pathname[0])
+      && is_separator(it.m_element.m_pathname[1])
+      && !is_separator(it.m_element.m_pathname[2]));
+
+    // process separator (Windows drive spec is only case not a separator)
+    if (is_separator(it.m_path_ptr->m_pathname[it.m_pos]))
+    {
+      // detect root directory
+      if (was_net
+#       ifdef BOOST_WINDOWS_API
+        // case "c:/"
+ || it.m_element.m_pathname[it.m_element.m_pathname.size()-1] == colon
+#       endif
+         )
+      {
+        it.m_element.m_pathname = separator;
+        return;
+      }
+
+      // bypass separators
+      while (it.m_pos != it.m_path_ptr->m_pathname.size()
+        && is_separator(it.m_path_ptr->m_pathname[it.m_pos]))
+        { ++it.m_pos; }
+
+      // detect trailing separator, and treat it as ".", per POSIX spec
+      if (it.m_pos == it.m_path_ptr->m_pathname.size()
+        && is_non_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1))
+      {
+        --it.m_pos;
+        it.m_element = dot_path;
+        return;
+      }
+    }
+
+    // get next element
+ size_type end_pos(it.m_path_ptr->m_pathname.find_first_of(separators, it.m_pos)); + if (end_pos == string_type::npos) end_pos = it.m_path_ptr->m_pathname.size(); + it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos);
+  }
+
+  void path::m_path_iterator_decrement(path::iterator & it)
+  {
+    BOOST_ASSERT(it.m_pos && "path::iterator decrement past begin()");
+
+    size_type end_pos(it.m_pos);
+
+    // if at end and there was a trailing non-root '/', return "."
+    if (it.m_pos == it.m_path_ptr->m_pathname.size()
+      && it.m_path_ptr->m_pathname.size() > 1
+      && is_separator(it.m_path_ptr->m_pathname[it.m_pos-1])
+      && is_non_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1)
+       )
+    {
+      --it.m_pos;
+      it.m_element = dot_path;
+      return;
+    }
+
+ size_type root_dir_pos(root_directory_start(it.m_path_ptr->m_pathname, end_pos));
+
+    // skip separators unless root directory
+    for (
+      ;
+      end_pos > 0
+      && (end_pos-1) != root_dir_pos
+      && is_separator(it.m_path_ptr->m_pathname[end_pos-1])
+      ;
+      --end_pos) {}
+
+    it.m_pos = filename_pos(it.m_path_ptr->m_pathname, end_pos);
+ it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos);
+    if (it.m_element.m_pathname == preferred_separator_string)
+ it.m_element.m_pathname = separator_string; // needed for Windows, harmless on POSIX
+  }
+
+}  // namespace filesystem3
+}  // namespace boost
+
+//--------------------------------------------------------------------------------------//
+// // +// detail helpers // +// //
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+
+ //------------------------------------------------------------------------------------// + // locale helpers // + //------------------------------------------------------------------------------------//
+
+ // std::locale construction can throw (if LC_MESSAGES is wrong, for example),
+  // 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 default_locale()
+  {
+#   ifdef BOOST_WINDOWS_API
+    std::locale global_loc = std::locale();
+    std::locale loc(global_loc, new windows_file_codecvt);
+    return loc;
+
+#   elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
+ // "All BSD system functions expect their string parameters to be in UTF-8 encoding + // and nothing else." http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/FileEncodings.html
+    //
+ // "The kernel will reject any filename that is not a valid UTF-8 string, and it will + // even be normalized (to Unicode NFD) before stored on disk, at least when using HFS. + // The right way to deal with it would be to always convert the filename to UTF-8 + // before trying to open/create a file." http://lists.apple.com/archives/unix-porting/2007/Sep/msg00023.html
+    //
+ // "How a file name looks at the API level depends on the API. Current Carbon APIs + // handle file names as an array of UTF-16 characters; POSIX ones handle them as an + // array of UTF-8, which is why UTF-8 works well in Terminal. How it's stored on disk + // depends on the disk format; HFS+ uses UTF-16, but that's not important in most + // cases." http://lists.apple.com/archives/applescript-users/2002/Sep/msg00319.html
+    //
+    // Many thanks to Peter Dimov for digging out the above references!
+    std::locale global_loc = std::locale();
+ std::locale loc(global_loc, new boost::filesystem::detail::utf8_codecvt_facet);
+    return loc;
+
+#   else
+    // ISO C calls this "the locale-specific native environment":
+    return std::locale("");
+
+#   endif
+  }
+
+  std::locale & path_locale()
+  {
+    static std::locale loc(default_locale());
+    return loc;
+  }
+
+}  // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+// path::imbue implementation //
+//--------------------------------------------------------------------------------------//
+
+namespace boost
+{
+namespace filesystem3
+{
+
+  const path::codecvt_type *&
+    path::wchar_t_codecvt_facet()
+  {
+   static const std::codecvt<wchar_t, char, std::mbstate_t> *
+     facet(
+       &std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
+        (path_locale()));
+   return facet;
+  }
+
+  std::locale path::imbue(const std::locale & loc)
+  {
+    std::locale temp(path_locale());
+    path_locale() = loc;
+    wchar_t_codecvt_facet() = &std::use_facet
+        <std::codecvt<wchar_t, char, std::mbstate_t> >(path_locale());
+    return temp;
+  }
+
+}  // namespace filesystem3
+}  // namespace boost
+
+#endif  // no wide character support
=======================================
***Additional files exist in this changeset.***

Other related posts:

  • » [boost-doc-zh] r425 committed - 升级至1.44.0,第一批,libs/目录d-f子目录... - boost-doc-zh