예제 #1
0
파일: rfbregion.c 프로젝트: DjCBS3/vino
static rfbBool
sraSpanListEqual(const sraSpanList *s1, const sraSpanList *s2) {
  sraSpan *sp1, *sp2;

  if (!s1) {
    if (!s2) {
      return 1;
    } else {
      printf("sraSpanListEqual:incompatible spans (only one NULL!)\n");
      return FALSE;
    }
  }

  sp1 = s1->front._next;
  sp2 = s2->front._next;
  while ((sp1 != &(s1->back)) &&
	 (sp2 != &(s2->back))) {
    if ((sp1->start != sp2->start) ||
	(sp1->end != sp2->end) ||
	(!sraSpanListEqual(sp1->subspan, sp2->subspan))) {
      return 0;
    }
    sp1 = sp1->_next;
    sp2 = sp2->_next;
  }

  if ((sp1 == &(s1->back)) && (sp2 == &(s2->back))) {
    return 1;
  } else {
    return 0;
  }    
}
예제 #2
0
파일: rfbregion.c 프로젝트: AlexWMF/Carberp
static void
sraSpanMergePrevious(sraSpan *dest)
{
    sraSpan *prev;

    if (!dest)
        return;

    prev = dest->_prev;

    while ((prev->_prev) &&
            (prev->end == dest->start) &&
            (sraSpanListEqual(prev->subspan, dest->subspan)))
    {
        /*
        printf("merge_prev:");
        sraSpanPrint(prev);
        printf(" & ");
        sraSpanPrint(dest);
        printf("\n");
        */
        dest->start = prev->start;
        sraSpanRemove(prev);
        sraSpanDestroy(prev);
        prev = dest->_prev;
    }
}
예제 #3
0
파일: rfbregion.c 프로젝트: DjCBS3/vino
static void
sraSpanMergeNext(sraSpan *dest) {
  sraSpan *next = dest->_next;
  while ((next->start == dest->end) &&
	 (next->_next) &&
	 (sraSpanListEqual(next->subspan, dest->subspan))) {
/*
	  printf("merge_next:");
    sraSpanPrint(dest);
    printf(" & ");
    sraSpanPrint(next);
    printf("\n");
	*/
    dest->end = next->end;
    sraSpanRemove(next);
    sraSpanDestroy(next);
    next = dest->_next;
  }
}