public static HttpInput ParseQueryString(string queryString)
{
if (queryString == null)
throw new ArgumentNullException("queryString");
if (queryString == String.Empty)
return HttpInput.Empty;
int state = 0;
int startpos = 0;
string name = null;
HttpInput input = new HttpInput("QueryString");
for (int i = 0; i < queryString.Length; ++i)
{
int newIndexPos;
if (state == 0 && IsEqual(queryString, ref i, out newIndexPos))
{
name = queryString.Substring(startpos, i - startpos);
i = newIndexPos;
startpos = i + 1;
++state;
}
else if (state == 1 && IsAmp(queryString, ref i, out newIndexPos))
{
Add(input, name, queryString.Substring(startpos, i - startpos));
i = newIndexPos;
startpos = i + 1;
state = 0;
name = null;
}
}
if (state == 0 && !input.GetEnumerator().MoveNext())
Add(input, queryString, String.Empty);
else if (name != null && startpos <= queryString.Length)
Add(input, name, queryString.Substring(startpos, queryString.Length - startpos));
return input;
}