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
- webeventbuffer.cs
- FlowThrottle.cs
- JobStaple.cs
- QueryOutputWriterV1.cs
- UnsafeNativeMethods.cs
- VirtualPathData.cs
- MethodInfo.cs
- WebPartZoneDesigner.cs
- DBCommand.cs
- MouseOverProperty.cs
- SizeChangedEventArgs.cs
- XPathNodeHelper.cs
- TransformDescriptor.cs
- AuthenticationManager.cs
- TableCell.cs
- ReadOnlyDictionary.cs
- CheckBoxField.cs
- HtmlElementCollection.cs
- DesignerView.Commands.cs
- SoapElementAttribute.cs
- FlowPosition.cs
- DesignerCapabilities.cs
- SizeChangedInfo.cs
- DataServiceHostWrapper.cs
- ISAPIRuntime.cs
- MachineKeyConverter.cs
- Grid.cs
- CellQuery.cs
- DataBoundControl.cs
- PerspectiveCamera.cs
- COM2TypeInfoProcessor.cs
- StreamGeometry.cs
- FactoryId.cs
- DictionaryEditChange.cs
- ListControlBuilder.cs
- ParagraphVisual.cs
- AssemblySettingAttributes.cs
- SoapFault.cs
- BevelBitmapEffect.cs
- DeploymentSection.cs
- CustomGrammar.cs
- DataException.cs
- DesignerDataColumn.cs
- embossbitmapeffect.cs
- WaitHandleCannotBeOpenedException.cs
- DataGridViewAdvancedBorderStyle.cs
- NameObjectCollectionBase.cs
- PropertyValueUIItem.cs
- TypeConverterAttribute.cs
- ApplyImportsAction.cs
- WindowsSolidBrush.cs
- _StreamFramer.cs
- HtmlElementErrorEventArgs.cs
- ImageAutomationPeer.cs
- NativeObjectSecurity.cs
- LinqExpressionNormalizer.cs
- BamlTreeNode.cs
- ProbeDuplex11AsyncResult.cs
- DbConnectionInternal.cs
- LinqDataSource.cs
- DataSourceExpression.cs
- XmlQualifiedNameTest.cs
- SystemIcmpV6Statistics.cs
- ExpressionParser.cs
- DeviceContext2.cs
- TraceUtils.cs
- TextRangeEditLists.cs
- BitStack.cs
- XmlProcessingInstruction.cs
- XmlAttribute.cs
- XmlMembersMapping.cs
- TypedTableBaseExtensions.cs
- ClientRuntimeConfig.cs
- MulticastNotSupportedException.cs
- EntityConnectionStringBuilderItem.cs
- _ConnectStream.cs
- Pkcs9Attribute.cs
- Help.cs
- XmlToDatasetMap.cs
- ScriptResourceHandler.cs
- SqlBulkCopyColumnMapping.cs
- WindowsGraphics2.cs
- MsmqTransportSecurityElement.cs
- AdornerHitTestResult.cs
- ProvidePropertyAttribute.cs
- Int32KeyFrameCollection.cs
- ToolStripItemClickedEventArgs.cs
- SendContent.cs
- IPEndPointCollection.cs
- DbConnectionPoolGroupProviderInfo.cs
- ClientSettingsProvider.cs
- ToolbarAUtomationPeer.cs
- TabControlAutomationPeer.cs
- UrlRoutingHandler.cs
- AccessViolationException.cs
- PassportAuthenticationModule.cs
- IntranetCredentialPolicy.cs
- DelayLoadType.cs
- JavaScriptString.cs
- CheckBoxRenderer.cs