private void ValidateState(FIItemType itemType) { byte validState = StateTable[(byte)itemType, (byte)_state]; if ((validState == 0) || _documentEnded) { FIState oldState = _state; _state = FIState.Error; throw new InvalidOperationException(string.Format("Invalid State [{0}]", oldState.ToString())); } }
private void UpdateState(FIItemType itemType) { switch (itemType) { case FIItemType.StartDocument: _state = FIState.Prolog; break; case FIItemType.EndDocument: _state = FIState.Start; _documentEnded = true; break; case FIItemType.StartElement: _state = FIState.Element; _depth++; break; case FIItemType.EndElement: _depth--; if (_depth == 0) { _state = FIState.Epilog; } else { _state = FIState.Content; } break; case FIItemType.StartAttribute: _state = FIState.Attribute; break; case FIItemType.EndAttribute: _state = FIState.Element; break; case FIItemType.Content: case FIItemType.EncodedContent: if ((_state == FIState.Attribute) || (_state == FIState.AttributeContent)) { _state = FIState.AttributeContent; } else { _state = FIState.Content; } break; } }