answer.hxx   answer.hxx 
// file : cutl/meta/answer.hxx // file : cutl/meta/answer.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_META_ANSWER_HXX #ifndef CUTL_META_ANSWER_HXX
#define CUTL_META_ANSWER_HXX #define CUTL_META_ANSWER_HXX
namespace cutl namespace cutl
{ {
namespace meta namespace meta
{ {
struct yes struct yes
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 any.hxx   any.hxx 
// file : cutl/container/any.hxx // file : cutl/container/any.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_CONTAINER_ANY_HXX #ifndef CUTL_CONTAINER_ANY_HXX
#define CUTL_CONTAINER_ANY_HXX #define CUTL_CONTAINER_ANY_HXX
#include <memory> // std::auto_ptr #include <memory> // std::auto_ptr
#include <typeinfo> // std::type_info #include <typeinfo> // std::type_info
#include <cutl/exception.hxx> #include <cutl/exception.hxx>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 auto-remove.hxx   auto-remove.hxx 
// file : cutl/fs/auto-remove.hxx // file : cutl/fs/auto-remove.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_FS_AUTO_REMOVE_HXX #ifndef CUTL_FS_AUTO_REMOVE_HXX
#define CUTL_FS_AUTO_REMOVE_HXX #define CUTL_FS_AUTO_REMOVE_HXX
#include <vector> #include <vector>
#include <cutl/fs/path.hxx> #include <cutl/fs/path.hxx>
#include <cutl/fs/exception.hxx> #include <cutl/fs/exception.hxx>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 base.hxx   base.hxx 
// file : cutl/shared-ptr/base.hxx // file : cutl/shared-ptr/base.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_SHARED_PTR_BASE_HXX #ifndef CUTL_SHARED_PTR_BASE_HXX
#define CUTL_SHARED_PTR_BASE_HXX #define CUTL_SHARED_PTR_BASE_HXX
#include <new> #include <new>
#include <cstddef> // std::size_t #include <cstddef> // std::size_t
#include <cutl/exception.hxx> #include <cutl/exception.hxx>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 base.ixx   base.ixx 
// file : cutl/shared-ptr/base.ixx // file : cutl/shared-ptr/base.ixx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
namespace cutl namespace cutl
{ {
// share // share
// //
inline share:: inline share::
share (char id) share (char id)
: id_ (id) : id_ (id)
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 base.txx   base.txx 
// file : cutl/shared-ptr/base.txx // file : cutl/shared-ptr/base.txx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#include <cutl/meta/answer.hxx> #include <cutl/meta/answer.hxx>
#include <cutl/meta/polymorphic-p.hxx> #include <cutl/meta/polymorphic-p.hxx>
namespace cutl namespace cutl
{ {
namespace bits namespace bits
{ {
// Support for locating the counter in the memory block. // Support for locating the counter in the memory block.
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 class-p.hxx   class-p.hxx 
// file : cutl/meta/class-p.hxx // file : cutl/meta/class-p.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_META_CLASS_HXX #ifndef CUTL_META_CLASS_HXX
#define CUTL_META_CLASS_HXX #define CUTL_META_CLASS_HXX
#include <cutl/meta/answer.hxx> #include <cutl/meta/answer.hxx>
namespace cutl namespace cutl
{ {
namespace meta namespace meta
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 code-stream.hxx   code-stream.hxx 
// file : cutl/compiler/code-stream.hxx // file : cutl/compiler/code-stream.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_COMPILER_CODE_STREAM_HXX #ifndef CUTL_COMPILER_CODE_STREAM_HXX
#define CUTL_COMPILER_CODE_STREAM_HXX #define CUTL_COMPILER_CODE_STREAM_HXX
#include <memory> // std::auto_ptr #include <memory> // std::auto_ptr
#include <ostream> #include <ostream>
#include <cutl/exception.hxx> #include <cutl/exception.hxx>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 code-stream.txx   code-stream.txx 
// file : cutl/compiler/code-stream.txx // file : cutl/compiler/code-stream.txx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
namespace cutl namespace cutl
{ {
namespace compiler namespace compiler
{ {
// code_stream // code_stream
// //
template <typename C> template <typename C>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 config.hxx   config.hxx 
// file : cutl/details/config.hxx // file : cutl/details/config.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_DETAILS_CONFIG_HXX #ifndef CUTL_DETAILS_CONFIG_HXX
#define CUTL_DETAILS_CONFIG_HXX #define CUTL_DETAILS_CONFIG_HXX
#ifdef _MSC_VER #ifdef _MSC_VER
#else #else
# include <cutl/details/config.h> # include <cutl/details/config.h>
#endif #endif
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 context.hxx   context.hxx 
// file : cutl/compiler/context.hxx // file : cutl/compiler/context.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_COMPILER_CONTEXT_HXX #ifndef CUTL_COMPILER_CONTEXT_HXX
#define CUTL_COMPILER_CONTEXT_HXX #define CUTL_COMPILER_CONTEXT_HXX
#include <map> #include <map>
#include <string> #include <string>
#include <cstddef> // std::size_t #include <cstddef> // std::size_t
#include <cutl/exception.hxx> #include <cutl/exception.hxx>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 context.txx   context.txx 
// file : cutl/compiler/context.txx // file : cutl/compiler/context.txx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
namespace cutl namespace cutl
{ {
namespace compiler namespace compiler
{ {
template <typename X> template <typename X>
X& context:: X& context::
get (std::string const& key) get (std::string const& key)
{ {
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 cxx-indenter.hxx   cxx-indenter.hxx 
// file : cutl/compiler/cxx-indenter.hxx // file : cutl/compiler/cxx-indenter.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_COMPILER_CXX_INDENTER_HXX #ifndef CUTL_COMPILER_CXX_INDENTER_HXX
#define CUTL_COMPILER_CXX_INDENTER_HXX #define CUTL_COMPILER_CXX_INDENTER_HXX
#include <set> #include <set>
#include <stack> #include <stack>
#include <deque> #include <deque>
#include <string> #include <string>
#include <cstddef> // std::size_t #include <cstddef> // std::size_t
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 cxx-indenter.ixx   cxx-indenter.ixx 
// file : cutl/compiler/cxx-indenter.ixx // file : cutl/compiler/cxx-indenter.ixx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
namespace cutl namespace cutl
{ {
namespace compiler namespace compiler
{ {
template <typename C> template <typename C>
inline typename cxx_indenter<C>::char_class_type cxx_indenter<C>:: inline typename cxx_indenter<C>::char_class_type cxx_indenter<C>::
char_class (C c) char_class (C c)
{ {
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 cxx-indenter.txx   cxx-indenter.txx 
// file : cutl/compiler/cxx-indenter.txx // file : cutl/compiler/cxx-indenter.txx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
namespace cutl namespace cutl
{ {
namespace compiler namespace compiler
{ {
template <typename C> template <typename C>
cxx_indenter<C>:: cxx_indenter<C>::
cxx_indenter (code_stream<C>& out) cxx_indenter (code_stream<C>& out)
: out_ (out), : out_ (out),
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 exception.hxx   exception.hxx 
// file : cutl/exception.hxx // file : cutl/exception.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_EXCEPTION_HXX #ifndef CUTL_EXCEPTION_HXX
#define CUTL_EXCEPTION_HXX #define CUTL_EXCEPTION_HXX
#include <exception> #include <exception>
#include <cutl/details/export.hxx> #include <cutl/details/export.hxx>
namespace cutl namespace cutl
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 export.hxx   export.hxx 
// file : cutl/details/export.hxx // file : cutl/details/export.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_DETAILS_EXPORT_HXX #ifndef CUTL_DETAILS_EXPORT_HXX
#define CUTL_DETAILS_EXPORT_HXX #define CUTL_DETAILS_EXPORT_HXX
#include <cutl/details/config.hxx> #include <cutl/details/config.hxx>
#ifdef LIBCUTL_STATIC_LIB #ifdef LIBCUTL_STATIC_LIB
# define LIBCUTL_EXPORT # define LIBCUTL_EXPORT
#else #else
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 graph.hxx   graph.hxx 
// file : cutl/container/graph.hxx // file : cutl/container/graph.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_CONTAINER_GRAPH_HXX #ifndef CUTL_CONTAINER_GRAPH_HXX
#define CUTL_CONTAINER_GRAPH_HXX #define CUTL_CONTAINER_GRAPH_HXX
#include <map> #include <map>
#include <cutl/exception.hxx> #include <cutl/exception.hxx>
#include <cutl/shared-ptr.hxx> #include <cutl/shared-ptr.hxx>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 graph.txx   graph.txx 
// file : cutl/container/graph.txx // file : cutl/container/graph.txx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
namespace cutl namespace cutl
{ {
namespace container namespace container
{ {
// Nodes. // Nodes.
// //
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 path.hxx   path.hxx 
// file : cutl/fs/path.hxx // file : cutl/fs/path.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_FS_PATH_HXX #ifndef CUTL_FS_PATH_HXX
#define CUTL_FS_PATH_HXX #define CUTL_FS_PATH_HXX
#include <string> #include <string>
#include <iosfwd> #include <iosfwd>
#include <cutl/exception.hxx> #include <cutl/exception.hxx>
skipping to change at line 32 skipping to change at line 32
template <typename C> template <typename C>
struct path_traits struct path_traits
{ {
typedef std::basic_string<C> string_type; typedef std::basic_string<C> string_type;
typedef typename string_type::size_type size_type; typedef typename string_type::size_type size_type;
// Canonical directory and path seperators. // Canonical directory and path seperators.
// //
#ifdef _WIN32 #ifdef _WIN32
static char const directory_separator = '\\'; static C const directory_separator = '\\';
static char const path_separator = ';'; static C const path_separator = ';';
#else #else
static char const directory_separator = '/'; static C const directory_separator = '/';
static char const path_separator = ':'; static C const path_separator = ':';
#endif #endif
// Directory separator tests. On some platforms there // Directory separator tests. On some platforms there
// could be multiple seperators. For example, on Windows // could be multiple seperators. For example, on Windows
// we check for both '/' and '\'. // we check for both '/' and '\'.
// //
static bool static bool
is_separator (C c) is_separator (C c)
{ {
#ifdef _WIN32 #ifdef _WIN32
return c == '\\' || c == '/'; return c == '\\' || c == '/';
#else #else
return c == '/'; return c == '/';
#endif #endif
} }
static size_type static size_type
find_separator (string_type const& s) find_separator (string_type const& s, size_type pos = 0)
{ {
for (size_type i (0), n (s.size ()); i < n; ++i) for (size_type n (s.size ()); pos < n; ++pos)
{ {
if (is_separator (s[i])) if (is_separator (s[pos]))
return i; return pos;
} }
return string_type::npos; return string_type::npos;
} }
static size_type static size_type
rfind_separator (string_type const& s) rfind_separator (string_type const& s, size_type pos = string_type::n pos)
{ {
for (size_type i (s.size ()) ; i > 0; --i) if (pos == string_type::npos)
pos = s.size ();
else
pos++;
for (; pos > 0; --pos)
{ {
if (is_separator (s[i - 1])) if (is_separator (s[pos - 1]))
return i - 1; return pos - 1;
} }
return string_type::npos; return string_type::npos;
} }
}; };
template <typename C> template <typename C>
class invalid_basic_path; class invalid_basic_path;
typedef basic_path<char> path; typedef basic_path<char> path;
skipping to change at line 152 skipping to change at line 157
init (); init ();
} }
explicit explicit
basic_path (string_type const& s) basic_path (string_type const& s)
: path_ (s) : path_ (s)
{ {
init (); init ();
} }
void
swap (basic_path& p)
{
path_.swap (p.path_);
}
static basic_path
current ();
static void
current (basic_path const&);
public:
bool
empty () const
{
return path_.empty ();
}
bool
absolute () const;
bool
relative () const
{
return !absolute ();
}
bool
root () const;
public: public:
// Return the path without the directory part. // Return the path without the directory part.
// //
basic_path basic_path
leaf () const; leaf () const;
// Return the directory part of the path or empty path if // Return the directory part of the path or empty path if
// there is no directory. // there is no directory.
// //
basic_path basic_path
directory () const; directory () const;
// Return the path without the extension, if any. // Return the path without the extension, if any.
// //
basic_path basic_path
base () const; base () const;
public: public:
// Normalize the path. This includes collapsing the '.' and '..'
// directories if possible, collapsing multiple directory
// separators, converting all directory separators to the
// canonical form, and making the path lower-case if the
// filesystem is not case-sensitive (e.g., Windows). Returns
// *this.
//
basic_path&
normalize ();
// Make the path absolute using the current directory unless
// it is already absolute.
//
basic_path&
complete ();
public:
basic_path basic_path
operator/ (basic_path const& x) operator/ (basic_path const& x) const
{ {
basic_path r (*this); basic_path r (*this);
r /= x; r /= x;
return r; return r;
} }
basic_path& basic_path&
operator/= (basic_path const&); operator/= (basic_path const&);
basic_path basic_path
operator+ (string_type const& s) operator+ (string_type const& s) const
{ {
return basic_path (path_ + s); return basic_path (path_ + s);
} }
basic_path& basic_path&
operator+= (string_type const& s) operator+= (string_type const& s)
{ {
path_ += s; path_ += s;
return *this; return *this;
} }
skipping to change at line 206 skipping to change at line 259
{ {
return path_ == x.path_; return path_ == x.path_;
} }
bool bool
operator!= (basic_path const& x) const operator!= (basic_path const& x) const
{ {
return !(*this == x); return !(*this == x);
} }
public:
bool bool
empty () const operator< (basic_path const& x) const
{ {
return path_.empty (); return path_ < x.path_;
} }
public:
string_type string_type
string () const string () const
{ {
return path_; return path_;
} }
private: private:
void void
init (); init ();
bool #ifdef _WIN32
root () const static C
{ tolower (C);
return path_.size () == 1 && traits::is_separator (path_[0]); #endif
}
private: private:
string_type path_; string_type path_;
}; };
template <typename C> template <typename C>
inline std::basic_ostream<C>& inline std::basic_ostream<C>&
operator<< (std::basic_ostream<C>& os, basic_path<C> const& p) operator<< (std::basic_ostream<C>& os, basic_path<C> const& p)
{ {
return os << p.string (); return os << p.string ();
} }
} }
} }
#include <cutl/fs/path.ixx>
#include <cutl/fs/path.txx> #include <cutl/fs/path.txx>
#endif // CUTL_FS_PATH_HXX #endif // CUTL_FS_PATH_HXX
 End of changes. 19 change blocks. 
23 lines changed or deleted 76 lines changed or added


 path.txx   path.txx 
// file : cutl/fs/path.txx // file : cutl/fs/path.txx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#include <vector>
namespace cutl namespace cutl
{ {
namespace fs namespace fs
{ {
template <typename C> template <typename C>
basic_path<C> basic_path<C>:: basic_path<C> basic_path<C>::
leaf () const leaf () const
{ {
size_type p (traits::rfind_separator (path_)); size_type p (traits::rfind_separator (path_));
skipping to change at line 70 skipping to change at line 72
return basic_path (path_.c_str (), i - 1); return basic_path (path_.c_str (), i - 1);
} }
else else
return *this; return *this;
} }
template <typename C> template <typename C>
basic_path<C>& basic_path<C>:: basic_path<C>& basic_path<C>::
operator/= (basic_path<C> const& r) operator/= (basic_path<C> const& r)
{ {
if (r.root ()) if (r.absolute ())
throw invalid_basic_path<C> (r.path_); throw invalid_basic_path<C> (r.path_);
if (path_.empty () || r.path_.empty ()) if (path_.empty () || r.path_.empty ())
{ {
path_ += r.path_; path_ += r.path_;
return *this; return *this;
} }
if (!root ()) if (!traits::is_separator (path_[path_.size () - 1]))
path_ += traits::directory_separator; path_ += traits::directory_separator;
path_ += r.path_; path_ += r.path_;
return *this; return *this;
} }
template <typename C> template <typename C>
basic_path<C>& basic_path<C>::
normalize ()
{
if (empty ())
return *this;
bool abs (absolute ());
typedef std::vector<string_type> paths;
paths ps;
for (size_type b (0), e (traits::find_separator (path_)),
n (path_.size ());;
e = traits::find_separator (path_, b))
{
string_type s (path_, b, e == string_type::npos ? e : e - b);
ps.push_back (s);
if (e == string_type::npos)
break;
++e;
while (e < n && traits::is_separator (path_[e]))
++e;
if (e == n)
break;
b = e;
}
// First collapse '.' and '..'.
//
paths r;
for (typename paths::const_iterator i (ps.begin ()), e (ps.end ());
i != e; ++i)
{
string_type const& s (*i);
size_type n (s.size ());
if (n == 1 && s[0] == '.')
continue;
if (n == 2 && s[0] == '.' && s[1] == '.')
{
// Pop the last directory from r unless it is '..'.
//
if (!r.empty ())
{
string_type const& s1 (r.back ());
if (!(s1.size () == 2 && s1[0] == '.' && s1[1] == '.'))
{
// Cannot go past the root directory.
//
if (abs && r.size () == 1)
throw invalid_basic_path<C> (path_);
r.pop_back ();
continue;
}
}
}
r.push_back (s);
}
// Reassemble the path.
//
string_type p;
for (typename paths::const_iterator i (r.begin ()), e (r.end ());
i != e;)
{
#ifdef _WIN32
for (size_type j (0), n (i->size ()); j < n; ++j)
p += tolower ((*i)[j]);
#else
p += *i;
#endif
++i;
if (i != e)
p += traits::directory_separator;
}
if (p.empty () && !r.empty ())
p += traits::directory_separator; // Root directory.
path_.swap (p);
return *this;
}
template <typename C>
void basic_path<C>:: void basic_path<C>::
init () init ()
{ {
// Strip trailing slashes except for the case where the single // Strip trailing slashes except for the case where the single
// slash represents the root directory. // slash represents the root directory.
// //
size_type n (path_.size ()); size_type n (path_.size ());
for (; n > 1 && traits::is_separator (path_[n - 1]); --n) ; for (; n > 1 && traits::is_separator (path_[n - 1]); --n) ;
path_.resize (n); path_.resize (n);
} }
 End of changes. 5 change blocks. 
3 lines changed or deleted 101 lines changed or added


 pointer-iterator.hxx   pointer-iterator.hxx 
// file : cutl/container/pointer-iterator.hxx // file : cutl/container/pointer-iterator.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_CONTAINER_POINTER_ITERATOR_HXX #ifndef CUTL_CONTAINER_POINTER_ITERATOR_HXX
#define CUTL_CONTAINER_POINTER_ITERATOR_HXX #define CUTL_CONTAINER_POINTER_ITERATOR_HXX
#include <iterator> // std::iterator_traits #include <iterator> // std::iterator_traits
#include <cutl/meta/remove-p.hxx> #include <cutl/meta/remove-p.hxx>
namespace cutl namespace cutl
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 polymorphic-p.hxx   polymorphic-p.hxx 
// file : cutl/meta/polymorphic-p.hxx // file : cutl/meta/polymorphic-p.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_META_POLYMORPHIC_HXX #ifndef CUTL_META_POLYMORPHIC_HXX
#define CUTL_META_POLYMORPHIC_HXX #define CUTL_META_POLYMORPHIC_HXX
#include <cutl/meta/class-p.hxx> #include <cutl/meta/class-p.hxx>
#include <cutl/meta/remove-cv.hxx> #include <cutl/meta/remove-cv.hxx>
namespace cutl namespace cutl
{ {
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 remove-c.hxx   remove-c.hxx 
// file : cutl/meta/remove-c.hxx // file : cutl/meta/remove-c.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_META_REMOVE_C_HXX #ifndef CUTL_META_REMOVE_C_HXX
#define CUTL_META_REMOVE_C_HXX #define CUTL_META_REMOVE_C_HXX
namespace cutl namespace cutl
{ {
namespace meta namespace meta
{ {
template <typename X> template <typename X>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 remove-cv.hxx   remove-cv.hxx 
// file : cutl/meta/remove-cv.hxx // file : cutl/meta/remove-cv.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_META_REMOVE_CV_HXX #ifndef CUTL_META_REMOVE_CV_HXX
#define CUTL_META_REMOVE_CV_HXX #define CUTL_META_REMOVE_CV_HXX
#include <cutl/meta/remove-c.hxx> #include <cutl/meta/remove-c.hxx>
#include <cutl/meta/remove-v.hxx> #include <cutl/meta/remove-v.hxx>
namespace cutl namespace cutl
{ {
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 remove-p.hxx   remove-p.hxx 
// file : cutl/meta/remove-p.hxx // file : cutl/meta/remove-p.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_META_REMOVE_P_HXX #ifndef CUTL_META_REMOVE_P_HXX
#define CUTL_META_REMOVE_P_HXX #define CUTL_META_REMOVE_P_HXX
namespace cutl namespace cutl
{ {
namespace meta namespace meta
{ {
template <typename X> template <typename X>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 remove-v.hxx   remove-v.hxx 
// file : cutl/meta/remove-v.hxx // file : cutl/meta/remove-v.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_META_REMOVE_V_HXX #ifndef CUTL_META_REMOVE_V_HXX
#define CUTL_META_REMOVE_V_HXX #define CUTL_META_REMOVE_V_HXX
namespace cutl namespace cutl
{ {
namespace meta namespace meta
{ {
template <typename X> template <typename X>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 shared-ptr.hxx   shared-ptr.hxx 
// file : cutl/shared-ptr.hxx // file : cutl/shared-ptr.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_SHARED_PTR_HXX #ifndef CUTL_SHARED_PTR_HXX
#define CUTL_SHARED_PTR_HXX #define CUTL_SHARED_PTR_HXX
#include <cutl/shared-ptr/base.hxx> #include <cutl/shared-ptr/base.hxx>
namespace cutl namespace cutl
{ {
template <typename X> template <typename X>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 sloc-counter.hxx   sloc-counter.hxx 
// file : cutl/compiler/sloc-counter.hxx // file : cutl/compiler/sloc-counter.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_COMPILER_SLOC_COUNTER_HXX #ifndef CUTL_COMPILER_SLOC_COUNTER_HXX
#define CUTL_COMPILER_SLOC_COUNTER_HXX #define CUTL_COMPILER_SLOC_COUNTER_HXX
#include <cstddef> // std::size_t #include <cstddef> // std::size_t
#include <cutl/compiler/code-stream.hxx> #include <cutl/compiler/code-stream.hxx>
namespace cutl namespace cutl
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 sloc-counter.txx   sloc-counter.txx 
// file : cutl/compiler/sloc-counter.txx // file : cutl/compiler/sloc-counter.txx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#include <cctype> // std::isspace #include <cctype> // std::isspace
namespace cutl namespace cutl
{ {
namespace compiler namespace compiler
{ {
template <typename C> template <typename C>
sloc_counter<C>:: sloc_counter<C>::
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 static-ptr.hxx   static-ptr.hxx 
// file : cutl/static-ptr.hxx // file : cutl/static-ptr.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_STATIC_PTR_HXX #ifndef CUTL_STATIC_PTR_HXX
#define CUTL_STATIC_PTR_HXX #define CUTL_STATIC_PTR_HXX
#include <cstddef> // std::size_t #include <cstddef> // std::size_t
namespace cutl namespace cutl
{ {
// This class template implements Jerry Schwarz's static // This class template implements Jerry Schwarz's static
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 traversal.hxx   traversal.hxx 
// file : cutl/compiler/traversal.hxx // file : cutl/compiler/traversal.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_COMPILER_TRAVERSAL_HXX #ifndef CUTL_COMPILER_TRAVERSAL_HXX
#define CUTL_COMPILER_TRAVERSAL_HXX #define CUTL_COMPILER_TRAVERSAL_HXX
#include <map> #include <map>
#include <set> #include <set>
#include <vector> #include <vector>
#include <cutl/compiler/type-info.hxx> #include <cutl/compiler/type-info.hxx>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 traversal.txx   traversal.txx 
// file : cutl/compiler/traversal.txx // file : cutl/compiler/traversal.txx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
namespace cutl namespace cutl
{ {
namespace compiler namespace compiler
{ {
// traverser // traverser
// //
template<typename B> template<typename B>
traverser<B>:: traverser<B>::
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 type-id.hxx   type-id.hxx 
// file : cutl/compiler/type-id.hxx // file : cutl/compiler/type-id.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_COMPILER_TYPE_ID_HXX #ifndef CUTL_COMPILER_TYPE_ID_HXX
#define CUTL_COMPILER_TYPE_ID_HXX #define CUTL_COMPILER_TYPE_ID_HXX
#include <typeinfo> // std::type_info #include <typeinfo> // std::type_info
#include <cutl/details/export.hxx> #include <cutl/details/export.hxx>
namespace cutl namespace cutl
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 type-id.ixx   type-id.ixx 
// file : cutl/compiler/type-id.ixx // file : cutl/compiler/type-id.ixx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
namespace cutl namespace cutl
{ {
namespace compiler namespace compiler
{ {
inline inline
type_id:: type_id::
type_id (std::type_info const& ti) type_id (std::type_info const& ti)
: ti_ (&ti) : ti_ (&ti)
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 type-id.txx   type-id.txx 
// file : cutl/compiler/type-id.txx // file : cutl/compiler/type-id.txx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
namespace cutl namespace cutl
{ {
namespace compiler namespace compiler
{ {
template <typename X> template <typename X>
inline inline
type_id:: type_id::
type_id (X const volatile& x) type_id (X const volatile& x)
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 type-info.hxx   type-info.hxx 
// file : cutl/compiler/type-info.hxx // file : cutl/compiler/type-info.hxx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
#ifndef CUTL_COMPILER_TYPE_INFO_HXX #ifndef CUTL_COMPILER_TYPE_INFO_HXX
#define CUTL_COMPILER_TYPE_INFO_HXX #define CUTL_COMPILER_TYPE_INFO_HXX
#include <map> #include <map>
#include <vector> #include <vector>
#include <typeinfo> // std::type_info #include <typeinfo> // std::type_info
#include <cutl/exception.hxx> #include <cutl/exception.hxx>
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added


 type-info.ixx   type-info.ixx 
// file : cutl/compiler/type-info.ixx // file : cutl/compiler/type-info.ixx
// author : Boris Kolpackov <boris@codesynthesis.com> // author : Boris Kolpackov <boris@codesynthesis.com>
// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
// license : MIT; see accompanying LICENSE file // license : MIT; see accompanying LICENSE file
namespace cutl namespace cutl
{ {
namespace compiler namespace compiler
{ {
// base_info // base_info
// //
inline inline
 End of changes. 1 change blocks. 
1 lines changed or deleted 1 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/