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
- ParserExtension.cs
- OutArgumentConverter.cs
- RoleServiceManager.cs
- DataGridViewCellLinkedList.cs
- HostDesigntimeLicenseContext.cs
- OperationValidationEventArgs.cs
- CancelEventArgs.cs
- InputProcessorProfilesLoader.cs
- PlaceHolder.cs
- Message.cs
- ISAPIRuntime.cs
- PeerNearMe.cs
- HttpCookiesSection.cs
- OdbcPermission.cs
- SettingsPropertyNotFoundException.cs
- SourceLineInfo.cs
- DefinitionUpdate.cs
- AsyncOperationManager.cs
- CollectionChangedEventManager.cs
- ComponentRenameEvent.cs
- PersistenceTypeAttribute.cs
- Model3DGroup.cs
- PixelFormatConverter.cs
- RectangleGeometry.cs
- FamilyTypeface.cs
- ApplicationDirectory.cs
- DataGridViewCellStyle.cs
- XmlnsDefinitionAttribute.cs
- Window.cs
- XPathMultyIterator.cs
- GenericTextProperties.cs
- RegionData.cs
- WebEventCodes.cs
- ColorTranslator.cs
- AssemblyInfo.cs
- DocumentApplicationJournalEntry.cs
- Control.cs
- RemoteWebConfigurationHostServer.cs
- LabelDesigner.cs
- ParameterBuilder.cs
- DefaultEvaluationContext.cs
- DropShadowBitmapEffect.cs
- AutomationElementIdentifiers.cs
- PublishLicense.cs
- WeakReferenceEnumerator.cs
- DetailsViewPageEventArgs.cs
- DbSource.cs
- TabControlEvent.cs
- WorkflowQueuingService.cs
- JournalEntryListConverter.cs
- isolationinterop.cs
- ImageBrush.cs
- RepeatButtonAutomationPeer.cs
- IERequestCache.cs
- WebBrowserEvent.cs
- WindowsListViewSubItem.cs
- TextAdaptor.cs
- HtmlCalendarAdapter.cs
- PagePropertiesChangingEventArgs.cs
- URIFormatException.cs
- DocumentApplicationJournalEntry.cs
- _ListenerRequestStream.cs
- ErrorProvider.cs
- RequestContext.cs
- BindableAttribute.cs
- PolicyUnit.cs
- FieldBuilder.cs
- ParsedAttributeCollection.cs
- DistinctQueryOperator.cs
- GridItemCollection.cs
- GradientStopCollection.cs
- BidPrivateBase.cs
- FocusChangedEventArgs.cs
- EncodingFallbackAwareXmlTextWriter.cs
- ByteStack.cs
- ShaderRenderModeValidation.cs
- MessageContractImporter.cs
- PeerService.cs
- XmlReader.cs
- EntityParameterCollection.cs
- DataServiceContext.cs
- DefinitionBase.cs
- ImageUrlEditor.cs
- CodeAssignStatement.cs
- MaskedTextBoxTextEditorDropDown.cs
- ChtmlTextWriter.cs
- ScriptBehaviorDescriptor.cs
- MonthChangedEventArgs.cs
- WpfWebRequestHelper.cs
- exports.cs
- RequiredAttributeAttribute.cs
- PieceNameHelper.cs
- PropertyChangeTracker.cs
- DesigntimeLicenseContext.cs
- RepeaterItemEventArgs.cs
- InstanceDataCollectionCollection.cs
- InsufficientMemoryException.cs
- FileDetails.cs
- SafeProcessHandle.cs
- TemplateField.cs