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
- RemoteCryptoRsaServiceProvider.cs
- PermissionSetEnumerator.cs
- UIElement.cs
- _CommandStream.cs
- ClientScriptManager.cs
- AppearanceEditorPart.cs
- Scene3D.cs
- FormsAuthenticationCredentials.cs
- AssociationSet.cs
- ReflectionUtil.cs
- DocumentsTrace.cs
- Transaction.cs
- ExceptionRoutedEventArgs.cs
- SqlDuplicator.cs
- CommandPlan.cs
- PageParser.cs
- FixedSOMElement.cs
- SuppressIldasmAttribute.cs
- Material.cs
- DefaultHttpHandler.cs
- DescendantQuery.cs
- AutoResizedEvent.cs
- SqlBuffer.cs
- DurableDispatcherAddressingFault.cs
- SafeCryptoHandles.cs
- XmlIterators.cs
- DataGridViewButtonCell.cs
- AesCryptoServiceProvider.cs
- DataObjectAttribute.cs
- Serializer.cs
- FieldInfo.cs
- WebBrowserContainer.cs
- PrintPageEvent.cs
- AssemblyHash.cs
- CodeSnippetStatement.cs
- _SSPIWrapper.cs
- TreeNodeSelectionProcessor.cs
- FormatterConverter.cs
- CheckBoxAutomationPeer.cs
- PartialCachingAttribute.cs
- AnnotationHelper.cs
- ToolStripRenderEventArgs.cs
- HttpConfigurationSystem.cs
- ItemDragEvent.cs
- InputGestureCollection.cs
- AnnotationHelper.cs
- ShutDownListener.cs
- ImageMapEventArgs.cs
- DependencyPropertyHelper.cs
- ReachSerializationUtils.cs
- TextEditorTyping.cs
- ValidatedMobileControlConverter.cs
- EntityParameter.cs
- SHA256Managed.cs
- MenuItem.cs
- TimelineGroup.cs
- Events.cs
- DBAsyncResult.cs
- DiagnosticsConfigurationHandler.cs
- MimeParameter.cs
- SpAudioStreamWrapper.cs
- EntitySetBaseCollection.cs
- UserControlDocumentDesigner.cs
- PrivateFontCollection.cs
- ProjectionPlanCompiler.cs
- ProcessModuleDesigner.cs
- ObjectDataSourceStatusEventArgs.cs
- DependencyObjectType.cs
- DataGrid.cs
- DataTable.cs
- PropertyDescriptor.cs
- DataGridViewElement.cs
- VisemeEventArgs.cs
- ServiceHostingEnvironment.cs
- ToolStripItemImageRenderEventArgs.cs
- HitTestResult.cs
- WebPartAddingEventArgs.cs
- ReflectionServiceProvider.cs
- ErrorReporting.cs
- FlowLayout.cs
- MonthChangedEventArgs.cs
- Binding.cs
- DbDataAdapter.cs
- BoundField.cs
- DtdParser.cs
- OleStrCAMarshaler.cs
- SafeSystemMetrics.cs
- ClientSettings.cs
- AdapterUtil.cs
- BaseAutoFormat.cs
- ReflectEventDescriptor.cs
- Predicate.cs
- CollectionViewSource.cs
- TreeViewAutomationPeer.cs
- LicenseManager.cs
- WorkflowInstanceSuspendedRecord.cs
- PnrpPeerResolver.cs
- RegexParser.cs
- Exception.cs
- SuppressMessageAttribute.cs