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
- MD5CryptoServiceProvider.cs
- EmptyImpersonationContext.cs
- ConfigXmlWhitespace.cs
- PrimaryKeyTypeConverter.cs
- CultureInfo.cs
- DataRow.cs
- ProfileService.cs
- ComponentResourceManager.cs
- ProfileServiceManager.cs
- QuaternionAnimationBase.cs
- SafeUserTokenHandle.cs
- AssemblyUtil.cs
- AssemblyAttributesGoHere.cs
- DataGrid.cs
- BooleanFunctions.cs
- SingleSelectRootGridEntry.cs
- InvalidComObjectException.cs
- DataSourceXmlClassAttribute.cs
- UInt32.cs
- AdornerLayer.cs
- BindingElementExtensionElement.cs
- ColorMap.cs
- HtmlMobileTextWriter.cs
- GradientBrush.cs
- PointAnimationClockResource.cs
- FilteredXmlReader.cs
- RijndaelManagedTransform.cs
- DbConnectionInternal.cs
- AddressHeaderCollectionElement.cs
- DecimalMinMaxAggregationOperator.cs
- RectangleHotSpot.cs
- SafeMemoryMappedFileHandle.cs
- BatchParser.cs
- AuthorizationContext.cs
- SimpleRecyclingCache.cs
- Types.cs
- AnnotationDocumentPaginator.cs
- MetafileHeader.cs
- AutomationElement.cs
- RadioButtonList.cs
- ToolStripDropTargetManager.cs
- ControlIdConverter.cs
- SafeCancelMibChangeNotify.cs
- ArrayEditor.cs
- shaperfactoryquerycacheentry.cs
- DataRelationCollection.cs
- CustomAttribute.cs
- CodeNamespaceImport.cs
- ChtmlSelectionListAdapter.cs
- CharAnimationBase.cs
- UnknownBitmapEncoder.cs
- _AcceptOverlappedAsyncResult.cs
- DateTimeFormatInfo.cs
- State.cs
- GetWinFXPath.cs
- EntityClassGenerator.cs
- CharacterMetrics.cs
- VariableAction.cs
- DataGridViewCheckBoxColumn.cs
- ProxyHwnd.cs
- NoPersistProperty.cs
- WindowsTreeView.cs
- WindowsListViewSubItem.cs
- RuntimeHandles.cs
- XmlSerializerVersionAttribute.cs
- QuaternionAnimation.cs
- InvalidAsynchronousStateException.cs
- Vector3DConverter.cs
- SqlXml.cs
- TemplateBuilder.cs
- SchemaAttDef.cs
- MailAddressParser.cs
- NominalTypeEliminator.cs
- Adorner.cs
- ProfileService.cs
- UnsafeNativeMethods.cs
- DataSet.cs
- EventMappingSettings.cs
- UTF32Encoding.cs
- RegistryPermission.cs
- ButtonBase.cs
- XmlElementAttribute.cs
- BufferedReadStream.cs
- Point3DCollectionConverter.cs
- SqlDataSourceConfigureSelectPanel.cs
- ImageField.cs
- SuppressIldasmAttribute.cs
- CodeDelegateInvokeExpression.cs
- SignedPkcs7.cs
- ClientSession.cs
- DataContractJsonSerializer.cs
- ObjRef.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- DrawListViewSubItemEventArgs.cs
- SemaphoreSlim.cs
- initElementDictionary.cs
- bidPrivateBase.cs
- WorkflowMarkupSerializationException.cs
- DataPagerFieldItem.cs
- StateWorkerRequest.cs