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
- Comparer.cs
- IndentedTextWriter.cs
- SingleResultAttribute.cs
- CodeDOMUtility.cs
- StyleHelper.cs
- CustomErrorsSectionWrapper.cs
- EncodingDataItem.cs
- ScriptingRoleServiceSection.cs
- ChildrenQuery.cs
- compensatingcollection.cs
- ScrollProperties.cs
- ConnectionsZone.cs
- UpdateCommandGenerator.cs
- CharacterBuffer.cs
- ElementMarkupObject.cs
- altserialization.cs
- ParameterElement.cs
- VectorAnimationUsingKeyFrames.cs
- Font.cs
- MinMaxParagraphWidth.cs
- ManipulationStartedEventArgs.cs
- PassportAuthenticationModule.cs
- VisualStyleTypesAndProperties.cs
- ClientRuntimeConfig.cs
- NamespaceList.cs
- FontNameConverter.cs
- AdornerDecorator.cs
- ClientRolePrincipal.cs
- SmtpReplyReader.cs
- BookmarkEventArgs.cs
- FontStretch.cs
- DateTimeFormatInfo.cs
- VBIdentifierName.cs
- LongPath.cs
- DoubleLink.cs
- nulltextcontainer.cs
- EntitySqlQueryBuilder.cs
- ValidatorCollection.cs
- SocketInformation.cs
- StaticFileHandler.cs
- _FtpControlStream.cs
- FileStream.cs
- GenericUI.cs
- GenericEnumerator.cs
- SendMailErrorEventArgs.cs
- ApplicationContext.cs
- shaperfactory.cs
- ExpressionNode.cs
- ConfigurationPropertyCollection.cs
- storagemappingitemcollection.viewdictionary.cs
- TextPattern.cs
- DataSourceView.cs
- ADMembershipUser.cs
- GlyphCache.cs
- MSAANativeProvider.cs
- CalendarButton.cs
- FormatException.cs
- DBBindings.cs
- TabControlAutomationPeer.cs
- SQLMoneyStorage.cs
- TableRow.cs
- Image.cs
- ValidateNames.cs
- Registry.cs
- XmlStringTable.cs
- ReadOnlyDataSourceView.cs
- SmiRequestExecutor.cs
- RotateTransform.cs
- ResourceIDHelper.cs
- TextTrailingWordEllipsis.cs
- ApplicationDirectoryMembershipCondition.cs
- TransportManager.cs
- GradientSpreadMethodValidation.cs
- BooleanStorage.cs
- HelloOperation11AsyncResult.cs
- HttpCachePolicyWrapper.cs
- ContextStaticAttribute.cs
- WindowsTokenRoleProvider.cs
- TemplatedMailWebEventProvider.cs
- XmlUtil.cs
- Fonts.cs
- XmlNodeChangedEventManager.cs
- XXXInfos.cs
- XmlSchemaParticle.cs
- Journal.cs
- ChangePassword.cs
- Assembly.cs
- UpDownEvent.cs
- xdrvalidator.cs
- ExpressionDumper.cs
- HtmlInputText.cs
- TTSEngineTypes.cs
- AbstractSvcMapFileLoader.cs
- DataObjectEventArgs.cs
- BindingNavigator.cs
- ConnectionPoolManager.cs
- SystemIPInterfaceProperties.cs
- WebBrowserNavigatingEventHandler.cs
- InputQueue.cs
- BitmapEffectDrawingContent.cs