$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r58642 - in sandbox/filesystem-v3: boost boost/filesystem libs/filesystem/doc libs/filesystem/src libs/filesystem/test libs/filesystem/test/msvc libs/filesystem/test/msvc/tut3 libs/filesystem/tutorial
From: bdawes_at_[hidden]
Date: 2010-01-02 10:14:58
Author: bemandawes
Date: 2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
New Revision: 58642
URL: http://svn.boost.org/trac/boost/changeset/58642
Log:
Work in progress, including adding path::has_stem, has_extension
Text files modified: 
   sandbox/filesystem-v3/boost/filesystem.hpp                                |     1                                         
   sandbox/filesystem-v3/boost/filesystem/config.hpp                         |     7                                         
   sandbox/filesystem-v3/boost/filesystem/path.hpp                           |    53 ++---                                   
   sandbox/filesystem-v3/libs/filesystem/doc/reference.html                  |   363 +++++++++++++++++++++------------------ 
   sandbox/filesystem-v3/libs/filesystem/doc/v3.html                         |    12 +                                       
   sandbox/filesystem-v3/libs/filesystem/src/operations.cpp                  |    28 ++                                      
   sandbox/filesystem-v3/libs/filesystem/test/msvc/filesystem-v3-sandbox.sln |    24 ++                                      
   sandbox/filesystem-v3/libs/filesystem/test/msvc/tut3/tut3.vcproj          |    10                                         
   sandbox/filesystem-v3/libs/filesystem/test/path_test.cpp                  |     8                                         
   sandbox/filesystem-v3/libs/filesystem/test/path_unit_test.cpp             |     6                                         
   sandbox/filesystem-v3/libs/filesystem/tutorial/tut0.cpp                   |     2                                         
   sandbox/filesystem-v3/libs/filesystem/tutorial/tut1.cpp                   |     7                                         
   sandbox/filesystem-v3/libs/filesystem/tutorial/tut2.cpp                   |    26 +-                                      
   sandbox/filesystem-v3/libs/filesystem/tutorial/tut3.cpp                   |    41 +++                                     
   sandbox/filesystem-v3/libs/filesystem/tutorial/tut4.cpp                   |    29 +-                                      
   15 files changed, 361 insertions(+), 256 deletions(-)
Modified: sandbox/filesystem-v3/boost/filesystem.hpp
==============================================================================
--- sandbox/filesystem-v3/boost/filesystem.hpp	(original)
+++ sandbox/filesystem-v3/boost/filesystem.hpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -13,6 +13,7 @@
 #ifndef BOOST_FILESYSTEM_FILESYSTEM_HPP
 #define BOOST_FILESYSTEM_FILESYSTEM_HPP
 
+#include <boost/filesystem/config.hpp>
 #include <boost/filesystem/operations.hpp>   // includes path.hpp
 #include <boost/filesystem/convenience.hpp>
 
Modified: sandbox/filesystem-v3/boost/filesystem/config.hpp
==============================================================================
--- sandbox/filesystem-v3/boost/filesystem/config.hpp	(original)
+++ sandbox/filesystem-v3/boost/filesystem/config.hpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -38,8 +38,7 @@
 # if defined( BOOST_WINDOWS_API ) && defined( BOOST_POSIX_API )
 #   error both BOOST_WINDOWS_API and BOOST_POSIX_API are defined
 # elif !defined( BOOST_WINDOWS_API ) && !defined( BOOST_POSIX_API )
-#   if defined(_WIN32)||defined(__WIN32__)||defined(WIN32) // true for all Windows
-                                                           // compilers, including MingW
+#   if defined(_WIN32) // true for all modern Windows compilers, including MinGW
 #     define BOOST_WINDOWS_API 
 #   else
 #     define BOOST_POSIX_API 
@@ -60,6 +59,10 @@
 #   define BOOST_WINDOWS_PATH
 # endif
 
+# if !defined(BOOST_POSIX_PATH) && !defined(BOOST_WINDOWS_PATH)
+#   define BOOST_POSIX_PATH
+# endif
+
 //  enable dynamic linking on Windows  -------------------------------------------------//
 
 #  if (defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK)) \
Modified: sandbox/filesystem-v3/boost/filesystem/path.hpp
==============================================================================
--- sandbox/filesystem-v3/boost/filesystem/path.hpp	(original)
+++ sandbox/filesystem-v3/boost/filesystem/path.hpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -83,10 +83,6 @@
 {
 namespace filesystem
 {
-# ifdef BOOST_FILESYSTEM_PATH_CTOR_COUNT
-  extern long path_constructor_count;
-# endif
-
   //------------------------------------------------------------------------------------//
   //                                                                                    //
   //                                    class path                                      //
@@ -224,12 +220,9 @@
     }
 
     template <class Source>
-    path(Source const & pathable)
+    path(Source const& source)
     {
-#   ifdef BOOST_FILESYSTEM_PATH_CTOR_COUNT
-      ++path_constructor_count;
-#   endif
-      path_traits::dispatch(pathable, m_path, codecvt());
+      path_traits::dispatch(source, m_path, codecvt());
     }
 
     //  -----  assignments  -----
@@ -251,7 +244,7 @@
     }
 
     template <class Source>
