diff options
| author | arseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640> | 2010-09-14 16:44:13 +0000 | 
|---|---|---|
| committer | arseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640> | 2010-09-14 16:44:13 +0000 | 
| commit | 1a764a3ee2cb4805031faa5ae2692f91f5573d53 (patch) | |
| tree | 1f3a34b409c06b9a04bf2474bd21631c0e48b066 /src | |
| parent | 39ee42f907f9cb7481969db29ca4c78985d65a5a (diff) | |
XPath: evaluate_string refactoring (also fixes setjmp warning on MinGW without breaking DMC/SunCC)
git-svn-id: http://pugixml.googlecode.com/svn/trunk@733 99668b35-9821-0410-8761-19e4c4f06640
Diffstat (limited to 'src')
| -rw-r--r-- | src/pugixml.cpp | 37 | 
1 files changed, 17 insertions, 20 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp index c943f7f..7326dcf 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -9070,37 +9070,34 @@ namespace pugi  		return _root->eval_number(c, sd.stack);  	} -	 -#ifndef PUGIXML_NO_STL -	string_t xpath_query::evaluate_string(const xpath_node& n) const + +	static xpath_string evaluate_string_impl(xpath_ast_node* root, const xpath_node& n, xpath_stack_data& sd)  	{ -		if (!_root) return string_t(); -		 -		xpath_context c(n, 1, 1); -		xpath_stack_data sd; +		if (!root) return xpath_string();  	#ifdef PUGIXML_NO_EXCEPTIONS -		if (setjmp(sd.error_handler)) return string_t(); +		if (setjmp(sd.error_handler)) return xpath_string();  	#endif -		return _root->eval_string(c, sd.stack).c_str(); +		xpath_context c(n, 1, 1); + +		return root->eval_string(c, sd.stack);  	} -#endif -	size_t xpath_query::evaluate_string(char_t* buffer, volatile size_t capacity, const xpath_node& n) const +#ifndef PUGIXML_NO_STL +	string_t xpath_query::evaluate_string(const xpath_node& n) const  	{ -		xpath_context c(n, 1, 1);  		xpath_stack_data sd; -	#ifdef PUGIXML_NO_EXCEPTIONS -		if (setjmp(sd.error_handler)) -		{ -			if (capacity > 0) *buffer = 0; -			return 1; -		} -	#endif +		return evaluate_string_impl(_root, n, sd).c_str(); +	} +#endif + +	size_t xpath_query::evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const +	{ +		xpath_stack_data sd; -		xpath_string r = _root ? _root->eval_string(c, sd.stack) : xpath_string(); +		xpath_string r = evaluate_string_impl(_root, n, sd);  		size_t size = r.length() + 1;  | 
