GNU Octave  6.2.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
dir-ops.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (C) 1996-2021 The Octave Project Developers
4 //
5 // See the file COPYRIGHT.md in the top-level directory of this
6 // distribution or <https://octave.org/copyright/>.
7 //
8 // This file is part of Octave.
9 //
10 // Octave is free software: you can redistribute it and/or modify it
11 // under the terms of the GNU General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // Octave is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with Octave; see the file COPYING. If not, see
22 // <https://www.gnu.org/licenses/>.
23 //
24 ////////////////////////////////////////////////////////////////////////
25 
26 #if ! defined (octave_dir_ops_h)
27 #define octave_dir_ops_h 1
28 
29 #include "octave-config.h"
30 
31 #include <string>
32 
33 #include "str-vec.h"
34 
35 namespace octave
36 {
37  namespace sys
38  {
39  class
40  OCTAVE_API
41  dir_entry
42  {
43 
44  // NOTE: This class cannot be used safely cross-platform (Windows) with
45  // non-ASCII characters in paths.
46  // Consider replacing the implementation using std::filesystem (C++ 17).
47  // In the meantime, consider using octave::sys::get_dirlist instead.
48 
49  public:
50 
51  dir_entry (const std::string& n = "")
52  : name (n), dir (nullptr), fail (false), errmsg ()
53  {
54  if (! name.empty ())
55  open ();
56  }
57 
59  : name (d.name), dir (d.dir), fail (d.fail), errmsg (d.errmsg) { }
60 
61  dir_entry& operator = (const dir_entry& d)
62  {
63  if (this != &d)
64  {
65  name = d.name;
66  dir = d.dir;
67  fail = d.fail;
68  errmsg = d.errmsg;
69  }
70 
71  return *this;
72  }
73 
74  ~dir_entry (void) { close (); }
75 
76  bool open (const std::string& = "");
77 
78  string_vector read (void);
79 
80  bool close (void);
81 
82  bool ok (void) const { return dir && ! fail; }
83 
84  operator bool () const { return ok (); }
85 
86  std::string error (void) const { return ok () ? "" : errmsg; }
87 
88  static unsigned int max_name_length (void);
89 
90  private:
91 
92  // Name of the directory.
93  std::string name;
94 
95  // A pointer to the contents of the directory. We use void here to
96  // avoid possible conflicts with the way some systems declare the
97  // type DIR.
98  void *dir;
99 
100  // TRUE means the open for this directory failed.
101  bool fail;
102 
103  // If a failure occurs, this contains the system error text.
104  std::string errmsg;
105  };
106  }
107 }
108 
109 #endif
Definition: dir-ops.h:42
void * dir
Definition: dir-ops.h:98
dir_entry(const std::string &n="")
Definition: dir-ops.h:51
bool fail
Definition: dir-ops.h:101
std::string errmsg
Definition: dir-ops.h:104
~dir_entry(void)
Definition: dir-ops.h:74
std::string name
Definition: dir-ops.h:93
std::string error(void) const
Definition: dir-ops.h:86
bool ok(void) const
Definition: dir-ops.h:82
dir_entry(const dir_entry &d)
Definition: dir-ops.h:58
QString name
F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE * d
octave_idx_type n
Definition: mx-inlines.cc:753