Filesystem.hh
Go to the documentation of this file.
1/*
2 * Copyright 2017 Open Source Robotics Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 */
17
18#ifndef SDF_FILESYSTEM_HH_
19#define SDF_FILESYSTEM_HH_
20
21#include <memory>
22#include <string>
23
24#include <gz/utils/ImplPtr.hh>
25#include <sdf/sdf_config.h>
26#include "sdf/system_util.hh"
27
28namespace sdf
29{
30 // Inline bracke to help doxygen filtering.
31 inline namespace SDF_VERSION_NAMESPACE {
32 //
33
34 namespace filesystem
35 {
40 bool exists(const std::string &_path);
41
46 bool is_directory(const std::string &_path);
47
53 bool create_directory(const std::string &_path);
54
55 // The below is C++ variadic template magic to allow an append
56 // method that takes 1-n number of arguments to append together.
57
63 std::string const separator(std::string const &_s);
64
69 template<typename... Args>
70 std::string append(Args const &... args)
71 {
72 std::string result;
73 int unpack[] {
74 0, (result += separator(args), 0)...};
75 static_cast<void>(unpack);
76 return result.substr(0, result.length() - 1);
77 }
78
82 std::string current_path();
83
88 std::string basename(const std::string &_path);
89
93 {
96 public: explicit DirIter(const std::string &_in);
97
99 public: DirIter();
100
103 public: std::string operator*() const;
104
107 public: const DirIter& operator++();
108
113 public: bool operator!=(const DirIter &_other) const;
114
116 public: ~DirIter();
117
119 private: void next();
120
122 private: void set_internal_empty();
123
125 private: void close_handle();
126
128 GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr)
129 };
130 }
131 }
132}
133
134#endif
A class for iterating over all items in a directory.
Definition: Filesystem.hh:93
DirIter(const std::string &_in)
Constructor.
bool operator!=(const DirIter &_other) const
Comparison operator to see if this iterator is at the same point as another iterator.
const DirIter & operator++()
Pre-increment operator; moves to next directory record.
std::string operator*() const
Dereference operator; returns current directory record.
GZ_SDFORMAT_VISIBLE std::string const separator(std::string const &_s)
Append the preferred path separator character for this platform onto the passed-in string.
GZ_SDFORMAT_VISIBLE bool create_directory(const std::string &_path)
Create a new directory on the filesystem.
GZ_SDFORMAT_VISIBLE std::string basename(const std::string &_path)
Given a path, get just the basename portion.
GZ_SDFORMAT_VISIBLE bool exists(const std::string &_path)
Determine whether the given path exists on the filesystem.
std::string append(Args const &... args)
Append one or more additional path elements to the first passed in argument.
Definition: Filesystem.hh:70
GZ_SDFORMAT_VISIBLE std::string current_path()
Get the current working path.
GZ_SDFORMAT_VISIBLE bool is_directory(const std::string &_path)
Determine whether the given path is a directory.
namespace for Simulation Description Format parser
Definition: Actor.hh:35
#define SDFORMAT_VISIBLE
Use to represent "symbol visible" if supported.
Definition: system_util.hh:25