Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / Xml / System / Xml / Base64Encoder.cs / 2 / Base64Encoder.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System.Text; using System.Diagnostics; namespace System.Xml { internal abstract class Base64Encoder { byte[] leftOverBytes; int leftOverBytesCount; char[] charsLine; internal const int Base64LineSize = 76; internal const int LineSizeInBytes = Base64LineSize/4*3; internal Base64Encoder() { charsLine = new char[Base64LineSize]; } internal abstract void WriteChars( char[] chars, int index, int count ); internal void Encode( byte[] buffer, int index, int count ) { if ( buffer == null ) { throw new ArgumentNullException( "buffer" ); } if ( index < 0 ) { throw new ArgumentOutOfRangeException( "index" ); } if ( count < 0 ) { throw new ArgumentOutOfRangeException( "count" ); } if ( count > buffer.Length - index ) { throw new ArgumentOutOfRangeException( "count" ); } // encode left-over buffer if( leftOverBytesCount > 0 ) { int i = leftOverBytesCount; while ( i < 3 && count > 0 ) { leftOverBytes[i++] = buffer[index++]; count--; } // the total number of buffer we have is less than 3 -> return if ( count == 0 && i < 3 ) { leftOverBytesCount = i; return; } // encode the left-over buffer and write out int leftOverChars = Convert.ToBase64CharArray( leftOverBytes, 0, 3, charsLine, 0 ); WriteChars( charsLine, 0, leftOverChars ); } // store new left-over buffer leftOverBytesCount = count % 3; if ( leftOverBytesCount > 0 ) { count -= leftOverBytesCount; if ( leftOverBytes == null ) { leftOverBytes = new byte[3]; } for( int i = 0; i < leftOverBytesCount; i++ ) { leftOverBytes[i] = buffer[ index + count + i ]; } } // encode buffer in 76 character long chunks int endIndex = index + count; int chunkSize = LineSizeInBytes; while( index < endIndex ) { if ( index + chunkSize > endIndex ) { chunkSize = endIndex - index; } int charCount = Convert.ToBase64CharArray( buffer, index, chunkSize, charsLine, 0 ); WriteChars( charsLine, 0, charCount ); index += chunkSize; } } internal void Flush() { if ( leftOverBytesCount > 0 ) { int leftOverChars = Convert.ToBase64CharArray( leftOverBytes, 0, leftOverBytesCount, charsLine, 0 ); WriteChars( charsLine, 0, leftOverChars ); leftOverBytesCount = 0; } } } internal class XmlRawWriterBase64Encoder : Base64Encoder { XmlRawWriter rawWriter; internal XmlRawWriterBase64Encoder( XmlRawWriter rawWriter ) { this.rawWriter = rawWriter; } internal override void WriteChars( char[] chars, int index, int count ) { rawWriter.WriteRaw( chars, index, count ); } } internal class XmlTextWriterBase64Encoder : Base64Encoder { XmlTextEncoder xmlTextEncoder; internal XmlTextWriterBase64Encoder( XmlTextEncoder xmlTextEncoder ) { this.xmlTextEncoder = xmlTextEncoder; } internal override void WriteChars( char[] chars, int index, int count ) { xmlTextEncoder.WriteRaw( chars, index, count ); } } } // 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
- WSDualHttpBindingCollectionElement.cs
- PathGradientBrush.cs
- DelegatingTypeDescriptionProvider.cs
- NamedPipeHostedTransportConfiguration.cs
- FormClosedEvent.cs
- Currency.cs
- PerformanceCounter.cs
- AttributeData.cs
- SafeMILHandle.cs
- PropertyManager.cs
- HttpApplicationFactory.cs
- StringResourceManager.cs
- ClientProxyGenerator.cs
- TypeHelpers.cs
- SqlDependency.cs
- EpmSyndicationContentDeSerializer.cs
- Int32AnimationBase.cs
- RadioButtonAutomationPeer.cs
- keycontainerpermission.cs
- ListBoxItem.cs
- GridViewColumn.cs
- ServicePointManagerElement.cs
- InternalsVisibleToAttribute.cs
- DLinqColumnProvider.cs
- SqlDuplicator.cs
- RemoveStoryboard.cs
- HandlerWithFactory.cs
- HtmlInputImage.cs
- HostVisual.cs
- NativeMethods.cs
- ExecutionContext.cs
- RTLAwareMessageBox.cs
- EntityDataSourceEntitySetNameItem.cs
- Size3D.cs
- CodeCatchClause.cs
- OutputCacheModule.cs
- Pen.cs
- BindingValueChangedEventArgs.cs
- DataGridViewLinkCell.cs
- ProfileInfo.cs
- LoginViewDesigner.cs
- DataDocumentXPathNavigator.cs
- SortDescription.cs
- TypeConstant.cs
- RootBrowserWindow.cs
- RijndaelManaged.cs
- ImageDrawing.cs
- UnsafeNativeMethods.cs
- InputProcessorProfilesLoader.cs
- XamlTreeBuilder.cs
- TextTreeText.cs
- InvokePatternIdentifiers.cs
- MessageCredentialType.cs
- WMIInterop.cs
- PerfService.cs
- DecimalConstantAttribute.cs
- TextPointerBase.cs
- DbQueryCommandTree.cs
- ResourceReferenceKeyNotFoundException.cs
- AlignmentXValidation.cs
- DataMemberFieldEditor.cs
- ListViewCommandEventArgs.cs
- WinCategoryAttribute.cs
- MediaTimeline.cs
- NamedPermissionSet.cs
- SqlCacheDependencySection.cs
- DateTimeFormatInfoScanner.cs
- MenuRendererStandards.cs
- QueryExpr.cs
- EventSinkHelperWriter.cs
- SqlGatherProducedAliases.cs
- TouchPoint.cs
- EditorZoneBase.cs
- HtmlToClrEventProxy.cs
- SwitchElementsCollection.cs
- ClientConvert.cs
- AddIn.cs
- HttpPostProtocolReflector.cs
- PropertyIDSet.cs
- TransactionTraceIdentifier.cs
- NamedPipeConnectionPoolSettingsElement.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- XmlWrappingReader.cs
- RepeatBehavior.cs
- SoapSchemaExporter.cs
- XmlCountingReader.cs
- ResponseBodyWriter.cs
- GregorianCalendarHelper.cs
- XPathSelectionIterator.cs
- RubberbandSelector.cs
- StyleSelector.cs
- DataControlReference.cs
- CultureInfo.cs
- ToolStripItemClickedEventArgs.cs
- SupportingTokenSpecification.cs
- TextureBrush.cs
- SqlClientWrapperSmiStreamChars.cs
- TextModifier.cs
- ActivatedMessageQueue.cs
- ConsumerConnectionPointCollection.cs