Exemplo n.º 1
0
/// Delete event and reconnect surrounding events in queue
void eventQueue::DeleteEvent(Event *ev) 
{
#ifdef EQ_SANITIZE
  sanitize();
#endif
  Event *tmp;
  CmiAssert(ev != currentPtr);
  CmiAssert(ev->spawnedList == NULL);
  CmiAssert(ev != frontPtr);
  CmiAssert(ev != backPtr);
  // if ev is earliest straggler, see if there is another
  if (RBevent == ev) {
    RBevent = NULL;
    tmp = ev->next;
    while ((tmp != currentPtr) && (tmp != backPtr) && (tmp->done == 1))
      tmp = tmp->next;
    if ((tmp != currentPtr) && (tmp != backPtr) && (tmp->done == 0))
      RBevent = tmp;
  }
  // connect surrounding events
  ev->prev->next = ev->next;
  ev->next->prev = ev->prev;
  POSE_TimeType ts = ev->timestamp;
  if (!ev->done) eventCount--;
  else mem_usage--;
  delete ev; // then delete the event
  if (ts == largest) FindLargest();
#ifdef EQ_SANITIZE
  sanitize();
#endif
}
Exemplo n.º 2
0
// given a non-empty tree t, return the largest element in the tree
int FindLargest(struct TreeNode *t) {
	if (t->right==0) {
		return t->d;
	} else {
		return FindLargest(t->right);
	}
}
Exemplo n.º 3
0
cv::Mat PathDetect::GetPath(const cv::Mat& input) const
{
    cv::Mat watershedImage = WatershedImage(input);
    FindLargest(watershedImage);
    return watershedImage;
}
Exemplo n.º 4
0
bool GPanel::Pour(GRegion &r)
{
	int Sx = CalcWidth();
	GRect *Best = 0;
	if (Open())
	{
		Best = FindLargest(r);
	}
	else
	{
		Best = FindSmallestFit(r, Sx, ClosedSize);
		if (!Best)
		{
			Best = FindLargest(r);
		}
	}

	if (Best)
	{
		GRect r = *Best;
		if (OpenSize > 0)
		{
			int Size = ((Open()) ? OpenSize : ClosedSize);
			int Limit = 30;
			if (TestFlag(Align, GV_EDGE_RIGHT) ||
				TestFlag(Align, GV_EDGE_LEFT))
			{
				Limit = min(Size, r.X()-1);
			}
			else /* if (TestFlag(Align, GV_EDGE_BOTTOM) ||
					 TextFlag(Align, GV_EDGE_TOP)) */
			{
				Limit = min(Size, r.Y()-1);
			}
			
			if (Align & GV_EDGE_RIGHT)
			{
				r.x1 = r.x2 - Limit;
			}
			else if (Align & GV_EDGE_BOTTOM)
			{
				r.y1 = r.y2 - Limit;
			}
			else if (Align & GV_EDGE_LEFT)
			{
				r.x2 = r.x1 + Limit;
			}
			else // if (Align & GV_EDGE_TOP)
			{
				r.y2 = r.y1 + Limit;
			}
			
			if (!Open())
			{
				r.x2 = r.x1 + Sx - 1;
			}
		}
		else
		{
			r.y2 = r.y1 - OpenSize;
		}

		SetPos(r, true);

		return true;
	}

	return false;
}