Mercurial > pub > ImplabNet
comparison Implab/Formats/Json/JsonReader.cs @ 236:302ca905c19e v2
JsonReader optimizations
| author | cin |
|---|---|
| date | Tue, 21 Nov 2017 14:57:58 +0300 |
| parents | 3e26338eb977 |
| children |
comparison
equal
deleted
inserted
replaced
| 235:b49969a7043c | 236:302ca905c19e |
|---|---|
| 46 m_elementContext = context; | 46 m_elementContext = context; |
| 47 } | 47 } |
| 48 | 48 |
| 49 public bool Move(JsonTokenType token) { | 49 public bool Move(JsonTokenType token) { |
| 50 var next = m_dfa[m_state, (int)token]; | 50 var next = m_dfa[m_state, (int)token]; |
| 51 if (next == AutomatonConst.UNREACHABLE_STATE) | 51 if (next == AutomatonConst.UnreachableState) |
| 52 return false; | 52 return false; |
| 53 m_state = next; | 53 m_state = next; |
| 54 return true; | 54 return true; |
| 55 } | 55 } |
| 56 | 56 |
| 114 readonly JsonScanner m_scanner; | 114 readonly JsonScanner m_scanner; |
| 115 // json starts from the value context and may content even a single literal | 115 // json starts from the value context and may content even a single literal |
| 116 MemberContext m_memberContext = MemberContext.MemberValue; | 116 MemberContext m_memberContext = MemberContext.MemberValue; |
| 117 | 117 |
| 118 JsonElementType m_elementType; | 118 JsonElementType m_elementType; |
| 119 object m_elementValue; | 119 string m_elementValue; |
| 120 string m_memberName = String.Empty; | 120 string m_memberName = String.Empty; |
| 121 | 121 |
| 122 Stack<ParserContext> m_stack = new Stack<ParserContext>(); | 122 Stack<ParserContext> m_stack = new Stack<ParserContext>(); |
| 123 ParserContext m_context = _jsonContext; | 123 ParserContext m_context = _jsonContext; |
| 124 | 124 |
| 150 } | 150 } |
| 151 | 151 |
| 152 /// <summary> | 152 /// <summary> |
| 153 /// Значение элемента. Только для элементов типа <see cref="JsonElementType.Value"/>, для остальных <c>null</c> | 153 /// Значение элемента. Только для элементов типа <see cref="JsonElementType.Value"/>, для остальных <c>null</c> |
| 154 /// </summary> | 154 /// </summary> |
| 155 public object ElementValue { | 155 public string ElementValue { |
| 156 get { return m_elementValue; } | 156 get { return m_elementValue; } |
| 157 } | 157 } |
| 158 | 158 |
| 159 /// <summary> | 159 /// <summary> |
| 160 /// Читает слеюудущий объект из потока | 160 /// Читает слеюудущий объект из потока |
| 211 m_elementType = JsonElementType.Value; | 211 m_elementType = JsonElementType.Value; |
| 212 m_elementValue = tokenValue; | 212 m_elementValue = tokenValue; |
| 213 return true; | 213 return true; |
| 214 case JsonTokenType.Number: | 214 case JsonTokenType.Number: |
| 215 m_elementType = JsonElementType.Value; | 215 m_elementType = JsonElementType.Value; |
| 216 m_elementValue = double.Parse(tokenValue, CultureInfo.InvariantCulture); | 216 m_elementValue = tokenValue; |
| 217 return true; | 217 return true; |
| 218 case JsonTokenType.Literal: | 218 case JsonTokenType.Literal: |
| 219 m_elementType = JsonElementType.Value; | 219 m_elementType = JsonElementType.Value; |
| 220 m_elementValue = ParseLiteral(tokenValue); | 220 m_elementValue = tokenValue == "null" ? null : tokenValue; |
| 221 return true; | 221 return true; |
| 222 case JsonTokenType.NameSeparator: | 222 case JsonTokenType.NameSeparator: |
| 223 m_memberContext = MemberContext.MemberValue; | 223 m_memberContext = MemberContext.MemberValue; |
| 224 break; | 224 break; |
| 225 case JsonTokenType.ValueSeparator: | 225 case JsonTokenType.ValueSeparator: |
