Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / IdentifierService.cs / 1 / 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; 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(); 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; 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(); 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
- TextDecorationLocationValidation.cs
- CodeRemoveEventStatement.cs
- CodeConstructor.cs
- X509SecurityTokenParameters.cs
- Mappings.cs
- HostExecutionContextManager.cs
- TemplateBindingExtensionConverter.cs
- SystemInfo.cs
- ControlPaint.cs
- ComboBox.cs
- _LocalDataStore.cs
- SelectionHighlightInfo.cs
- PaintEvent.cs
- SpotLight.cs
- SiteMapPath.cs
- HtmlInputControl.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- TraceData.cs
- SqlParameter.cs
- CustomPopupPlacement.cs
- TextureBrush.cs
- TextParagraphView.cs
- PropertyIDSet.cs
- ServiceOperationHelpers.cs
- BooleanFacetDescriptionElement.cs
- WebPartDescription.cs
- HtmlInputSubmit.cs
- VerificationAttribute.cs
- PositiveTimeSpanValidator.cs
- StylusPointPropertyId.cs
- GenericIdentity.cs
- Query.cs
- CanonicalizationDriver.cs
- AuthStoreRoleProvider.cs
- ResXResourceSet.cs
- Rect.cs
- XmlResolver.cs
- Vector3DAnimationUsingKeyFrames.cs
- ItemsPanelTemplate.cs
- MaskDescriptors.cs
- SplitterCancelEvent.cs
- TypeDescriptorFilterService.cs
- GacUtil.cs
- SizeAnimation.cs
- DocumentAutomationPeer.cs
- EventArgs.cs
- SqlDataSourceConfigureSortForm.cs
- DateBoldEvent.cs
- DataObject.cs
- NonPrimarySelectionGlyph.cs
- FormatConvertedBitmap.cs
- RelationalExpressions.cs
- ReliableSessionElement.cs
- PropertyPushdownHelper.cs
- TracePayload.cs
- SmtpTransport.cs
- MaterialCollection.cs
- WpfGeneratedKnownProperties.cs
- PageAsyncTaskManager.cs
- TransportOutputChannel.cs
- WebPartsSection.cs
- WebEventTraceProvider.cs
- HelpFileFileNameEditor.cs
- Int16Storage.cs
- NavigationCommands.cs
- ProviderConnectionPoint.cs
- ClientApiGenerator.cs
- CryptoStream.cs
- ColorPalette.cs
- StatusBarPanelClickEvent.cs
- ScriptReferenceEventArgs.cs
- BackStopAuthenticationModule.cs
- EditorPartCollection.cs
- MailMessageEventArgs.cs
- Registry.cs
- Int32Animation.cs
- LoginUtil.cs
- WebPartTransformerCollection.cs
- PolyBezierSegment.cs
- XmlElementAttributes.cs
- MimeMultiPart.cs
- Exceptions.cs
- Tablet.cs
- HwndSourceKeyboardInputSite.cs
- DoubleAnimationBase.cs
- PublisherIdentityPermission.cs
- SmtpSection.cs
- InheritanceAttribute.cs
- IPEndPoint.cs
- IfJoinedCondition.cs
- WmlCommandAdapter.cs
- XPathNodePointer.cs
- WSHttpSecurityElement.cs
- Int64AnimationBase.cs
- DataBindingList.cs
- SplineKeyFrames.cs
- SessionPageStatePersister.cs
- TextChange.cs
- ListBindingConverter.cs
- InkPresenter.cs