Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Xml / PrefixHandle.cs / 1305376 / PrefixHandle.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.Xml
{
using System.Runtime;
enum PrefixHandleType
{
Empty,
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,
Buffer,
Max,
}
class PrefixHandle
{
XmlBufferReader bufferReader;
PrefixHandleType type;
int offset;
int length;
static string[] prefixStrings = { "", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
static byte[] prefixBuffer = { (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z' };
public PrefixHandle(XmlBufferReader bufferReader)
{
this.bufferReader = bufferReader;
}
public void SetValue(PrefixHandleType type)
{
Fx.Assert(type != PrefixHandleType.Buffer, "");
this.type = type;
}
public void SetValue(PrefixHandle prefix)
{
this.type = prefix.type;
this.offset = prefix.offset;
this.length = prefix.length;
}
public void SetValue(int offset, int length)
{
if (length == 0)
{
SetValue(PrefixHandleType.Empty);
return;
}
if (length == 1)
{
byte ch = bufferReader.GetByte(offset);
if (ch >= 'a' && ch <= 'z')
{
SetValue(GetAlphaPrefix(ch - 'a'));
return;
}
}
this.type = PrefixHandleType.Buffer;
this.offset = offset;
this.length = length;
}
public bool IsEmpty
{
get
{
return type == PrefixHandleType.Empty;
}
}
public bool IsXmlns
{
get
{
if (type != PrefixHandleType.Buffer)
return false;
if (this.length != 5)
return false;
byte[] buffer = bufferReader.Buffer;
int offset = this.offset;
return buffer[offset + 0] == 'x' &&
buffer[offset + 1] == 'm' &&
buffer[offset + 2] == 'l' &&
buffer[offset + 3] == 'n' &&
buffer[offset + 4] == 's';
}
}
public bool IsXml
{
get
{
if (type != PrefixHandleType.Buffer)
return false;
if (this.length != 3)
return false;
byte[] buffer = bufferReader.Buffer;
int offset = this.offset;
return buffer[offset + 0] == 'x' &&
buffer[offset + 1] == 'm' &&
buffer[offset + 2] == 'l';
}
}
public bool TryGetShortPrefix(out PrefixHandleType type)
{
type = this.type;
return (type != PrefixHandleType.Buffer);
}
public static string GetString(PrefixHandleType type)
{
Fx.Assert(type != PrefixHandleType.Buffer, "");
return prefixStrings[(int)type];
}
public static PrefixHandleType GetAlphaPrefix(int index)
{
Fx.Assert(index >= 0 && index < 26, "");
return (PrefixHandleType)(PrefixHandleType.A + index);
}
public static byte[] GetString(PrefixHandleType type, out int offset, out int length)
{
Fx.Assert(type != PrefixHandleType.Buffer, "");
if (type == PrefixHandleType.Empty)
{
offset = 0;
length = 0;
}
else
{
length = 1;
offset = (int)(type - PrefixHandleType.A);
}
return prefixBuffer;
}
public string GetString(XmlNameTable nameTable)
{
PrefixHandleType type = this.type;
if (type != PrefixHandleType.Buffer)
return GetString(type);
else
return bufferReader.GetString(offset, length, nameTable);
}
public string GetString()
{
PrefixHandleType type = this.type;
if (type != PrefixHandleType.Buffer)
return GetString(type);
else
return bufferReader.GetString(offset, length);
}
public byte[] GetString(out int offset, out int length)
{
PrefixHandleType type = this.type;
if (type != PrefixHandleType.Buffer)
return GetString(type, out offset, out length);
else
{
offset = this.offset;
length = this.length;
return bufferReader.Buffer;
}
}
public int CompareTo(PrefixHandle that)
{
return GetString().CompareTo(that.GetString());
}
bool Equals2(PrefixHandle prefix2)
{
PrefixHandleType type1 = this.type;
PrefixHandleType type2 = prefix2.type;
if (type1 != type2)
return false;
if (type1 != PrefixHandleType.Buffer)
return true;
if (this.bufferReader == prefix2.bufferReader)
return bufferReader.Equals2(this.offset, this.length, prefix2.offset, prefix2.length);
else
return bufferReader.Equals2(this.offset, this.length, prefix2.bufferReader, prefix2.offset, prefix2.length);
}
bool Equals2(string prefix2)
{
PrefixHandleType type = this.type;
if (type != PrefixHandleType.Buffer)
return GetString(type) == prefix2;
return bufferReader.Equals2(this.offset, this.length, prefix2);
}
bool Equals2(XmlDictionaryString prefix2)
{
return Equals2(prefix2.Value);
}
static public bool operator ==(PrefixHandle prefix1, string prefix2)
{
return prefix1.Equals2(prefix2);
}
static public bool operator !=(PrefixHandle prefix1, string prefix2)
{
return !prefix1.Equals2(prefix2);
}
static public bool operator ==(PrefixHandle prefix1, XmlDictionaryString prefix2)
{
return prefix1.Equals2(prefix2);
}
static public bool operator !=(PrefixHandle prefix1, XmlDictionaryString prefix2)
{
return !prefix1.Equals2(prefix2);
}
static public bool operator ==(PrefixHandle prefix1, PrefixHandle prefix2)
{
return prefix1.Equals2(prefix2);
}
static public bool operator !=(PrefixHandle prefix1, PrefixHandle prefix2)
{
return !prefix1.Equals2(prefix2);
}
public override bool Equals(object obj)
{
PrefixHandle that = obj as PrefixHandle;
if (object.ReferenceEquals(that, null))
return false;
return this == that;
}
public override string ToString()
{
return GetString();
}
public override int GetHashCode()
{
return GetString().GetHashCode();
}
}
}
// 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
- DataGridViewSelectedColumnCollection.cs
- SqlBuilder.cs
- CodeAttributeDeclaration.cs
- PolicyException.cs
- TargetParameterCountException.cs
- XmlSchemaProviderAttribute.cs
- CallbackValidatorAttribute.cs
- ManipulationStartedEventArgs.cs
- DataViewListener.cs
- ManagedWndProcTracker.cs
- Int16Animation.cs
- SerialReceived.cs
- ObjectListCommandsPage.cs
- ErrorWebPart.cs
- COM2Enum.cs
- RegularExpressionValidator.cs
- IntSecurity.cs
- AndAlso.cs
- PiiTraceSource.cs
- LayoutEditorPart.cs
- wgx_sdk_version.cs
- WindowsListViewItemStartMenu.cs
- ParserContext.cs
- MediaElementAutomationPeer.cs
- PrtCap_Reader.cs
- CodeRegionDirective.cs
- ProtocolsSection.cs
- Padding.cs
- GlobalizationSection.cs
- GridViewCancelEditEventArgs.cs
- IdnElement.cs
- TargetInvocationException.cs
- PasswordBoxAutomationPeer.cs
- RelatedPropertyManager.cs
- ImageListUtils.cs
- XmlAtomicValue.cs
- SHA1.cs
- sqlnorm.cs
- OracleFactory.cs
- RsaSecurityTokenAuthenticator.cs
- DbProviderFactoriesConfigurationHandler.cs
- DetailsViewUpdateEventArgs.cs
- XmlFileEditor.cs
- Line.cs
- documentsequencetextview.cs
- MetabaseReader.cs
- XpsInterleavingPolicy.cs
- Resources.Designer.cs
- StoreContentChangedEventArgs.cs
- OperationContext.cs
- InterleavedZipPartStream.cs
- PriorityItem.cs
- PropertyChangedEventArgs.cs
- NullableDecimalAverageAggregationOperator.cs
- XamlSerializerUtil.cs
- CodeEventReferenceExpression.cs
- httpstaticobjectscollection.cs
- SqlErrorCollection.cs
- OpenTypeLayout.cs
- ValidationRule.cs
- DecimalAnimationUsingKeyFrames.cs
- SqlRetyper.cs
- OSFeature.cs
- ParallelRangeManager.cs
- __Error.cs
- AppDomain.cs
- RequestCachePolicy.cs
- OperandQuery.cs
- SkewTransform.cs
- ConstructorNeedsTagAttribute.cs
- ResXFileRef.cs
- UInt32Converter.cs
- ColumnCollection.cs
- InfoCardTrace.cs
- IncomingWebResponseContext.cs
- Compiler.cs
- CreateDataSourceDialog.cs
- ListViewAutomationPeer.cs
- RepeaterItem.cs
- CaseExpr.cs
- EntityContainerRelationshipSet.cs
- SponsorHelper.cs
- IndentTextWriter.cs
- TableLayoutPanelResizeGlyph.cs
- CookieProtection.cs
- AlphabetConverter.cs
- HttpClientCertificate.cs
- EpmSyndicationContentSerializer.cs
- ApplicationInfo.cs
- RoleService.cs
- GroupLabel.cs
- XmlCharType.cs
- KeyNotFoundException.cs
- AdornerPresentationContext.cs
- ResourceBinder.cs
- XmlPreloadedResolver.cs
- HttpFileCollectionWrapper.cs
- RoutedEvent.cs
- SafeNativeMethods.cs
- RecommendedAsConfigurableAttribute.cs