Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- LayoutEngine.cs
- EncodingNLS.cs
- TextTreeInsertElementUndoUnit.cs
- DbParameterHelper.cs
- DataPagerField.cs
- PageResolution.cs
- RowUpdatedEventArgs.cs
- PropertyDescriptorGridEntry.cs
- HttpCachePolicy.cs
- SignedXmlDebugLog.cs
- TypeBuilderInstantiation.cs
- XmlILIndex.cs
- _BasicClient.cs
- HtmlHead.cs
- UserControlBuildProvider.cs
- WebConvert.cs
- WindowsFormsSynchronizationContext.cs
- DetailsView.cs
- dataobject.cs
- Visual3D.cs
- RegexMatch.cs
- ColorMap.cs
- EntityDesignerDataSourceView.cs
- PropertyChangedEventArgs.cs
- InputProviderSite.cs
- DataBoundControlHelper.cs
- RequestCacheValidator.cs
- MimeMapping.cs
- mongolianshape.cs
- XmlSchemaSimpleTypeList.cs
- Profiler.cs
- SpellerError.cs
- CultureInfo.cs
- ToolboxItemCollection.cs
- WindowInteractionStateTracker.cs
- StrokeCollectionConverter.cs
- XsltContext.cs
- Transform3D.cs
- ColorConvertedBitmap.cs
- SystemDiagnosticsSection.cs
- ActiveXHost.cs
- EventLogEntry.cs
- PackageRelationship.cs
- AddIn.cs
- PerformanceCounterLib.cs
- CaseInsensitiveComparer.cs
- Debugger.cs
- typedescriptorpermissionattribute.cs
- cryptoapiTransform.cs
- OleAutBinder.cs
- DateTimeConstantAttribute.cs
- DBSchemaRow.cs
- SettingsContext.cs
- ErrorTableItemStyle.cs
- sitestring.cs
- ErrorLog.cs
- CompareInfo.cs
- UIElementIsland.cs
- EndpointReference.cs
- ImageIndexConverter.cs
- SwitchLevelAttribute.cs
- JulianCalendar.cs
- GZipDecoder.cs
- TextTreeFixupNode.cs
- HostAdapter.cs
- XmlCountingReader.cs
- Walker.cs
- EventRouteFactory.cs
- TextElementCollection.cs
- Crc32.cs
- ServiceModelReg.cs
- UnsafeNativeMethods.cs
- HwndHost.cs
- ConvertEvent.cs
- EntryIndex.cs
- DoubleLink.cs
- TextEffect.cs
- InvalidPrinterException.cs
- SourceFileBuildProvider.cs
- ConfigurationStrings.cs
- RawStylusInput.cs
- LabelEditEvent.cs
- TextElement.cs
- SqlRowUpdatedEvent.cs
- RuleValidation.cs
- cookiecollection.cs
- OdbcEnvironment.cs
- XmlSchemaFacet.cs
- ObjectPropertyMapping.cs
- LassoSelectionBehavior.cs
- TypedDataSetSchemaImporterExtension.cs
- StreamingContext.cs
- OutputCacheSection.cs
- DynamicRenderer.cs
- HtmlString.cs
- TimeIntervalCollection.cs
- FastPropertyAccessor.cs
- DataGridViewCellStyleEditor.cs
- SimplePropertyEntry.cs
- GorillaCodec.cs