mirror of
https://git.mirrors.martin98.com/https://github.com/gulrak/filesystem
synced 2025-07-25 23:04:31 +08:00
Added helper headers to dynamically select std::filesystem or ghc::filesystem into the namespace fs.
This commit is contained in:
parent
d4eae36f7c
commit
de2c1187a4
43
README.md
43
README.md
@ -143,6 +143,12 @@ without that switch ([see](https://blogs.msdn.microsoft.com/vcblog/2018/04/09/ms
|
|||||||
Be aware too, as a header-only library, it is not hiding the fact, that it
|
Be aware too, as a header-only library, it is not hiding the fact, that it
|
||||||
uses system includes, so they "pollute" your global namespace.
|
uses system includes, so they "pollute" your global namespace.
|
||||||
|
|
||||||
|
There is an additional header named `ghc/fs_std.hpp` that implements this
|
||||||
|
dynamic selection of a filesystem implementation, that you can include
|
||||||
|
instead of `ghc/filesystem.hpp` when you want std::filesystem where
|
||||||
|
available and ghc::filesystem where not.
|
||||||
|
|
||||||
|
|
||||||
### Using it as Forwarding-/Implementation-Header
|
### Using it as Forwarding-/Implementation-Header
|
||||||
|
|
||||||
Alternatively, starting from v1.1.0 `ghc::filesystem` can also be used by
|
Alternatively, starting from v1.1.0 `ghc::filesystem` can also be used by
|
||||||
@ -157,6 +163,43 @@ into a Windows-DLL, as a DLL interface with C++ standard templates in interfaces
|
|||||||
is a different beast. If someone is willing to give it a try, I might integrate
|
is a different beast. If someone is willing to give it a try, I might integrate
|
||||||
a PR but currently working on that myself is not a priority.
|
a PR but currently working on that myself is not a priority.
|
||||||
|
|
||||||
|
If you use the forwarding/implementation approach, you can still use the dynamic
|
||||||
|
switching like this:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include) && __has_include(<filesystem>)
|
||||||
|
#include <filesystem>
|
||||||
|
namespace fs {
|
||||||
|
using namespace std::filesystem;
|
||||||
|
using ifstream = std::ifstream;
|
||||||
|
using ofstream = std::ofstream;
|
||||||
|
using fstream = std::fstream;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#include <ghc/fs-fwd.hpp>
|
||||||
|
namespace fs {
|
||||||
|
using namespace ghc::filesystem;
|
||||||
|
using ifstream = ghc::filesystem::ifstream;
|
||||||
|
using ofstream = ghc::filesystem::ofstream;
|
||||||
|
using fstream = ghc::filesystem::fstream;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
and in the implementation hiding cpp, you might use (before any include that includes `ghc/fs_fwd.hpp`
|
||||||
|
to take precedence:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#if !(defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include) && __has_include(<filesystem>))
|
||||||
|
#include <ghc/fs_impl.hpp>
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
There are additional helper headers, named `ghc/fs_std_fwd.hpp` and `ghc/fs_std_impl.hpp`
|
||||||
|
that use this technique, so you can simply include them if you want to dynamically select
|
||||||
|
the filesystem implementation.
|
||||||
|
|
||||||
|
|
||||||
### Git Submodule
|
### Git Submodule
|
||||||
|
|
||||||
Starting from v1.1.0, it is possible to add `ghc::filesystem`
|
Starting from v1.1.0, it is possible to add `ghc::filesystem`
|
||||||
|
59
include/ghc/fs_std.hpp
Normal file
59
include/ghc/fs_std.hpp
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// ghc::filesystem - A C++17-like filesystem implementation for C++11/C++14
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Copyright (c) 2018, Steffen Schümann <s.schuemann@pobox.com>
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
// list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// 3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
// may be used to endorse or promote products derived from this software without
|
||||||
|
// specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
// fs_std.hpp - The dynamic switching header for that includes std::filesystem if detected
|
||||||
|
// or ghc::filesystem if not, and makes the resulting API available in the
|
||||||
|
// namespace fs.
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
#ifndef GHC_FILESYSTEM_STD_H
|
||||||
|
#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include) && __has_include(<filesystem>)
|
||||||
|
#include <filesystem>
|
||||||
|
namespace fs {
|
||||||
|
using namespace std::filesystem;
|
||||||
|
using ifstream = std::ifstream;
|
||||||
|
using ofstream = std::ofstream;
|
||||||
|
using fstream = std::fstream;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#include <ghc/filesystem.hpp>
|
||||||
|
namespace fs {
|
||||||
|
using namespace ghc::filesystem;
|
||||||
|
using ifstream = ghc::filesystem::ifstream;
|
||||||
|
using ofstream = ghc::filesystem::ofstream;
|
||||||
|
using fstream = ghc::filesystem::fstream;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif // GHC_FILESYSTEM_STD_H
|
||||||
|
|
63
include/ghc/fs_std_fwd.hpp
Normal file
63
include/ghc/fs_std_fwd.hpp
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// ghc::filesystem - A C++17-like filesystem implementation for C++11/C++14
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Copyright (c) 2018, Steffen Schümann <s.schuemann@pobox.com>
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
// list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// 3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
// may be used to endorse or promote products derived from this software without
|
||||||
|
// specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
// fs_std_fwd.hpp - The forwarding header for the header/implementation seperated usage of
|
||||||
|
// ghc::filesystem that uses std::filesystem if it detects it.
|
||||||
|
// This file can be include at any place, where fs::filesystem api is needed while
|
||||||
|
// not bleeding implementation details (e.g. system includes) into the global namespace,
|
||||||
|
// as long as one cpp includes fs_std_impl.hpp to deliver the matching implementations.
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
#ifndef GHC_FILESYSTEM_STD_FWD_H
|
||||||
|
#define GHC_FILESYSTEM_STD_FWD_H
|
||||||
|
#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include) && __has_include(<filesystem>)
|
||||||
|
#include <filesystem>
|
||||||
|
namespace fs {
|
||||||
|
using namespace std::filesystem;
|
||||||
|
using ifstream = std::ifstream;
|
||||||
|
using ofstream = std::ofstream;
|
||||||
|
using fstream = std::fstream;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define GHC_FILESYSTEM_FWD
|
||||||
|
#include <ghc/filesystem.hpp>
|
||||||
|
namespace fs {
|
||||||
|
using namespace ghc::filesystem;
|
||||||
|
using ifstream = ghc::filesystem::ifstream;
|
||||||
|
using ofstream = ghc::filesystem::ofstream;
|
||||||
|
using fstream = ghc::filesystem::fstream;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif // GHC_FILESYSTEM_STD_FWD_H
|
||||||
|
|
46
include/ghc/fs_std_impl.hpp
Normal file
46
include/ghc/fs_std_impl.hpp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// ghc::filesystem - A C++17-like filesystem implementation for C++11/C++14
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Copyright (c) 2018, Steffen Schümann <s.schuemann@pobox.com>
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
// are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
// list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// 3. Neither the name of the copyright holder nor the names of its contributors
|
||||||
|
// may be used to endorse or promote products derived from this software without
|
||||||
|
// specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
// fs_std_impl.hpp - The implementation header for the header/implementation seperated usage of
|
||||||
|
// ghc::filesystem that does nothing if std::filesystem is detected.
|
||||||
|
// This file can be used to hide the implementation of ghc::filesystem into a single cpp.
|
||||||
|
// The cpp has to include this before including fs_std_fwd.hpp directly or via a different
|
||||||
|
// header to work.
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
#if !(defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include) && __has_include(<filesystem>))
|
||||||
|
#define GHC_FILESYSTEM_IMPLEMENTATION
|
||||||
|
#include <ghc/filesystem.hpp>
|
||||||
|
#endif
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user