aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Data/IntermediateSymbolExtensions.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Data/IntermediateSymbolExtensions.cs')
-rw-r--r--src/WixToolset.Data/IntermediateSymbolExtensions.cs121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/WixToolset.Data/IntermediateSymbolExtensions.cs b/src/WixToolset.Data/IntermediateSymbolExtensions.cs
new file mode 100644
index 00000000..10f0d7f0
--- /dev/null
+++ b/src/WixToolset.Data/IntermediateSymbolExtensions.cs
@@ -0,0 +1,121 @@
1// 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.
2
3namespace WixToolset.Data
4{
5 public static class IntermediateSymbolExtensions
6 {
7 public static bool AsBool(this IntermediateSymbol symbol, int index) => symbol?.Fields[index].AsBool() ?? false;
8
9 public static bool? AsNullableBool(this IntermediateSymbol symbol, int index) => symbol?.Fields[index].AsNullableBool();
10
11 public static int AsNumber(this IntermediateSymbol symbol, int index) => symbol?.Fields[index].AsNumber() ?? 0;
12
13 public static int? AsNullableNumber(this IntermediateSymbol symbol, int index) => symbol?.Fields[index].AsNullableNumber();
14
15 public static string AsString(this IntermediateSymbol symbol, int index) => symbol?.Fields[index].AsString();
16
17 public static IntermediateField Set(this IntermediateSymbol symbol, int index, bool value)
18 {
19 var definition = symbol.Definition.FieldDefinitions[index];
20
21 var field = symbol.Fields[index].Set(definition, value);
22
23 return symbol.Fields[index] = field;
24 }
25
26 public static IntermediateField Set(this IntermediateSymbol symbol, int index, bool? value)
27 {
28 if (value == null && NoFieldMetadata(symbol, index))
29 {
30 return symbol.Fields[index] = null;
31 }
32
33 var definition = symbol.Definition.FieldDefinitions[index];
34
35 var field = symbol.Fields[index].Set(definition, value);
36
37 return symbol.Fields[index] = field;
38 }
39
40 public static IntermediateField Set(this IntermediateSymbol symbol, int index, long value)
41 {
42 var definition = symbol.Definition.FieldDefinitions[index];
43
44 var field = symbol.Fields[index].Set(definition, value);
45
46 return symbol.Fields[index] = field;
47 }
48
49 public static IntermediateField Set(this IntermediateSymbol symbol, int index, long? value)
50 {
51 if (value == null && NoFieldMetadata(symbol, index))
52 {
53 return symbol.Fields[index] = null;
54 }
55
56 var definition = symbol.Definition.FieldDefinitions[index];
57
58 var field = symbol.Fields[index].Set(definition, value);
59
60 return symbol.Fields[index] = field;
61 }
62
63 public static IntermediateField Set(this IntermediateSymbol symbol, int index, int value)
64 {
65 var definition = symbol.Definition.FieldDefinitions[index];
66
67 var field = symbol.Fields[index].Set(definition, value);
68
69 return symbol.Fields[index] = field;
70 }
71
72 public static IntermediateField Set(this IntermediateSymbol symbol, int index, int? value)
73 {
74 if (value == null && NoFieldMetadata(symbol, index))
75 {
76 return symbol.Fields[index] = null;
77 }
78
79 var definition = symbol.Definition.FieldDefinitions[index];
80
81 var field = symbol.Fields[index].Set(definition, value);
82
83 return symbol.Fields[index] = field;
84 }
85
86 public static IntermediateField Set(this IntermediateSymbol symbol, int index, IntermediateFieldPathValue value)
87 {
88 if (value?.Path == null && value?.BaseUri == null && NoFieldMetadata(symbol, index))
89 {
90 return symbol.Fields[index] = null;
91 }
92
93 var definition = symbol.Definition.FieldDefinitions[index];
94
95 var field = symbol.Fields[index].Set(definition, value);
96
97 return symbol.Fields[index] = field;
98 }
99
100 public static IntermediateField Set(this IntermediateSymbol symbol, int index, string value)
101 {
102 if (value == null && NoFieldMetadata(symbol, index))
103 {
104 return symbol.Fields[index] = null;
105 }
106
107 var definition = symbol.Definition.FieldDefinitions[index];
108
109 var field = symbol.Fields[index].Set(definition, value);
110
111 return symbol.Fields[index] = field;
112 }
113
114 private static bool NoFieldMetadata(IntermediateSymbol symbol, int index)
115 {
116 var field = symbol?.Fields[index];
117
118 return field?.Context == null && field?.PreviousValue == null;
119 }
120 }
121}