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
- _ConnectStream.cs
- DynamicPhysicalDiscoSearcher.cs
- AlternateView.cs
- LogicalExpressionTypeConverter.cs
- XmlNodeReader.cs
- HMACSHA512.cs
- StringFunctions.cs
- COM2IDispatchConverter.cs
- XmlQueryContext.cs
- HashAlgorithm.cs
- XmlSchemaSimpleContent.cs
- HttpDebugHandler.cs
- Bitmap.cs
- COM2AboutBoxPropertyDescriptor.cs
- DetailsViewInsertedEventArgs.cs
- XPathMultyIterator.cs
- SiteIdentityPermission.cs
- ToolBarButton.cs
- WindowsUpDown.cs
- DataGridTablesFactory.cs
- StyleHelper.cs
- PrtTicket_Base.cs
- SqlMultiplexer.cs
- WebRequestModulesSection.cs
- AlternateView.cs
- mactripleDES.cs
- Queue.cs
- MethodBody.cs
- CodeNamespaceImportCollection.cs
- externdll.cs
- DataGridViewRowStateChangedEventArgs.cs
- DropSource.cs
- SpeakCompletedEventArgs.cs
- MailAddress.cs
- Panel.cs
- ModelPropertyImpl.cs
- EventQueueState.cs
- GeometryCombineModeValidation.cs
- PrimitiveXmlSerializers.cs
- DesignerActionVerbList.cs
- ListManagerBindingsCollection.cs
- MobileFormsAuthentication.cs
- DateTimeSerializationSection.cs
- SqlClientPermission.cs
- MatrixAnimationUsingKeyFrames.cs
- DrawingState.cs
- DesignerUtils.cs
- DebugControllerThread.cs
- DataServiceHostWrapper.cs
- DisplayMemberTemplateSelector.cs
- StaticSiteMapProvider.cs
- ExpressionBuilderCollection.cs
- ProcessHost.cs
- TimeoutException.cs
- Accessible.cs
- AttributeCollection.cs
- KeyTimeConverter.cs
- NativeMethods.cs
- WebPartDisplayModeEventArgs.cs
- PathParser.cs
- ProfileSettingsCollection.cs
- FixedHighlight.cs
- SslStream.cs
- Function.cs
- CookielessHelper.cs
- ThaiBuddhistCalendar.cs
- GeneralTransform3DGroup.cs
- CacheOutputQuery.cs
- safesecurityhelperavalon.cs
- AssemblyAttributesGoHere.cs
- ParseElementCollection.cs
- UiaCoreApi.cs
- ConfigurationManagerHelperFactory.cs
- WindowCollection.cs
- CompareValidator.cs
- LoginUtil.cs
- DependencyPropertyAttribute.cs
- FileLoadException.cs
- WebServicesSection.cs
- DockProviderWrapper.cs
- ZipArchive.cs
- CodePropertyReferenceExpression.cs
- DataTableTypeConverter.cs
- QueryPageSettingsEventArgs.cs
- PromptEventArgs.cs
- DataServiceQueryProvider.cs
- Rotation3DAnimationUsingKeyFrames.cs
- XhtmlConformanceSection.cs
- DrawingContext.cs
- EndGetFileNameFromUserRequest.cs
- SafeWaitHandle.cs
- XhtmlBasicImageAdapter.cs
- CLSCompliantAttribute.cs
- SecurityManager.cs
- PropertyDescriptorCollection.cs
- CellIdBoolean.cs
- IsolatedStorageFileStream.cs
- FormViewCommandEventArgs.cs
- CodeStatementCollection.cs
- GridViewActionList.cs