//custom contains function for this object
 private bool custom_Contains(queryPoint qp)
 {
     foreach (queryPoint p in this.qpointsList)
     {
         if (custom_Equals(p, qp))
             return true;
     }
     return false;
 }
 //add query edge qe to query point qp
 public void addQueryEdgeToQueryPoint(queryPoint qp, queryEdge qe)
 {
     for (int i = 0; i < this.qpointsList.Count; i++)
     {
         queryPoint p = this.qpointsList.ElementAt(i);
         if (custom_Equals(p, qp))
             this.qpointsList.ElementAt(i).addEdge(qe);
     }
     return;
 }
 //custom equals function for thisn object
 private bool custom_Equals(queryPoint p, queryPoint qp)
 {
     return (p.points.X == qp.points.X && p.points.Y == qp.points.Y);
 }
 //add qp to the qpList
 public void addQueryPoint(queryPoint qp)
 {
     if (!custom_Contains(qp))
         this.qpointsList.Add(qp);
 }
 public bool Equals(queryPoint other)
 {
     return (this.points.X == other.points.X && this.points.Y == other.points.Y);
 }