public override int ReadElementContentAsBinHex(byte[] buffer, int index, int count) { // check arguments if (buffer == null) { throw new ArgumentNullException("buffer"); } if (count < 0) { throw new ArgumentOutOfRangeException("count"); } if (index < 0) { throw new ArgumentOutOfRangeException("index"); } if (buffer.Length - index < count) { throw new ArgumentOutOfRangeException("count"); } if (ReadState != ReadState.Interactive) { return(0); } if (_state != State.InReadBinary) { // forward ReadBinHexChunk calls into the base (wrapped) reader if possible, i.e. if it can read chunks and we // should not check characters if (base.CanReadBinaryContent && (!_checkCharacters)) { _readBinaryHelper = null; _state = State.InReadBinary; return(base.ReadElementContentAsBinHex(buffer, index, count)); } // the wrapped reader cannot read chunks or we are on an element where we should check characters or ignore white spaces else { _readBinaryHelper = ReadContentAsBinaryHelper.CreateOrReset(_readBinaryHelper, this); } } else { // forward calls into wrapped reader if (_readBinaryHelper == null) { return(base.ReadElementContentAsBinHex(buffer, index, count)); } } // turn off InReadBinary state in order to have a normal Read() behavior when called from readBinaryHelper _state = State.Interactive; // call to the helper int readCount = _readBinaryHelper.ReadElementContentAsBinHex(buffer, index, count); // turn on InReadBinary in again and return _state = State.InReadBinary; return(readCount); }
public override int ReadElementContentAsBinHex(byte[] buffer, int index, int count) { if (ReadState != ReadState.Interactive) { return(0); } // init ReadChunkHelper when called first time if (_parsingFunction != ParsingFunction.InReadBinaryContent) { _readBinaryHelper = ReadContentAsBinaryHelper.CreateOrReset(_readBinaryHelper, _outerReader); } // set parsingFunction to Read state in order to have a normal Read() behavior when called from readBinaryHelper _parsingFunction = ParsingFunction.Read; // call to the helper int readCount = _readBinaryHelper.ReadElementContentAsBinHex(buffer, index, count); // setup parsingFunction _parsingFunction = ParsingFunction.InReadBinaryContent; return(readCount); }