Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Sys / System / IO / compression / OutputBuffer.cs / 1305376 / OutputBuffer.cs
namespace System.IO.Compression { using System.Diagnostics; internal class OutputBuffer { private byte[] byteBuffer; // buffer for storing bytes private int pos; // position private uint bitBuf; // store uncomplete bits private int bitCount; // number of bits in bitBuffer // set the output buffer we will be using internal void UpdateBuffer(byte[] output) { byteBuffer = output; pos = 0; } internal int BytesWritten { get { return pos; } } internal int FreeBytes { get { return byteBuffer.Length - pos; } } internal void WriteUInt16(ushort value) { Debug.Assert(FreeBytes >= 2, "No enough space in output buffer!"); byteBuffer[pos++] = (byte)value; byteBuffer[pos++] = (byte)(value >> 8); } internal void WriteBits(int n, uint bits) { Debug.Assert(n <= 16, "length must be larger than 16!"); bitBuf |= bits << bitCount; bitCount += n; if (bitCount >= 16) { Debug.Assert(byteBuffer.Length - pos >= 2, "No enough space in output buffer!"); byteBuffer[pos++] = unchecked((byte)bitBuf); byteBuffer[pos++] = unchecked((byte)(bitBuf >> 8)); bitCount -= 16; bitBuf >>= 16; } } // write the bits left in the output as bytes. internal void FlushBits() { // flush bits from bit buffer to output buffer while (bitCount >= 8) { byteBuffer[pos++] = unchecked((byte)bitBuf); bitCount -= 8; bitBuf >>= 8; } if (bitCount > 0) { byteBuffer[pos++] = unchecked((byte)bitBuf); bitBuf = 0; bitCount = 0; } } internal void WriteBytes(byte[] byteArray, int offset, int count) { Debug.Assert(FreeBytes >= count, "Not enough space in output buffer!"); // faster if (bitCount == 0) { Array.Copy(byteArray, offset, byteBuffer, pos, count); pos += count; } else { WriteBytesUnaligned(byteArray, offset, count); } } private void WriteBytesUnaligned(byte[] byteArray, int offset, int count) { for (int i = 0; i < count; i++) { byte b = byteArray[offset + i]; WriteByteUnaligned(b); } } private void WriteByteUnaligned(byte b) { WriteBits(8, b); } internal int BitsInBuffer { get { return (bitCount / 8) + 1; } } internal OutputBuffer.BufferState DumpState() { OutputBuffer.BufferState savedState; savedState.pos = pos; savedState.bitBuf = bitBuf; savedState.bitCount = bitCount; return savedState; } internal void RestoreState(OutputBuffer.BufferState state) { pos = state.pos; bitBuf = state.bitBuf; bitCount = state.bitCount; } internal struct BufferState { internal int pos; // position internal uint bitBuf; // store uncomplete bits internal int bitCount; // number of bits in bitBuffer } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DbSource.cs
- ConfigXmlCDataSection.cs
- RestHandlerFactory.cs
- DefaultParameterValueAttribute.cs
- ObservableCollectionDefaultValueFactory.cs
- HtmlInputButton.cs
- ADMembershipUser.cs
- VectorCollectionConverter.cs
- MatrixAnimationUsingKeyFrames.cs
- BadImageFormatException.cs
- DispatcherHookEventArgs.cs
- DocumentXPathNavigator.cs
- MimeObjectFactory.cs
- ConfigurationLoader.cs
- PathFigureCollection.cs
- DbReferenceCollection.cs
- tooltip.cs
- HttpRuntime.cs
- Variant.cs
- PrintPreviewGraphics.cs
- KeyProperty.cs
- PathSegment.cs
- HttpClientCertificate.cs
- RegexRunner.cs
- Command.cs
- SimpleHandlerFactory.cs
- SqlClientMetaDataCollectionNames.cs
- LineMetrics.cs
- FontCollection.cs
- ForAllOperator.cs
- EntitySetBaseCollection.cs
- Single.cs
- WebSysDescriptionAttribute.cs
- PingOptions.cs
- ParseElementCollection.cs
- LocatorGroup.cs
- HttpDebugHandler.cs
- WebPartEventArgs.cs
- Baml2006Reader.cs
- Application.cs
- EntityRecordInfo.cs
- AudioDeviceOut.cs
- SqlProvider.cs
- SiteMembershipCondition.cs
- XmlAttributeAttribute.cs
- ProgressiveCrcCalculatingStream.cs
- MexHttpsBindingElement.cs
- HttpModuleCollection.cs
- BitmapInitialize.cs
- SelectionPatternIdentifiers.cs
- WorkflowInstanceProvider.cs
- XmlSchemaChoice.cs
- DetailsViewModeEventArgs.cs
- BinaryParser.cs
- Dictionary.cs
- EntityConnection.cs
- HTMLTagNameToTypeMapper.cs
- DecryptedHeader.cs
- LookupNode.cs
- ManipulationPivot.cs
- DataGridViewRowsAddedEventArgs.cs
- DebugControllerThread.cs
- ConsumerConnectionPoint.cs
- TryCatch.cs
- _NegotiateClient.cs
- TypefaceCollection.cs
- Resources.Designer.cs
- LayoutEvent.cs
- DataColumnMapping.cs
- BinaryObjectReader.cs
- AlternateViewCollection.cs
- HtmlImage.cs
- ClipboardProcessor.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- DataGridViewCellValueEventArgs.cs
- DateTimeUtil.cs
- SystemColorTracker.cs
- SapiRecognizer.cs
- DataGridViewSelectedColumnCollection.cs
- Rect3D.cs
- StatusBar.cs
- EntityDesignerBuildProvider.cs
- EventListener.cs
- ProfileService.cs
- HasCopySemanticsAttribute.cs
- HttpListenerPrefixCollection.cs
- SizeConverter.cs
- TypeLibConverter.cs
- AxisAngleRotation3D.cs
- TransformerTypeCollection.cs
- ColumnResult.cs
- listviewsubitemcollectioneditor.cs
- Boolean.cs
- OSEnvironmentHelper.cs
- ValidatorCompatibilityHelper.cs
- XamlBuildTaskServices.cs
- EnumerableCollectionView.cs
- WhiteSpaceTrimStringConverter.cs
- TreeViewImageKeyConverter.cs
- Size3D.cs