From 2bb37beda887d120a0ddabf874ad25357101faa1 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Wed, 1 Nov 2017 10:59:45 -0700 Subject: Update to WiX Intermediate Representation --- .../Link/WixComplexReferenceTupleExtensions.cs | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/WixToolset.Core/Link/WixComplexReferenceTupleExtensions.cs (limited to 'src/WixToolset.Core/Link/WixComplexReferenceTupleExtensions.cs') diff --git a/src/WixToolset.Core/Link/WixComplexReferenceTupleExtensions.cs b/src/WixToolset.Core/Link/WixComplexReferenceTupleExtensions.cs new file mode 100644 index 00000000..80cafa50 --- /dev/null +++ b/src/WixToolset.Core/Link/WixComplexReferenceTupleExtensions.cs @@ -0,0 +1,73 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.Core.Link +{ + using System; + using WixToolset.Data.Tuples; + + internal static class WixComplexReferenceTupleExtensions + { + /// + /// Creates a shallow copy of the ComplexReference. + /// + /// A shallow copy of the ComplexReference. + public static WixComplexReferenceTuple Clone(this WixComplexReferenceTuple source) + { + var clone = new WixComplexReferenceTuple(source.SourceLineNumbers, source.Id); + clone.ParentType = source.ParentType; + clone.Parent = source.Parent; + clone.ParentLanguage = source.ParentLanguage; + clone.ChildType = source.ChildType; + clone.Child = source.Child; + clone.IsPrimary = source.IsPrimary; + + return clone; + } + + /// + /// Compares two complex references without considering the primary bit. + /// + /// Complex reference to compare to. + /// Zero if the objects are equivalent, negative number if the provided object is less, positive if greater. + public static int CompareToWithoutConsideringPrimary(this WixComplexReferenceTuple tuple, WixComplexReferenceTuple other) + { + var comparison = tuple.ChildType - other.ChildType; + if (0 == comparison) + { + comparison = String.Compare(tuple.Child, other.Child, StringComparison.Ordinal); + if (0 == comparison) + { + comparison = tuple.ParentType - other.ParentType; + if (0 == comparison) + { + string thisParentLanguage = null == tuple.ParentLanguage ? String.Empty : tuple.ParentLanguage; + string otherParentLanguage = null == other.ParentLanguage ? String.Empty : other.ParentLanguage; + comparison = String.Compare(thisParentLanguage, otherParentLanguage, StringComparison.Ordinal); + if (0 == comparison) + { + comparison = String.Compare(tuple.Parent, other.Parent, StringComparison.Ordinal); + } + } + } + } + + return comparison; + } + + /// + /// Changes all of the parent references to point to the passed in parent reference. + /// + /// New parent complex reference. + public static void Reparent(this WixComplexReferenceTuple tuple, WixComplexReferenceTuple parent) + { + tuple.Parent = parent.Parent; + tuple.ParentLanguage = parent.ParentLanguage; + tuple.ParentType = parent.ParentType; + + if (!tuple.IsPrimary) + { + tuple.IsPrimary = parent.IsPrimary; + } + } + } +} -- cgit v1.2.3-55-g6feb