예제 #1
0
 public TrwPathBuilder()
 {
     pathStack = new Stack <PathElem>();
     pathStack.Push(new PathElem());
     stringBuilder = new StringBuilder();
     prev          = new PathElem {
         PropName = "LAST"
     };
 }
예제 #2
0
        public void OnRead(ITrwReader reader)
        {
            if (popNext)
            {
                prev    = pathStack.Pop();
                popNext = false;
            }

            switch (reader.TokenType)
            {
            case TrwTokenType.None:
                break;

            case TrwTokenType.StartObject:
                OnStartReadValue();
                prev = new PathElem {
                    PropName = "DUMMY"
                };
                break;

            case TrwTokenType.EndObject:
                popNext = true;
                break;

            case TrwTokenType.StartArray:
                OnStartReadValue();
                prev = new PathElem {
                    ArrayIndex = -1
                };
                break;

            case TrwTokenType.EndArray:
                popNext = true;
                break;

            case TrwTokenType.PropertyName:
                pathStack.Push(new PathElem {
                    PropName = reader.ValueAsString
                });
                break;

            case TrwTokenType.Null:
            case TrwTokenType.Boolean:
            case TrwTokenType.Integer:
            case TrwTokenType.Float:
            case TrwTokenType.String:
                OnStartReadValue();
                popNext = true;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #3
0
 public void OnSkip(ITrwReader reader)
 {
     prev    = pathStack.Pop();
     popNext = false;
     OnRead(reader);
 }