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
- DataPagerFieldCommandEventArgs.cs
- NumberAction.cs
- ReachPageContentSerializerAsync.cs
- Size3DConverter.cs
- TextCompositionEventArgs.cs
- CommandPlan.cs
- HttpListenerResponse.cs
- RangeBase.cs
- SqlXml.cs
- SchemaTypeEmitter.cs
- ExternalFile.cs
- StylusPointCollection.cs
- BinaryMessageEncodingElement.cs
- ProxyFragment.cs
- SoapElementAttribute.cs
- Point3DAnimationBase.cs
- SortQuery.cs
- SoapClientMessage.cs
- VectorConverter.cs
- SqlEnums.cs
- StyleCollection.cs
- ProfileProvider.cs
- UIElementAutomationPeer.cs
- SharedPerformanceCounter.cs
- TemplateParser.cs
- DeviceSpecific.cs
- ReadOnlyDataSourceView.cs
- Empty.cs
- KeyGesture.cs
- StackSpiller.Bindings.cs
- DashStyles.cs
- EventMappingSettingsCollection.cs
- EventTrigger.cs
- PackageStore.cs
- ConstructorExpr.cs
- DiscardableAttribute.cs
- Tool.cs
- CqlLexerHelpers.cs
- RawAppCommandInputReport.cs
- WindowVisualStateTracker.cs
- KeyFrames.cs
- PrimarySelectionAdorner.cs
- NavigationExpr.cs
- DatatypeImplementation.cs
- EntityDataSourceState.cs
- XmlHierarchicalDataSourceView.cs
- NetworkStream.cs
- LinkClickEvent.cs
- MetabaseServerConfig.cs
- MemberPath.cs
- NativeCompoundFileAPIs.cs
- ConfigurationSection.cs
- ArrangedElement.cs
- StylusPlugin.cs
- XamlStream.cs
- SQLGuidStorage.cs
- URLMembershipCondition.cs
- DataGridHeaderBorder.cs
- GeometryHitTestResult.cs
- RowType.cs
- WebPartVerbsEventArgs.cs
- ControlCachePolicy.cs
- WebEncodingValidatorAttribute.cs
- XmlObjectSerializerReadContextComplex.cs
- SecurityUtils.cs
- SqlVersion.cs
- EntityDataSourceDataSelectionPanel.cs
- FixedSOMGroup.cs
- BufferedGraphicsManager.cs
- SchemaNamespaceManager.cs
- itemelement.cs
- OleDbConnection.cs
- PreviewPageInfo.cs
- JavaScriptString.cs
- OleDbConnection.cs
- XmlSchemaValidationException.cs
- HandlerFactoryCache.cs
- XmlWrappingReader.cs
- DesignerDataSchemaClass.cs
- XmlSerializer.cs
- SessionEndedEventArgs.cs
- SymmetricAlgorithm.cs
- SqlFlattener.cs
- SortDescription.cs
- DocumentViewerAutomationPeer.cs
- CodeEntryPointMethod.cs
- NamespaceInfo.cs
- WindowInteractionStateTracker.cs
- ModulesEntry.cs
- UserControl.cs
- ObjectFullSpanRewriter.cs
- FormsAuthentication.cs
- AppSettingsExpressionBuilder.cs
- TextComposition.cs
- HiddenFieldPageStatePersister.cs
- KnownIds.cs
- TcpConnectionPoolSettings.cs
- CreateUserErrorEventArgs.cs
- CategoryNameCollection.cs
- XPathSelectionIterator.cs