Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / Boolean / IdentifierService.cs / 1599186 / 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; using System.Runtime.CompilerServices; 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(); [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] 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; using System.Runtime.CompilerServices; 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(); [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] 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
- VersionPair.cs
- PtsPage.cs
- LayoutInformation.cs
- OleDbConnectionFactory.cs
- LinqToSqlWrapper.cs
- AttributeData.cs
- ConsoleCancelEventArgs.cs
- SchemaImporterExtensionElement.cs
- StylusButtonEventArgs.cs
- TypeCodeDomSerializer.cs
- TypeConverterValueSerializer.cs
- SafePEFileHandle.cs
- QueryGenerator.cs
- BlurBitmapEffect.cs
- DataViewSettingCollection.cs
- ISFClipboardData.cs
- COMException.cs
- InkCanvasFeedbackAdorner.cs
- ValidationHelper.cs
- SocketException.cs
- DataControlReferenceCollection.cs
- SqlUtil.cs
- TableCell.cs
- TransformGroup.cs
- PageContent.cs
- SecurityHelper.cs
- DataGridViewCheckBoxColumn.cs
- EntityKey.cs
- TimeSpanValidator.cs
- HitTestWithPointDrawingContextWalker.cs
- AccessibleObject.cs
- TraceSection.cs
- CounterCreationData.cs
- SelectedGridItemChangedEvent.cs
- RenderCapability.cs
- TreeNodeStyleCollection.cs
- NavigatorOutput.cs
- ActivationServices.cs
- LayoutEditorPart.cs
- DynamicArgumentDialog.cs
- Utils.cs
- SqlVisitor.cs
- AttachmentService.cs
- EmptyElement.cs
- UrlAuthorizationModule.cs
- SqlResolver.cs
- WorkflowFormatterBehavior.cs
- HierarchicalDataBoundControl.cs
- WmfPlaceableFileHeader.cs
- PointConverter.cs
- ApplicationId.cs
- HttpListener.cs
- ProgressBarHighlightConverter.cs
- DataListItem.cs
- EntityDataSourceUtil.cs
- DebuggerAttributes.cs
- DefaultMergeHelper.cs
- JsonSerializer.cs
- LineMetrics.cs
- UnicastIPAddressInformationCollection.cs
- StringFunctions.cs
- XmlElementCollection.cs
- ConnectionStringsExpressionBuilder.cs
- ArrayTypeMismatchException.cs
- FormsAuthenticationUserCollection.cs
- DataSourceHelper.cs
- AsyncPostBackTrigger.cs
- XmlSchemaSimpleContentRestriction.cs
- ErrorEventArgs.cs
- WindowCollection.cs
- FirewallWrapper.cs
- FunctionUpdateCommand.cs
- Error.cs
- ModelPerspective.cs
- ControlOperationBehavior.cs
- categoryentry.cs
- PeerNameRecordCollection.cs
- ValueSerializer.cs
- CommonRemoteMemoryBlock.cs
- ListSourceHelper.cs
- _WinHttpWebProxyDataBuilder.cs
- GridItemPattern.cs
- SafeViewOfFileHandle.cs
- SubtreeProcessor.cs
- RequestCacheManager.cs
- FixedSOMPageConstructor.cs
- XmlElementList.cs
- ThicknessAnimation.cs
- ControlPager.cs
- _ConnectionGroup.cs
- SectionInput.cs
- TileModeValidation.cs
- ClrPerspective.cs
- MenuItem.cs
- Focus.cs
- OrderByExpression.cs
- RegexWriter.cs
- PackWebRequest.cs
- SafeRightsManagementPubHandle.cs
- SqlServices.cs