#ifndef FSLIB_H #define FSLIB_H #include #include #include namespace FSLib{ bool exists(const std::string &path); bool isDirectory(const std::string &path); std::string canonical(const std::string &path); bool rename(const std::string &file_a, const std::string &file_b); class Directory { public: Directory(const std::string &path_) : dir_path(path_) {} Directory() = delete; Directory(const Directory &d) = default; Directory(Directory &&d) = default; class Iterator { public: Iterator( const Directory &d_ ) : d(opendir(d_.path())) { current_entry = readdir(d); if( current_entry != nullptr && ( !strcmp(current_entry->d_name, ".") || !strcmp(current_entry->d_name, "..") ) ) ++(*this); } Iterator( const Directory &d_, const struct dirent *current_entry_) : d(opendir(d_.path())), current_entry(current_entry_) {} Iterator() = delete; Iterator(const Iterator &i) = default; Iterator(Iterator &&i) = default; ~Iterator() { closedir(d); } char const *operator*() const; Iterator &operator++(); Iterator operator++(int); bool operator==(const Iterator &i_other) const; bool operator!=(const Iterator &i_other) const; private: DIR *d; const struct dirent *current_entry; }; using iterator = Iterator; using const_iterator = Iterator; iterator begin(); const_iterator begin() const; const_iterator cbegin() const; iterator end(); const_iterator end() const; const_iterator cend() const; const char *path() const; private: std::string dir_path; }; } //end FSLib #endif