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
- CodeDelegateCreateExpression.cs
- CryptographicAttribute.cs
- HandledEventArgs.cs
- PeerChannelListener.cs
- autovalidator.cs
- XmlMapping.cs
- VariableDesigner.xaml.cs
- SuppressMessageAttribute.cs
- SafeFileHandle.cs
- AdapterUtil.cs
- CheckBox.cs
- MetadataHelper.cs
- KnownTypes.cs
- AliasedExpr.cs
- WasHttpModulesInstallComponent.cs
- BitmapImage.cs
- MsmqOutputSessionChannel.cs
- URLMembershipCondition.cs
- RegionData.cs
- FileInfo.cs
- BaseDataBoundControl.cs
- ImpersonationContext.cs
- ImageFormat.cs
- CodeTypeParameterCollection.cs
- Simplifier.cs
- NGCSerializationManager.cs
- HtmlEncodedRawTextWriter.cs
- TemplatedWizardStep.cs
- FixedDSBuilder.cs
- InkCanvas.cs
- DataMisalignedException.cs
- StylusPointPropertyId.cs
- Point3DCollectionValueSerializer.cs
- Quaternion.cs
- CodeTypeConstructor.cs
- DoubleLinkList.cs
- TaskHelper.cs
- BrowserCapabilitiesFactory.cs
- HostExecutionContextManager.cs
- BlockUIContainer.cs
- SymbolTable.cs
- EmbeddedObject.cs
- PageClientProxyGenerator.cs
- KnownTypesProvider.cs
- AncestorChangedEventArgs.cs
- ContextBase.cs
- ObjectStateManagerMetadata.cs
- CompilerScopeManager.cs
- GeneralTransform3DTo2DTo3D.cs
- WebReferencesBuildProvider.cs
- StaticExtensionConverter.cs
- EncodingNLS.cs
- UrlAuthFailureHandler.cs
- RijndaelManagedTransform.cs
- WindowHideOrCloseTracker.cs
- ControlValuePropertyAttribute.cs
- AudioFormatConverter.cs
- LocatorPart.cs
- ElementAction.cs
- StringCollectionMarkupSerializer.cs
- PageCopyCount.cs
- WmlLinkAdapter.cs
- DrawingAttributes.cs
- WsrmFault.cs
- ClientSection.cs
- RijndaelManagedTransform.cs
- ClientBuildManager.cs
- ChangeTracker.cs
- LocalClientSecuritySettingsElement.cs
- Registration.cs
- ChannelListenerBase.cs
- DateTimeAutomationPeer.cs
- WebPartHelpVerb.cs
- ConfigurationPropertyCollection.cs
- GCHandleCookieTable.cs
- UriSectionData.cs
- XmlArrayItemAttributes.cs
- HuffmanTree.cs
- SchemaCompiler.cs
- DES.cs
- LoggedException.cs
- DesignerCategoryAttribute.cs
- HashMembershipCondition.cs
- CompilerGlobalScopeAttribute.cs
- LowerCaseStringConverter.cs
- DataBindingHandlerAttribute.cs
- WindowsListView.cs
- XhtmlConformanceSection.cs
- CacheModeValueSerializer.cs
- Style.cs
- FixedPageStructure.cs
- XamlSerializer.cs
- EventBuilder.cs
- DataListCommandEventArgs.cs
- HierarchicalDataBoundControlAdapter.cs
- NonVisualControlAttribute.cs
- TextRangeEdit.cs
- ObjectSet.cs
- ManagedWndProcTracker.cs
- EventHandlersDesigner.cs