Boost logo

Boost-Commit :

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 &lt;filesystem&gt; synopsis</a><br>
     <a href="#Error-reporting">Error reporting</a><br>
- <a href="#Class-template-path">
- Class path</a><br>
+ Class path<br>
     &nbsp;&nbsp;&nbsp;
 <a href="#Pathname-formats">Pathname formats</a><br>
     &nbsp;&nbsp;&nbsp;
@@ -63,7 +62,7 @@
 &nbsp;&nbsp;&nbsp;&nbsp;path iterators<br>
 &nbsp;&nbsp;&nbsp;&nbsp;path deprecated functions<br>
 &nbsp;&nbsp;&nbsp;&nbsp;path non-member functions<br>
-&nbsp;&nbsp;&nbsp;&nbsp;path inserter and extractor<span style="background-color: #FFFFFF"><br>
+&nbsp;&nbsp;&nbsp;&nbsp;path inserters and extractors<span style="background-color: #FFFFFF"><br>
 </span> &nbsp;Class filesystem_error<br>
 &nbsp;&nbsp;&nbsp; <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&amp; p);
       void current_path(const path&amp; p, system::error_code&amp; ec);
 
- bool exists(file_status s);
- bool exists(const path&amp; p);
- bool exists(const path&amp; p, system::error_code&amp; ec);
+ bool exists(file_status s);
+ bool exists(const path&amp; p);
+ bool exists(const path&amp; p, system::error_code&amp; ec);
 
       bool equivalent(const path&amp; p1, const path&amp; p2);
       bool equivalent(const path&amp; p1, const path&amp; p2, system::error_code&amp; 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&amp; p);
 
- template &lt;class ContiguousIterator&gt;
+ template &lt;class ContiguousIterator&gt;
           path(ContiguousIterator begin, ContiguousIterator end);
 
         template &lt;class Source&gt;
@@ -439,7 +438,7 @@
         // assignments
         path&amp; operator=(const path&amp; p);
 
- template &lt;class ContiguousIterator&gt;
+ template &lt;class ContiguousIterator&gt;
           path&amp; assign(ContiguousIterator begin, ContiguousIterator end);
 
         template &lt;class Source&gt;
@@ -448,7 +447,7 @@
         // appends
         path&amp; operator/=(const path&amp; p);
 
- template &lt;class ContiguousIterator&gt;
+ template &lt;class ContiguousIterator&gt;
           path&amp; append(ContiguousIterator begin, ContiguousIterator end);
 
         template &lt;class Source&gt;
@@ -462,14 +461,18 @@
         path&amp; localize(); // POSIX: no effect. Windows: convert slashes to backslashes
 
         // observers
