From aa117cce42d75d58e47c8d584fec7ace5693df48 Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Sun, 6 Nov 2016 11:49:10 -0800 Subject: Refactor move semantics support detection Do it in one place and set PUGIXML_HAS_MOVE if it's available. --- src/pugixml.cpp | 8 ++++---- src/pugixml.hpp | 16 +++++++++++++--- tests/test_xpath_api.cpp | 2 +- tests/test_xpath_variables.cpp | 2 +- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 4ae10b4..ccf8c4c 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -11923,7 +11923,7 @@ namespace pugi } } -#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +#ifdef PUGIXML_HAS_MOVE PUGI__FN void xpath_node_set::_move(xpath_node_set& rhs) { _type = rhs._type; @@ -11966,7 +11966,7 @@ namespace pugi return *this; } -#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +#ifdef PUGIXML_HAS_MOVE PUGI__FN xpath_node_set::xpath_node_set(xpath_node_set&& rhs): _type(type_unsorted), _begin(&_storage), _end(&_storage) { _move(rhs); @@ -12166,7 +12166,7 @@ namespace pugi return *this; } -#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +#ifdef PUGIXML_HAS_MOVE PUGI__FN xpath_variable_set::xpath_variable_set(xpath_variable_set&& rhs) { for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) @@ -12360,7 +12360,7 @@ namespace pugi impl::xpath_query_impl::destroy(static_cast(_impl)); } -#if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) +#ifdef PUGIXML_HAS_MOVE PUGI__FN xpath_query::xpath_query(xpath_query&& rhs) { _impl = rhs._impl; diff --git a/src/pugixml.hpp b/src/pugixml.hpp index 44ad066..795b391 100644 --- a/src/pugixml.hpp +++ b/src/pugixml.hpp @@ -72,6 +72,16 @@ # endif #endif +// If the platform is known to have move semantics support, compile move ctor/operator implementation +#ifndef PUGIXML_HAS_MOVE +# if __cplusplus >= 201103 +# define PUGIXML_HAS_MOVE +# elif defined(_MSC_VER) && _MSC_VER >= 1800 +# define PUGIXML_HAS_MOVE +# endif +#endif + + // If C++ is 2011 or higher, add 'override' qualifiers #ifndef PUGIXML_OVERRIDE # if __cplusplus >= 201103 @@ -1117,7 +1127,7 @@ namespace pugi xpath_variable_set(const xpath_variable_set& rhs); xpath_variable_set& operator=(const xpath_variable_set& rhs); - #if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) + #ifdef PUGIXML_HAS_MOVE // Move semantics support xpath_variable_set(xpath_variable_set&& rhs); xpath_variable_set& operator=(xpath_variable_set&& rhs); @@ -1161,7 +1171,7 @@ namespace pugi // Destructor ~xpath_query(); - #if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) + #ifdef PUGIXML_HAS_MOVE // Move semantics support xpath_query(xpath_query&& rhs); xpath_query& operator=(xpath_query&& rhs); @@ -1302,7 +1312,7 @@ namespace pugi xpath_node_set(const xpath_node_set& ns); xpath_node_set& operator=(const xpath_node_set& ns); - #if __cplusplus >= 201103 || (defined(_MSC_VER) && _MSC_VER >= 1800) + #ifdef PUGIXML_HAS_MOVE // Move semantics support xpath_node_set(xpath_node_set&& rhs); xpath_node_set& operator=(xpath_node_set&& rhs); diff --git a/tests/test_xpath_api.cpp b/tests/test_xpath_api.cpp index ef7d4b2..9aa1a34 100644 --- a/tests/test_xpath_api.cpp +++ b/tests/test_xpath_api.cpp @@ -418,7 +418,7 @@ TEST(xpath_api_empty) CHECK(!q.evaluate_boolean(c)); } -#if __cplusplus >= 201103 +#ifdef PUGIXML_HAS_MOVE TEST_XML(xpath_api_nodeset_move_ctor, "") { xpath_node_set set = doc.select_nodes(STR("node/bar/preceding::*")); diff --git a/tests/test_xpath_variables.cpp b/tests/test_xpath_variables.cpp index d9603ce..2033a8e 100644 --- a/tests/test_xpath_variables.cpp +++ b/tests/test_xpath_variables.cpp @@ -474,7 +474,7 @@ TEST_XML(xpath_variables_copy_out_of_memory, "") CHECK(set2.get(STR("d"))->get_node_set().size() == 2); } -#if __cplusplus >= 201103 +#ifdef PUGIXML_HAS_MOVE TEST_XML(xpath_variables_move, "") { xpath_variable_set set; -- cgit v1.2.3