Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / IdentifierService.cs / 1599186 / IdentifierService.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; using System.Runtime.CompilerServices; namespace System.Data.Common.Utils.Boolean { ////// Services related to different identifier types for Boolean expressions. /// internal abstract class IdentifierService{ #region Static members internal static readonly IdentifierService Instance = GetIdentifierService(); [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static IdentifierService GetIdentifierService() { Type identifierType = typeof(T_Identifier); if (identifierType.IsGenericType && identifierType.GetGenericTypeDefinition() == typeof(DomainConstraint<,>)) { // initialize a domain constraint literal service Type[] genericArguments = identifierType.GetGenericArguments(); Type variableType = genericArguments[0]; Type elementType = genericArguments[1]; return (IdentifierService )Activator.CreateInstance( typeof(DomainConstraintIdentifierService<,>).MakeGenericType(identifierType, variableType, elementType)); } else { // initialize a generic literal service for all other identifier types return new GenericIdentifierService(); } } #endregion #region Constructors private IdentifierService() { } #endregion #region Service methods /// /// Returns negation of the given literal. /// internal abstract LiteralNegateLiteral(Literal literal); /// /// Creates a new conversion context. /// internal abstract ConversionContextCreateConversionContext(); /// /// Performs local simplification appropriate to the current identifier. /// internal abstract BoolExprLocalSimplify(BoolExpr expression); #endregion private class GenericIdentifierService : IdentifierService { internal override Literal NegateLiteral(Literal literal) { // just invert the sign return new Literal (literal.Term, !literal.IsTermPositive); } internal override ConversionContext CreateConversionContext() { return new GenericConversionContext (); } internal override BoolExpr LocalSimplify(BoolExpr expression) { return expression.Accept(Simplifier .Instance); } } private class DomainConstraintIdentifierService : IdentifierService > { internal override Literal > NegateLiteral(Literal > literal) { // negate the literal by inverting the range, rather than changing the sign // of the literal TermExpr > term = new TermExpr >( literal.Term.Identifier.InvertDomainConstraint()); return new Literal >(term, literal.IsTermPositive); } internal override ConversionContext > CreateConversionContext() { return new DomainConstraintConversionContext (); } internal override BoolExpr > LocalSimplify(BoolExpr > expression) { expression = NegationPusher.EliminateNot (expression); return expression.Accept(Simplifier >.Instance); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; using System.Runtime.CompilerServices; namespace System.Data.Common.Utils.Boolean { ////// Services related to different identifier types for Boolean expressions. /// internal abstract class IdentifierService{ #region Static members internal static readonly IdentifierService Instance = GetIdentifierService(); [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static IdentifierService GetIdentifierService() { Type identifierType = typeof(T_Identifier); if (identifierType.IsGenericType && identifierType.GetGenericTypeDefinition() == typeof(DomainConstraint<,>)) { // initialize a domain constraint literal service Type[] genericArguments = identifierType.GetGenericArguments(); Type variableType = genericArguments[0]; Type elementType = genericArguments[1]; return (IdentifierService )Activator.CreateInstance( typeof(DomainConstraintIdentifierService<,>).MakeGenericType(identifierType, variableType, elementType)); } else { // initialize a generic literal service for all other identifier types return new GenericIdentifierService(); } } #endregion #region Constructors private IdentifierService() { } #endregion #region Service methods /// /// Returns negation of the given literal. /// internal abstract LiteralNegateLiteral(Literal literal); /// /// Creates a new conversion context. /// internal abstract ConversionContextCreateConversionContext(); /// /// Performs local simplification appropriate to the current identifier. /// internal abstract BoolExprLocalSimplify(BoolExpr expression); #endregion private class GenericIdentifierService : IdentifierService { internal override Literal NegateLiteral(Literal literal) { // just invert the sign return new Literal (literal.Term, !literal.IsTermPositive); } internal override ConversionContext CreateConversionContext() { return new GenericConversionContext (); } internal override BoolExpr LocalSimplify(BoolExpr expression) { return expression.Accept(Simplifier .Instance); } } private class DomainConstraintIdentifierService : IdentifierService > { internal override Literal > NegateLiteral(Literal > literal) { // negate the literal by inverting the range, rather than changing the sign // of the literal TermExpr > term = new TermExpr >( literal.Term.Identifier.InvertDomainConstraint()); return new Literal >(term, literal.IsTermPositive); } internal override ConversionContext > CreateConversionContext() { return new DomainConstraintConversionContext (); } internal override BoolExpr > LocalSimplify(BoolExpr > expression) { expression = NegationPusher.EliminateNot (expression); return expression.Accept(Simplifier >.Instance); } } } } // 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
- LicenseException.cs
- RequiredAttributeAttribute.cs
- SafeTokenHandle.cs
- HtmlFormParameterReader.cs
- InvalidOperationException.cs
- GatewayDefinition.cs
- ListViewCommandEventArgs.cs
- TcpTransportManager.cs
- DatatypeImplementation.cs
- VisualStyleRenderer.cs
- SqlExpressionNullability.cs
- MetadataArtifactLoaderCompositeResource.cs
- SequenceDesigner.cs
- NavigationEventArgs.cs
- FacetDescription.cs
- ConfigXmlElement.cs
- ListControlDataBindingHandler.cs
- JapaneseCalendar.cs
- RangeValueProviderWrapper.cs
- DataGridViewCellStyle.cs
- SafeSystemMetrics.cs
- ListControl.cs
- ToolbarAUtomationPeer.cs
- XmlHierarchicalEnumerable.cs
- KeyValueInternalCollection.cs
- WsatServiceCertificate.cs
- ItemDragEvent.cs
- LinqDataSourceStatusEventArgs.cs
- X509WindowsSecurityToken.cs
- HotSpot.cs
- HybridDictionary.cs
- StorageConditionPropertyMapping.cs
- ListItemDetailViewAttribute.cs
- EntityTypeEmitter.cs
- StrokeRenderer.cs
- ValidatingPropertiesEventArgs.cs
- ScrollItemProviderWrapper.cs
- DataTable.cs
- Byte.cs
- HttpCacheParams.cs
- ParallelTimeline.cs
- DbConnectionPoolGroup.cs
- DataExpression.cs
- XmlParserContext.cs
- base64Transforms.cs
- EncodingTable.cs
- DataTableReader.cs
- CapabilitiesSection.cs
- messageonlyhwndwrapper.cs
- ImageFormat.cs
- ConvertEvent.cs
- COM2IVsPerPropertyBrowsingHandler.cs
- SqlMultiplexer.cs
- NameScopePropertyAttribute.cs
- Int32CAMarshaler.cs
- CompressedStack.cs
- WorkflowStateRollbackService.cs
- SelfIssuedAuthProofToken.cs
- TextRangeProviderWrapper.cs
- AnimationStorage.cs
- AtlasWeb.Designer.cs
- XpsTokenContext.cs
- BindingElementCollection.cs
- FileLevelControlBuilderAttribute.cs
- EntityDataSourceDataSelection.cs
- HttpHostedTransportConfiguration.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- SystemMulticastIPAddressInformation.cs
- SecureConversationSecurityTokenParameters.cs
- TagPrefixInfo.cs
- Vector3DValueSerializer.cs
- WindowsSysHeader.cs
- DataGridSortingEventArgs.cs
- ImageSourceValueSerializer.cs
- CompositeCollection.cs
- ListItemConverter.cs
- TextMessageEncoder.cs
- PersonalizableAttribute.cs
- MissingMemberException.cs
- SchemaTableColumn.cs
- ExeConfigurationFileMap.cs
- URLIdentityPermission.cs
- Compiler.cs
- TypeForwardedFromAttribute.cs
- TemplateField.cs
- UInt16.cs
- CompatibleComparer.cs
- MimeTypeMapper.cs
- InvalidOperationException.cs
- WebPartsSection.cs
- sqlnorm.cs
- MetadataSource.cs
- ProxyElement.cs
- TransactionProtocol.cs
- Matrix.cs
- Binding.cs
- CompressedStack.cs
- ListViewCancelEventArgs.cs
- PageTheme.cs
- CodeTypeReferenceSerializer.cs