Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- BitSet.cs
- DependentList.cs
- DetailsViewRowCollection.cs
- ListenerElementsCollection.cs
- TemplateField.cs
- rsa.cs
- PackageRelationshipSelector.cs
- BindingExpressionBase.cs
- TextEditorContextMenu.cs
- Signature.cs
- XmlSchemaInferenceException.cs
- SpeechSynthesizer.cs
- WebBrowserContainer.cs
- sqlcontext.cs
- ChangeNode.cs
- PasswordPropertyTextAttribute.cs
- PointLight.cs
- JsonSerializer.cs
- ErrorRuntimeConfig.cs
- ApplicationBuildProvider.cs
- JsonSerializer.cs
- OleDbStruct.cs
- NameValueConfigurationElement.cs
- DbProviderSpecificTypePropertyAttribute.cs
- FontUnitConverter.cs
- WeakReference.cs
- ReadOnlyState.cs
- Geometry3D.cs
- DefaultProxySection.cs
- ViewgenContext.cs
- OuterGlowBitmapEffect.cs
- SegmentInfo.cs
- XmlSerializationGeneratedCode.cs
- XmlDataProvider.cs
- ProfessionalColors.cs
- LOSFormatter.cs
- DataGridViewColumnHeaderCell.cs
- AppDomainEvidenceFactory.cs
- EventSetterHandlerConverter.cs
- CryptoApi.cs
- ITextView.cs
- Rijndael.cs
- RemotingConfiguration.cs
- ObjectConverter.cs
- SecurityRequiresReviewAttribute.cs
- SoapElementAttribute.cs
- Rect3DConverter.cs
- VirtualizedItemProviderWrapper.cs
- FastPropertyAccessor.cs
- LinqDataSourceUpdateEventArgs.cs
- CursorConverter.cs
- WrappedIUnknown.cs
- TypeReference.cs
- ContentControl.cs
- AssociationSet.cs
- SafeRegistryKey.cs
- MetadataItemSerializer.cs
- ReachDocumentPageSerializerAsync.cs
- SqlNotificationEventArgs.cs
- Freezable.cs
- QualifiedCellIdBoolean.cs
- IriParsingElement.cs
- DrawingAttributes.cs
- SkipQueryOptionExpression.cs
- Transactions.cs
- ModifierKeysValueSerializer.cs
- UnsafeNativeMethods.cs
- IList.cs
- XPathChildIterator.cs
- ApplicationSettingsBase.cs
- ProfessionalColorTable.cs
- TabOrder.cs
- ToolStripContentPanelRenderEventArgs.cs
- ViewManager.cs
- EmptyStringExpandableObjectConverter.cs
- ActivityTypeDesigner.xaml.cs
- SRef.cs
- HttpCachePolicy.cs
- TextTreeFixupNode.cs
- Scheduling.cs
- DispatcherEventArgs.cs
- PerformanceCounterManager.cs
- FormCollection.cs
- XsltContext.cs
- ErrorProvider.cs
- ClientConfigurationHost.cs
- Rss20FeedFormatter.cs
- NotifyIcon.cs
- FileRegion.cs
- StyleHelper.cs
- ImpersonateTokenRef.cs
- Peer.cs
- StateBag.cs
- AnimatedTypeHelpers.cs
- ProfileManager.cs
- GeneralTransform.cs
- ConvertersCollection.cs
- ModelUIElement3D.cs
- DistributedTransactionPermission.cs
- AssociationEndMember.cs