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
- ProgressiveCrcCalculatingStream.cs
- DependencyPropertyHelper.cs
- RoleManagerEventArgs.cs
- Line.cs
- RegexCompilationInfo.cs
- FormsAuthenticationCredentials.cs
- InternalPermissions.cs
- SeverityFilter.cs
- ReadOnlyDataSource.cs
- HtmlGenericControl.cs
- InkCollectionBehavior.cs
- X509CertificateInitiatorClientCredential.cs
- CommentEmitter.cs
- PrintPreviewDialog.cs
- PathTooLongException.cs
- HttpApplication.cs
- ProcessInputEventArgs.cs
- PropertyValue.cs
- UnmanagedBitmapWrapper.cs
- RepeatButton.cs
- ProjectedSlot.cs
- DeflateEmulationStream.cs
- Visual.cs
- ResourceDisplayNameAttribute.cs
- Gdiplus.cs
- sqlinternaltransaction.cs
- InProcStateClientManager.cs
- ContextMenu.cs
- GlobalizationSection.cs
- FontStretch.cs
- XmlnsDictionary.cs
- DesigntimeLicenseContext.cs
- Win32SafeHandles.cs
- AuthenticationService.cs
- Track.cs
- QuaternionKeyFrameCollection.cs
- CancellationState.cs
- DataRowView.cs
- DataGridViewCellStyleConverter.cs
- _HeaderInfoTable.cs
- WebPartZoneCollection.cs
- DbUpdateCommandTree.cs
- sqlmetadatafactory.cs
- Guid.cs
- EncodingStreamWrapper.cs
- WebPart.cs
- ProcessDesigner.cs
- ValidationResult.cs
- Directory.cs
- DebuggerAttributes.cs
- METAHEADER.cs
- DBDataPermissionAttribute.cs
- UndirectedGraph.cs
- PeerPresenceInfo.cs
- SymmetricKeyWrap.cs
- MarkedHighlightComponent.cs
- CommandManager.cs
- RemotingException.cs
- NonSerializedAttribute.cs
- Parallel.cs
- RadioButton.cs
- WebPartRestoreVerb.cs
- _IPv4Address.cs
- EntityViewGenerator.cs
- SelectedCellsChangedEventArgs.cs
- DesignRelation.cs
- ObjectFullSpanRewriter.cs
- TypefaceMap.cs
- DatagridviewDisplayedBandsData.cs
- ProxyDataContractResolver.cs
- PkcsUtils.cs
- CompoundFileStorageReference.cs
- StructuralCache.cs
- DataControlFieldHeaderCell.cs
- FixedSOMLineRanges.cs
- WebBrowser.cs
- BindableAttribute.cs
- XsdCachingReader.cs
- Predicate.cs
- EntityParameter.cs
- TimelineClockCollection.cs
- MarginsConverter.cs
- ColorConvertedBitmapExtension.cs
- PersonalizationState.cs
- TypeTypeConverter.cs
- ADConnectionHelper.cs
- SchemaCreator.cs
- CustomErrorsSection.cs
- XmlSchemaObject.cs
- Popup.cs
- SspiSafeHandles.cs
- WorkflowTransactionService.cs
- SourceSwitch.cs
- DelegateBodyWriter.cs
- ComAdminWrapper.cs
- JsonFormatReaderGenerator.cs
- PointLight.cs
- DataGridViewSelectedColumnCollection.cs
- PropertyMapper.cs
- TextElement.cs