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
- Errors.cs
- RbTree.cs
- XmlLanguage.cs
- TriggerActionCollection.cs
- RegexMatch.cs
- LinqDataSourceSelectEventArgs.cs
- CurrentChangingEventManager.cs
- DelegateTypeInfo.cs
- messageonlyhwndwrapper.cs
- DataGridHeaderBorder.cs
- ToolStripArrowRenderEventArgs.cs
- Normalization.cs
- TypeBuilder.cs
- Rules.cs
- ProfilePropertyNameValidator.cs
- HtmlMeta.cs
- Mutex.cs
- TextRunCacheImp.cs
- SmiRequestExecutor.cs
- DemultiplexingClientMessageFormatter.cs
- ShapingEngine.cs
- DependencyPropertyKey.cs
- XslTransform.cs
- DllNotFoundException.cs
- EntityUtil.cs
- WorkBatch.cs
- ColorKeyFrameCollection.cs
- WebPartConnectVerb.cs
- WebHttpSecurityElement.cs
- SessionEndedEventArgs.cs
- MethodBuilder.cs
- StringConcat.cs
- ValidatorCompatibilityHelper.cs
- SqlUserDefinedTypeAttribute.cs
- RotationValidation.cs
- ArgumentOutOfRangeException.cs
- Path.cs
- ReadOnlyCollectionBuilder.cs
- FormViewInsertedEventArgs.cs
- WebPartVerbsEventArgs.cs
- initElementDictionary.cs
- UnaryExpressionHelper.cs
- StringValidatorAttribute.cs
- PermissionAttributes.cs
- ClientConfigurationSystem.cs
- SrgsText.cs
- InputProcessorProfiles.cs
- ContextMenuStrip.cs
- StyleSelector.cs
- DataGridColumnCollection.cs
- DispatcherExceptionFilterEventArgs.cs
- TypedElement.cs
- SkewTransform.cs
- WebExceptionStatus.cs
- ListViewUpdateEventArgs.cs
- Vector3DConverter.cs
- ConsoleTraceListener.cs
- HandlerFactoryWrapper.cs
- PersonalizablePropertyEntry.cs
- ModulesEntry.cs
- ToolStripCollectionEditor.cs
- InternalTypeHelper.cs
- HttpTransportSecurity.cs
- XmlSchemaChoice.cs
- HtmlAnchor.cs
- XPathSelfQuery.cs
- StateChangeEvent.cs
- ICspAsymmetricAlgorithm.cs
- HttpContextServiceHost.cs
- MemberInfoSerializationHolder.cs
- Timeline.cs
- AdapterSwitches.cs
- WebRequestModulesSection.cs
- EUCJPEncoding.cs
- MenuItemCollection.cs
- ProfileSettings.cs
- Variable.cs
- RootDesignerSerializerAttribute.cs
- DynamicDataExtensions.cs
- SyndicationElementExtensionCollection.cs
- PropertyEmitter.cs
- SqlConnectionManager.cs
- ConnectionStringsSection.cs
- DiagnosticsConfiguration.cs
- TextTreeTextNode.cs
- ConnectionManagementSection.cs
- WebPartConnectionsEventArgs.cs
- XmlExceptionHelper.cs
- CompilerInfo.cs
- SrgsRule.cs
- ToolStripRendererSwitcher.cs
- RSAPKCS1SignatureDeformatter.cs
- VirtualDirectoryMapping.cs
- SqlMethodAttribute.cs
- ConfigUtil.cs
- _AcceptOverlappedAsyncResult.cs
- StickyNoteHelper.cs
- HttpHandlersSection.cs
- X509ChainElement.cs
- PackUriHelper.cs