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
- XslNumber.cs
- DataServiceQueryProvider.cs
- BrowserTree.cs
- KeyEventArgs.cs
- UrlMappingCollection.cs
- DbConnectionPoolGroup.cs
- Material.cs
- AnimationException.cs
- EventMetadata.cs
- KeyValuePairs.cs
- SerialPort.cs
- XmlSchemaChoice.cs
- RuleSettings.cs
- ExtendedPropertyCollection.cs
- IItemContainerGenerator.cs
- GridViewPageEventArgs.cs
- MetaColumn.cs
- WebConfigManager.cs
- MatrixAnimationUsingKeyFrames.cs
- SiteMapHierarchicalDataSourceView.cs
- IndependentAnimationStorage.cs
- DataSourceCacheDurationConverter.cs
- SynchronizingStream.cs
- TreeNodeStyle.cs
- BaseTemplateCodeDomTreeGenerator.cs
- RTLAwareMessageBox.cs
- CharacterString.cs
- ScriptingAuthenticationServiceSection.cs
- AnnotationComponentChooser.cs
- ComNativeDescriptor.cs
- Rules.cs
- _LocalDataStore.cs
- ProjectionCamera.cs
- FileDetails.cs
- COMException.cs
- XamlReaderHelper.cs
- InvokeHandlers.cs
- InvalidateEvent.cs
- ReservationNotFoundException.cs
- XmlSerializationGeneratedCode.cs
- ImageDrawing.cs
- ToolTip.cs
- WebPartConnection.cs
- DetailsViewUpdateEventArgs.cs
- ObjectDataSource.cs
- XhtmlTextWriter.cs
- SmtpClient.cs
- TransactionScope.cs
- ObjectAnimationUsingKeyFrames.cs
- MostlySingletonList.cs
- SystemIPGlobalProperties.cs
- ApplicationException.cs
- RowUpdatedEventArgs.cs
- DataGridViewCellCollection.cs
- RSAPKCS1KeyExchangeFormatter.cs
- ComponentChangedEvent.cs
- Pair.cs
- MultilineStringConverter.cs
- TextLineResult.cs
- ExceptionHandlersDesigner.cs
- MultipleViewPatternIdentifiers.cs
- MimeBasePart.cs
- DependencyPropertyKey.cs
- oledbmetadatacollectionnames.cs
- Transform3DGroup.cs
- IDictionary.cs
- ExpressionBindingCollection.cs
- ScrollPattern.cs
- DbConnectionStringBuilder.cs
- FamilyTypeface.cs
- CodeTypeDeclaration.cs
- DataObjectEventArgs.cs
- DataServiceCollectionOfT.cs
- TextEditorSpelling.cs
- LinearGradientBrush.cs
- CurrentChangedEventManager.cs
- EntityConnection.cs
- ServiceContractDetailViewControl.cs
- SystemKeyConverter.cs
- IWorkflowDebuggerService.cs
- XsdDateTime.cs
- SqlDataAdapter.cs
- URI.cs
- _IPv6Address.cs
- ProcessModelSection.cs
- WebPartMenuStyle.cs
- GeneralTransformCollection.cs
- IsolatedStorageSecurityState.cs
- ErrorTableItemStyle.cs
- PartitionResolver.cs
- RegexCapture.cs
- Wizard.cs
- PeerName.cs
- SQLGuid.cs
- MethodInfo.cs
- OracleDataReader.cs
- WaitForChangedResult.cs
- ItemList.cs
- OpCellTreeNode.cs
- Size.cs