summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArseny Kapoulkine <arseny.kapoulkine@gmail.com>2016-11-06 11:49:10 -0800
committerArseny Kapoulkine <arseny.kapoulkine@gmail.com>2016-11-06 11:49:10 -0800
commitaa117cce42d75d58e47c8d584fec7ace5693df48 (patch)
tree1ae021c96c50047dd08a767089fb670239dddc13
parentb3fc28d177dc1d5bcf937d3e7add77caff5a34f8 (diff)
Refactor move semantics support detection
Do it in one place and set PUGIXML_HAS_MOVE if it's available.
-rw-r--r--src/pugixml.cpp8
-rw-r--r--src/pugixml.hpp16
-rw-r--r--tests/test_xpath_api.cpp2
-rw-r--r--tests/test_xpath_variables.cpp2
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::xpath_query_impl*>(_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, "<node><foo/><foo/><bar/></node>")
{
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, "<node1 /><node2 />")
CHECK(set2.get(STR("d"))->get_node_set().size() == 2);
}
-#if __cplusplus >= 201103
+#ifdef PUGIXML_HAS_MOVE
TEST_XML(xpath_variables_move, "<node />")
{
xpath_variable_set set;