Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Xml / StringHandle.cs / 1305376 / StringHandle.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Xml { using System.Runtime; enum StringHandleConstStringType { Type = 0, Root = 1, Item = 2 } class StringHandle { XmlBufferReader bufferReader; StringHandleType type; int key; int offset; int length; static string[] constStrings = { "type", "root", "item" }; public StringHandle(XmlBufferReader bufferReader) { this.bufferReader = bufferReader; SetValue(0, 0); } public void SetValue(int offset, int length) { this.type = StringHandleType.UTF8; this.offset = offset; this.length = length; } public void SetConstantValue(StringHandleConstStringType constStringType) { type = StringHandleType.ConstString; key = (int) constStringType; } public void SetValue(int offset, int length, bool escaped) { this.type = (escaped ? StringHandleType.EscapedUTF8 : StringHandleType.UTF8); this.offset = offset; this.length = length; } public void SetValue(int key) { this.type = StringHandleType.Dictionary; this.key = key; } public void SetValue(StringHandle value) { this.type = value.type; this.key = value.key; this.offset = value.offset; this.length = value.length; } public bool IsEmpty { get { if (type == StringHandleType.UTF8) return length == 0; return Equals2(string.Empty); } } public bool IsXmlns { get { if (type == StringHandleType.UTF8) { 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'; } return Equals2("xmlns"); } } public void ToPrefixHandle(PrefixHandle prefix) { Fx.Assert(type == StringHandleType.UTF8, ""); prefix.SetValue(offset, length); } public string GetString(XmlNameTable nameTable) { StringHandleType type = this.type; if (type == StringHandleType.UTF8) return bufferReader.GetString(offset, length, nameTable); if (type == StringHandleType.Dictionary) return nameTable.Add(bufferReader.GetDictionaryString(key).Value); if (type == StringHandleType.ConstString) return nameTable.Add(constStrings[key]); Fx.Assert(type == StringHandleType.EscapedUTF8, ""); return bufferReader.GetEscapedString(offset, length, nameTable); } public string GetString() { StringHandleType type = this.type; if (type == StringHandleType.UTF8) return bufferReader.GetString(offset, length); if (type == StringHandleType.Dictionary) return bufferReader.GetDictionaryString(key).Value; if (type == StringHandleType.ConstString) return constStrings[key]; Fx.Assert(type == StringHandleType.EscapedUTF8, ""); return bufferReader.GetEscapedString(offset, length); } public byte[] GetString(out int offset, out int length) { StringHandleType type = this.type; if (type == StringHandleType.UTF8) { offset = this.offset; length = this.length; return bufferReader.Buffer; } if (type == StringHandleType.Dictionary) { byte[] buffer = bufferReader.GetDictionaryString(this.key).ToUTF8(); offset = 0; length = buffer.Length; return buffer; } if (type == StringHandleType.ConstString) { byte[] buffer = XmlConverter.ToBytes(constStrings[key]); offset = 0; length = buffer.Length; return buffer; } else { Fx.Assert(type == StringHandleType.EscapedUTF8, ""); byte[] buffer = XmlConverter.ToBytes(bufferReader.GetEscapedString(this.offset, this.length)); offset = 0; length = buffer.Length; return buffer; } } public bool TryGetDictionaryString(out XmlDictionaryString value) { if (type == StringHandleType.Dictionary) { value = bufferReader.GetDictionaryString(key); return true; } else if (IsEmpty) { value = XmlDictionaryString.Empty; return true; } value = null; return false; } public override string ToString() { return GetString(); } bool Equals2(int key2, XmlBufferReader bufferReader2) { StringHandleType type = this.type; if (type == StringHandleType.Dictionary) return bufferReader.Equals2(this.key, key2, bufferReader2); if (type == StringHandleType.UTF8) return bufferReader.Equals2(this.offset, this.length, bufferReader2.GetDictionaryString(key2).Value); Fx.Assert(type == StringHandleType.EscapedUTF8 || type == StringHandleType.ConstString, ""); return GetString() == bufferReader.GetDictionaryString(key2).Value; } bool Equals2(XmlDictionaryString xmlString2) { StringHandleType type = this.type; if (type == StringHandleType.Dictionary) return bufferReader.Equals2(this.key, xmlString2); if (type == StringHandleType.UTF8) return bufferReader.Equals2(this.offset, this.length, xmlString2.ToUTF8()); Fx.Assert(type == StringHandleType.EscapedUTF8 || type == StringHandleType.ConstString, ""); return GetString() == xmlString2.Value; } bool Equals2(string s2) { StringHandleType type = this.type; if (type == StringHandleType.Dictionary) return bufferReader.GetDictionaryString(this.key).Value == s2; if (type == StringHandleType.UTF8) return bufferReader.Equals2(this.offset, this.length, s2); Fx.Assert(type == StringHandleType.EscapedUTF8 || type == StringHandleType.ConstString, ""); return GetString() == s2; } bool Equals2(int offset2, int length2, XmlBufferReader bufferReader2) { StringHandleType type = this.type; if (type == StringHandleType.Dictionary) return bufferReader2.Equals2(offset2, length2, bufferReader.GetDictionaryString(this.key).Value); if (type == StringHandleType.UTF8) return bufferReader.Equals2(this.offset, this.length, bufferReader2, offset2, length2); Fx.Assert(type == StringHandleType.EscapedUTF8 || type == StringHandleType.ConstString, ""); return GetString() == bufferReader.GetString(offset2, length2); } bool Equals2(StringHandle s2) { StringHandleType type = s2.type; if (type == StringHandleType.Dictionary) return Equals2(s2.key, s2.bufferReader); if (type == StringHandleType.UTF8) return Equals2(s2.offset, s2.length, s2.bufferReader); Fx.Assert(type == StringHandleType.EscapedUTF8 || type == StringHandleType.ConstString, ""); return Equals2(s2.GetString()); } static public bool operator ==(StringHandle s1, XmlDictionaryString xmlString2) { return s1.Equals2(xmlString2); } static public bool operator !=(StringHandle s1, XmlDictionaryString xmlString2) { return !s1.Equals2(xmlString2); } static public bool operator ==(StringHandle s1, string s2) { return s1.Equals2(s2); } static public bool operator !=(StringHandle s1, string s2) { return !s1.Equals2(s2); } static public bool operator ==(StringHandle s1, StringHandle s2) { return s1.Equals2(s2); } static public bool operator !=(StringHandle s1, StringHandle s2) { return !s1.Equals2(s2); } public int CompareTo(StringHandle that) { if (this.type == StringHandleType.UTF8 && that.type == StringHandleType.UTF8) return bufferReader.Compare(this.offset, this.length, that.offset, that.length); else return string.Compare(this.GetString(), that.GetString(), StringComparison.Ordinal); } public override bool Equals(object obj) { StringHandle that = obj as StringHandle; if (object.ReferenceEquals(that, null)) return false; return this == that; } public override int GetHashCode() { return GetString().GetHashCode(); } enum StringHandleType { Dictionary, UTF8, EscapedUTF8, ConstString } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Xml { using System.Runtime; enum StringHandleConstStringType { Type = 0, Root = 1, Item = 2 } class StringHandle { XmlBufferReader bufferReader; StringHandleType type; int key; int offset; int length; static string[] constStrings = { "type", "root", "item" }; public StringHandle(XmlBufferReader bufferReader) { this.bufferReader = bufferReader; SetValue(0, 0); } public void SetValue(int offset, int length) { this.type = StringHandleType.UTF8; this.offset = offset; this.length = length; } public void SetConstantValue(StringHandleConstStringType constStringType) { type = StringHandleType.ConstString; key = (int) constStringType; } public void SetValue(int offset, int length, bool escaped) { this.type = (escaped ? StringHandleType.EscapedUTF8 : StringHandleType.UTF8); this.offset = offset; this.length = length; } public void SetValue(int key) { this.type = StringHandleType.Dictionary; this.key = key; } public void SetValue(StringHandle value) { this.type = value.type; this.key = value.key; this.offset = value.offset; this.length = value.length; } public bool IsEmpty { get { if (type == StringHandleType.UTF8) return length == 0; return Equals2(string.Empty); } } public bool IsXmlns { get { if (type == StringHandleType.UTF8) { 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'; } return Equals2("xmlns"); } } public void ToPrefixHandle(PrefixHandle prefix) { Fx.Assert(type == StringHandleType.UTF8, ""); prefix.SetValue(offset, length); } public string GetString(XmlNameTable nameTable) { StringHandleType type = this.type; if (type == StringHandleType.UTF8) return bufferReader.GetString(offset, length, nameTable); if (type == StringHandleType.Dictionary) return nameTable.Add(bufferReader.GetDictionaryString(key).Value); if (type == StringHandleType.ConstString) return nameTable.Add(constStrings[key]); Fx.Assert(type == StringHandleType.EscapedUTF8, ""); return bufferReader.GetEscapedString(offset, length, nameTable); } public string GetString() { StringHandleType type = this.type; if (type == StringHandleType.UTF8) return bufferReader.GetString(offset, length); if (type == StringHandleType.Dictionary) return bufferReader.GetDictionaryString(key).Value; if (type == StringHandleType.ConstString) return constStrings[key]; Fx.Assert(type == StringHandleType.EscapedUTF8, ""); return bufferReader.GetEscapedString(offset, length); } public byte[] GetString(out int offset, out int length) { StringHandleType type = this.type; if (type == StringHandleType.UTF8) { offset = this.offset; length = this.length; return bufferReader.Buffer; } if (type == StringHandleType.Dictionary) { byte[] buffer = bufferReader.GetDictionaryString(this.key).ToUTF8(); offset = 0; length = buffer.Length; return buffer; } if (type == StringHandleType.ConstString) { byte[] buffer = XmlConverter.ToBytes(constStrings[key]); offset = 0; length = buffer.Length; return buffer; } else { Fx.Assert(type == StringHandleType.EscapedUTF8, ""); byte[] buffer = XmlConverter.ToBytes(bufferReader.GetEscapedString(this.offset, this.length)); offset = 0; length = buffer.Length; return buffer; } } public bool TryGetDictionaryString(out XmlDictionaryString value) { if (type == StringHandleType.Dictionary) { value = bufferReader.GetDictionaryString(key); return true; } else if (IsEmpty) { value = XmlDictionaryString.Empty; return true; } value = null; return false; } public override string ToString() { return GetString(); } bool Equals2(int key2, XmlBufferReader bufferReader2) { StringHandleType type = this.type; if (type == StringHandleType.Dictionary) return bufferReader.Equals2(this.key, key2, bufferReader2); if (type == StringHandleType.UTF8) return bufferReader.Equals2(this.offset, this.length, bufferReader2.GetDictionaryString(key2).Value); Fx.Assert(type == StringHandleType.EscapedUTF8 || type == StringHandleType.ConstString, ""); return GetString() == bufferReader.GetDictionaryString(key2).Value; } bool Equals2(XmlDictionaryString xmlString2) { StringHandleType type = this.type; if (type == StringHandleType.Dictionary) return bufferReader.Equals2(this.key, xmlString2); if (type == StringHandleType.UTF8) return bufferReader.Equals2(this.offset, this.length, xmlString2.ToUTF8()); Fx.Assert(type == StringHandleType.EscapedUTF8 || type == StringHandleType.ConstString, ""); return GetString() == xmlString2.Value; } bool Equals2(string s2) { StringHandleType type = this.type; if (type == StringHandleType.Dictionary) return bufferReader.GetDictionaryString(this.key).Value == s2; if (type == StringHandleType.UTF8) return bufferReader.Equals2(this.offset, this.length, s2); Fx.Assert(type == StringHandleType.EscapedUTF8 || type == StringHandleType.ConstString, ""); return GetString() == s2; } bool Equals2(int offset2, int length2, XmlBufferReader bufferReader2) { StringHandleType type = this.type; if (type == StringHandleType.Dictionary) return bufferReader2.Equals2(offset2, length2, bufferReader.GetDictionaryString(this.key).Value); if (type == StringHandleType.UTF8) return bufferReader.Equals2(this.offset, this.length, bufferReader2, offset2, length2); Fx.Assert(type == StringHandleType.EscapedUTF8 || type == StringHandleType.ConstString, ""); return GetString() == bufferReader.GetString(offset2, length2); } bool Equals2(StringHandle s2) { StringHandleType type = s2.type; if (type == StringHandleType.Dictionary) return Equals2(s2.key, s2.bufferReader); if (type == StringHandleType.UTF8) return Equals2(s2.offset, s2.length, s2.bufferReader); Fx.Assert(type == StringHandleType.EscapedUTF8 || type == StringHandleType.ConstString, ""); return Equals2(s2.GetString()); } static public bool operator ==(StringHandle s1, XmlDictionaryString xmlString2) { return s1.Equals2(xmlString2); } static public bool operator !=(StringHandle s1, XmlDictionaryString xmlString2) { return !s1.Equals2(xmlString2); } static public bool operator ==(StringHandle s1, string s2) { return s1.Equals2(s2); } static public bool operator !=(StringHandle s1, string s2) { return !s1.Equals2(s2); } static public bool operator ==(StringHandle s1, StringHandle s2) { return s1.Equals2(s2); } static public bool operator !=(StringHandle s1, StringHandle s2) { return !s1.Equals2(s2); } public int CompareTo(StringHandle that) { if (this.type == StringHandleType.UTF8 && that.type == StringHandleType.UTF8) return bufferReader.Compare(this.offset, this.length, that.offset, that.length); else return string.Compare(this.GetString(), that.GetString(), StringComparison.Ordinal); } public override bool Equals(object obj) { StringHandle that = obj as StringHandle; if (object.ReferenceEquals(that, null)) return false; return this == that; } public override int GetHashCode() { return GetString().GetHashCode(); } enum StringHandleType { Dictionary, UTF8, EscapedUTF8, ConstString } } } // 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
- DataServiceClientException.cs
- TypeResolvingOptionsAttribute.cs
- Itemizer.cs
- HealthMonitoringSection.cs
- ModelTreeEnumerator.cs
- PropertyTabAttribute.cs
- DirectoryNotFoundException.cs
- TextContainer.cs
- UnsafeNativeMethods.cs
- LabelEditEvent.cs
- FolderLevelBuildProviderCollection.cs
- SetIterators.cs
- WindowsSysHeader.cs
- MatrixStack.cs
- XsltContext.cs
- NamespaceCollection.cs
- LocatorPart.cs
- StringSource.cs
- DesignTimeTemplateParser.cs
- StorageMappingFragment.cs
- ScriptingJsonSerializationSection.cs
- MultipleViewProviderWrapper.cs
- ToolboxItem.cs
- parserscommon.cs
- RoutingSection.cs
- ColorAnimationUsingKeyFrames.cs
- UnsafeNativeMethods.cs
- WebPart.cs
- Crypto.cs
- Brush.cs
- TextBoxBase.cs
- XmlQueryRuntime.cs
- ApplicationException.cs
- ParagraphResult.cs
- BackStopAuthenticationModule.cs
- RightsManagementEncryptionTransform.cs
- ExpressionBuilderCollection.cs
- HiddenFieldPageStatePersister.cs
- InvalidEnumArgumentException.cs
- FontResourceCache.cs
- StorageEntityContainerMapping.cs
- DefaultValueConverter.cs
- ProfileSection.cs
- Point4DConverter.cs
- PropertyDescriptorCollection.cs
- ToolStrip.cs
- coordinator.cs
- RecordBuilder.cs
- SoapSchemaImporter.cs
- DecoratedNameAttribute.cs
- WebResourceAttribute.cs
- Decorator.cs
- BreadCrumbTextConverter.cs
- ContextProperty.cs
- LambdaValue.cs
- FormsAuthenticationModule.cs
- RepeaterCommandEventArgs.cs
- TypeProvider.cs
- MergablePropertyAttribute.cs
- FactoryId.cs
- tibetanshape.cs
- MethodBody.cs
- SimpleMailWebEventProvider.cs
- NavigationService.cs
- WorkflowRuntimeServiceElement.cs
- TextSpan.cs
- FixedSOMPage.cs
- GuidelineSet.cs
- UshortList2.cs
- CompositionAdorner.cs
- ContractSearchPattern.cs
- TypeInitializationException.cs
- PolyBezierSegment.cs
- WebPartZoneBase.cs
- DataContractJsonSerializer.cs
- GridEntry.cs
- ResourceAssociationTypeEnd.cs
- ScriptReferenceEventArgs.cs
- LineServices.cs
- IDispatchConstantAttribute.cs
- ControlUtil.cs
- Filter.cs
- GridItemPattern.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- FormViewDeletedEventArgs.cs
- Run.cs
- ParameterBuilder.cs
- ContainerParagraph.cs
- ContainerUtilities.cs
- Menu.cs
- CompositeCollectionView.cs
- PocoEntityKeyStrategy.cs
- CharacterBuffer.cs
- RegistrySecurity.cs
- WebPartConnectionsCancelEventArgs.cs
- WrappedIUnknown.cs
- XmlnsCache.cs
- BitArray.cs
- TableLayoutSettings.cs
- MethodSignatureGenerator.cs