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
- TypeDescriptionProviderAttribute.cs
- SemanticValue.cs
- Statements.cs
- DetailsViewPagerRow.cs
- BitmapEffectDrawing.cs
- BitmapSourceSafeMILHandle.cs
- DispatcherExceptionFilterEventArgs.cs
- TaiwanCalendar.cs
- UserControlBuildProvider.cs
- BindableTemplateBuilder.cs
- UIElementParaClient.cs
- MultipleViewProviderWrapper.cs
- WebPartCloseVerb.cs
- ObjectContextServiceProvider.cs
- TraceSection.cs
- SingleConverter.cs
- ImageKeyConverter.cs
- DrawingVisual.cs
- GlobalItem.cs
- SmiRequestExecutor.cs
- TypeInitializationException.cs
- PointAnimationUsingPath.cs
- NetworkCredential.cs
- XmlElement.cs
- NullableBoolConverter.cs
- SafeSecurityHelper.cs
- UrlAuthorizationModule.cs
- ReadOnlyPropertyMetadata.cs
- SapiRecognizer.cs
- DataGridToolTip.cs
- Configuration.cs
- ActionFrame.cs
- AuthenticationConfig.cs
- ElementUtil.cs
- LambdaValue.cs
- mediaeventshelper.cs
- InputMethod.cs
- Pool.cs
- SafeSecurityHandles.cs
- _BasicClient.cs
- WebPartConnectionsCancelVerb.cs
- MachineKeySection.cs
- MonthChangedEventArgs.cs
- BinaryObjectInfo.cs
- IdentityModelStringsVersion1.cs
- PerformanceCountersElement.cs
- WebControl.cs
- PngBitmapEncoder.cs
- BaseDataListActionList.cs
- BitmapDecoder.cs
- TextTreeUndo.cs
- SafeProcessHandle.cs
- StylusButtonCollection.cs
- mediaclock.cs
- DataGridViewTopRowAccessibleObject.cs
- MSAAWinEventWrap.cs
- ContentDisposition.cs
- ProfilePropertySettingsCollection.cs
- BroadcastEventHelper.cs
- TimeSpanMinutesConverter.cs
- PropertyManager.cs
- Avt.cs
- RijndaelManaged.cs
- Aes.cs
- UserControlFileEditor.cs
- WindowsToolbar.cs
- UIElement.cs
- TypeLoadException.cs
- TypeExtension.cs
- FamilyTypeface.cs
- DrawingCollection.cs
- WindowsListViewItemCheckBox.cs
- XMLDiffLoader.cs
- TableParagraph.cs
- CharEnumerator.cs
- EllipticalNodeOperations.cs
- MaskInputRejectedEventArgs.cs
- Icon.cs
- MethodToken.cs
- Collection.cs
- DescriptionAttribute.cs
- TimeSpanStorage.cs
- CodeCastExpression.cs
- _ProxyChain.cs
- DrawToolTipEventArgs.cs
- MouseButton.cs
- FixUpCollection.cs
- EdmItemError.cs
- _ConnectionGroup.cs
- StorageSetMapping.cs
- RTLAwareMessageBox.cs
- DrawingImage.cs
- HwndHostAutomationPeer.cs
- HttpAsyncResult.cs
- CssTextWriter.cs
- XmlIncludeAttribute.cs
- Constraint.cs
- DBNull.cs
- TextAction.cs
- MailDefinition.cs