mirror of
https://git.mirrors.martin98.com/https://github.com/gulrak/filesystem
synced 2025-07-23 23:24:26 +08:00
#3: Added missing inlines and small refactorings for compiler errors when including in multiple files. Added a test.
This commit is contained in:
parent
d9348942fc
commit
f756027cca
24
filesystem.h
24
filesystem.h
@ -1087,12 +1087,12 @@ inline void appendUTF8(std::string& str, uint32_t unicode)
|
||||
// and Taylor R Campbell for the ideas to this DFA approach of UTF-8 decoding;
|
||||
// Generating debugging and shrinking my own DFA from scratch was a day of fun!
|
||||
enum utf8_states_t { S_STRT = 0, S_RJCT = 8 };
|
||||
static const uint32_t utf8_state_info[] = {
|
||||
0x11111111u, 0x11111111u, 0x77777777u, 0x77777777u, 0x88888888u, 0x88888888u, 0x88888888u, 0x88888888u, 0x22222299u, 0x22222222u, 0x22222222u, 0x22222222u, 0x3333333au, 0x33433333u,
|
||||
0x9995666bu, 0x99999999u, 0x88888880u, 0x22818108u, 0x88888881u, 0x88888882u, 0x88888884u, 0x88888887u, 0x88888886u, 0x82218108u, 0x82281108u, 0x88888888u, 0x88888883u, 0x88888885u,
|
||||
};
|
||||
static inline unsigned consumeUtf8Fragment(const unsigned state, const uint8_t fragment, uint32_t& codepoint)
|
||||
inline unsigned consumeUtf8Fragment(const unsigned state, const uint8_t fragment, uint32_t& codepoint)
|
||||
{
|
||||
static const uint32_t utf8_state_info[] = {
|
||||
0x11111111u, 0x11111111u, 0x77777777u, 0x77777777u, 0x88888888u, 0x88888888u, 0x88888888u, 0x88888888u, 0x22222299u, 0x22222222u, 0x22222222u, 0x22222222u, 0x3333333au, 0x33433333u,
|
||||
0x9995666bu, 0x99999999u, 0x88888880u, 0x22818108u, 0x88888881u, 0x88888882u, 0x88888884u, 0x88888887u, 0x88888886u, 0x82218108u, 0x82281108u, 0x88888888u, 0x88888883u, 0x88888885u,
|
||||
};
|
||||
uint8_t category = fragment < 128 ? 0 : (utf8_state_info[(fragment >> 3) & 0xf] >> ((fragment & 7) << 2)) & 0xf;
|
||||
codepoint = (state ? (codepoint << 6) | (fragment & 0x3f) : (0xff >> category) & fragment);
|
||||
return state == S_RJCT ? static_cast<unsigned>(S_RJCT) : static_cast<unsigned>((utf8_state_info[category + 16] >> (state << 2)) & 0xf);
|
||||
@ -1971,7 +1971,7 @@ inline const path::string_type& path::native() const
|
||||
#endif
|
||||
}
|
||||
|
||||
const path::value_type* path::c_str() const
|
||||
inline const path::value_type* path::c_str() const
|
||||
{
|
||||
return native().c_str();
|
||||
}
|
||||
@ -3925,13 +3925,13 @@ inline file_status::file_status(file_type ft, perms prms) noexcept
|
||||
{
|
||||
}
|
||||
|
||||
file_status::file_status(const file_status& other) noexcept
|
||||
inline file_status::file_status(const file_status& other) noexcept
|
||||
: _type(other._type)
|
||||
, _perms(other._perms)
|
||||
{
|
||||
}
|
||||
|
||||
file_status::file_status(file_status&& other) noexcept
|
||||
inline file_status::file_status(file_status&& other) noexcept
|
||||
: _type(other._type)
|
||||
, _perms(other._perms)
|
||||
{
|
||||
@ -3940,14 +3940,14 @@ file_status::file_status(file_status&& other) noexcept
|
||||
inline file_status::~file_status() {}
|
||||
|
||||
// assignments:
|
||||
file_status& file_status::operator=(const file_status& rhs) noexcept
|
||||
inline file_status& file_status::operator=(const file_status& rhs) noexcept
|
||||
{
|
||||
_type = rhs._type;
|
||||
_perms = rhs._perms;
|
||||
return *this;
|
||||
}
|
||||
|
||||
file_status& file_status::operator=(file_status&& rhs) noexcept
|
||||
inline file_status& file_status::operator=(file_status&& rhs) noexcept
|
||||
{
|
||||
_type = rhs._type;
|
||||
_perms = rhs._perms;
|
||||
@ -4724,12 +4724,12 @@ inline void recursive_directory_iterator::swap(recursive_directory_iterator& rhs
|
||||
}
|
||||
|
||||
// 30.10.14.2 directory_iterator non-member functions
|
||||
recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept
|
||||
inline recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept
|
||||
{
|
||||
return iter;
|
||||
}
|
||||
|
||||
recursive_directory_iterator end(const recursive_directory_iterator&) noexcept
|
||||
inline recursive_directory_iterator end(const recursive_directory_iterator&) noexcept
|
||||
{
|
||||
return recursive_directory_iterator();
|
||||
}
|
||||
|
@ -31,3 +31,5 @@ if(CMAKE_CXX_COMPILER_ID MATCHES MSVC AND (CMAKE_CXX_COMPILER_VERSION VERSION_EQ
|
||||
target_compile_options(std_filesystem_test PRIVATE "/Zc:__cplusplus")
|
||||
target_compile_definitions(std_filesystem_test PRIVATE USE_STD_FS _CRT_SECURE_NO_WARNINGS)
|
||||
endif()
|
||||
|
||||
add_executable(multifile_test multi1.cpp multi2.cpp ../filesystem.h catch.hpp)
|
||||
|
50
test/multi1.cpp
Normal file
50
test/multi1.cpp
Normal file
@ -0,0 +1,50 @@
|
||||
//---------------------------------------------------------------------------------------
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//---------------------------------------------------------------------------------------
|
||||
#define CATCH_CONFIG_MAIN
|
||||
#include "catch.hpp"
|
||||
|
||||
#include "../filesystem.h"
|
||||
namespace fs = ghc::filesystem;
|
||||
|
||||
// This test and the one in multi2.cpp doesn't actualy test relevant functionality,
|
||||
// it is just used to check that it is possible to include filesystem.h in multiple
|
||||
// source files.
|
||||
TEST_CASE("Multifile-test 1", "[multi]")
|
||||
{
|
||||
CHECK("/usr/local/bin" == fs::path("/usr/local/bin").generic_string());
|
||||
std::string str = "/usr/local/bin";
|
||||
std::u16string u16str = u"/usr/local/bin";
|
||||
std::u32string u32str = U"/usr/local/bin";
|
||||
CHECK(str == fs::path(str.begin(), str.end()));
|
||||
CHECK(str == fs::path(u16str.begin(), u16str.end()));
|
||||
CHECK(str == fs::path(u32str.begin(), u32str.end()));
|
||||
}
|
48
test/multi2.cpp
Normal file
48
test/multi2.cpp
Normal file
@ -0,0 +1,48 @@
|
||||
//---------------------------------------------------------------------------------------
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//---------------------------------------------------------------------------------------
|
||||
#include "catch.hpp"
|
||||
#include "../filesystem.h"
|
||||
namespace fs = ghc::filesystem;
|
||||
|
||||
// This test and the one in multi1.cpp doesn't actualy test relevant functionality,
|
||||
// it is just used to check that it is possible to include filesystem.h in multiple
|
||||
// source files.
|
||||
TEST_CASE("Multifile-test 2", "[multi]")
|
||||
{
|
||||
CHECK("/usr/local/bin" == fs::path("/usr/local/bin").generic_string());
|
||||
std::string str = "/usr/local/bin";
|
||||
std::u16string u16str = u"/usr/local/bin";
|
||||
std::u32string u32str = U"/usr/local/bin";
|
||||
CHECK(str == fs::path(str.begin(), str.end()));
|
||||
CHECK(str == fs::path(u16str.begin(), u16str.end()));
|
||||
CHECK(str == fs::path(u32str.begin(), u32str.end()));
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user