remove filesystem_selector
This commit is contained in:
parent
c65247b413
commit
1845b41019
@ -49,7 +49,7 @@
|
|||||||
//# The library maybe available in the std library in use or from Boost(almost compatible)
|
//# The library maybe available in the std library in use or from Boost(almost compatible)
|
||||||
//# http://www.boost.org/doc/libs/1_60_0/libs/filesystem/doc/index.htm
|
//# http://www.boost.org/doc/libs/1_60_0/libs/filesystem/doc/index.htm
|
||||||
//# or you can choose to use the(partial, but functional) implementation provided by nana.
|
//# or you can choose to use the(partial, but functional) implementation provided by nana.
|
||||||
//# If you include the file <nana/filesystem/filesystem_selector.hpp>
|
//# If you include the file <nana/filesystem/filesystem.hpp>
|
||||||
//# the selected option will be set by nana into std::experimental::filesystem
|
//# the selected option will be set by nana into std::experimental::filesystem
|
||||||
//# By default Nana will try to use the STD.If not available will try
|
//# By default Nana will try to use the STD.If not available will try
|
||||||
//# to use boost if available.Nana own implementation will be use only none of them are available.
|
//# to use boost if available.Nana own implementation will be use only none of them are available.
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
* http://www.boost.org/LICENSE_1_0.txt)
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
*
|
*
|
||||||
* @file nana/filesystem/filesystem.hpp
|
* @file nana/filesystem/filesystem.hpp
|
||||||
* @author Jinhao, conributed: Ariel Vina-Rodriguez
|
* @author Ariel Vina-Rodriguez, Jinhao
|
||||||
* @brief Mimic std::experimental::filesystem::v1 (boost v3)
|
* @brief Mimic std::experimental::filesystem::v1 (boost v3)
|
||||||
* and need VC2015 or a C++11 compiler. With a few correction can be compiler by VC2013
|
* and need VC2015 or a C++11 compiler. With a few correction can be compiler by VC2013
|
||||||
*/
|
*/
|
||||||
@ -29,12 +29,54 @@
|
|||||||
|
|
||||||
#ifndef NANA_FILESYSTEM_HPP
|
#ifndef NANA_FILESYSTEM_HPP
|
||||||
#define NANA_FILESYSTEM_HPP
|
#define NANA_FILESYSTEM_HPP
|
||||||
|
|
||||||
//#undef NANA_USING_NANA_FILESYSTEM
|
|
||||||
#if NANA_USING_NANA_FILESYSTEM
|
|
||||||
|
|
||||||
#include <nana/push_ignore_diagnostic>
|
#include <nana/push_ignore_diagnostic>
|
||||||
|
|
||||||
|
//Filesystem Selection
|
||||||
|
#include <nana/config.hpp>
|
||||||
|
|
||||||
|
#if defined(NANA_USING_NANA_FILESYSTEM) || defined(NANA_USING_STD_FILESYSTEM) || defined(NANA_USING_BOOST_FILESYSTEM)
|
||||||
|
#undef NANA_USING_NANA_FILESYSTEM
|
||||||
|
#undef NANA_USING_STD_FILESYSTEM
|
||||||
|
#undef NANA_USING_BOOST_FILESYSTEM
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NANA_USING_NANA_FILESYSTEM 0
|
||||||
|
#define NANA_USING_STD_FILESYSTEM 0
|
||||||
|
#define NANA_USING_BOOST_FILESYSTEM 0
|
||||||
|
|
||||||
|
#if (defined(NANA_FILESYSTEM_FORCE) || ( (defined(STD_FILESYSTEM_NOT_SUPPORTED) && !defined(BOOST_FILESYSTEM_AVAILABLE)) && !(defined(BOOST_FILESYSTEM_FORCE) || defined(STD_FILESYSTEM_FORCE)) ) )
|
||||||
|
|
||||||
|
#undef NANA_USING_NANA_FILESYSTEM
|
||||||
|
#define NANA_USING_NANA_FILESYSTEM 1
|
||||||
|
|
||||||
|
#elif (defined(BOOST_FILESYSTEM_AVAILABLE) && ( defined(BOOST_FILESYSTEM_FORCE) || ( defined(STD_FILESYSTEM_NOT_SUPPORTED) && !defined(STD_FILESYSTEM_FORCE) ) ))
|
||||||
|
|
||||||
|
#undef NANA_USING_BOOST_FILESYSTEM
|
||||||
|
#define NANA_USING_BOOST_FILESYSTEM 1
|
||||||
|
# include <boost/filesystem.hpp>
|
||||||
|
|
||||||
|
// add boost::filesystem into std::experimental::filesystem
|
||||||
|
namespace std {
|
||||||
|
namespace experimental {
|
||||||
|
namespace filesystem {
|
||||||
|
using namespace boost::filesystem;
|
||||||
|
} // filesystem
|
||||||
|
} // experimental
|
||||||
|
} // std
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#undef NANA_USING_STD_FILESYSTEM
|
||||||
|
#define NANA_USING_STD_FILESYSTEM 1
|
||||||
|
# include <experimental/filesystem>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __cpp_lib_experimental_filesystem
|
||||||
|
# define __cpp_lib_experimental_filesystem 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if NANA_USING_NANA_FILESYSTEM
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <system_error>
|
#include <system_error>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
@ -413,6 +455,21 @@ namespace nana { namespace experimental { namespace filesystem
|
|||||||
//namespace filesystem = experimental::filesystem;
|
//namespace filesystem = experimental::filesystem;
|
||||||
} //end namespace nana
|
} //end namespace nana
|
||||||
|
|
||||||
|
|
||||||
|
namespace std {
|
||||||
|
namespace experimental {
|
||||||
|
namespace filesystem {
|
||||||
|
|
||||||
|
# ifdef CXX_NO_INLINE_NAMESPACE
|
||||||
|
using namespace nana::experimental::filesystem;
|
||||||
|
# else
|
||||||
|
using namespace nana::experimental::filesystem::v1;
|
||||||
|
# endif
|
||||||
|
} // filesystem
|
||||||
|
} // experimental
|
||||||
|
} // std
|
||||||
|
|
||||||
|
#endif //NANA_USING_NANA_FILESYSTEM
|
||||||
|
|
||||||
#include <nana/pop_ignore_diagnostic>
|
#include <nana/pop_ignore_diagnostic>
|
||||||
#endif
|
#endif //NANA_FILESYSTEM_HPP
|
||||||
#endif
|
|
||||||
|
|||||||
@ -15,10 +15,7 @@
|
|||||||
#ifndef NANA_FILESYSTEM_EXT_HPP
|
#ifndef NANA_FILESYSTEM_EXT_HPP
|
||||||
#define NANA_FILESYSTEM_EXT_HPP
|
#define NANA_FILESYSTEM_EXT_HPP
|
||||||
|
|
||||||
#include <sstream>
|
#include <nana/filesystem/filesystem.hpp>
|
||||||
#include <iomanip>
|
|
||||||
|
|
||||||
#include <nana/filesystem/filesystem_selector.hpp>
|
|
||||||
|
|
||||||
namespace nana
|
namespace nana
|
||||||
{
|
{
|
||||||
@ -45,7 +42,8 @@ inline bool is_directory(const std::experimental::filesystem::directory_entry& d
|
|||||||
//template<class DI> // DI = directory_iterator from std, boost, or nana : return directory_entry
|
//template<class DI> // DI = directory_iterator from std, boost, or nana : return directory_entry
|
||||||
class directory_only_iterator : public std::experimental::filesystem::directory_iterator
|
class directory_only_iterator : public std::experimental::filesystem::directory_iterator
|
||||||
{
|
{
|
||||||
using DI = std::experimental::filesystem::directory_iterator;
|
using directory_iterator = std::experimental::filesystem::directory_iterator;
|
||||||
|
|
||||||
directory_only_iterator& find_first()
|
directory_only_iterator& find_first()
|
||||||
{
|
{
|
||||||
auto end = directory_only_iterator{};
|
auto end = directory_only_iterator{};
|
||||||
@ -53,22 +51,22 @@ class directory_only_iterator : public std::experimental::filesystem::directory_
|
|||||||
{
|
{
|
||||||
if (is_directory((**this).status()))
|
if (is_directory((**this).status()))
|
||||||
return *this;
|
return *this;
|
||||||
this->DI::operator++();
|
this->directory_iterator::operator++();
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
directory_only_iterator(){}
|
directory_only_iterator() = default;
|
||||||
|
|
||||||
template <class... Arg>
|
template <typename Arg, typename... Args>
|
||||||
directory_only_iterator(Arg&&... arg ): DI(std::forward<Arg>(arg)...)
|
directory_only_iterator(Arg&& arg, Args&&... args) : directory_iterator(arg, std::forward<Args>(args)...)
|
||||||
{
|
{
|
||||||
find_first();
|
find_first();
|
||||||
}
|
}
|
||||||
|
|
||||||
directory_only_iterator& operator++()
|
directory_only_iterator& operator++()
|
||||||
{
|
{
|
||||||
this->DI::operator++();
|
this->directory_iterator::operator++();
|
||||||
return find_first();
|
return find_first();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -86,25 +84,25 @@ inline directory_only_iterator end(const directory_only_iterator&) noexcept
|
|||||||
//template<class DI> // DI = directory_iterator from std, boost, or nana : value_type directory_entry
|
//template<class DI> // DI = directory_iterator from std, boost, or nana : value_type directory_entry
|
||||||
class regular_file_only_iterator : public std::experimental::filesystem::directory_iterator
|
class regular_file_only_iterator : public std::experimental::filesystem::directory_iterator
|
||||||
{
|
{
|
||||||
using DI = std::experimental::filesystem::directory_iterator;
|
using directory_iterator = std::experimental::filesystem::directory_iterator;
|
||||||
regular_file_only_iterator& find_first()
|
regular_file_only_iterator& find_first()
|
||||||
{
|
{
|
||||||
while(( (*this) != DI{}) && !is_regular_file((**this).status()))
|
while (((*this) != directory_iterator{}) && !is_regular_file((**this).status()))
|
||||||
this->DI::operator++();
|
this->directory_iterator::operator++();
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
regular_file_only_iterator() : DI() {}
|
regular_file_only_iterator() = default;
|
||||||
|
|
||||||
template <class... Arg>
|
template <typename Arg, typename... Args>
|
||||||
regular_file_only_iterator(Arg&&... arg ): DI(std::forward<Arg>(arg)...)
|
regular_file_only_iterator(Arg&& arg, Args&&... args) : directory_iterator(std::forward<Arg>(arg), std::forward<Args>(args)...)
|
||||||
{
|
{
|
||||||
find_first();
|
find_first();
|
||||||
}
|
}
|
||||||
|
|
||||||
regular_file_only_iterator& operator++()
|
regular_file_only_iterator& operator++()
|
||||||
{
|
{
|
||||||
this->DI::operator++();
|
this->directory_iterator::operator++();
|
||||||
return find_first();
|
return find_first();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,87 +0,0 @@
|
|||||||
/**
|
|
||||||
* Nana C++ Library(http://www.nanapro.org)
|
|
||||||
* Copyright(C) 2003-2016 Jinhao(cnjinhao@hotmail.com)
|
|
||||||
*
|
|
||||||
* Distributed under the Boost Software License, Version 1.0.
|
|
||||||
* (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
* http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
*
|
|
||||||
* @file nana\filesystem\filesystem_selector.hpp
|
|
||||||
* @autor by Ariel Vina-Rodriguez:
|
|
||||||
* @brief A "ISO C++" filesystem Implementation selector
|
|
||||||
*
|
|
||||||
* The ISO C++ File System Technical Specification(ISO - TS, or STD) is optional.
|
|
||||||
* http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4100.pdf
|
|
||||||
* This is not a workaround, but an user option.
|
|
||||||
* The library maybe available in the std library in use or from Boost(almost compatible)
|
|
||||||
* http://www.boost.org/doc/libs/1_60_0/libs/filesystem/doc/index.htm
|
|
||||||
* or you can choose to use the(partial, but functional) implementation provided by nana.
|
|
||||||
* If you include the file <nana/filesystem/filesystem_selector.hpp>
|
|
||||||
* the selected option will be set by nana into std::experimental::filesystem
|
|
||||||
* By default Nana will try to use the STD. If not available will try
|
|
||||||
* to use boost if available. Nana own implementation will be use only if none of them are available.
|
|
||||||
* nana Now mimic std::experimental::filesystem::v1 (boost v3)
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NANA_FILESYSTEM_SELECTOR
|
|
||||||
#define NANA_FILESYSTEM_SELECTOR
|
|
||||||
|
|
||||||
#include <nana/config.hpp>
|
|
||||||
|
|
||||||
#define NANA_USING_NANA_FILESYSTEM false
|
|
||||||
#define NANA_USING_STD_FILESYSTEM false
|
|
||||||
#define NANA_USING_BOOST_FILESYSTEM false
|
|
||||||
|
|
||||||
#if (defined(NANA_FILESYSTEM_FORCE) || ( (defined(STD_FILESYSTEM_NOT_SUPPORTED) && !defined(BOOST_FILESYSTEM_AVAILABLE)) && !(defined(BOOST_FILESYSTEM_FORCE) || defined(STD_FILESYSTEM_FORCE)) ) )
|
|
||||||
|
|
||||||
#undef NANA_USING_NANA_FILESYSTEM
|
|
||||||
#define NANA_USING_NANA_FILESYSTEM true
|
|
||||||
# include <nana/filesystem/filesystem.hpp>
|
|
||||||
|
|
||||||
namespace std {
|
|
||||||
namespace experimental {
|
|
||||||
namespace filesystem {
|
|
||||||
|
|
||||||
# ifdef CXX_NO_INLINE_NAMESPACE
|
|
||||||
using namespace nana::experimental::filesystem;
|
|
||||||
# else
|
|
||||||
using namespace nana::experimental::filesystem::v1;
|
|
||||||
# endif
|
|
||||||
} // filesystem
|
|
||||||
} // experimental
|
|
||||||
} // std
|
|
||||||
|
|
||||||
#elif (defined(BOOST_FILESYSTEM_AVAILABLE) && ( defined(BOOST_FILESYSTEM_FORCE) || ( defined(STD_FILESYSTEM_NOT_SUPPORTED) && !defined(STD_FILESYSTEM_FORCE) ) ))
|
|
||||||
|
|
||||||
#undef NANA_USING_BOOST_FILESYSTEM
|
|
||||||
#define NANA_USING_BOOST_FILESYSTEM true
|
|
||||||
# include <boost/filesystem.hpp>
|
|
||||||
|
|
||||||
// add boost::filesystem into std::experimental::filesystem
|
|
||||||
namespace std {
|
|
||||||
namespace experimental {
|
|
||||||
namespace filesystem {
|
|
||||||
using namespace boost::filesystem;
|
|
||||||
} // filesystem
|
|
||||||
} // experimental
|
|
||||||
} // std
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#undef NANA_USING_STD_FILESYSTEM
|
|
||||||
#define NANA_USING_STD_FILESYSTEM true
|
|
||||||
# include <experimental/filesystem>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __cpp_lib_experimental_filesystem
|
|
||||||
# define __cpp_lib_experimental_filesystem 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif // NANA_FILESYSTEM_SELECTOR
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -13,6 +13,9 @@
|
|||||||
|
|
||||||
#include <nana/filesystem/filesystem_ext.hpp>
|
#include <nana/filesystem/filesystem_ext.hpp>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip> //put_time
|
||||||
|
|
||||||
#if defined(NANA_WINDOWS)
|
#if defined(NANA_WINDOWS)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
@ -102,7 +105,13 @@ namespace nana
|
|||||||
|
|
||||||
if (ftime == ((fs::file_time_type::min)())) return{};
|
if (ftime == ((fs::file_time_type::min)())) return{};
|
||||||
|
|
||||||
std::time_t cftime = decltype(ftime)::clock::to_time_t(ftime);
|
//std::time_t cftime = decltype(ftime)::clock::to_time_t(ftime);
|
||||||
|
|
||||||
|
//A workaround for VC2013
|
||||||
|
using time_point = decltype(ftime);
|
||||||
|
|
||||||
|
auto cftime = time_point::clock::to_time_t(ftime);
|
||||||
|
|
||||||
std::stringstream tm;
|
std::stringstream tm;
|
||||||
tm << std::put_time(std::localtime(&cftime), "%Y-%m-%d, %H:%M:%S");
|
tm << std::put_time(std::localtime(&cftime), "%Y-%m-%d, %H:%M:%S");
|
||||||
return tm.str();
|
return tm.str();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user