Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / Xml / System / Xml / Base64Encoder.cs / 1 / 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.
//
// [....]
//-----------------------------------------------------------------------------
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InfoCardTraceRecord.cs
- BuildProviderCollection.cs
- SourceSwitch.cs
- SqlSelectStatement.cs
- QueryCacheManager.cs
- TemplateControlParser.cs
- TdsParser.cs
- EventLogPermissionEntry.cs
- FileDialog.cs
- ResponseStream.cs
- ILGen.cs
- Permission.cs
- DoubleAnimationBase.cs
- JavaScriptSerializer.cs
- BaseDataBoundControl.cs
- DateTimeFormatInfo.cs
- HostExecutionContextManager.cs
- MarkupCompilePass1.cs
- MDIControlStrip.cs
- SecurityTokenSerializer.cs
- XpsImage.cs
- SqlDataSourceFilteringEventArgs.cs
- Helpers.cs
- ResourcesBuildProvider.cs
- QilPatternVisitor.cs
- TextEditorTables.cs
- TimeSpanStorage.cs
- PersonalizationDictionary.cs
- SystemIcons.cs
- CallContext.cs
- XslTransform.cs
- DbConnectionPoolGroupProviderInfo.cs
- ProxyDataContractResolver.cs
- ListViewItemMouseHoverEvent.cs
- CompositeDataBoundControl.cs
- OptimizerPatterns.cs
- HelpProvider.cs
- DateRangeEvent.cs
- StringHandle.cs
- MILUtilities.cs
- HtmlInputPassword.cs
- BaseProcessor.cs
- SiteIdentityPermission.cs
- InstanceHandleReference.cs
- MailSettingsSection.cs
- Types.cs
- LookupNode.cs
- TextServicesManager.cs
- HwndAppCommandInputProvider.cs
- WizardStepBase.cs
- DataGridPagingPage.cs
- DifferencingCollection.cs
- OleTxTransactionInfo.cs
- ExecutionPropertyManager.cs
- AnnotationResourceChangedEventArgs.cs
- Message.cs
- TerminatorSinks.cs
- _CommandStream.cs
- StagingAreaInputItem.cs
- PriorityQueue.cs
- OrthographicCamera.cs
- SelectedDatesCollection.cs
- Debug.cs
- UniqueConstraint.cs
- CancelRequestedQuery.cs
- NonVisualControlAttribute.cs
- CheckBoxRenderer.cs
- XmlDeclaration.cs
- StrongNameUtility.cs
- ClientSection.cs
- webproxy.cs
- UserMapPath.cs
- Model3D.cs
- ComplexBindingPropertiesAttribute.cs
- CurrentTimeZone.cs
- METAHEADER.cs
- RectAnimationUsingKeyFrames.cs
- DeliveryStrategy.cs
- OutputScope.cs
- Color.cs
- BindingContext.cs
- WriterOutput.cs
- GraphicsContainer.cs
- ScriptReferenceEventArgs.cs
- ReadContentAsBinaryHelper.cs
- MouseGestureValueSerializer.cs
- StringReader.cs
- CodeDelegateCreateExpression.cs
- CacheChildrenQuery.cs
- CodeCompiler.cs
- BatchParser.cs
- ToolStripRendererSwitcher.cs
- control.ime.cs
- Stream.cs
- Brush.cs
- SystemResourceHost.cs
- OleDbParameterCollection.cs
- InputLangChangeRequestEvent.cs
- ProfilePropertySettings.cs
- NopReturnReader.cs