BinaryRelationItem.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*-------------------------------------------------------------------------
  2. * 功能描述:BinaryRelationItem
  3. * 作者:xulisong
  4. * 创建时间: 2019/1/22 16:38:20
  5. * 版本号:v1.0
  6. * -------------------------------------------------------------------------*/
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace SAGA.GplotRelationComputerManage
  13. {
  14. /// <summary>
  15. /// 二元关系类
  16. /// </summary>
  17. public class BinaryRelationItem
  18. {
  19. /// <summary>
  20. /// 开始节点
  21. /// </summary>
  22. public EquipmentNode From { get; set; }
  23. /// <summary>
  24. /// 结束节点
  25. /// </summary>
  26. public EquipmentNode To { get; set; }
  27. /// <summary>
  28. /// 关联类型
  29. /// </summary>
  30. public string RelationType { get; set; }
  31. /// <summary>
  32. /// 反转关系
  33. /// </summary>
  34. public void Reverse()
  35. {
  36. var temp = To;
  37. To = From;
  38. From = temp;
  39. }
  40. /// <summary>
  41. /// 是否是设备连接
  42. /// </summary>
  43. /// <returns></returns>
  44. public bool IsEquipmentLink()
  45. {
  46. return From.IsRealEquipment && To.IsRealEquipment;
  47. }
  48. /// <summary>
  49. /// 获取指定条件的Node
  50. /// </summary>
  51. /// <param name="match"></param>
  52. /// <param name="node"></param>
  53. /// <returns>-1表示没有,0,From;1,To</returns>
  54. public int TryGetNode(Predicate<EquipmentNode> match, out EquipmentNode node)
  55. {
  56. node = null;
  57. var list = new List<EquipmentNode>() {From, To};
  58. for (int i = 0; i < list.Count; i++)
  59. {
  60. if (match(From))
  61. {
  62. node = From;
  63. return i;
  64. }
  65. }
  66. return -1;
  67. }
  68. /// <summary>
  69. /// 获取匹配元素之外的另一个节点
  70. /// </summary>
  71. /// <param name="match"></param>
  72. /// <returns></returns>
  73. public EquipmentNode GetAnotherNode(Predicate<EquipmentNode> match)
  74. {
  75. //只有有一个相等,才称得上另一个
  76. var list = new List<EquipmentNode>() { From, To };
  77. for (int i = 0; i < list.Count; i++)
  78. {
  79. if (match(From))
  80. {
  81. return list[i%2];
  82. }
  83. }
  84. return null;
  85. }
  86. }
  87. }