aboutsummaryrefslogtreecommitdiff
path: root/butl/filesystem.ixx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-07-09 12:25:47 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-07-09 12:25:47 +0200
commit02af7e788f3fef0dbba0ba49442054fb451f5bdc (patch)
tree5e0295bc0d06579cfffd0df3ad176945c9c51c79 /butl/filesystem.ixx
parent38c8f0efd8f033be8fb8278aa5d0eb704dedee55 (diff)
Implement directory iteration support
Diffstat (limited to 'butl/filesystem.ixx')
-rw-r--r--butl/filesystem.ixx65
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
+}