Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Serialization / System / Xml / ArrayHelper.cs / 2 / ArrayHelper.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Xml { using System; abstract class ArrayHelper{ public TArray[] ReadArray(XmlDictionaryReader reader, TArgument localName, TArgument namespaceUri, int maxArrayLength) { TArray[][] arrays = null; TArray[] array = null; int arrayCount = 0; int totalRead = 0; int count; if (reader.TryGetArrayLength(out count)) { if (count > maxArrayLength) XmlExceptionHelper.ThrowMaxArrayLengthOrMaxItemsQuotaExceeded(reader, maxArrayLength); if (count > XmlDictionaryReader.MaxInitialArrayLength) count = XmlDictionaryReader.MaxInitialArrayLength; } else { count = 32; } while (true) { array = new TArray[count]; int read = 0; while (read < array.Length) { int actual = ReadArray(reader, localName, namespaceUri, array, read, array.Length - read); if (actual == 0) break; read += actual; } if (totalRead > maxArrayLength - read) XmlExceptionHelper.ThrowMaxArrayLengthOrMaxItemsQuotaExceeded(reader, maxArrayLength); totalRead += read; if (read < array.Length || reader.NodeType == XmlNodeType.EndElement) break; if (arrays == null) arrays = new TArray[32][]; arrays[arrayCount++] = array; count = count * 2; } if (totalRead != array.Length || arrayCount > 0) { TArray[] newArray = new TArray[totalRead]; int offset = 0; for (int i = 0; i < arrayCount; i++) { Array.Copy(arrays[i], 0, newArray, offset, arrays[i].Length); offset += arrays[i].Length; } Array.Copy(array, 0, newArray, offset, totalRead - offset); array = newArray; } return array; } public void WriteArray(XmlDictionaryWriter writer, string prefix, TArgument localName, TArgument namespaceUri, XmlDictionaryReader reader) { int count; if (reader.TryGetArrayLength(out count)) count = Math.Min(count, 256); else count = 256; TArray[] array = new TArray[count]; while (true) { int actual = ReadArray(reader, localName, namespaceUri, array, 0, array.Length); if (actual == 0) break; WriteArray(writer, prefix, localName, namespaceUri, array, 0, actual); } } protected abstract int ReadArray(XmlDictionaryReader reader, TArgument localName, TArgument namespaceUri, TArray[] array, int offset, int count); protected abstract void WriteArray(XmlDictionaryWriter writer, string prefix, TArgument localName, TArgument namespaceUri, TArray[] array, int offset, int count); } // Supported array types // bool // Int16 // Int32 // Int64 // Float // Double // Decimal // DateTime // Guid // TimeSpan // Int8 is not supported since sbyte[] is non-cls compliant, and uncommon // UniqueId is not supported since elements may be variable size strings class BooleanArrayHelperWithString : ArrayHelper { static public readonly BooleanArrayHelperWithString Instance = new BooleanArrayHelperWithString(); protected override int ReadArray(XmlDictionaryReader reader, string localName, string namespaceUri, bool[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, string localName, string namespaceUri, bool[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class BooleanArrayHelperWithDictionaryString : ArrayHelper { static public readonly BooleanArrayHelperWithDictionaryString Instance = new BooleanArrayHelperWithDictionaryString(); protected override int ReadArray(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString namespaceUri, bool[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, bool[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class Int16ArrayHelperWithString : ArrayHelper { static public readonly Int16ArrayHelperWithString Instance = new Int16ArrayHelperWithString(); protected override int ReadArray(XmlDictionaryReader reader, string localName, string namespaceUri, Int16[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, string localName, string namespaceUri, Int16[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class Int16ArrayHelperWithDictionaryString : ArrayHelper { static public readonly Int16ArrayHelperWithDictionaryString Instance = new Int16ArrayHelperWithDictionaryString(); protected override int ReadArray(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString namespaceUri, Int16[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, Int16[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class Int32ArrayHelperWithString : ArrayHelper { static public readonly Int32ArrayHelperWithString Instance = new Int32ArrayHelperWithString(); protected override int ReadArray(XmlDictionaryReader reader, string localName, string namespaceUri, Int32[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, string localName, string namespaceUri, Int32[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class Int32ArrayHelperWithDictionaryString : ArrayHelper { static public readonly Int32ArrayHelperWithDictionaryString Instance = new Int32ArrayHelperWithDictionaryString(); protected override int ReadArray(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString namespaceUri, Int32[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, Int32[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class Int64ArrayHelperWithString : ArrayHelper { static public readonly Int64ArrayHelperWithString Instance = new Int64ArrayHelperWithString(); protected override int ReadArray(XmlDictionaryReader reader, string localName, string namespaceUri, Int64[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, string localName, string namespaceUri, Int64[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class Int64ArrayHelperWithDictionaryString : ArrayHelper { static public readonly Int64ArrayHelperWithDictionaryString Instance = new Int64ArrayHelperWithDictionaryString(); protected override int ReadArray(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString namespaceUri, Int64[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, Int64[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class SingleArrayHelperWithString : ArrayHelper { static public readonly SingleArrayHelperWithString Instance = new SingleArrayHelperWithString(); protected override int ReadArray(XmlDictionaryReader reader, string localName, string namespaceUri, float[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, string localName, string namespaceUri, float[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class SingleArrayHelperWithDictionaryString : ArrayHelper { static public readonly SingleArrayHelperWithDictionaryString Instance = new SingleArrayHelperWithDictionaryString(); protected override int ReadArray(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString namespaceUri, float[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, float[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class DoubleArrayHelperWithString : ArrayHelper { static public readonly DoubleArrayHelperWithString Instance = new DoubleArrayHelperWithString(); protected override int ReadArray(XmlDictionaryReader reader, string localName, string namespaceUri, double[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, string localName, string namespaceUri, double[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class DoubleArrayHelperWithDictionaryString : ArrayHelper { static public readonly DoubleArrayHelperWithDictionaryString Instance = new DoubleArrayHelperWithDictionaryString(); protected override int ReadArray(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString namespaceUri, double[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, double[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class DecimalArrayHelperWithString : ArrayHelper { static public readonly DecimalArrayHelperWithString Instance = new DecimalArrayHelperWithString(); protected override int ReadArray(XmlDictionaryReader reader, string localName, string namespaceUri, decimal[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, string localName, string namespaceUri, decimal[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class DecimalArrayHelperWithDictionaryString : ArrayHelper { static public readonly DecimalArrayHelperWithDictionaryString Instance = new DecimalArrayHelperWithDictionaryString(); protected override int ReadArray(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString namespaceUri, decimal[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, decimal[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class DateTimeArrayHelperWithString : ArrayHelper { static public readonly DateTimeArrayHelperWithString Instance = new DateTimeArrayHelperWithString(); protected override int ReadArray(XmlDictionaryReader reader, string localName, string namespaceUri, DateTime[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, string localName, string namespaceUri, DateTime[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class DateTimeArrayHelperWithDictionaryString : ArrayHelper { static public readonly DateTimeArrayHelperWithDictionaryString Instance = new DateTimeArrayHelperWithDictionaryString(); protected override int ReadArray(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString namespaceUri, DateTime[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, DateTime[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class GuidArrayHelperWithString : ArrayHelper { static public readonly GuidArrayHelperWithString Instance = new GuidArrayHelperWithString(); protected override int ReadArray(XmlDictionaryReader reader, string localName, string namespaceUri, Guid[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, string localName, string namespaceUri, Guid[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class GuidArrayHelperWithDictionaryString : ArrayHelper { static public readonly GuidArrayHelperWithDictionaryString Instance = new GuidArrayHelperWithDictionaryString(); protected override int ReadArray(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString namespaceUri, Guid[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, Guid[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class TimeSpanArrayHelperWithString : ArrayHelper { static public readonly TimeSpanArrayHelperWithString Instance = new TimeSpanArrayHelperWithString(); protected override int ReadArray(XmlDictionaryReader reader, string localName, string namespaceUri, TimeSpan[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, string localName, string namespaceUri, TimeSpan[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } class TimeSpanArrayHelperWithDictionaryString : ArrayHelper { static public readonly TimeSpanArrayHelperWithDictionaryString Instance = new TimeSpanArrayHelperWithDictionaryString(); protected override int ReadArray(XmlDictionaryReader reader, XmlDictionaryString localName, XmlDictionaryString namespaceUri, TimeSpan[] array, int offset, int count) { return reader.ReadArray(localName, namespaceUri, array, offset, count); } protected override void WriteArray(XmlDictionaryWriter writer, string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, TimeSpan[] array, int offset, int count) { writer.WriteArray(prefix, localName, namespaceUri, array, offset, count); } } } // 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
- DocumentSchemaValidator.cs
- Encoder.cs
- Bitmap.cs
- AttributeParameterInfo.cs
- SmiGettersStream.cs
- AssociationSetMetadata.cs
- XamlToRtfWriter.cs
- StackSpiller.Temps.cs
- CopyOnWriteList.cs
- FactoryRecord.cs
- DelegatedStream.cs
- FieldToken.cs
- CompilationPass2Task.cs
- TypeConverterAttribute.cs
- ListViewItem.cs
- GrabHandleGlyph.cs
- shaperfactoryquerycachekey.cs
- ArraySet.cs
- arclist.cs
- OracleInternalConnection.cs
- ApplicationGesture.cs
- DataServiceHost.cs
- StreamingContext.cs
- MonitoringDescriptionAttribute.cs
- WebUtil.cs
- RequestSecurityTokenForGetBrowserToken.cs
- IndexedString.cs
- MimeTypePropertyAttribute.cs
- ApplicationId.cs
- JsonEncodingStreamWrapper.cs
- BitStack.cs
- AddInActivator.cs
- ViewCellSlot.cs
- CharEntityEncoderFallback.cs
- CompositeDuplexBindingElementImporter.cs
- BaseTransportHeaders.cs
- QueryableFilterUserControl.cs
- WindowsGrip.cs
- XmlChoiceIdentifierAttribute.cs
- QueryContinueDragEventArgs.cs
- PerformanceCounterLib.cs
- UIElement.cs
- FactoryMaker.cs
- DataColumnPropertyDescriptor.cs
- HttpApplication.cs
- KeyValuePairs.cs
- ShaderEffect.cs
- Track.cs
- ConfigurationManagerHelper.cs
- PathNode.cs
- _SafeNetHandles.cs
- DuplicateWaitObjectException.cs
- SqlConnectionStringBuilder.cs
- StagingAreaInputItem.cs
- ObjectContext.cs
- MarkupExtensionReturnTypeAttribute.cs
- metadatamappinghashervisitor.cs
- InternalMappingException.cs
- Buffer.cs
- CodeDefaultValueExpression.cs
- CacheVirtualItemsEvent.cs
- WorkflowOwnerAsyncResult.cs
- CultureNotFoundException.cs
- Evaluator.cs
- SqlClientFactory.cs
- IIS7UserPrincipal.cs
- FileNotFoundException.cs
- PathGeometry.cs
- IChannel.cs
- DataGridViewCellConverter.cs
- ContourSegment.cs
- Events.cs
- ServiceManagerHandle.cs
- OracleRowUpdatedEventArgs.cs
- FileUpload.cs
- ProfilePropertyNameValidator.cs
- GenericWebPart.cs
- ZipIOExtraFieldPaddingElement.cs
- RightNameExpirationInfoPair.cs
- DataGridBoolColumn.cs
- BaseParser.cs
- SqlSupersetValidator.cs
- XmlAttributeCollection.cs
- SpecularMaterial.cs
- TypeBinaryExpression.cs
- SynchronizationScope.cs
- RightsManagementEncryptedStream.cs
- PagedDataSource.cs
- TableColumn.cs
- ValidationResult.cs
- LinkLabel.cs
- RuleConditionDialog.cs
- SemanticResultValue.cs
- DashStyle.cs
- PassportAuthenticationEventArgs.cs
- DictionaryEntry.cs
- SecurityResources.cs
- RuleSettings.cs
- DllNotFoundException.cs
- SqlAliasesReferenced.cs