ULSAlgorithms 1.1.0-g3e5595996d
High-performance exact and heuristic algorithms for uncapacitated lot sizing
Loading...
Searching...
No Matches
SolverAvailabilityInfo.cs
Go to the documentation of this file.
2
3/// <summary>
4/// Describes solver availability and the installation selected by an adapter.
5/// </summary>
6public sealed class SolverAvailabilityInfo
7{
8 private readonly string[] _diagnostics;
9 private readonly string[] _limitations;
10
11 /// <summary>
12 /// Initializes an availability result.
13 /// </summary>
15 SolverKind solverKind,
17 string solverName = "",
18 string solverVersion = "",
19 string installationPath = "",
20 string managedAssemblyPath = "",
21 string nativeLibraryPath = "",
22 string licenseInformation = "",
23 IEnumerable<string>? diagnostics = null,
24 IEnumerable<string>? limitations = null)
25 {
26 if (solverKind is SolverKind.Unknown or SolverKind.Automatic)
27 {
28 throw new ArgumentOutOfRangeException(
29 nameof(solverKind),
30 "Availability information must target a concrete solver.");
31 }
32
33 SolverKind = solverKind;
34 Status = status;
35 SolverName = solverName ?? string.Empty;
36 SolverVersion = solverVersion ?? string.Empty;
37 InstallationPath = installationPath ?? string.Empty;
38 ManagedAssemblyPath = managedAssemblyPath ?? string.Empty;
39 NativeLibraryPath = nativeLibraryPath ?? string.Empty;
40 LicenseInformation = licenseInformation ?? string.Empty;
41 _diagnostics = CopyNonBlank(diagnostics);
42 _limitations = CopyNonBlank(limitations);
43 }
44
45 /// <summary>Gets the concrete solver kind.</summary>
46 public SolverKind SolverKind { get; }
47
48 /// <summary>Gets the detected availability status.</summary>
50
51 /// <summary>Gets the solver display name.</summary>
52 public string SolverName { get; }
53
54 /// <summary>Gets the detected solver version.</summary>
55 public string SolverVersion { get; }
56
57 /// <summary>Gets the detected installation root.</summary>
58 public string InstallationPath { get; }
59
60 /// <summary>Gets the managed assembly path, when applicable.</summary>
61 public string ManagedAssemblyPath { get; }
62
63 /// <summary>Gets the native library or executable path, when applicable.</summary>
64 public string NativeLibraryPath { get; }
65
66 /// <summary>Gets detected licensing information.</summary>
67 public string LicenseInformation { get; }
68
69 /// <summary>Gets diagnostics produced during availability detection.</summary>
70 public IReadOnlyList<string> Diagnostics => _diagnostics;
71
72 /// <summary>Gets detected functional limitations.</summary>
73 public IReadOnlyList<string> Limitations => _limitations;
74
75 /// <summary>Gets whether the solver can be selected for use.</summary>
76 public bool IsUsable =>
77 Status is
79 SolverAvailabilityStatus.AvailableWithLimitations;
80
81 private static string[] CopyNonBlank(IEnumerable<string>? values)
82 {
83 if (values is null)
84 {
85 return [];
86 }
87
88 return values
89 .Where(static value => !string.IsNullOrWhiteSpace(value))
90 .Select(static value => value.Trim())
91 .ToArray();
92 }
93}
IReadOnlyList< string > Limitations
Gets detected functional limitations.
SolverAvailabilityStatus Status
Gets the detected availability status.
SolverKind SolverKind
Gets the concrete solver kind.
SolverAvailabilityInfo(SolverKind solverKind, SolverAvailabilityStatus status, string solverName="", string solverVersion="", string installationPath="", string managedAssemblyPath="", string nativeLibraryPath="", string licenseInformation="", IEnumerable< string >? diagnostics=null, IEnumerable< string >? limitations=null)
Initializes an availability result.
string InstallationPath
Gets the detected installation root.
string SolverVersion
Gets the detected solver version.
string NativeLibraryPath
Gets the native library or executable path, when applicable.
string LicenseInformation
Gets detected licensing information.
IReadOnlyList< string > Diagnostics
Gets diagnostics produced during availability detection.
string ManagedAssemblyPath
Gets the managed assembly path, when applicable.
bool IsUsable
Gets whether the solver can be selected for use.
SolverAvailabilityStatus
Describes whether a solver can currently be used on the current computer.
@ Available
The solver is installed, loadable and usable.