-
Notifications
You must be signed in to change notification settings - Fork 0
/
ConnectionInfo.cs
84 lines (81 loc) · 3.28 KB
/
ConnectionInfo.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Collections.Generic;
using System.Linq;
using KSPE3Lib;
namespace KSP.E3.TableOfConnections
{
struct ConnectionInfo
{
public string conductorName;
public string signal;
public string assignmentFrom;
public string locationFrom;
public string deviceFrom;
public string pinFrom;
public string assignmentTo;
public string locationTo;
public string deviceTo;
public string pinTo;
public string type;
public ConnectionInfo(Core core, NormalDevice device, DevicePin devicePin, string conductorName, string type)
{
this.conductorName = conductorName;
signal = String.Intern(core.SignalName);
int startPinId = core.StartPinId;
int endPinId = core.EndPinId;
devicePin.Id = startPinId;
devicePin.Id = startPinId;
assignmentFrom = String.Intern(device.Assignment); // интернируем строку, поскольку 1) часто повторяется 2) нужно будет много сравнивать
locationFrom = device.Location;
deviceFrom = device.Name;
pinFrom = String.Intern(devicePin.Name);
device.Id = endPinId;
devicePin.Id = endPinId;
assignmentTo = String.Intern(device.Assignment);
locationTo = device.Location;
deviceTo = device.Name;
pinTo = String.Intern(devicePin.Name);
this.type = String.Intern(type);
}
public ConnectionInfo(int startPinId, int endPinId, string signal, NormalDevice device, DevicePin devicePin, Core core, WireCore wire)
{
devicePin.Id = startPinId;
pinFrom = String.Intern(devicePin.Name);
this.signal = signal;
List<int> startPinCoreIds = devicePin.CoreIds;
device.Id = startPinId;
deviceFrom = device.Name;
assignmentFrom = String.Intern(device.Assignment);
locationFrom = device.Location;
devicePin.Id = endPinId;
pinTo = String.Intern(devicePin.Name);
List<int> endPinCoreIds = devicePin.CoreIds;
device.Id = endPinId;
deviceTo = device.Name;
assignmentTo = String.Intern(device.Assignment);
locationTo = device.Location;
conductorName = String.Empty;
type = String.Empty;
if (startPinCoreIds.Count > 0 && endPinCoreIds.Count > 0)
{
List<int> intersection = startPinCoreIds.Intersect<int>(endPinCoreIds).ToList<int>();
if (intersection.Count == 1)
{
core.Id = intersection[0];
device.Id = intersection[0];
if (device.IsCable())
{
conductorName = device.Name;
type = String.Intern(device.ComponentName);
}
if (device.IsWireGroup())
{
wire.Id = intersection[0];
conductorName = wire.Name;
type = String.Intern(wire.WireType);
}
}
}
}
}
}