EAEdge.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using System;
  2. using System.ComponentModel;
  3. namespace SAGA.DotNetUtils.Data
  4. {
  5. /// <summary>
  6. /// 边类型
  7. /// </summary>
  8. public enum EAEdgeType
  9. {
  10. [Description("原始边")]
  11. Origin,
  12. [Description("子边串联")]
  13. Series,
  14. [Description("子边并联")]
  15. Parallel,
  16. }
  17. /// <summary>
  18. /// 边对象
  19. /// </summary>
  20. public class EAEdge<T> : EAElement<EAEdge<T>>
  21. {
  22. public EAEdge()
  23. {
  24. this.EdgeType = EAEdgeType.Origin;
  25. }
  26. public EAEdge(string startId, string endId):this()
  27. {
  28. StartVertex = startId;
  29. EndVertex = endId;
  30. }
  31. /// <summary>
  32. /// 关联数据
  33. /// </summary>
  34. public T Data { get; set; }
  35. #region 边属性
  36. /// <summary>
  37. /// 边类型
  38. /// </summary>
  39. public EAEdgeType EdgeType { get; set; }
  40. private string m_StartVertex;
  41. /// <summary>
  42. /// 开始点
  43. /// </summary>
  44. public string StartVertex
  45. {
  46. get { return m_StartVertex;}
  47. set
  48. {
  49. if (ValidId)
  50. {
  51. throw new Exception("确定id的点不能修改");
  52. }
  53. m_StartVertex = value;
  54. }
  55. }
  56. private string m_EndVertex;
  57. /// <summary>
  58. /// 结束点
  59. /// </summary>
  60. public string EndVertex
  61. {
  62. get { return m_EndVertex; }
  63. set
  64. {
  65. if (ValidId)
  66. {
  67. throw new Exception("确定id的点不能修改");
  68. }
  69. m_EndVertex = value;
  70. }
  71. }
  72. #endregion
  73. #region 边提供方法
  74. /// <summary>
  75. /// 判断是否包含指定id的点(-1 表示不包含;0,开始点,1,结束点)
  76. /// </summary>
  77. /// <param name="id"></param>
  78. /// <returns>(-1 表示不包含;0,开始点,1,结束点)</returns>
  79. public int ContainVertex(string id)
  80. {
  81. if (StartVertex == id)
  82. return 0;
  83. if (EndVertex == id)
  84. return 1;
  85. return -1;
  86. }
  87. /// <summary>
  88. /// 获取另一个端点Id
  89. /// </summary>
  90. /// <param name="id"></param>
  91. /// <returns></returns>
  92. public string GetAnotherVertex(string id)
  93. {
  94. var flag = ContainVertex(id);
  95. if (flag < 0)
  96. throw new Exception("输入id,必须是开始点或结束点其中一个");
  97. return flag != 0 ? StartVertex : EndVertex;
  98. }
  99. /// <summary>
  100. /// 交换开始结束点
  101. /// </summary>
  102. public virtual void Reverse()
  103. {
  104. var tempId = StartVertex;
  105. StartVertex = EndVertex;
  106. EndVertex = tempId;
  107. }
  108. #endregion
  109. #region 缓存相关数据
  110. #endregion
  111. }
  112. }