Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Serialization / System / Xml / PrefixHandle.cs / 1 / PrefixHandle.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Xml { using System.Runtime.Serialization; using System.Diagnostics; 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) { DiagnosticUtility.DebugAssert(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) { DiagnosticUtility.DebugAssert(type != PrefixHandleType.Buffer, ""); return prefixStrings[(int)type]; } public static PrefixHandleType GetAlphaPrefix(int index) { DiagnosticUtility.DebugAssert(index >= 0 && index < 26, ""); return (PrefixHandleType)(PrefixHandleType.A + index); } public static byte[] GetString(PrefixHandleType type, out int offset, out int length) { DiagnosticUtility.DebugAssert(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. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StringStorage.cs
- Point3DCollection.cs
- ThreadAttributes.cs
- PropertyChangeTracker.cs
- DataBindingCollection.cs
- ClusterRegistryConfigurationProvider.cs
- ScriptManager.cs
- Scene3D.cs
- WindowsStartMenu.cs
- StateChangeEvent.cs
- GregorianCalendarHelper.cs
- CapabilitiesState.cs
- PrintingPermission.cs
- ObfuscateAssemblyAttribute.cs
- Metafile.cs
- GetRecipientListRequest.cs
- securitymgrsite.cs
- TypeTypeConverter.cs
- TrustManager.cs
- MembershipPasswordException.cs
- ApplicationTrust.cs
- FactoryMaker.cs
- RuleSetReference.cs
- SspiWrapper.cs
- XmlLinkedNode.cs
- dataprotectionpermissionattribute.cs
- Parameter.cs
- BitmapFrame.cs
- StateMachineDesignerPaint.cs
- EncoderParameter.cs
- SplineKeyFrames.cs
- RuntimeHandles.cs
- ScrollChangedEventArgs.cs
- _IPv6Address.cs
- HttpResponseInternalWrapper.cs
- PageParserFilter.cs
- BooleanAnimationBase.cs
- InvalidDocumentContentsException.cs
- PolyBezierSegment.cs
- HtmlShim.cs
- WinFormsSpinner.cs
- CommonXSendMessage.cs
- SqlFactory.cs
- SQLBoolean.cs
- PrimitiveType.cs
- ColorConvertedBitmap.cs
- ParserHooks.cs
- BufferAllocator.cs
- NumberFormatInfo.cs
- SHA384CryptoServiceProvider.cs
- TextDecorationUnitValidation.cs
- WindowsUserNameCachingSecurityTokenAuthenticator.cs
- ListViewItemEventArgs.cs
- MarshalByValueComponent.cs
- OracleRowUpdatingEventArgs.cs
- ParameterInfo.cs
- FrugalMap.cs
- SubpageParagraph.cs
- CharUnicodeInfo.cs
- OperationAbortedException.cs
- SmiEventSink_DeferedProcessing.cs
- XsltQilFactory.cs
- DesignTimeParseData.cs
- EllipticalNodeOperations.cs
- baseaxisquery.cs
- OciHandle.cs
- SQLDoubleStorage.cs
- WebPartMinimizeVerb.cs
- XmlAutoDetectWriter.cs
- ColumnHeader.cs
- StateManagedCollection.cs
- HttpListenerResponse.cs
- XmlCountingReader.cs
- MultidimensionalArrayItemReference.cs
- AttachedAnnotation.cs
- StringReader.cs
- ListSortDescription.cs
- Aggregates.cs
- OracleDataAdapter.cs
- StylusButtonCollection.cs
- StringBuilder.cs
- LineGeometry.cs
- SizeIndependentAnimationStorage.cs
- HierarchicalDataSourceConverter.cs
- ListViewTableCell.cs
- BufferAllocator.cs
- DurableErrorHandler.cs
- PerformanceCounter.cs
- TreeNodeBinding.cs
- SchemaLookupTable.cs
- SafeUserTokenHandle.cs
- DictationGrammar.cs
- XmlLinkedNode.cs
- ConnectionStringsSection.cs
- RoleService.cs
- CodeCatchClause.cs
- DataList.cs
- DataGridColumnCollection.cs
- Int16AnimationBase.cs
- ProcessThreadCollection.cs