Skip to content

Commit 0eedb78

Browse files
committed
reduce duplicate codes
1 parent 1034dd4 commit 0eedb78

File tree

1 file changed

+31
-18
lines changed

1 file changed

+31
-18
lines changed

src/Smdn.Net.SkStackIP/Smdn.Net.SkStackIP/SkStackActiveScanOptions.cs

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -103,34 +103,52 @@ public static SkStackActiveScanOptions Create(
103103
scanDurationGeneratorFunc: scanDurationGeneratorFunc
104104
);
105105

106-
private sealed class UserDefinedActiveScanOptions : SkStackActiveScanOptions {
107-
private readonly Predicate<SkStackPanDescription>? paaSelector;
108-
private readonly Func<IEnumerable<int>> scanDurationGeneratorFunc;
106+
private abstract class ScanDurationGeneratorFuncActiveScanOptions : SkStackActiveScanOptions {
107+
private protected Func<IEnumerable<int>> ScanDurationGeneratorFunc { get; }
109108

110-
public UserDefinedActiveScanOptions(
111-
Predicate<SkStackPanDescription>? paaSelector,
109+
public ScanDurationGeneratorFuncActiveScanOptions(
112110
IEnumerable<int> scanDurationGenerator
113111
)
114112
{
115113
if (scanDurationGenerator is null)
116114
throw new ArgumentNullException(nameof(scanDurationGenerator));
117115

116+
ScanDurationGeneratorFunc = new(() => scanDurationGenerator);
117+
}
118+
119+
public ScanDurationGeneratorFuncActiveScanOptions(
120+
Func<IEnumerable<int>> scanDurationGeneratorFunc
121+
)
122+
{
123+
this.ScanDurationGeneratorFunc = scanDurationGeneratorFunc ?? throw new ArgumentNullException(nameof(scanDurationGeneratorFunc));
124+
}
125+
126+
internal override IEnumerable<int> YieldScanDurationFactors() => ScanDurationGeneratorFunc();
127+
}
128+
129+
private sealed class UserDefinedActiveScanOptions : ScanDurationGeneratorFuncActiveScanOptions {
130+
private readonly Predicate<SkStackPanDescription>? paaSelector;
131+
132+
public UserDefinedActiveScanOptions(
133+
Predicate<SkStackPanDescription>? paaSelector,
134+
IEnumerable<int> scanDurationGenerator
135+
)
136+
: base(scanDurationGenerator ?? throw new ArgumentNullException(nameof(scanDurationGenerator)))
137+
{
118138
this.paaSelector = paaSelector;
119-
this.scanDurationGeneratorFunc = new(() => scanDurationGenerator);
120139
}
121140

122141
public UserDefinedActiveScanOptions(
123142
Predicate<SkStackPanDescription>? paaSelector,
124143
Func<IEnumerable<int>> scanDurationGeneratorFunc
125144
)
145+
: base(scanDurationGeneratorFunc ?? throw new ArgumentNullException(nameof(scanDurationGeneratorFunc)))
126146
{
127147
this.paaSelector = paaSelector;
128-
this.scanDurationGeneratorFunc = scanDurationGeneratorFunc ?? throw new ArgumentNullException(nameof(scanDurationGeneratorFunc));
129148
}
130149

131-
public override SkStackActiveScanOptions Clone() => new UserDefinedActiveScanOptions(paaSelector, scanDurationGeneratorFunc);
150+
public override SkStackActiveScanOptions Clone() => new UserDefinedActiveScanOptions(paaSelector, ScanDurationGeneratorFunc);
132151
internal override bool SelectPanaAuthenticationAgent(SkStackPanDescription desc) => paaSelector?.Invoke(desc) ?? true;
133-
internal override IEnumerable<int> YieldScanDurationFactors() => scanDurationGeneratorFunc();
134152
}
135153

136154
/// <summary>
@@ -165,34 +183,29 @@ PhysicalAddress paaMacAddress
165183
scanDurationGeneratorFunc: scanDurationGeneratorFunc
166184
);
167185

168-
private sealed class FindByMacAddressActiveScanOptions : SkStackActiveScanOptions {
186+
private sealed class FindByMacAddressActiveScanOptions : ScanDurationGeneratorFuncActiveScanOptions {
169187
private readonly PhysicalAddress paaMacAddress;
170-
private readonly Func<IEnumerable<int>> scanDurationGeneratorFunc;
171188

172189
public FindByMacAddressActiveScanOptions(
173190
PhysicalAddress paaMacAddress,
174191
IEnumerable<int> scanDurationGenerator
175192
)
193+
: base(scanDurationGenerator ?? throw new ArgumentNullException(nameof(scanDurationGenerator)))
176194
{
177-
if (scanDurationGenerator is null)
178-
throw new ArgumentNullException(nameof(scanDurationGenerator));
179-
180195
this.paaMacAddress = paaMacAddress;
181-
scanDurationGeneratorFunc = new(() => scanDurationGenerator);
182196
}
183197

184198
public FindByMacAddressActiveScanOptions(
185199
PhysicalAddress paaMacAddress,
186200
Func<IEnumerable<int>> scanDurationGeneratorFunc
187201
)
202+
: base(scanDurationGeneratorFunc ?? throw new ArgumentNullException(nameof(scanDurationGeneratorFunc)))
188203
{
189204
this.paaMacAddress = paaMacAddress;
190-
this.scanDurationGeneratorFunc = scanDurationGeneratorFunc ?? throw new ArgumentNullException(nameof(scanDurationGeneratorFunc));
191205
}
192206

193-
public override SkStackActiveScanOptions Clone() => new FindByMacAddressActiveScanOptions(paaMacAddress, scanDurationGeneratorFunc);
207+
public override SkStackActiveScanOptions Clone() => new FindByMacAddressActiveScanOptions(paaMacAddress, ScanDurationGeneratorFunc);
194208
internal override bool SelectPanaAuthenticationAgent(SkStackPanDescription desc) => desc.MacAddress.Equals(paaMacAddress);
195-
internal override IEnumerable<int> YieldScanDurationFactors() => scanDurationGeneratorFunc();
196209
}
197210

198211
/*

0 commit comments

Comments
 (0)