src/SSC/ParallelDiffPathProjection.cs

実行済み 65 · 未実行 0 · 対象外 226
Coverage source: 043e27b9e5febd713c747d2558802e450fad8edd

実行済みCoberturaのhit数が1以上の行です。
未実行カバレッジ対象ですがhit数が0の行です。
対象外Coberturaに実行対象として記録されていない行です。
行状態HitsSource
1 対象外 namespace SSC;
2 対象外
3 対象外 /// <summary>
4 対象外 /// 標準 path の各 segment を利用側定義 path へ変換します。
5 対象外 /// </summary>
6 対象外 /// <remarks>
7 対象外 /// 標準 path は SSC が <see cref="ParallelDiffEntry.Path"/> に格納する比較 tree 上の正式な path です。
8 対象外 /// 利用側定義 path は表示、分類、filter のために利用側が生成する別表現であり、node lookup には使用しません。
9 対象外 /// </remarks>
10 対象外 public interface IParallelDiffPathProjector
11 対象外 {
12 対象外 /// <summary>
13 対象外 /// 現在の標準 path segment を利用側定義 path でどのように扱うか返します。
14 対象外 /// </summary>
15 対象外 /// <param name="context">現在位置と祖先 node の文脈情報。</param>
16 対象外 /// <returns>標準 segment の維持、置換、または省略を表す結果。</returns>
17 対象外 ParallelDiffPathSegmentProjection Project(
18 対象外 ParallelDiffPathProjectionContext context);
19 対象外 }
20 対象外
21 対象外 /// <summary>
22 対象外 /// 差分 path segment を投影する際の現在位置と祖先情報を表します。
23 対象外 /// </summary>
24 対象外 public sealed class ParallelDiffPathProjectionContext
25 対象外 {
26 対象外 /// <summary>
27 対象外 /// 差分 entry の投影処理で祖先と現在位置の文脈を生成します。
28 対象外 /// </summary>
29 実行済み 81 internal ParallelDiffPathProjectionContext(
30 実行済み 81 IReadOnlyList<ParallelDiffPathNodeContext> ancestors,
31 実行済み 81 ParallelDiffPathNodeContext current)
32 対象外 {
33 実行済み 81 ArgumentNullException.ThrowIfNull(ancestors);
34 実行済み 81 ArgumentNullException.ThrowIfNull(current);
35 実行済み 81 Ancestors = Array.AsReadOnly(ancestors.ToArray());
36 実行済み 81 Current = current;
37 実行済み 81 }
38 対象外
39 対象外 /// <summary>
40 対象外 /// root 側から現在の親までの文脈情報を取得します。現在位置自身は含みません。
41 対象外 /// </summary>
42 実行済み 4 public IReadOnlyList<ParallelDiffPathNodeContext> Ancestors { get; }
43 対象外
44 対象外 /// <summary>
45 対象外 /// 現在投影している path segment の文脈情報を取得します。
46 対象外 /// </summary>
47 実行済み 103 public ParallelDiffPathNodeContext Current { get; }
48 対象外 }
49 対象外
50 対象外 /// <summary>
51 対象外 /// 差分 path の1階層に対応する node と標準 segment の文脈情報を表します。
52 対象外 /// </summary>
53 対象外 public sealed class ParallelDiffPathNodeContext
54 対象外 {
55 対象外 /// <summary>
56 対象外 /// 差分 entry の投影処理で現在 segment の node 文脈を生成します。
57 対象外 /// </summary>
58 実行済み 82 internal ParallelDiffPathNodeContext(
59 実行済み 82 ParallelDiffPathSegment standardSegment,
60 実行済み 82 IParallelNode parentNode,
61 実行済み 82 IParallelNode? node,
62 実行済み 82 IReadOnlyList<IParallelNode> siblings)
63 対象外 {
64 実行済み 82 ArgumentNullException.ThrowIfNull(standardSegment);
65 実行済み 82 ArgumentNullException.ThrowIfNull(parentNode);
66 実行済み 82 ArgumentNullException.ThrowIfNull(siblings);
67 実行済み 82 StandardSegment = standardSegment;
68 実行済み 82 ParentNode = parentNode;
69 実行済み 82 Node = node;
70 実行済み 82 Siblings = Array.AsReadOnly(siblings.ToArray());
71 実行済み 82 }
72 対象外
73 対象外 /// <summary>
74 対象外 /// SSC が現在位置に生成する標準 path segment を取得します。
75 対象外 /// </summary>
76 実行済み 131 public ParallelDiffPathSegment StandardSegment { get; }
77 対象外
78 対象外 /// <summary>
79 対象外 /// <see cref="StandardSegment"/> を所有する親 node を取得します。
80 対象外 /// </summary>
81 実行済み 2 public IParallelNode ParentNode { get; }
82 対象外
83 対象外 /// <summary>
84 対象外 /// segment が指す現在の node を取得します。
85 対象外 /// </summary>
86 対象外 /// <remarks>
87 対象外 /// empty container と missing container の差分など、要素 node を持たない container presence entry では
88 対象外 /// <see langword="null"/> です。
89 対象外 /// </remarks>
90 実行済み 17 public IParallelNode? Node { get; }
91 対象外
92 対象外 /// <summary>
93 対象外 /// 同じ <see cref="ParallelChildSet"/> に属する sibling node 一覧を取得します。
94 対象外 /// </summary>
95 対象外 /// <remarks>
96 対象外 /// sibling は同じ親を持つ兄弟 node を意味します。container presence entry では空です。
97 対象外 /// </remarks>
98 実行済み 4 public IReadOnlyList<IParallelNode> Siblings { get; }
99 対象外 }
100 対象外
101 対象外 /// <summary>
102 対象外 /// 標準 path segment に対する投影方法を表します。
103 対象外 /// </summary>
104 対象外 public enum ParallelDiffPathSegmentProjectionKind
105 対象外 {
106 対象外 /// <summary>
107 対象外 /// 標準 segment をそのまま利用します。
108 対象外 /// </summary>
109 対象外 KeepStandard,
110 対象外
111 対象外 /// <summary>
112 対象外 /// 指定された別の具体 segment へ置き換えます。
113 対象外 /// </summary>
114 対象外 Replace,
115 対象外
116 対象外 /// <summary>
117 対象外 /// 利用側定義 path から標準 segment を省略します。
118 対象外 /// </summary>
119 対象外 Omit,
120 対象外 }
121 対象外
122 対象外 /// <summary>
123 対象外 /// 標準 path segment 1件に対する投影結果を表します。
124 対象外 /// </summary>
125 対象外 public readonly struct ParallelDiffPathSegmentProjection
126 対象外 {
127 対象外 private ParallelDiffPathSegmentProjection(
128 対象外 ParallelDiffPathSegmentProjectionKind kind,
129 対象外 ParallelDiffPathSegment? replacement)
130 対象外 {
131 実行済み 83 Kind = kind;
132 実行済み 83 Replacement = replacement;
133 実行済み 83 }
134 対象外
135 対象外 /// <summary>
136 対象外 /// 投影方法を取得します。
137 対象外 /// </summary>
138 実行済み 83 public ParallelDiffPathSegmentProjectionKind Kind { get; }
139 対象外
140 対象外 /// <summary>
141 対象外 /// <see cref="Kind"/> が <see cref="ParallelDiffPathSegmentProjectionKind.Replace"/> の場合の置換先を取得します。
142 対象外 /// </summary>
143 実行済み 33 public ParallelDiffPathSegment? Replacement { get; }
144 対象外
145 対象外 /// <summary>
146 対象外 /// 標準 segment をそのまま利用する結果を返します。
147 対象外 /// </summary>
148 対象外 /// <returns>標準 segment を維持する結果。</returns>
149 対象外 public static ParallelDiffPathSegmentProjection KeepStandard()
150 対象外 {
151 実行済み 47 return new ParallelDiffPathSegmentProjection(
152 実行済み 47 ParallelDiffPathSegmentProjectionKind.KeepStandard,
153 実行済み 47 replacement: null);
154 対象外 }
155 対象外
156 対象外 /// <summary>
157 対象外 /// 指定した具体 segment へ置き換える結果を返します。
158 対象外 /// </summary>
159 対象外 /// <param name="segment">利用側定義 path で使用する segment。</param>
160 対象外 /// <returns>指定 segment へ置き換える結果。</returns>
161 対象外 /// <exception cref="ArgumentNullException"><paramref name="segment"/> が <see langword="null"/> の場合。</exception>
162 対象外 public static ParallelDiffPathSegmentProjection Replace(
163 対象外 ParallelDiffPathSegment segment)
164 対象外 {
165 実行済み 32 ArgumentNullException.ThrowIfNull(segment);
166 実行済み 31 return new ParallelDiffPathSegmentProjection(
167 実行済み 31 ParallelDiffPathSegmentProjectionKind.Replace,
168 実行済み 31 segment);
169 対象外 }
170 対象外
171 対象外 /// <summary>
172 対象外 /// 利用側定義 path から標準 segment を省略する結果を返します。
173 対象外 /// </summary>
174 対象外 /// <returns>標準 segment を省略する結果。</returns>
175 対象外 public static ParallelDiffPathSegmentProjection Omit()
176 対象外 {
177 実行済み 5 return new ParallelDiffPathSegmentProjection(
178 実行済み 5 ParallelDiffPathSegmentProjectionKind.Omit,
179 実行済み 5 replacement: null);
180 対象外 }
181 対象外 }
182 対象外
183 対象外 /// <summary>
184 対象外 /// 標準差分 entry と、投影器によって生成された利用側定義 path の組を表します。
185 対象外 /// </summary>
186 対象外 public sealed class ParallelDiffEntryPathProjection
187 対象外 {
188 対象外 /// <summary>
189 対象外 /// 標準差分 entry と投影済み path の組を生成します。
190 対象外 /// </summary>
191 実行済み 38 internal ParallelDiffEntryPathProjection(
192 実行済み 38 ParallelDiffEntry entry,
193 実行済み 38 string projectedPath,
194 実行済み 38 string? projectedParentPath)
195 対象外 {
196 実行済み 38 ArgumentNullException.ThrowIfNull(entry);
197 実行済み 38 ArgumentException.ThrowIfNullOrEmpty(projectedPath);
198 実行済み 38 Entry = entry;
199 実行済み 38 ProjectedPath = projectedPath;
200 実行済み 38 ProjectedParentPath = projectedParentPath;
201 実行済み 38 }
202 対象外
203 対象外 /// <summary>
204 対象外 /// SSC が生成した標準差分 entry を取得します。
205 対象外 /// </summary>
206 実行済み 58 public ParallelDiffEntry Entry { get; }
207 対象外
208 対象外 /// <summary>
209 対象外 /// 比較した model slot 数を取得します。
210 対象外 /// </summary>
211 実行済み 12 public int Count => Entry.Values.Count;
212 対象外
213 対象外 /// <summary>
214 対象外 /// 指定した model slot の値を取得します。
215 対象外 /// </summary>
216 対象外 /// <param name="modelIndex">参照する model slot の index。</param>
217 対象外 /// <returns>指定 slot の値。</returns>
218 対象外 /// <exception cref="ArgumentOutOfRangeException">
219 対象外 /// <paramref name="modelIndex"/> が範囲外の場合。
220 対象外 /// </exception>
221 実行済み 6 public object? this[int modelIndex] => GetValue(modelIndex);
222 対象外
223 対象外 /// <summary>
224 対象外 /// 投影器を適用して生成した利用側定義 path を取得します。
225 対象外 /// </summary>
226 実行済み 43 public string ProjectedPath { get; }
227 対象外
228 対象外 /// <summary>
229 対象外 /// 標準 parent path と同じ segment 範囲へ投影器を適用した path を取得します。
230 対象外 /// </summary>
231 対象外 /// <remarks>
232 対象外 /// root 直下の entry に加え、標準 parent path の範囲にあるすべての segment を投影器が省略した場合も
233 対象外 /// <see langword="null"/> です。
234 対象外 /// </remarks>
235 実行済み 7 public string? ProjectedParentPath { get; }
236 対象外
237 対象外 /// <summary>
238 対象外 /// 指定した model slot の状態を取得します。
239 対象外 /// </summary>
240 対象外 /// <param name="modelIndex">参照する model slot の index。</param>
241 対象外 /// <returns>指定 slot の状態。</returns>
242 対象外 /// <exception cref="ArgumentOutOfRangeException">
243 対象外 /// <paramref name="modelIndex"/> が範囲外の場合。
244 対象外 /// </exception>
245 対象外 public ValueState GetState(int modelIndex)
246 対象外 {
247 実行済み 7 return GetDiffValue(modelIndex).State;
248 対象外 }
249 対象外
250 対象外 private object? GetValue(int modelIndex)
251 対象外 {
252 実行済み 6 return GetDiffValue(modelIndex).Value;
253 対象外 }
254 対象外
255 対象外 private ParallelDiffValue GetDiffValue(int modelIndex)
256 対象外 {
257 実行済み 13 if (modelIndex < 0 || modelIndex >= Count)
258 対象外 {
259 実行済み 4 throw new ArgumentOutOfRangeException(nameof(modelIndex));
260 対象外 }
261 対象外
262 実行済み 9 return Entry.Values[modelIndex];
263 対象外 }
264 対象外 }
265 対象外
266 対象外 /// <summary>
267 対象外 /// 利用側定義 path を持つ差分 entry の path pattern 判定を提供します。
268 対象外 /// </summary>
269 対象外 public static class ParallelDiffEntryPathProjectionExtensions
270 対象外 {
271 対象外 /// <summary>
272 対象外 /// 利用側定義 path 自身、またはその祖先が指定 pattern に一致するか判定します。
273 対象外 /// </summary>
274 対象外 /// <param name="projection">判定する差分 entry projection。</param>
275 対象外 /// <param name="pattern">照合する path pattern。</param>
276 対象外 /// <returns>
277 対象外 /// pattern の全 segment が <see cref="ParallelDiffEntryPathProjection.ProjectedPath"/> の先頭から一致する場合は
278 対象外 /// <see langword="true"/>。
279 対象外 /// </returns>
280 対象外 /// <exception cref="ArgumentNullException">
281 対象外 /// <paramref name="projection"/> または <paramref name="pattern"/> が <see langword="null"/> の場合。
282 対象外 /// </exception>
283 対象外 public static bool PathMatches(
284 対象外 this ParallelDiffEntryPathProjection projection,
285 対象外 ParallelDiffPathPattern pattern)
286 対象外 {
287 実行済み 15 ArgumentNullException.ThrowIfNull(projection);
288 実行済み 15 ArgumentNullException.ThrowIfNull(pattern);
289 実行済み 15 return pattern.IsMatch(projection.ProjectedPath);
290 対象外 }
291 対象外 }