diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-07-09 12:25:47 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-07-09 12:25:47 +0200 |
commit | 02af7e788f3fef0dbba0ba49442054fb451f5bdc (patch) | |
tree | 5e0295bc0d06579cfffd0df3ad176945c9c51c79 /butl/filesystem.ixx | |
parent | 38c8f0efd8f033be8fb8278aa5d0eb704dedee55 (diff) |
Implement directory iteration support
Diffstat (limited to 'butl/filesystem.ixx')
-rw-r--r-- | butl/filesystem.ixx | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/butl/filesystem.ixx b/butl/filesystem.ixx new file mode 100644 index 0000000..7aa3622 --- /dev/null +++ b/butl/filesystem.ixx @@ -0,0 +1,65 @@ +// file : butl/filesystem.ixx -*- C++ -*- +// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +namespace butl +{ + // dir_entry + // + inline entry_type dir_entry:: + type () const + { + return t_ != entry_type::unknown ? t_ : (t_ = type (false)); + } + + inline entry_type dir_entry:: + ltype () const + { + entry_type t (type ()); + return t != entry_type::symlink + ? t + : lt_ != entry_type::unknown ? lt_ : (lt_ = type (true)); + } + + // dir_iterator + // + inline dir_iterator:: + dir_iterator (dir_iterator&& x): e_ (std::move (x.e_)), h_ (x.h_) + { + x.h_ = nullptr; + } + + inline dir_iterator& dir_iterator:: + operator= (dir_iterator&& x) + { + if (this != &x) + { + e_ = std::move (x.e_); + h_ = x.h_; + x.h_ = nullptr; + } + return *this; + } + + inline bool + operator== (const dir_iterator& x, const dir_iterator& y) + { + return x.h_ == y.h_; + } + + inline bool + operator!= (const dir_iterator& x, const dir_iterator& y) + { + return !(x == y); + } + +#ifndef _WIN32 + inline dir_iterator:: + ~dir_iterator () + { + if (h_ != nullptr) + ::closedir (h_); // Ignore any errors. + } +#else +#endif +} |