Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / Structures / BoolLiteral.cs / 1305376 / BoolLiteral.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Data.Common.Utils; using System.Data.Common.Utils.Boolean; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Linq; namespace System.Data.Mapping.ViewGeneration.Structures { using DomainBoolExpr = BoolExpr>; using DomainNotExpr = NotExpr >; using DomainTermExpr = TermExpr >; // A class that "ties" up all the literals in boolean expressions -- // e.g., OneOfConst and CellIdBoolean derive from it // Conditions represented by BoolLiterals need to be synchronized with DomainConstraints, // which may be modified upon calling ExpensiveSimplify. This is what // the method FixRange is used for. internal abstract class BoolLiteral : InternalBase { #region Fields internal static readonly IEqualityComparer EqualityComparer = new BoolLiteralComparer(); internal static readonly IEqualityComparer EqualityIdentifierComparer = new IdentifierComparer(); #endregion #region methods // effects: Creates a term expression of the form: "literal in range with all possible values being domain" internal static DomainTermExpr MakeTermExpression(BoolLiteral literal, IEnumerable domain, IEnumerable range) { Set domainSet = new Set (domain, Constant.EqualityComparer); Set rangeSet = new Set (range, Constant.EqualityComparer); return MakeTermExpression(literal, domainSet, rangeSet); } internal static DomainTermExpr MakeTermExpression(BoolLiteral literal, Set domainSet, Set rangeSet) { domainSet.MakeReadOnly(); rangeSet.MakeReadOnly(); DomainVariable variable = new DomainVariable (literal, domainSet, EqualityIdentifierComparer); DomainConstraint constraint = new DomainConstraint (variable, rangeSet); DomainTermExpr result = new DomainTermExpr(EqualityComparer >.Default, constraint); return result; } // effects: Fixes the range of this using the new values provided in // range and returns a boolean expression corresponding to the new value internal abstract DomainBoolExpr FixRange(Set range, MemberDomainMap memberDomainMap); internal abstract DomainBoolExpr GetDomainBoolExpression(MemberDomainMap domainMap); // effects: See BoolExpression.RemapBool internal abstract BoolLiteral RemapBool(Dictionary remap); // effects: See BoolExpression.GetRequiredSlots internal abstract void GetRequiredSlots(MemberProjectionIndex projectedSlotMap, bool[] requiredSlots); // effects: See BoolExpression.AsCql internal abstract StringBuilder AsCql(StringBuilder builder, string blockAlias, bool canSkipIsNotNull); internal abstract StringBuilder AsUserString(StringBuilder builder, string blockAlias, bool canSkipIsNotNull); internal abstract StringBuilder AsNegatedUserString(StringBuilder builder, string blockAlias, bool canSkipIsNotNull); // effects: Checks if the identifier in this is the same as the one in right protected virtual bool IsIdentifierEqualTo(BoolLiteral right) { return IsEqualTo(right); } // effects: Get the hash code based on the identifier protected virtual int GetIdentifierHash() { return GetHash(); } protected abstract bool IsEqualTo(BoolLiteral right); protected abstract int GetHash(); #endregion #region Comparer class // This class compares boolean expressions private class BoolLiteralComparer : IEqualityComparer { public bool Equals(BoolLiteral left, BoolLiteral right) { // Quick check with references if (object.ReferenceEquals(left, right)) { // Gets the Null and Undefined case as well return true; } // One of them is non-null at least if (left == null || right == null) { return false; } // Both are non-null at this point return left.IsEqualTo(right); } public int GetHashCode(BoolLiteral literal) { return literal.GetHash(); } } #endregion #region Identifier Comparer class // This class compares just the identifier in boolean expressions private class IdentifierComparer : IEqualityComparer { public bool Equals(BoolLiteral left, BoolLiteral right) { // Quick check with references if (object.ReferenceEquals(left, right)) { // Gets the Null and Undefined case as well return true; } // One of them is non-null at least if (left == null || right == null) { return false; } // Both are non-null at this point return left.IsIdentifierEqualTo(right); } public int GetHashCode(BoolLiteral literal) { return literal.GetIdentifierHash(); } } #endregion } internal abstract class TrueFalseLiteral : BoolLiteral { internal override DomainBoolExpr GetDomainBoolExpression(MemberDomainMap domainMap) { // Essentially say that the variable can take values true or false and here its value is only true IEnumerable actualValues = new Constant[] { new ScalarConstant(true) }; IEnumerable possibleValues = new Constant[] { new ScalarConstant(true), new ScalarConstant(false) }; Set variableDomain = new Set (possibleValues, Constant.EqualityComparer).MakeReadOnly(); Set thisDomain = new Set (actualValues, Constant.EqualityComparer).MakeReadOnly(); DomainTermExpr result = MakeTermExpression(this, variableDomain, thisDomain); return result; } // effects: Fixes the range of this using the new values provided in // range and returns a boolean expression corresponding to the new value internal override DomainBoolExpr FixRange(Set range, MemberDomainMap memberDomainMap) { Debug.Assert(range.Count == 1, "For BoolLiterals, there should be precisely one value - true or false"); ScalarConstant scalar = (ScalarConstant)range.First(); DomainBoolExpr expr = GetDomainBoolExpression(memberDomainMap); if ((bool)scalar.Value == false) { // The range of the variable was "inverted". Return a NOT of // the expression expr = new DomainNotExpr(expr); } return expr; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Data.Common.Utils; using System.Data.Common.Utils.Boolean; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Linq; namespace System.Data.Mapping.ViewGeneration.Structures { using DomainBoolExpr = BoolExpr>; using DomainNotExpr = NotExpr >; using DomainTermExpr = TermExpr >; // A class that "ties" up all the literals in boolean expressions -- // e.g., OneOfConst and CellIdBoolean derive from it // Conditions represented by BoolLiterals need to be synchronized with DomainConstraints, // which may be modified upon calling ExpensiveSimplify. This is what // the method FixRange is used for. internal abstract class BoolLiteral : InternalBase { #region Fields internal static readonly IEqualityComparer EqualityComparer = new BoolLiteralComparer(); internal static readonly IEqualityComparer EqualityIdentifierComparer = new IdentifierComparer(); #endregion #region methods // effects: Creates a term expression of the form: "literal in range with all possible values being domain" internal static DomainTermExpr MakeTermExpression(BoolLiteral literal, IEnumerable domain, IEnumerable range) { Set domainSet = new Set (domain, Constant.EqualityComparer); Set rangeSet = new Set (range, Constant.EqualityComparer); return MakeTermExpression(literal, domainSet, rangeSet); } internal static DomainTermExpr MakeTermExpression(BoolLiteral literal, Set domainSet, Set rangeSet) { domainSet.MakeReadOnly(); rangeSet.MakeReadOnly(); DomainVariable variable = new DomainVariable (literal, domainSet, EqualityIdentifierComparer); DomainConstraint constraint = new DomainConstraint (variable, rangeSet); DomainTermExpr result = new DomainTermExpr(EqualityComparer >.Default, constraint); return result; } // effects: Fixes the range of this using the new values provided in // range and returns a boolean expression corresponding to the new value internal abstract DomainBoolExpr FixRange(Set range, MemberDomainMap memberDomainMap); internal abstract DomainBoolExpr GetDomainBoolExpression(MemberDomainMap domainMap); // effects: See BoolExpression.RemapBool internal abstract BoolLiteral RemapBool(Dictionary remap); // effects: See BoolExpression.GetRequiredSlots internal abstract void GetRequiredSlots(MemberProjectionIndex projectedSlotMap, bool[] requiredSlots); // effects: See BoolExpression.AsCql internal abstract StringBuilder AsCql(StringBuilder builder, string blockAlias, bool canSkipIsNotNull); internal abstract StringBuilder AsUserString(StringBuilder builder, string blockAlias, bool canSkipIsNotNull); internal abstract StringBuilder AsNegatedUserString(StringBuilder builder, string blockAlias, bool canSkipIsNotNull); // effects: Checks if the identifier in this is the same as the one in right protected virtual bool IsIdentifierEqualTo(BoolLiteral right) { return IsEqualTo(right); } // effects: Get the hash code based on the identifier protected virtual int GetIdentifierHash() { return GetHash(); } protected abstract bool IsEqualTo(BoolLiteral right); protected abstract int GetHash(); #endregion #region Comparer class // This class compares boolean expressions private class BoolLiteralComparer : IEqualityComparer { public bool Equals(BoolLiteral left, BoolLiteral right) { // Quick check with references if (object.ReferenceEquals(left, right)) { // Gets the Null and Undefined case as well return true; } // One of them is non-null at least if (left == null || right == null) { return false; } // Both are non-null at this point return left.IsEqualTo(right); } public int GetHashCode(BoolLiteral literal) { return literal.GetHash(); } } #endregion #region Identifier Comparer class // This class compares just the identifier in boolean expressions private class IdentifierComparer : IEqualityComparer { public bool Equals(BoolLiteral left, BoolLiteral right) { // Quick check with references if (object.ReferenceEquals(left, right)) { // Gets the Null and Undefined case as well return true; } // One of them is non-null at least if (left == null || right == null) { return false; } // Both are non-null at this point return left.IsIdentifierEqualTo(right); } public int GetHashCode(BoolLiteral literal) { return literal.GetIdentifierHash(); } } #endregion } internal abstract class TrueFalseLiteral : BoolLiteral { internal override DomainBoolExpr GetDomainBoolExpression(MemberDomainMap domainMap) { // Essentially say that the variable can take values true or false and here its value is only true IEnumerable actualValues = new Constant[] { new ScalarConstant(true) }; IEnumerable possibleValues = new Constant[] { new ScalarConstant(true), new ScalarConstant(false) }; Set variableDomain = new Set (possibleValues, Constant.EqualityComparer).MakeReadOnly(); Set thisDomain = new Set (actualValues, Constant.EqualityComparer).MakeReadOnly(); DomainTermExpr result = MakeTermExpression(this, variableDomain, thisDomain); return result; } // effects: Fixes the range of this using the new values provided in // range and returns a boolean expression corresponding to the new value internal override DomainBoolExpr FixRange(Set range, MemberDomainMap memberDomainMap) { Debug.Assert(range.Count == 1, "For BoolLiterals, there should be precisely one value - true or false"); ScalarConstant scalar = (ScalarConstant)range.First(); DomainBoolExpr expr = GetDomainBoolExpression(memberDomainMap); if ((bool)scalar.Value == false) { // The range of the variable was "inverted". Return a NOT of // the expression expr = new DomainNotExpr(expr); } return expr; } } } // 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
- CharEntityEncoderFallback.cs
- SafeArrayRankMismatchException.cs
- PersonalizationAdministration.cs
- TemplatedAdorner.cs
- SystemWebSectionGroup.cs
- InputGestureCollection.cs
- HwndSourceParameters.cs
- MultipleViewPattern.cs
- ReferenceSchema.cs
- RegistryKey.cs
- indexingfiltermarshaler.cs
- DeferrableContentConverter.cs
- OperationParameterInfoCollection.cs
- DefaultIfEmptyQueryOperator.cs
- PEFileReader.cs
- DateTimePickerDesigner.cs
- ApplicationFileParser.cs
- MaskedTextBoxTextEditor.cs
- EventLogger.cs
- TypeBrowserDialog.cs
- ADMembershipProvider.cs
- NullableDecimalSumAggregationOperator.cs
- AbandonedMutexException.cs
- XmlSerializerVersionAttribute.cs
- HttpServerVarsCollection.cs
- WindowsImpersonationContext.cs
- StylusPointPropertyInfo.cs
- ConnectionProviderAttribute.cs
- InvalidAsynchronousStateException.cs
- GridItem.cs
- DBSqlParserColumnCollection.cs
- PolicyChain.cs
- ScriptHandlerFactory.cs
- UriTemplateDispatchFormatter.cs
- HitTestParameters3D.cs
- HostExecutionContextManager.cs
- MsmqIntegrationOutputChannel.cs
- ConditionalAttribute.cs
- NameValueSectionHandler.cs
- TemplateInstanceAttribute.cs
- TextRange.cs
- MediaPlayerState.cs
- TransformationRules.cs
- StorageMappingFragment.cs
- DateTimeStorage.cs
- CompilationRelaxations.cs
- ByteAnimation.cs
- CriticalFinalizerObject.cs
- RawUIStateInputReport.cs
- PlanCompilerUtil.cs
- NullableDecimalMinMaxAggregationOperator.cs
- BamlVersionHeader.cs
- EnumerationRangeValidationUtil.cs
- ComNativeDescriptor.cs
- UiaCoreProviderApi.cs
- FormattedText.cs
- HealthMonitoringSectionHelper.cs
- GregorianCalendarHelper.cs
- TableColumnCollection.cs
- EntityProviderServices.cs
- StructuredTypeEmitter.cs
- SafeArrayRankMismatchException.cs
- ApplicationBuildProvider.cs
- BitmapEffectState.cs
- FixedBufferAttribute.cs
- WaveHeader.cs
- FontUnitConverter.cs
- ServiceDescriptionContext.cs
- MouseButton.cs
- CodePageEncoding.cs
- dsa.cs
- Int16.cs
- DeflateStream.cs
- WorkflowApplicationCompletedException.cs
- PropertyNames.cs
- DbCommandTree.cs
- MdiWindowListStrip.cs
- ConfigUtil.cs
- EntityKeyElement.cs
- userdatakeys.cs
- FatalException.cs
- ExpressionsCollectionEditor.cs
- ObjectDataSourceEventArgs.cs
- Typography.cs
- WebServiceMethodData.cs
- DataListItemEventArgs.cs
- ObjectFullSpanRewriter.cs
- MsmqTransportElement.cs
- CodeEventReferenceExpression.cs
- ExceptionTranslationTable.cs
- StringUtil.cs
- AttachedAnnotation.cs
- BamlLocalizer.cs
- dsa.cs
- ClientFormsAuthenticationCredentials.cs
- InternalConfigSettingsFactory.cs
- ProfileParameter.cs
- FixedTextView.cs
- GeometryHitTestResult.cs
- MemoryMappedViewStream.cs