Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- MatrixAnimationUsingKeyFrames.cs
- AssociationSetMetadata.cs
- EntityCollection.cs
- ColumnHeaderConverter.cs
- SqlDataSourceRefreshSchemaForm.cs
- EntityObject.cs
- ReadOnlyHierarchicalDataSource.cs
- hebrewshape.cs
- ObjRef.cs
- XmlSignatureProperties.cs
- NativeMethods.cs
- TypeReference.cs
- KnowledgeBase.cs
- IndexedString.cs
- DataStorage.cs
- SqlSupersetValidator.cs
- QilIterator.cs
- DataGridViewRowCancelEventArgs.cs
- SymmetricCryptoHandle.cs
- Partitioner.cs
- NativeMethodsOther.cs
- CollectionViewProxy.cs
- XmlUTF8TextReader.cs
- DeviceContext2.cs
- HtmlElementCollection.cs
- Package.cs
- ErrorRuntimeConfig.cs
- HwndProxyElementProvider.cs
- StylusPlugin.cs
- ChangePassword.cs
- FilterRepeater.cs
- SqlUnionizer.cs
- SetterBase.cs
- WindowsTab.cs
- RightNameExpirationInfoPair.cs
- ToggleButtonAutomationPeer.cs
- SafeNativeMethodsOther.cs
- EntityDataSourceUtil.cs
- DBSqlParserTable.cs
- RegexNode.cs
- WindowHideOrCloseTracker.cs
- DesignerHierarchicalDataSourceView.cs
- AutoGeneratedField.cs
- SyntaxCheck.cs
- RuleSettings.cs
- SizeLimitedCache.cs
- BinaryExpression.cs
- SerializationFieldInfo.cs
- DbDataAdapter.cs
- NavigateEvent.cs
- EntityClientCacheKey.cs
- AutomationPatternInfo.cs
- CurrentChangingEventArgs.cs
- AssertSection.cs
- HtmlInputText.cs
- DataSourceView.cs
- OracleColumn.cs
- BindingListCollectionView.cs
- ControlPaint.cs
- ApplyTemplatesAction.cs
- IList.cs
- Task.cs
- Restrictions.cs
- ResourceAssociationSet.cs
- ObjectConverter.cs
- ClientWindowsAuthenticationMembershipProvider.cs
- UInt32Storage.cs
- NameValueSectionHandler.cs
- ReferenceSchema.cs
- CallSiteHelpers.cs
- DataPagerFieldCommandEventArgs.cs
- UnknownWrapper.cs
- ArrayHelper.cs
- ReturnEventArgs.cs
- HtmlEncodedRawTextWriter.cs
- DBConnectionString.cs
- ReliabilityContractAttribute.cs
- MemoryPressure.cs
- RelationshipDetailsCollection.cs
- XmlnsCache.cs
- EncoderReplacementFallback.cs
- ComponentEditorPage.cs
- TemplateModeChangedEventArgs.cs
- WebConfigurationHostFileChange.cs
- EventSourceCreationData.cs
- NetworkAddressChange.cs
- SoapExtensionTypeElementCollection.cs
- ProtocolReflector.cs
- ToolbarAUtomationPeer.cs
- OletxTransactionHeader.cs
- ThreadExceptionDialog.cs
- WebPartUtil.cs
- DataRelationPropertyDescriptor.cs
- DataSourceCache.cs
- SynchronizedDispatch.cs
- precedingsibling.cs
- ContentTextAutomationPeer.cs
- PrimitiveCodeDomSerializer.cs
- WindowsFormsSectionHandler.cs
- CurrencyManager.cs