diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2018-03-03 17:19:21 +0000 | 
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2018-03-03 17:19:21 +0000 | 
| commit | f409b8a6e8d60e4654b3fe184d8ec6107754f0ac (patch) | |
| tree | 3f870ab3208ea4c4317e6466c7cc5bfa1c0d4187 | |
| parent | We should use make_shared (diff) | |
| download | icespider-f409b8a6e8d60e4654b3fe184d8ec6107754f0ac.tar.bz2 icespider-f409b8a6e8d60e4654b3fe184d8ec6107754f0ac.tar.xz icespider-f409b8a6e8d60e4654b3fe184d8ec6107754f0ac.zip | |
Switch move things to string_view
| -rw-r--r-- | icespider/core/xwwwFormUrlEncoded.cpp | 29 | ||||
| -rw-r--r-- | icespider/core/xwwwFormUrlEncoded.h | 10 | ||||
| -rw-r--r-- | icespider/fcgi/cgiRequestBase.cpp | 22 | ||||
| -rw-r--r-- | icespider/fcgi/cgiRequestBase.h | 3 | 
4 files changed, 34 insertions, 30 deletions
| diff --git a/icespider/core/xwwwFormUrlEncoded.cpp b/icespider/core/xwwwFormUrlEncoded.cpp index 2a65137..655c839 100644 --- a/icespider/core/xwwwFormUrlEncoded.cpp +++ b/icespider/core/xwwwFormUrlEncoded.cpp @@ -4,6 +4,7 @@  #include <Ice/BuiltinSequences.h>  namespace ba = boost::algorithm; +using namespace std::literals;  extern long hextable[]; @@ -71,15 +72,17 @@ namespace IceSpider {  	};  	std::string -	XWwwFormUrlEncoded::urlencode(const std::string & s) +	XWwwFormUrlEncoded::urlencode(const std::string_view & s)  	{  		return urlencode(s.begin(), s.end());  	}  	inline char hexchar(char c) { return c < 10 ? '0' + c : 'a' - 10 + c; } +	template<typename T> +	inline char hexlookup(const T & i) { return hextable[(int)*i]; }  	std::string -	XWwwFormUrlEncoded::urlencode(std::string::const_iterator i, std::string::const_iterator e) +	XWwwFormUrlEncoded::urlencode(std::string_view::const_iterator i, std::string_view::const_iterator e)  	{  		std::string t;  		t.reserve(std::distance(i, e)); @@ -101,23 +104,29 @@ namespace IceSpider {  	}  	std::string -	XWwwFormUrlEncoded::urldecode(std::string::const_iterator i, std::string::const_iterator e) +	XWwwFormUrlEncoded::urldecode(std::string_view::const_iterator i, std::string_view::const_iterator e)  	{  		std::string t;  		t.reserve(std::distance(i, e));  		while (i != e) { -			if (*i == '+') t += ' '; -			else if (*i == '%') { -				t += (16 * hextable[(int)*++i]) + hextable[(int)*++i]; +			switch (*i) { +				case '+': +					t += ' '; +					break; +				case '%': +					t += (16 * hexlookup(i + 1)) + hexlookup(i + 2); +					i += 2; +					break; +				default: +					t += *i;  			} -			else t += *i;  			++i;  		}  		return t;  	}  	void -	XWwwFormUrlEncoded::iterateVars(const KVh & h, ba::split_iterator<std::string::const_iterator> pi) +	XWwwFormUrlEncoded::iterateVars(const KVh & h, ba::split_iterator<std::string_view::const_iterator> pi)  	{  		for (; pi != decltype(pi)(); ++pi) {  			auto eq = std::find(pi->begin(), pi->end(), '='); @@ -131,7 +140,7 @@ namespace IceSpider {  	}  	void -	XWwwFormUrlEncoded::iterateVars(const std::string & input, const KVh & h, const std::string & split) +	XWwwFormUrlEncoded::iterateVars(const std::string_view & input, const KVh & h, const std::string_view & split)  	{  		if (!input.empty()) {  			iterateVars(h, ba::make_split_iterator(input, ba::first_finder(split, ba::is_equal()))); @@ -141,7 +150,7 @@ namespace IceSpider {  	void  	XWwwFormUrlEncoded::iterateVars(const KVh & h)  	{ -		iterateVars(input, h, "&"); +		iterateVars(input, h, "&"sv);  	}  	void diff --git a/icespider/core/xwwwFormUrlEncoded.h b/icespider/core/xwwwFormUrlEncoded.h index 4f6cdae..68f6480 100644 --- a/icespider/core/xwwwFormUrlEncoded.h +++ b/icespider/core/xwwwFormUrlEncoded.h @@ -13,14 +13,14 @@ namespace IceSpider {  			XWwwFormUrlEncoded(std::istream & in);  			void Deserialize(Slicer::ModelPartForRootPtr mp) override; -			DLL_PUBLIC static void iterateVars(const std::string & input, const KVh & h, const std::string & split); +			DLL_PUBLIC static void iterateVars(const std::string_view & input, const KVh & h, const std::string_view & split); -			DLL_PUBLIC static std::string urldecode(std::string::const_iterator s, std::string::const_iterator); -			DLL_PUBLIC static std::string urlencode(std::string::const_iterator s, std::string::const_iterator); -			DLL_PUBLIC static std::string urlencode(const std::string & s); +			DLL_PUBLIC static std::string urldecode(std::string_view::const_iterator s, std::string_view::const_iterator); +			DLL_PUBLIC static std::string urlencode(std::string_view::const_iterator s, std::string_view::const_iterator); +			DLL_PUBLIC static std::string urlencode(const std::string_view & s);  		private: -			static inline void iterateVars(const KVh & h, boost::algorithm::split_iterator<std::string::const_iterator> pi); +			static inline void iterateVars(const KVh & h, boost::algorithm::split_iterator<std::string_view::const_iterator> pi);  			void iterateVars(const KVh & h); diff --git a/icespider/fcgi/cgiRequestBase.cpp b/icespider/fcgi/cgiRequestBase.cpp index 1daab68..73a6770 100644 --- a/icespider/fcgi/cgiRequestBase.cpp +++ b/icespider/fcgi/cgiRequestBase.cpp @@ -9,12 +9,7 @@  #include <formatters.h>  namespace ba = boost::algorithm; - -namespace std { -	ostream & operator<<(ostream & s, const IceSpider::CgiRequestBase::Env & e) { -		return s.write(std::get<0>(e), std::get<1>(e) - std::get<0>(e)); -	} -} +using namespace std::literals;  #define CGI_CONST(NAME) static const std::string_view NAME(#NAME) @@ -38,14 +33,15 @@ namespace IceSpider {  	CgiRequestBase::addenv(const char * const e)  	{  		if (auto eq = strchr(e, '=')) { -			envmap.insert({ std::string_view(e, eq - e), Env(eq + 1, strchr(eq, '\0')) }); +			envmap.insert({ std::string_view(e, eq - e), eq + 1 });  		}  	} +	inline  	std::string -	operator*(const CgiRequestBase::Env & t) +	operator*(const std::string_view & t)  	{ -		return std::string(std::get<0>(t), std::get<1>(t)); +		return std::string(t);  	}  	void @@ -62,15 +58,15 @@ namespace IceSpider {  		auto qs = envmap.find(QUERY_STRING);  		if (qs != envmap.end()) { -			XWwwFormUrlEncoded::iterateVars(*qs->second, [this](auto k, auto v) { +			XWwwFormUrlEncoded::iterateVars(qs->second, [this](auto k, auto v) {  				qsmap.insert({ k, v }); -			}, "&"); +			}, "&"sv);  		}  		auto cs = envmap.find(HTTP_COOKIE);  		if (cs != envmap.end()) { -			XWwwFormUrlEncoded::iterateVars(*cs->second, [this](auto k, auto v) { +			XWwwFormUrlEncoded::iterateVars(cs->second, [this](auto k, auto v) {  				cookiemap.insert({ k, v }); -			}, "; "); +			}, "; "sv);  		}  	} diff --git a/icespider/fcgi/cgiRequestBase.h b/icespider/fcgi/cgiRequestBase.h index 88bdc52..9ccdfe3 100644 --- a/icespider/fcgi/cgiRequestBase.h +++ b/icespider/fcgi/cgiRequestBase.h @@ -15,8 +15,7 @@ namespace IceSpider {  			void initialize();  		public: -			typedef std::tuple<const char * const, const char * const> Env; -			typedef std::map<std::string_view, Env> VarMap; +			typedef std::map<std::string_view, const std::string_view> VarMap;  			const PathElements & getRequestPath() const override;  			PathElements & getRequestPath() override; | 
