diff options
| -rw-r--r-- | src/pugixml.cpp | 17 | ||||
| -rw-r--r-- | src/pugixml.hpp | 2 | ||||
| -rw-r--r-- | tests/test_xpath_api.cpp | 7 | 
3 files changed, 16 insertions, 10 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 1c1b539..fbe13f6 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -11025,7 +11025,7 @@ namespace pugi  	}  #endif -	PUGI__FN void xpath_node_set::_assign(const_iterator begin_, const_iterator end_) +	PUGI__FN void xpath_node_set::_assign(const_iterator begin_, const_iterator end_, type_t type_)  	{  		assert(begin_ <= end_); @@ -11041,6 +11041,7 @@ namespace pugi  			_begin = &_storage;  			_end = &_storage + size_; +			_type = type_;  		}  		else  		{ @@ -11064,6 +11065,7 @@ namespace pugi  			// finalize  			_begin = storage;  			_end = storage + size_; +			_type = type_;  		}  	} @@ -11071,9 +11073,9 @@ namespace pugi  	{  	} -	PUGI__FN xpath_node_set::xpath_node_set(const_iterator begin_, const_iterator end_, type_t type_): _type(type_), _begin(&_storage), _end(&_storage) +	PUGI__FN xpath_node_set::xpath_node_set(const_iterator begin_, const_iterator end_, type_t type_): _type(type_unsorted), _begin(&_storage), _end(&_storage)  	{ -		_assign(begin_, end_); +		_assign(begin_, end_, type_);  	}  	PUGI__FN xpath_node_set::~xpath_node_set() @@ -11081,17 +11083,16 @@ namespace pugi  		if (_begin != &_storage) impl::xml_memory::deallocate(_begin);  	} -	PUGI__FN xpath_node_set::xpath_node_set(const xpath_node_set& ns): _type(ns._type), _begin(&_storage), _end(&_storage) +	PUGI__FN xpath_node_set::xpath_node_set(const xpath_node_set& ns): _type(type_unsorted), _begin(&_storage), _end(&_storage)  	{ -		_assign(ns._begin, ns._end); +		_assign(ns._begin, ns._end, ns._type);  	}  	PUGI__FN xpath_node_set& xpath_node_set::operator=(const xpath_node_set& ns)  	{  		if (this == &ns) return *this; -		 -		_type = ns._type; -		_assign(ns._begin, ns._end); + +		_assign(ns._begin, ns._end, ns._type);  		return *this;  	} diff --git a/src/pugixml.hpp b/src/pugixml.hpp index 02ca86b..b56f66a 100644 --- a/src/pugixml.hpp +++ b/src/pugixml.hpp @@ -1286,7 +1286,7 @@ namespace pugi  		xpath_node* _begin;  		xpath_node* _end; -		void _assign(const_iterator begin, const_iterator end); +		void _assign(const_iterator begin, const_iterator end, type_t type);  	};  #endif diff --git a/tests/test_xpath_api.cpp b/tests/test_xpath_api.cpp index df078a0..4fc5be3 100644 --- a/tests/test_xpath_api.cpp +++ b/tests/test_xpath_api.cpp @@ -381,15 +381,20 @@ TEST_XML(xpath_api_node_set_assign_out_of_memory_preserve, "<node><a/><b/></node  {  	xpath_node_set ns = doc.select_nodes(STR("node/*"));  	CHECK(ns.size() == 2); +	CHECK(ns.type() == xpath_node_set::type_sorted);  	xpath_node_set nsall = doc.select_nodes(STR("//*")); +	nsall.sort(true);  	CHECK(nsall.size() == 3); +	CHECK(nsall.type() == xpath_node_set::type_sorted_reverse);  	test_runner::_memory_fail_threshold = 1;  	CHECK_ALLOC_FAIL(ns = nsall); -	CHECK(ns.size() == 2 && ns[0] == doc.child(STR("node")).child(STR("a")) && ns[1] == doc.child(STR("node")).child(STR("b"))); +	CHECK(ns.size() == 2); +	CHECK(ns.type() == xpath_node_set::type_sorted); +	CHECK(ns[0] == doc.child(STR("node")).child(STR("a")) && ns[1] == doc.child(STR("node")).child(STR("b")));  }  TEST_XML(xpath_api_deprecated_select_single_node, "<node><head/><foo id='1'/><foo/><tail/></node>")  | 
