Optimize json parsing (#3480)

This commit is contained in:
ctrlaltca 2018-12-31 01:05:40 +01:00 committed by Zach H
parent 40f787be14
commit 2621cc09ac

View file

@ -1,28 +1,28 @@
/* Copyright 2011 Eeli Reilin. All rights reserved. /* Copyright 2011 Eeli Reilin. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* *
* 1. Redistributions of source code must retain the above copyright notice, * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. * this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright notice, * 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation * this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution. * and/or other materials provided with the distribution.
* *
* THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ''AS IS'' AND ANY EXPRESS OR * THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ''AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL EELI REILIN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * EVENT SHALL EELI REILIN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* The views and conclusions contained in the software and documentation * The views and conclusions contained in the software and documentation
* are those of the authors and should not be interpreted as representing * are those of the authors and should not be interpreted as representing
* official policies, either expressed or implied, of Eeli Reilin. * official policies, either expressed or implied, of Eeli Reilin.
*/ */
@ -503,11 +503,12 @@ QVariant Json::parseNumber(const QString &json, int &index)
*/ */
int Json::lastIndexOfNumber(const QString &json, int index) int Json::lastIndexOfNumber(const QString &json, int index)
{ {
static const QString numericCharacters("0123456789+-.eE");
int lastIndex; int lastIndex;
for(lastIndex = index; lastIndex < json.size(); lastIndex++) for(lastIndex = index; lastIndex < json.size(); lastIndex++)
{ {
if(QString("0123456789+-.eE").indexOf(json[lastIndex]) == -1) if(numericCharacters.indexOf(json[lastIndex]) == -1)
{ {
break; break;
} }
@ -521,9 +522,10 @@ int Json::lastIndexOfNumber(const QString &json, int index)
*/ */
void Json::eatWhitespace(const QString &json, int &index) void Json::eatWhitespace(const QString &json, int &index)
{ {
static const QString whitespaceChars(" \t\n\r");
for(; index < json.size(); index++) for(; index < json.size(); index++)
{ {
if(QString(" \t\n\r").indexOf(json[index]) == -1) if(whitespaceChars.indexOf(json[index]) == -1)
{ {
break; break;
} }