|
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 <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;
}
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