-    path& operator=(Source const & source)
+    path& operator=(Source const& source)
     {
       m_path.clear();
       path_traits::dispatch(source, m_path, codecvt());
@@ -269,7 +262,7 @@
     path& append(ContiguousIterator begin, ContiguousIterator end);
 
     template <class Source>
-    path& operator/=(Source const & source);
+    path& operator/=(Source const& source);
 
     //  -----  modifiers  -----
 
@@ -323,13 +316,13 @@
 
 #   ifdef BOOST_WINDOWS_API
 
-    const std::string     native_string() const;
-    const std::wstring &  native_wstring() const { return m_path; }
+    const std::string    native_string() const;
+    const std::wstring&  native_wstring() const { return m_path; }
 
 #   else   // BOOST_POSIX_API
 
-    const std::string &  native_string() const   { return m_path; }
-    const std::wstring   native_wstring() const
+    const std::string&  native_string() const   { return m_path; }
+    const std::wstring  native_wstring() const
     { 
       std::wstring tmp;
       if (!m_path.empty())
@@ -344,13 +337,13 @@
 
 #   ifdef BOOST_WINDOWS_API
 
-    const std::string    string() const; 
-    const std::wstring   wstring() const;
+    const std::string   string() const; 
+    const std::wstring  wstring() const;
 
 #   else // BOOST_POSIX_API
 
-    const std::string &  string() const  { return m_path; }
-    const std::wstring   wstring() const { return native_wstring(); }
+    const std::string&  string() const  { return m_path; }
+    const std::wstring  wstring() const { return native_wstring(); }
 
 #   endif
 
@@ -375,6 +368,8 @@
     bool has_relative_path() const   { return !relative_path().empty(); }
     bool has_parent_path() const     { return !parent_path().empty(); }
     bool has_filename() const        { return !m_path.empty(); }
+    bool has_stem() const            { return !stem().empty(); }
+    bool has_extension() const       { return !extension().empty(); }
     bool is_complete() const
     {
 #   ifdef BOOST_WINDOWS_PATH
@@ -411,12 +406,12 @@
 
 # if !defined(BOOST_FILESYSTEM_NO_DEPRECATED)
     //  recently deprecated functions supplied by default
-    path&   normalize()              { return m_normalize(); }
-    path&   remove_leaf()            { return remove_filename(); }
-    path    leaf() const             { return filename(); }
-    path    branch_path() const      { return parent_path(); }
-    bool    has_leaf() const         { return !m_path.empty(); }
-    bool    has_branch_path() const  { return !parent_path().empty(); }
+    path&  normalize()              { return m_normalize(); }
+    path&  remove_leaf()            { return remove_filename(); }
+    path   leaf() const             { return filename(); }
+    path   branch_path() const      { return parent_path(); }
+    bool   has_leaf() const         { return !m_path.empty(); }
+    bool   has_branch_path() const  { return !parent_path().empty(); }
 # endif
 
 # if defined(BOOST_FILESYSTEM_DEPRECATED)
@@ -610,19 +605,19 @@
 
   //  inserters and extractors
 
-  inline std::ostream & operator<<(std::ostream & os, const path& p)
+  inline std::ostream& operator<<(std::ostream & os, const path& p)
   {
     os << p.native_string();
     return os;
   }
   
-  inline std::wostream & operator<<(std::wostream & os, const path& p)
+  inline std::wostream& operator<<(std::wostream & os, const path& p)
   {
     os << p.native_wstring();
     return os;
   }
   
-  inline std::istream & operator>>(std::istream & is, path& p)
+  inline std::istream& operator>>(std::istream & is, path& p)
   {
     std::string str;
     is >> str;
@@ -630,7 +625,7 @@
     return is;
   }
   
-  inline std::wistream & operator>>(std::wistream & is, path& p)
+  inline std::wistream& operator>>(std::wistream & is, path& p)
   {
     std::wstring str;
     is >> str;
Modified: sandbox/filesystem-v3/libs/filesystem/doc/reference.html
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/doc/reference.html	(original)
+++ sandbox/filesystem-v3/libs/filesystem/doc/reference.html	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -47,8 +47,7 @@
     <a href="#Header-filesystem-synopsis">
     Header <filesystem> synopsis</a><br>
     <a href="#Error-reporting">Error reporting</a><br>
-    <a href="#Class-template-path">
-    Class path</a><br>
+    Class path<br>
        
 <a href="#Pathname-formats">Pathname formats</a><br>
        
@@ -63,7 +62,7 @@
     path iterators<br>
     path deprecated functions<br>
     path non-member functions<br>
-    path inserter and extractor<span style="background-color: #FFFFFF"><br>
+    path inserters and extractors<span style="background-color: #FFFFFF"><br>
 </span>  Class filesystem_error<br>
     <a href="#filesystem_error-members">filesystem_error 
     constructors</a><br>
@@ -167,15 +166,15 @@
 <h3><a name="Definitions">Definitions</a></h3>
 <p>The following definitions  apply throughout this reference documentation:</p>
 <p><i><a name="File">File</a>: </i>An object that can be written to, or read from, or both. A file 
-has certain attributes, including type. File types include regular file, 
-symbolic link, and directory. Other types of files may be supported by the 
+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><i><a name="File-system">File system</a>:</i> A collection of files and certain of their attributes.</p>
 <p><i><a name="Filename">Filename</a>:</i> The name of a file. The format is as 
 specified by the <i>POSIX
 <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_169">
 Filename</a></i> base definition.</p>
-<p><i><a name="Path">Path</a>:</i> A sequence of elements which identify 
+<p><i><a name="Path">Path</a>:</i> A sequence of elements that identify 
 a location within a filesystem. The elements are the <i>root-name</i>, <i>
 root-directory</i>, and each successive <i>filename</i>. See
 <a href="#Pathname-grammar">Pathname grammar</a>.</p>
@@ -286,9 +285,9 @@
       void         current_path(const path& p);
       void         current_path(const path& p, system::error_code& ec);
 
-      bool         exists(file_status s);
-      bool         exists(const path& p);
-      bool         exists(const path& p, system::error_code& ec);
+      bool         exists(file_status s);
+      bool         exists(const path& p);
+      bool         exists(const path& p, system::error_code& ec);
 
       bool         equivalent(const path& p1, const path& p2);
       bool         equivalent(const path& p1, const path& p2, system::error_code& ec);
@@ -400,7 +399,7 @@
   throwing an exception as described in the C++ standard, 
   17.6.4.10 [res.on.exception.handling].</li>
 </ul>
-<h3><a name="Class-template-path">Class <code>path</code></a></h3>
+<h3><a name="class-path">Class <code>path</code></a></h3>
 <p>An object of class <code>path</code> represents a path, 
 and contains a pathname in the
 <a href="#Native-pathname-format">native format</a>. Such an object is concerned only with the lexical and syntactic aspects 
@@ -428,7 +427,7 @@
         path();
         path(const path& p);
 
-        template <class ContiguousIterator>
+        template <class ContiguousIterator>
           path(ContiguousIterator begin, ContiguousIterator end);
 
         template <class Source>
@@ -439,7 +438,7 @@
         // assignments
         path& operator=(const path& p);
 
-        template <class ContiguousIterator>
+        template <class ContiguousIterator>
           path& assign(ContiguousIterator begin, ContiguousIterator end);
 
         template <class Source>
@@ -448,7 +447,7 @@
         // appends
         path& operator/=(const path& p);
 
-        template <class ContiguousIterator>
+        template <class ContiguousIterator>
           path& append(ContiguousIterator begin, ContiguousIterator end);
 
         template <class Source>
@@ -462,14 +461,18 @@
         path& localize();  // POSIX: no effect. Windows: convert slashes to backslashes
 
         // observers
-        const string_type&  native() const;          // native format, encoding
-        const value_type*   c_str() const;           // native().c_str()
+        const string_type&  native() const;           // native format, encoding
+        const value_type*   c_str() const;            // native().c_str()
 
-        <i><b>const-string</b></i>        native_string() const;   // native format, uses codecvt() for encoding
-        <i><b>const-wstring</b></i>       native_wstring() const;  // native format, uses codecvt() for encoding
-
-        <b><i>const-string</i></b>        string() const;          // portable format, uses codecvt() for encoding
-        <b><i>const-wstring</i></b>       wstring() const;         // portable format, uses codecvt() for encoding
+        const string        native_string() const;    // native format, uses codecvt() for encoding
+        const wstring       native_wstring() const;   // ditto
+        const u16string     native_u16string() const; // ditto
+        const u32string     native_u32string() const; // ditto
+
+        const string        string() const;           // portable format, uses codecvt() for encoding
+        const wstring       wstring() const;          // ditto
+        const u16string     u16string() const;        // ditto
+        const u32string     u32string() const;        // ditto
 
         // decomposition
         path  root_name() const;
@@ -489,6 +492,8 @@
         bool has_relative_path() const;
         bool has_parent_path() const;
         bool has_filename() const;
+        bool has_stem() const;
+        bool has_extension() const;
         bool is_complete() const;
 
         // iterators
@@ -508,26 +513,32 @@
 <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></p>
-<b>POSIX-like implementations, including
-  Cygwin:</b> <code>path::value_type</code> 
-is <code>char</code> .<p><b>Windows-like implementations:</b> <code>path::value_type</code> is <code>
-wchar_t</code>.</p>
-<p> <i>--end note]</i></p>
-</blockquote>
-<p>For member functions described as returning "<code>const path</code>", implementations are permitted to return 
-"<code>const path&</code>".</p>
+<p><i>[Note:</i> For POSIX-like implementations, including<b> </b>Unix's, Linux, 
+and
+  Cygwin, <code>path::value_type</code> 
+is <code>char</code> .</p>
+<p>For Windows-like implementations, including Windows and
+MinGW, <code>path::value_type</code> is <code>
+wchar_t</code>. <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&</code>, <code>const 
+wstring&</code>, <code>const u16string&</code>, or <code>const u32string&</code>, 
+respectively.</p>
 <blockquote>
-<p>[<i>Note:</i> This allows implementations to avoid unnecessary copies. 
+<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>ContiguousIterator</code> shall be a standard library <code>RandomIterator</code> 
+<p><code><a name="ContiguousIterator">ContiguousIterator</a></code> is required be a standard library <code>RandomIterator</code> 
+compliant iterator 
 pointing to contiguous storage. 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>Source</code> shall be one of:</p>
+<p><code>Source</code> is required to be one of:</p>
 <ul>
   <li>A container. The value type is required to be <code>char</code>, <code>
   wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</li>
@@ -536,7 +547,7 @@
   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 boost::filesystem::directory_entry.</li>
+  <li>A <code>boost::filesystem::directory_entry</code>.</li>
 </ul>
 <h4><a name="Pathname-formats">Pathname formats</a></h4>
 <p>Strings representing paths may be in two possible formats: </p>
@@ -729,7 +740,7 @@
 <blockquote>
   <p><i>Postconditions:</i> <code>empty()</code>.</p>
   </blockquote>
-<pre>template <class ContiguousIterator>
+<pre>template <class ContiguousIterator>
   path(ContiguousIterator begin, ContiguousIterator end);</pre>
 <pre>template <class Source>
   path(Source const& source);</pre>
@@ -743,7 +754,7 @@
 </blockquote>
 <h4> <code><font size="4">class </font></code> <a name="path-assignments"> <code>
 <font size="4">path</font></code> assignments</a></h4>
-<pre>template <class ContiguousIterator>
+<pre>template <class ContiguousIterator>
   path& assign(ContiguousIterator begin, ContiguousIterator end);</pre>
 <pre>template <class Source>
   path& operator=(Source const& source);</pre>
@@ -762,12 +773,12 @@
   effect of appending a native directory separator when needed. The native 
   directory separator is implementation-defined.</p>
 <blockquote>
-    <p align="left">[<i>Note:</i></p>
-    <p align="left"><b>POSIX-like<i> </i>implementations, including Cygwin:</b> 
-    The native directory separator is a forward slash.</p>
-    <p align="left"><b>Windows-like implementations:</b> The native directory 
-    separator is a backslash.</p>
-    <p align="left"> <i>--end note</i>]</p>
+    <p align="left">[<i>Note: </i>For POSIX-like implementations, including<b> </b>
+    Unix's, Linux, and
+  Cygwin, the native directory separator is a forward slash.</p>
+    <p align="left">For Windows-like implementations, including Windows and
+    MinGW, the native directory 
+    separator is a backslash.<i>--end note</i>]</p>
       </blockquote>
 <pre>path& operator/=(const path& p);</pre>
 <blockquote>
@@ -784,7 +795,7 @@
   </blockquote>
   <p><i>Returns: </i><code>*this</code></p>
 </blockquote>
-<pre>template <class ContiguousIterator>
+<pre>template <class ContiguousIterator>
   path& append(ContiguousIterator begin, ContiguousIterator end);</pre>
 <pre>template <class Source>
   path& operator/=(Source const & source);</pre>
@@ -1018,13 +1029,21 @@
 <blockquote>
   <p><i>Returns:</i> <code>!relative_path().empty()</code></p>
 </blockquote>
+<pre>bool has_parent_path() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>!parent_path().empty()</code></p>
+</blockquote>
 <pre>bool has_filename() const;</pre>
 <blockquote>
   <p><i>Returns:</i> <code>!filename().empty()</code></p>
 </blockquote>
-<pre>bool has_parent_path() const;</pre>
+<pre>bool has_stem() const;</pre>
 <blockquote>
-  <p><i>Returns:</i> <code>!parent_path().empty()</code></p>
+  <p><i>Returns:</i> <code>!</code><code>stem().empty()</code></p>
+</blockquote>
+<pre>bool has_extension() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>!extension().empty()</code></p>
 </blockquote>
 <h4> <code><font size="4">class </font></code> <a name="path-iterators"> <code>
 <font size="4">path</font></code> iterators</a></h4>
@@ -1091,203 +1110,215 @@
   rhs )</span></code></p>
 </blockquote>
   <h4><span style="background-color: #FFFFFF">path non-member operators</span></h4>
-  <p><span style="background-color: #FFFFFF">There are seven path non-member operators (/,
-  </span> <code><span style="background-color: #FFFFFF">==</span></code><span style="background-color: #FFFFFF">,
+  <p><span style="background-color: #FF0000">There are seven path non-member operators (/,
+  </span> <code><span style="background-color: #FF0000">==</span></code><span style="background-color: #FF0000">,
   </span> <code>
-  <span style="background-color: #FFFFFF">!=</span></code><span style="background-color: #FFFFFF">,
-  </span> <code><span style="background-color: #FFFFFF"><</span></code><span style="background-color: #FFFFFF">,
-  </span> <code><span style="background-color: #FFFFFF">></span></code><span style="background-color: #FFFFFF">,
-  </span> <code><span style="background-color: #FFFFFF"><=</span></code><span style="background-color: #FFFFFF">,
-  </span> <code><span style="background-color: #FFFFFF">>=</span></code><span style="background-color: #FFFFFF">), 
+  <span style="background-color: #FF0000">!=</span></code><span style="background-color: #FF0000">,
+  </span> <code><span style="background-color: #FF0000"><</span></code><span style="background-color: #FF0000">,
+  </span> <code><span style="background-color: #FF0000">></span></code><span style="background-color: #FF0000">,
+  </span> <code><span style="background-color: #FF0000"><=</span></code><span style="background-color: #FF0000">,
+  </span> <code><span style="background-color: #FF0000">>=</span></code><span style="background-color: #FF0000">), 
   each with five overloads. For brevity, the specifications are given in tabular 
   form. Each of the resulting thirty-five signatures is a template, with 
-  template parameter list template</span><code><span style="background-color: #FFFFFF"><class 
-  String, class Traits></span></code><span style="background-color: #FFFFFF">. 
+  template parameter list template</span><code><span style="background-color: #FF0000"><class 
+  String, class Traits></span></code><span style="background-color: #FF0000">. 
   The format of such arguments is described in </span> <a href="#Pathname-formats">
-  <span style="background-color: #FFFFFF">Pathname formats</span></a><span style="background-color: #FFFFFF">.</span></p>
-    <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
+  <span style="background-color: #FF0000">Pathname formats</span></a><span style="background-color: #FF0000">.</span></p>
+    <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" height="150">
       <tr>
-        <td width="100%">
-        <p align="center"><i><b><span style="background-color: #FFFFFF">Argument type overloads</span></b></i></td>
+        <td width="100%" height="16">
+        <p align="center"><i><b><span style="background-color: #FF0000">Argument type overloads</span></b></i></td>
       </tr>
       <tr>
-        <td width="100%"><span style="background-color: #FFFFFF"><code>
-        path<String, Traits>& a, path<String, Traits>& 
-        b</code></span></td>
+        <td width="100%" height="16"><code>
+        <span style="background-color: #FF0000">path<String, Traits>& a, path<String, Traits>& 
+        b</span></code></td>
       </tr>
       <tr>
-        <td width="100%"><span style="background-color: #FFFFFF"><code>const 
+        <td width="100%" height="16"><code>
+        <span style="background-color: #FF0000">const 
         typename path<String, Traits>::string_type& a, 
-        path<String, Traits>& b</code></span></td>
+        path<String, Traits>& b</span></code></td>
       </tr>
       <tr>
-        <td width="100%"><span style="background-color: #FFFFFF"><code>const 
+        <td width="100%" height="16"><code>
+        <span style="background-color: #FF0000">const 
         typename path<String, Traits>::string_type::value_type* a, 
-        path<String, Traits>& b</code></span></td>
+        path<String, Traits>& b</span></code></td>
       </tr>
       <tr>
-        <td width="100%"><span style="background-color: #FFFFFF"><code>const 
+        <td width="100%" height="5"><code>
+        <span style="background-color: #FF0000">const 
         path<String, Traits>& a, typename path<String, Traits>::string_type& 
-        b</code></span></td>
+        b</span></code></td>
       </tr>
       <tr>
-        <td width="100%"><span style="background-color: #FFFFFF"><code>const 
+        <td width="100%" height="16"><code>
+        <span style="background-color: #FF0000">const 
         path<String, Traits>& a, typename 
-        path<String, Traits>::string_type::value_type* b</code></span></td>
+        path<String, Traits>::string_type::value_type* b</span></code></td>
       </tr>
     </table>
-  <p><span style="background-color: #FFFFFF">In the </span><b><i>
-  <span style="background-color: #FFFFFF">path non-member operators </span>
-  </i></b><span style="background-color: #FFFFFF">table, </span><code>
-  <span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF"> 
-  and </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF"> 
+  <p><span style="background-color: #FF0000">In the </span><b><i>
+  <span style="background-color: #FF0000">path non-member operators </span>
+  </i></b><span style="background-color: #FF0000">table, </span><code>
+  <span style="background-color: #FF0000">a</span></code><span style="background-color: #FF0000"> 
+  and </span><code><span style="background-color: #FF0000">b</span></code><span style="background-color: #FF0000"> 
   are of the types given in the </span><i><b>
-  <span style="background-color: #FFFFFF">Argument type overloads</span></b></i><span style="background-color: #FFFFFF"> 
-  table. If </span><code><span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF"> 
-  or </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF"> 
-  is of type </span><code><span style="background-color: #FFFFFF">const 
-  path<String, Traits>&</span></code><span style="background-color: #FFFFFF">, 
-  then </span><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i></code><span style="background-color: #FFFFFF"> 
-  or </span><i><b><span style="background-color: #FFFFFF">b'</span></b></i><span style="background-color: #FFFFFF"> 
-  respectively is </span><code><span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF"> 
-  or </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF"> 
-  respectively. Otherwise </span><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i></code><span style="background-color: #FFFFFF"> 
-  or </span><i><b><span style="background-color: #FFFFFF">b'</span></b></i><span style="background-color: #FFFFFF"> 
+  <span style="background-color: #FF0000">Argument type overloads</span></b></i><span style="background-color: #FF0000"> 
+  table. If </span><code><span style="background-color: #FF0000">a</span></code><span style="background-color: #FF0000"> 
+  or </span><code><span style="background-color: #FF0000">b</span></code><span style="background-color: #FF0000"> 
+  is of type </span><code><span style="background-color: #FF0000">const 
+  path<String, Traits>&</span></code><span style="background-color: #FF0000">, 
+  then </span><i><b><span style="background-color: #FF0000">a</span></b></i><code><i><b><span style="background-color: #FF0000">'</span></b></i></code><span style="background-color: #FF0000"> 
+  or </span><i><b><span style="background-color: #FF0000">b'</span></b></i><span style="background-color: #FF0000"> 
+  respectively is </span><code><span style="background-color: #FF0000">a</span></code><span style="background-color: #FF0000"> 
+  or </span><code><span style="background-color: #FF0000">b</span></code><span style="background-color: #FF0000"> 
+  respectively. Otherwise </span><i><b><span style="background-color: #FF0000">a</span></b></i><code><i><b><span style="background-color: #FF0000">'</span></b></i></code><span style="background-color: #FF0000"> 
+  or </span><i><b><span style="background-color: #FF0000">b'</span></b></i><span style="background-color: #FF0000"> 
   respectively represent named or unnamed temporary </span><code>
-  <span style="background-color: #FFFFFF">path<String, Traits></span></code><span style="background-color: #FFFFFF"> 
-  objects constructed from </span><code><span style="background-color: #FFFFFF">
-  a</span></code><span style="background-color: #FFFFFF"> or </span><code>
-  <span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF"> 
+  <span style="background-color: #FF0000">path<String, Traits></span></code><span style="background-color: #FF0000"> 
+  objects constructed from </span><code><span style="background-color: #FF0000">
+  a</span></code><span style="background-color: #FF0000"> or </span><code>
+  <span style="background-color: #FF0000">b</span></code><span style="background-color: #FF0000"> 
   respectively.</span></p>
 <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" height="280">
   <tr>
     <td width="100%" colspan="3" align="center" height="19"><b><i>
-    <span style="background-color: #FFFFFF">path non-member operators</span></i></b></td>
+    <span style="background-color: #FF0000">path non-member operators</span></i></b></td>
   </tr>
   <tr>
     <td width="20%" align="center" height="19"><i><b>
-    <span style="background-color: #FFFFFF">Expression</span></b></i></td>
+    <span style="background-color: #FF0000">Expression</span></b></i></td>
     <td width="25%" align="center" height="19"><i><b>
-    <span style="background-color: #FFFFFF">Return type</span></b></i></td>
+    <span style="background-color: #FF0000">Return type</span></b></i></td>
     <td width="55%" align="center" height="19"><i><b>
-    <span style="background-color: #FFFFFF">Semantics</span></b></i></td>
+    <span style="background-color: #FF0000">Semantics</span></b></i></td>
   </tr>
   <tr>
     <td width="20%" align="center" height="30" valign="top"><code>
-    <span style="background-color: #FFFFFF">a / b</span></code></td>
+    <span style="background-color: #FF0000">a / b</span></code></td>
     <td width="25%" align="center" height="30" valign="top"><code>
-    <span style="background-color: #FFFFFF">path<String, Traits></span></code></td>
-    <td width="55%" height="30"><code><span style="background-color: #FFFFFF">
+    <span style="background-color: #FF0000">path<String, Traits></span></code></td>
+    <td width="55%" height="30"><code><span style="background-color: #FF0000">
     path<String, Traits> tmp(a);<br>
-    return tmp /= </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">;</span></code></td>
+    return tmp /= </span></code><i><b><span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000">;</span></code></td>
   </tr>
   <tr>
     <td width="20%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">a < b</span></code></td>
+    <span style="background-color: #FF0000">a < b</span></code></td>
     <td width="25%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">bool</span></code></td>
-    <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
-    return lexicographical_compare(</span></code><span style="background-color: #FFFFFF"><i><b>a</b></i></span><code><span style="background-color: #FFFFFF"><i><b>'</b></i>.begin(), </span></code><i><b>
-    <span style="background-color: #FFFFFF">a</span></b></i><code><span style="background-color: #FFFFFF"><i><b>'</b></i>.end(), </span></code><i><b>
-    <span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">.begin(), </span></code><i><b>
-    <span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">.end());</span></code></td>
+    <span style="background-color: #FF0000">bool</span></code></td>
+    <td width="55%" height="19"><code><span style="background-color: #FF0000">
+    return lexicographical_compare(</span></code><span style="background-color: #FF0000"><i><b>a</b></i></span><code><span style="background-color: #FF0000"><i><b>'</b></i>.begin</span><span style="background-color: #FF0000">(), </span></code><i><b>
+    <span style="background-color: #FF0000">a</span></b></i><code><span style="background-color: #FF0000"><i><b>'</b></i>.end</span><span style="background-color: #FF0000">(), </span></code><i><b>
+    <span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000">.begin</span><span style="background-color: #FF0000">(), </span></code><i><b>
+    <span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000">.end</span><span style="background-color: #FF0000">());</span></code></td>
   </tr>
   <tr>
     <td width="20%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">a == b</span></code></td>
+    <span style="background-color: #FF0000">a == b</span></code></td>
     <td width="25%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">bool</span></code></td>
-    <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
-    return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF"> 
-    < </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">) 
-    && !(</span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF"> 
-    < </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">);</span></code></td>
+    <span style="background-color: #FF0000">bool</span></code></td>
+    <td width="55%" height="19"><code><span style="background-color: #FF0000">
+    return !(</span></code><i><b><span style="background-color: #FF0000">a</span></b></i><code><i><b><span style="background-color: #FF0000">'</span></b></i><span style="background-color: #FF0000"> 
+    < </span></code><i><b><span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000">) 
+    && !(</span></code><i><b><span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000"> 
+    < </span></code><i><b><span style="background-color: #FF0000">a</span></b></i><code><i><b><span style="background-color: #FF0000">'</span></b></i><span style="background-color: #FF0000">);</span></code></td>
   </tr>
   <tr>
     <td width="20%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">a != b</span></code></td>
+    <span style="background-color: #FF0000">a != b</span></code></td>
     <td width="25%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">bool</span></code></td>
-    <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
-    return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF"> 
-    == </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">);</span></code></td>
+    <span style="background-color: #FF0000">bool</span></code></td>
+    <td width="55%" height="19"><code><span style="background-color: #FF0000">
+    return !(</span></code><i><b><span style="background-color: #FF0000">a</span></b></i><code><i><b><span style="background-color: #FF0000">'</span></b></i><span style="background-color: #FF0000"> 
+    == </span></code><i><b><span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000">);</span></code></td>
   </tr>
   <tr>
     <td width="20%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">a > b</span></code></td>
+    <span style="background-color: #FF0000">a > b</span></code></td>
     <td width="25%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">bool</span></code></td>
-    <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
-    return </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF"> 
-    < </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">;</span></code></td>
+    <span style="background-color: #FF0000">bool</span></code></td>
+    <td width="55%" height="19"><code><span style="background-color: #FF0000">
+    return </span></code><i><b><span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000"> 
+    < </span></code><i><b><span style="background-color: #FF0000">a</span></b></i><code><i><b><span style="background-color: #FF0000">'</span></b></i><span style="background-color: #FF0000">;</span></code></td>
   </tr>
   <tr>
     <td width="20%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">a <= b</span></code></td>
+    <span style="background-color: #FF0000">a <= b</span></code></td>
     <td width="25%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">bool</span></code></td>
-    <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
-    return !(</span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF"> 
-    < </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">);</span></code></td>
+    <span style="background-color: #FF0000">bool</span></code></td>
+    <td width="55%" height="19"><code><span style="background-color: #FF0000">
+    return !(</span></code><i><b><span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000"> 
+    < </span></code><i><b><span style="background-color: #FF0000">a</span></b></i><code><i><b><span style="background-color: #FF0000">'</span></b></i><span style="background-color: #FF0000">);</span></code></td>
   </tr>
   <tr>
     <td width="20%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">a >= b</span></code></td>
+    <span style="background-color: #FF0000">a >= b</span></code></td>
     <td width="25%" align="center" height="19" valign="top"><code>
-    <span style="background-color: #FFFFFF">bool</span></code></td>
-    <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
-    return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF"> 
-    < </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">);</span></code></td>
+    <span style="background-color: #FF0000">bool</span></code></td>
+    <td width="55%" height="19"><code><span style="background-color: #FF0000">
+    return !(</span></code><i><b><span style="background-color: #FF0000">a</span></b></i><code><i><b><span style="background-color: #FF0000">'</span></b></i><span style="background-color: #FF0000"> 
+    < </span></code><i><b><span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000">);</span></code></td>
   </tr>
 </table>
   <blockquote>
-  <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
-  </span> <a name="Path-equality"><span style="background-color: #FFFFFF">Path equality</span></a><span style="background-color: #FFFFFF"> and path 
+  <p><span style="background-color: #FF0000">[</span><i><span style="background-color: #FF0000">Note:</span></i><span style="background-color: #FF0000">
+  </span> <a name="Path-equality"><span style="background-color: #FF0000">Path equality</span></a><span style="background-color: #FF0000"> and path 
   equivalence have different semantics.</span></p>
-  <p><span style="background-color: #FFFFFF">Equality is determined by </span> <i>
-  <span style="background-color: #FFFFFF">path</span></i><span style="background-color: #FFFFFF">'s 
+  <p><span style="background-color: #FF0000">Equality is determined by </span> <i>
+  <span style="background-color: #FF0000">path</span></i><span style="background-color: #FF0000">'s 
   non-member </span> <code><a href="#operator-eq">
-  <span style="background-color: #FFFFFF">operator==</span></a></code><span style="background-color: #FFFFFF">, which considers the two path's lexical representations 
+  <span style="background-color: #FF0000">operator==</span></a></code><span style="background-color: #FF0000">, which considers the two path's lexical representations 
   only. Paths "abc" and "ABC" are never equal.</span></p>
-  <p><span style="background-color: #FFFFFF">Equivalence is determined by the
-  </span> equivalent()<span style="background-color: #FFFFFF"> 
+  <p><span style="background-color: #FF0000">Equivalence is determined by the
+  </span> equivalent()<span style="background-color: #FF0000"> 
   non-member function, which determines if two paths </span>
-  resolve<span style="background-color: #FFFFFF"> to the same file system entity. 
+  resolve<span style="background-color: #FF0000"> to the same file system entity. 
   Paths "abc" 
   and "ABC" may or may not resolve to the same file, depending on the file 
   system.</span></p>
-  <p><span style="background-color: #FFFFFF">Programmers wishing to determine if two paths are "the same" must decide if 
+  <p><span style="background-color: #FF0000">Programmers wishing to determine if two paths are "the same" must decide if 
   "the same" means "the same representation" or "resolve to the same actual 
   file", and choose the appropriate function accordingly. </span> <i>
-  <span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
+  <span style="background-color: #FF0000">-- end note</span></i><span style="background-color: #FF0000">]</span></p>
 </blockquote>
   <h4><a name="path-inserter-extractor"> <code>
-  <span style="background-color: #FFFFFF">path</span></code><span style="background-color: #FFFFFF"> inserter 
-  and extractor</span></a></h4>
-<pre><span style="background-color: #FFFFFF">template<class Path>
-  basic_istream<typename Path::string_type::value_type, typename Path::string_type::traits_type>&
-    operator>>(basic_istream< typename Path::string_type::value_type, typename Path::string_type::traits_type>& is,
-               path ph );</span></pre>
-<blockquote>
-  <p><i><span style="background-color: #FFFFFF">Effects:  </span></i>
-      <code><span style="background-color: #FFFFFF">typename Path::string_type str;<br>
-            
-      is >> str;<br>
-            
-      ph = str;</span></code></p>
-  <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
-  </span> <code><span style="background-color: #FFFFFF">is</span></code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">template<class Path>
-  basic_ostream<typename Path::string_type::value_type, typename Path::string_type::traits_type>&
-    operator<<(basic_ostream< typename Path::string_type::value_type, typename Path::string_type::traits_type>& os,
-               const path& ph );</span></pre>
+  <span style="background-color: #FFFFFF">path</span></code><span style="background-color: #FFFFFF"> inserters 
+  and extractor</span></a><span style="background-color: #FFFFFF">s</span></h4>
+<pre>std::ostream& operator<<(std::ostream & os, const path& p);</pre>
 <blockquote>
   <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF"> 
-  </span> <code><span style="background-color: #FFFFFF">os << ph.string()</span></code></p>
+  <code>os << p.native_string();</code></span></p>
   <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
   </span> <code><span style="background-color: #FFFFFF">os</span></code></p>
 </blockquote>
+<pre>std::wostream& operator<<(std::wostream & os, const path& p);</pre>
+<blockquote style="font-size: 10pt">
+  <p style="font-size: 10pt"><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF"> 
+  <code>os << p.native_wstring();</code></span></p>
+  <p style="font-size: 10pt"><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
+  </span><code><span style="background-color: #FFFFFF">os</span></code></p>
+</blockquote>
+<pre>std::istream& operator>>(std::istream & is, path& p);</pre>
+<blockquote>
+  <p><span style="background-color: #FFFFFF"><i>Effects: </i>
+      <code>  std::string str;<br>
+        is >> str;<br>
+        p = str;</code></span></p>
+  <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
+  </span> <code><span style="background-color: #FFFFFF">is</span></code></p>
+  </blockquote>
+<pre>std::wistream& operator>>(std::wistream & is, path& p);</pre>
+<blockquote>
+  <p><span style="background-color: #FFFFFF"><i>Effects: </i>
+      <code>  std::wstring str;<br>
+        is >> str;<br>
+        p = str;</code></span></p>
+  <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
+  </span> <code><span style="background-color: #FFFFFF">is</span></code></p>
+  </blockquote>
 <h3><a name="Class-filesystem_error">Class <code>filesystem_error</code></a></h3>
 <pre>  namespace boost
   {
@@ -1687,7 +1718,7 @@
 </blockquote>
 <h4><a name="directory_iterator-members"><code>directory_iterator</code> members</a></h4>
 
-<p><code>directory_iterator();</code></p>
+<p><code><a name="directory_iterator-default-ctor">directory_iterator</a>();</code></p>
 
 <blockquote>
 
@@ -1697,7 +1728,7 @@
 
 </blockquote>
 
-<pre><code>explicit directory_iterator(</code>const path& p<code>);
+<pre><code>explicit <a name="directory_iterator-ctor-path">directory_iterator</a>(</code>const path& p<code>);
 directory_iterator(</code>const path& p, system::error_code& ec<code>);</code></pre>
 <blockquote>
 
@@ -2092,13 +2123,13 @@
 <a href="file:///C:/boost/filesystem-v3-sandbox/libs/filesystem/doc/reference.html#Error-reporting">
 Error reporting</a>.</p>
 </blockquote>
-<pre><span style="background-color: #FFFFFF">bool <a name="exists">exists</a>(file_status s);</span></pre>
+<pre><span style="background-color: #FFFFFF">bool <a name="exists-file_status">exists</a>(file_status s);</span></pre>
 <blockquote>
   <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
   <code>status_known(s) && s.type() != file_not_found</code></span></p>
   <p><i>Throws:</i> Nothing.</p>
 </blockquote>
-<pre>bool <a name="exists2">exists</a>(const path& p);
+<pre>bool <a name="exists-path">exists</a>(const path& p);
 bool <a name="exists2">exists</a>(const path& p, system::error_code& ec);</pre>
 <blockquote>
   <p><i>Returns:</i> <code>exists(status(p))</code> or <code>exists(status(p, ec))</code>, 
@@ -3308,7 +3339,7 @@
 <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 -->22 December 2009<!--webbot bot="Timestamp" endspan i-checksum="39738" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->02 January 2010<!--webbot bot="Timestamp" endspan i-checksum="32136" --></p>
 
 </body>
 
Modified: sandbox/filesystem-v3/libs/filesystem/doc/v3.html
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/doc/v3.html	(original)
+++ sandbox/filesystem-v3/libs/filesystem/doc/v3.html	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -52,9 +52,17 @@
     <li><code>read_symlink()</code> function added. Supported on both POSIX and 
     Windows.</li>
     <li><code>resize_file()</code> function added. Supported on both POSIX and 
-    Windows.</li>
+    Windows.<br>
+ </li>
   </ul>
   </li>
+  <li>New class path members include:<br>
+ <ul>
+  <li><code>has_stem()</code></li>
+  <li><code>has_extension()</code></li>
+</ul>
+
+  </li>
 </ul>
 
 <h2>Breaking changes</h2>
@@ -90,7 +98,7 @@
 <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 -->22 December 2009<!--webbot bot="Timestamp" endspan i-checksum="39738" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->24 December 2009<!--webbot bot="Timestamp" endspan i-checksum="39742" --></p>
 
 </body>
 
Modified: sandbox/filesystem-v3/libs/filesystem/src/operations.cpp
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/src/operations.cpp	(original)
+++ sandbox/filesystem-v3/libs/filesystem/src/operations.cpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -381,6 +381,11 @@
 //                                                                                      //
 //--------------------------------------------------------------------------------------//
 
+  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)
@@ -443,6 +448,16 @@
 //                                                                                      //
 //--------------------------------------------------------------------------------------//
 
+  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_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)
   {
@@ -1247,12 +1262,7 @@
     if (ec != 0)                             // always report errval, even though some
       ec->assign(errval, system_category);   // errval values are not status_errors
 
-    if ((errval == ERROR_FILE_NOT_FOUND)
-      || (errval == ERROR_PATH_NOT_FOUND)
-      || (errval == ERROR_INVALID_NAME)// "tools/jam/src/:sys:stat.h", "//foo"
-      || (errval == ERROR_INVALID_PARAMETER)// ":sys:stat.h"
-      || (errval == ERROR_BAD_PATHNAME)// "//nosuch" on Win64
-      || (errval == ERROR_BAD_NETPATH))// "//nosuch" on Win32
+    if (not_found_error(errval))
     {
       return file_status(file_not_found);
     }
@@ -1279,7 +1289,7 @@
       if (ec != 0)                            // always report errno, even though some
         ec->assign(errno, system_category);   // errno values are not status_errors
 
-      if (errno == ENOENT || errno == ENOTDIR)
+      if (not_found_error(errno))
       {
         return fs::file_status(fs::file_not_found);
       }
@@ -1657,7 +1667,7 @@
   }
 #endif
 
-  const error_code not_found_error (
+  const error_code not_found_error_code (
 #     ifdef BOOST_WINDOWS_API
         ERROR_PATH_NOT_FOUND
 #     else
@@ -1707,7 +1717,7 @@
   void directory_iterator_construct(directory_iterator& it,
     const path& p, system::error_code* ec)    
   {
-    if (error(p.empty(), not_found_error, p, ec,
+    if (error(p.empty(), not_found_error_code, p, ec,
        "boost::filesystem::directory_iterator::construct"))return;
 
     path::string_type filename;
Modified: sandbox/filesystem-v3/libs/filesystem/test/msvc/filesystem-v3-sandbox.sln
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/test/msvc/filesystem-v3-sandbox.sln	(original)
+++ sandbox/filesystem-v3/libs/filesystem/test/msvc/filesystem-v3-sandbox.sln	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -65,6 +65,10 @@
         EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut3", "tut3\tut3.vcproj", "{4FF64FA7-6806-401D-865C-79DD064D4A9E}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+		{FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut2", "tut2\tut2.vcproj", "{CD69B175-389E-4F8F-85DC-03C56A47CD1D}"
         ProjectSection(ProjectDependencies) = postProject
@@ -78,6 +82,18 @@
                 {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
         EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_info", "path_info\path_info.vcproj", "{18EA74B4-B284-4FD4-BC0A-3B2193801B8D}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+		{FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "smile", "smile\smile.vcproj", "{CDC8DCF8-D55B-4F79-8508-4F32416BCB62}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+		{FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+	EndProjectSection
+EndProject
 Global
         GlobalSection(SolutionConfigurationPlatforms) = preSolution
                 Debug|Win32 = Debug|Win32
@@ -159,6 +175,14 @@
                 {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Debug|Win32.Build.0 = Debug|Win32
                 {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|Win32.ActiveCfg = Release|Win32
                 {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|Win32.Build.0 = Release|Win32
+		{18EA74B4-B284-4FD4-BC0A-3B2193801B8D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{18EA74B4-B284-4FD4-BC0A-3B2193801B8D}.Debug|Win32.Build.0 = Debug|Win32
+		{18EA74B4-B284-4FD4-BC0A-3B2193801B8D}.Release|Win32.ActiveCfg = Release|Win32
+		{18EA74B4-B284-4FD4-BC0A-3B2193801B8D}.Release|Win32.Build.0 = Release|Win32
+		{CDC8DCF8-D55B-4F79-8508-4F32416BCB62}.Debug|Win32.ActiveCfg = Debug|Win32
+		{CDC8DCF8-D55B-4F79-8508-4F32416BCB62}.Debug|Win32.Build.0 = Debug|Win32
+		{CDC8DCF8-D55B-4F79-8508-4F32416BCB62}.Release|Win32.ActiveCfg = Release|Win32
+		{CDC8DCF8-D55B-4F79-8508-4F32416BCB62}.Release|Win32.Build.0 = Release|Win32
         EndGlobalSection
         GlobalSection(SolutionProperties) = preSolution
                 HideSolutionNode = FALSE
Modified: sandbox/filesystem-v3/libs/filesystem/test/msvc/tut3/tut3.vcproj
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/test/msvc/tut3/tut3.vcproj	(original)
+++ sandbox/filesystem-v3/libs/filesystem/test/msvc/tut3/tut3.vcproj	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -18,9 +18,8 @@
         <Configurations>
                 <Configuration
                         Name="Debug|Win32"
-			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
                         ConfigurationType="1"
+			InheritedPropertySheets="..\common.vsprops"
                         CharacterSet="1"
 			>
                         <Tool
@@ -41,12 +40,10 @@
                         <Tool
                                 Name="VCCLCompilerTool"
                                 Optimization="0"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
                                 MinimalRebuild="true"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="3"
                                 UsePrecompiledHeader="0"
-				WarningLevel="3"
                                 DebugInformationFormat="4"
                         />
                         <Tool
@@ -89,9 +86,8 @@
                 </Configuration>
                 <Configuration
                         Name="Release|Win32"
-			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
                         ConfigurationType="1"
+			InheritedPropertySheets="..\common.vsprops"
                         CharacterSet="1"
                         WholeProgramOptimization="1"
 			>
@@ -114,11 +110,9 @@
                                 Name="VCCLCompilerTool"
                                 Optimization="2"
                                 EnableIntrinsicFunctions="true"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
                                 RuntimeLibrary="2"
                                 EnableFunctionLevelLinking="true"
                                 UsePrecompiledHeader="0"
-				WarningLevel="3"
                                 DebugInformationFormat="3"
                         />
                         <Tool
Modified: sandbox/filesystem-v3/libs/filesystem/test/path_test.cpp
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/test/path_test.cpp	(original)
+++ sandbox/filesystem-v3/libs/filesystem/test/path_test.cpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -33,10 +33,6 @@
 #define PATH_CHECK(a, b) check(a, b, __FILE__, __LINE__)
 #define CHECK_EQUAL(a,b) check_equal(a, b, __FILE__, __LINE__)
 
-# ifdef BOOST_FILESYSTEM_PATH_CTOR_COUNT
-namespace boost { namespace filesystem { long path_constructor_count = 0L; }}
-# endif
-
 namespace
 {
   std::string platform(BOOST_PLATFORM);
@@ -1609,9 +1605,5 @@
   std::cout << round_trip.string() << "..." << round_trip << " complete\n";
 # endif
 
-# ifdef BOOST_FILESYSTEM_PATH_CTOR_COUNT
-  std::cout << fs::path_constructor_count << " calls to single argument path constructor\n";
-# endif
-
   return ::boost::report_errors();
 }
Modified: sandbox/filesystem-v3/libs/filesystem/test/path_unit_test.cpp
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/test/path_unit_test.cpp	(original)
+++ sandbox/filesystem-v3/libs/filesystem/test/path_unit_test.cpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -491,7 +491,7 @@
     std::cout << "testing queries..." << std::endl;
 
     path p1("");
-    path p2("//netname/foo");
+    path p2("//netname/foo.doo");
 
     CHECK(p1.empty());
     CHECK(!p1.has_root_path());
@@ -500,6 +500,8 @@
     CHECK(!p1.has_relative_path());
     CHECK(!p1.has_parent_path());
     CHECK(!p1.has_filename());
+    CHECK(!p1.has_stem());
+    CHECK(!p1.has_extension());
     CHECK(!p1.is_complete());
 
     CHECK(!p2.empty());
@@ -509,6 +511,8 @@
     CHECK(p2.has_relative_path());
     CHECK(p2.has_parent_path());
     CHECK(p2.has_filename());
+    CHECK(p2.has_stem());
+    CHECK(p2.has_extension());
     CHECK(p2.is_complete());
 
   }
Modified: sandbox/filesystem-v3/libs/filesystem/tutorial/tut0.cpp
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/tutorial/tut0.cpp	(original)
+++ sandbox/filesystem-v3/libs/filesystem/tutorial/tut0.cpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -1,4 +1,4 @@
-//  filesystem tut0.cpp  -------------------------------------------------------------  //
+//  filesystem tut0.cpp  ---------------------------------------------------------------//
 
 //  Copyright Beman Dawes 2009
 
Modified: sandbox/filesystem-v3/libs/filesystem/tutorial/tut1.cpp
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/tutorial/tut1.cpp	(original)
+++ sandbox/filesystem-v3/libs/filesystem/tutorial/tut1.cpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -9,17 +9,18 @@
 
 #include <iostream>
 #include <boost/filesystem.hpp>
-namespace fs = boost::filesystem;
+using namespace std;
+using namespace boost::filesystem;
 
 int main(int argc, char* argv[])
 {
   if (argc < 2)
   {
-    std::cout << "Usage: tut1 path\n";
+    cout << "Usage: tut1 path\n";
     return 1;
   }
 
-  std::cout << argv[1] << ": " << fs::file_size(argv[1]) << '\n';
+  cout << argv[1] << ": " << file_size(argv[1]) << '\n';
 
   return 0;
 }
Modified: sandbox/filesystem-v3/libs/filesystem/tutorial/tut2.cpp
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/tutorial/tut2.cpp	(original)
+++ sandbox/filesystem-v3/libs/filesystem/tutorial/tut2.cpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -9,28 +9,34 @@
 
 #include <iostream>
 #include <boost/filesystem.hpp>
-namespace fs = boost::filesystem;
+using namespace std;
+using namespace boost::filesystem;
 
 int main(int argc, char* argv[])
 {
   if (argc < 2)
   {
-    std::cout << "Usage: tut2 path\n";
+    cout << "Usage: tut2 path\n";
     return 1;
   }
 
-  std::cout << argv[1] << ": ";
-  if ( fs::exists(argv[1]) )
+  path p (argv[1]);   // p reads clearer than argv[1] in the following code
+
+  cout << p << ": ";  // utilize the path narrow stream inserter
+
+  if ( exists(p) )    // does p actually exist?
   {
-    if ( fs::is_regular_file(argv[1]) )
-      std::cout << fs::file_size(argv[1]) << '\n';
-    else if ( fs::is_directory(argv[1]) )
-      std::cout << "is a directory\n";
+    if ( is_regular_file(p) )        // is p a regular file?
+      cout << file_size(p) << '\n';
+
+    else if ( is_directory(p) )      // is p a directory?
+      cout << "is a directory\n";
+
     else
-      std::cout << "exists, but is neither a regular file nor a directory\n";
+      cout << "exists, but is neither a regular file nor a directory\n";
   }
   else
-    std::cout << "does not exist\n";
+    cout << "does not exist\n";
 
   return 0;
 }
Modified: sandbox/filesystem-v3/libs/filesystem/tutorial/tut3.cpp
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/tutorial/tut3.cpp	(original)
+++ sandbox/filesystem-v3/libs/filesystem/tutorial/tut3.cpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -1,4 +1,4 @@
-//  filesystem tut0.cpp  -------------------------------------------------------------  //
+//  filesystem tut3.cpp  ---------------------------------------------------------------//
 
 //  Copyright Beman Dawes 2009
 
@@ -8,16 +8,47 @@
 //  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[] )
+int main(int argc, char* argv[])
 {
-  if ( argc < 2 )
+  if (argc < 2)
   {
-    std::cout << "Usage: tut0 filename\n";
+    cout << "Usage: tut3 path\n";
     return 1;
   }
 
-  std::cout << argv[1] << "\n";
+  path p (argv[1]);   // p reads clearer than argv[1] in the following code
+
+  cout << p << ": ";  // utilize the path narrow stream inserter
+
+  if ( exists(p) )    // does p actually exist?
+  {
+    if ( is_regular_file(p) )        // is p a regular file?
+      cout << file_size(p) << '\n';
+
+    else if ( is_directory(p) )      // is p a directory?
+    {
+      cout << "is a directory containing:\n";
+
+      for ( directory_iterator it (p);     // initialize it to the first element
+            it != directory_iterator();    // test for the past-the-end element
+            ++it )                         // increment
+      {
+        cout << "   " << *it << '\n';      // *it returns a directory_entry,
+                                           // which is converted to a path
+                                           // by the stream inserter.
+                                           // it->path() would be wordier, but would
+                                           // eliminate an unnecessary path temporary
+      }
+    }
+    else
+      cout << "exists, but is neither a regular file nor a directory\n";
+  }
+  else
+    cout << "does not exist\n";
 
   return 0;
 }
Modified: sandbox/filesystem-v3/libs/filesystem/tutorial/tut4.cpp
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/tutorial/tut4.cpp	(original)
+++ sandbox/filesystem-v3/libs/filesystem/tutorial/tut4.cpp	2010-01-02 10:14:57 EST (Sat, 02 Jan 2010)
@@ -9,34 +9,39 @@
 
 #include <iostream>
 #include <boost/filesystem.hpp>
-namespace fs = boost::filesystem;
+using namespace std;
+using namespace boost::filesystem;
 
 int main(int argc, char* argv[])
 {
   if (argc < 2)
   {
-    std::cout << "Usage: tut4 path\n";
+    cout << "Usage: tut4 path\n";
     return 1;
   }
 
-  std::cout << argv[1] << ": ";
-  if ( fs::exists(argv[1]) )
+  path p (argv[1]);   // p reads better than argv[1] in following code
+
+  cout << p << ": ";  // utilize the path stream inserter
+
+  if ( exists(p) )    // does p actually exist?
   {
-    if ( fs::is_regular_file(argv[1]) )
-      std::cout << fs::file_size(argv[1]) << '\n';
-    else if ( fs::is_directory(argv[1]) )
+    if ( is_regular_file(p) )        // is p a regular file?
+      cout << file_size(p) << '\n';
+
+    else if ( is_directory(p) )      // is p a directory?
     {
-      std::cout << "is a directory containing:\n";
-      for ( fs::directory_iterator it (argv[1]); it != fs::directory_iterator(); ++it )
+      cout << "is a directory containing:\n";
+      for ( directory_iterator it (p); it != directory_iterator (); ++it )
       {
-        std::cout << "   " << it->path() << '\n';
+        cout << "   " << it->path().filename() << '\n';
       }
     }
     else
-      std::cout << "exists, but is neither a regular file nor a directory\n";
+      cout << "exists, but is neither a regular file nor a directory\n";
   }
   else
-    std::cout << "does not exist\n";
+    cout << "does not exist\n";
 
   return 0;
 }