- const string_type&amp; native() const; // native format, encoding
- const value_type* c_str() const; // native().c_str()
+ const string_type&amp; 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>&nbsp;<i>--end note]</i></p>
-</blockquote>
-<p>For member functions described as returning &quot;<code>const path</code>&quot;, implementations are permitted to return
-&quot;<code>const path&amp;</code>&quot;.</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>.&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.
+<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 &lt;class ContiguousIterator&gt;
+<pre>template &lt;class ContiguousIterator&gt;
   path(ContiguousIterator begin, ContiguousIterator end);</pre>
 <pre>template &lt;class Source&gt;
   path(Source const&amp; 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 &lt;class ContiguousIterator&gt;
+<pre>template &lt;class ContiguousIterator&gt;
   path&amp; assign(ContiguousIterator begin, ContiguousIterator end);</pre>
 <pre>template &lt;class Source&gt;
   path&amp; operator=(Source const&amp; 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&amp; operator/=(const path&amp; p);</pre>
 <blockquote>
@@ -784,7 +795,7 @@
   </blockquote>
   <p><i>Returns: </i><code>*this</code></p>
 </blockquote>
-<pre>template &lt;class ContiguousIterator&gt;
+<pre>template &lt;class ContiguousIterator&gt;
   path&amp; append(ContiguousIterator begin, ContiguousIterator end);</pre>
 <pre>template &lt;class Source&gt;
   path&amp; operator/=(Source const &amp; 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">&lt;</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&gt;</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&lt;=</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&gt;=</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">&lt;</span></code><span style="background-color: #FF0000">,
+ </span> <code><span style="background-color: #FF0000">&gt;</span></code><span style="background-color: #FF0000">,
+ </span> <code><span style="background-color: #FF0000">&lt;=</span></code><span style="background-color: #FF0000">,
+ </span> <code><span style="background-color: #FF0000">&gt;=</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">&lt;class
- String, class Traits&gt;</span></code><span style="background-color: #FFFFFF">.
+ template parameter list template</span><code><span style="background-color: #FF0000">&lt;class
+ String, class Traits&gt;</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&lt;String, Traits&gt;&amp; a, path&lt;String, Traits&gt;&amp;
- b</code></span></td>
+ <td width="100%" height="16"><code>
+ <span style="background-color: #FF0000">path&lt;String, Traits&gt;&amp; a, path&lt;String, Traits&gt;&amp;
+ 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&lt;String, Traits&gt;::string_type&amp; a,
- path&lt;String, Traits&gt;&amp; b</code></span></td>
+ path&lt;String, Traits&gt;&amp; 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&lt;String, Traits&gt;::string_type::value_type* a,
- path&lt;String, Traits&gt;&amp; b</code></span></td>
+ path&lt;String, Traits&gt;&amp; 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&lt;String, Traits&gt;&amp; a, typename path&lt;String, Traits&gt;::string_type&amp;
- 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&lt;String, Traits&gt;&amp; a, typename
- path&lt;String, Traits&gt;::string_type::value_type* b</code></span></td>
+ path&lt;String, Traits&gt;::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&lt;String, Traits&gt;&amp;</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&lt;String, Traits&gt;&amp;</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&lt;String, Traits&gt;</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&lt;String, Traits&gt;</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&lt;String, Traits&gt;</span></code></td>
- <td width="55%" height="30"><code><span style="background-color: #FFFFFF">
+ <span style="background-color: #FF0000">path&lt;String, Traits&gt;</span></code></td>
+ <td width="55%" height="30"><code><span style="background-color: #FF0000">
     path&lt;String, Traits&gt; 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 &lt; b</span></code></td>
+ <span style="background-color: #FF0000">a &lt; 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">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">)
- &amp;&amp; !(</span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">
- &lt; </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">
+ &lt; </span></code><i><b><span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000">)
+ &amp;&amp; !(</span></code><i><b><span style="background-color: #FF0000">b'</span></b></i><code><span style="background-color: #FF0000">
+ &lt; </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 &gt; b</span></code></td>
+ <span style="background-color: #FF0000">a &gt; 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">
- &lt; </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">
+ &lt; </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 &lt;= b</span></code></td>
+ <span style="background-color: #FF0000">a &lt;= 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">
- &lt; </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">
+ &lt; </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 &gt;= b</span></code></td>
+ <span style="background-color: #FF0000">a &gt;= 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">
- &lt; </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">
+ &lt; </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 &quot;abc&quot; and &quot;ABC&quot; 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 &quot;abc&quot;
   and &quot;ABC&quot; 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 &quot;the same&quot; must decide if
+ <p><span style="background-color: #FF0000">Programmers wishing to determine if two paths are &quot;the same&quot; must decide if
   &quot;the same&quot; means &quot;the same representation&quot; or &quot;resolve to the same actual
   file&quot;, 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&lt;class Path&gt;
- basic_istream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp;
- operator&gt;&gt;(basic_istream&lt; typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp; is,
- path ph );</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects:&nbsp; </span></i>
- <code><span style="background-color: #FFFFFF">typename Path::string_type str;<br>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- is &gt;&gt; str;<br>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- 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&lt;class Path&gt;
- basic_ostream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp;
- operator&lt;&lt;(basic_ostream&lt; typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp; os,
- const path&amp; 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&amp; operator&lt;&lt;(std::ostream &amp; os, const path&amp; p);</pre>
 <blockquote>
   <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">&nbsp;
- </span> <code><span style="background-color: #FFFFFF">os &lt;&lt; ph.string()</span></code></p>
+ <code>os &lt;&lt; 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&amp; operator&lt;&lt;(std::wostream &amp; os, const path&amp; 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">&nbsp;
+ <code>os &lt;&lt; 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&amp; operator&gt;&gt;(std::istream &amp; is, path&amp; p);</pre>
+<blockquote>
+ <p><span style="background-color: #FFFFFF"><i>Effects: </i>
+ <code>&nbsp; std::string str;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is &gt;&gt; str;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&amp; operator&gt;&gt;(std::wistream &amp; is, path&amp; p);</pre>
+<blockquote>
+ <p><span style="background-color: #FFFFFF"><i>Effects: </i>
+ <code>&nbsp; std::wstring str;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is &gt;&gt; str;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&amp; p<code>);
+<pre><code>explicit <a name="directory_iterator-ctor-path">directory_iterator</a>(</code>const path&amp; p<code>);
 directory_iterator(</code>const path&amp; p, system::error_code&amp; 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) &amp;&amp; s.type() != file_not_found</code></span></p>
   <p><i>Throws:</i> Nothing.</p>
 </blockquote>
-<pre>bool <a name="exists2">exists</a>(const path&amp; p);
+<pre>bool <a name="exists-path">exists</a>(const path&amp; p);
 bool <a name="exists2">exists</a>(const path&amp; p, system::error_code&amp; 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>
+&nbsp;</li>
   </ul>
   </li>
+ <li>New class path members include:<br>
+&nbsp;<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;
 }


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk