Exemple #1
0
/*and return it */
dlist_iter_t DListPushFront(dlist_t *dlist, void *data)
{
	return(DListInsertBefore(dlist, DListBegin(dlist), data));
}
Exemple #2
0
dlist_iter_t DListPushBack(dlist_t *dlist, void *data)
{
	return(DListInsertBefore(dlist, DListEnd(dlist), data));
}
Exemple #3
0
void replace_process(DList* neg_card, DList* pos_card, DList* str)
{
	DListNode *negcard_index = neg_card->head;

//	DListNode *poscard_index = pos_card->head;
	while(negcard_index != NULL)
	{
	 	printf("Current neg card %s\n", negcard_index->str);
		if(str->head == NULL) break;
	#ifdef DEBUG
			printf("Stamp0 ! \n");
	#endif
		if(negcard_index->blankIndex == -1)
		{
	#ifdef DEBUG
			printf("Stamp1 ! \n");
	#endif
			DListNode *newNode = (DListNode *)malloc(sizeof(DListNode));
			copy_replace(negcard_index,NULL,newNode);

			DListNode *pos_iterator = pos_card->head;
			if(pos_iterator == pos_card->tail)	DListInsertBefore(pos_card, NULL, newNode);
			else
			{
			  while(pos_iterator->blankLength == -1 && pos_iterator->next!=pos_iterator)
			    {
			      pos_iterator = pos_iterator->next;
			      //	if(pos_iterator->blankLength != -1) DListInsertBefore(pos_card, pos_iterator, newNode);
			      //	else pos_iterator = pos_iterator->next;
			    }
			  DListInsertBefore(pos_card, pos_iterator, newNode);
			}
			negcard_index = negcard_index->next;
			DListRemove(neg_card, negcard_index->prev);
		}
		else
		{
			DListNode *newNode = (DListNode *)malloc(sizeof(DListNode));
			DListNode *str_iterator = str->head;
#ifdef DEBUG
		printf("Stamp2 ! \n");
#endif
			while(str_iterator != str_iterator->next)
			{
#ifdef DEBUG
			  printf("Str Iterator %s\n", str_iterator->str);
#endif
				if (str_iterator->blankLength == negcard_index->blankLength)
				{

					copy_replace(negcard_index, str_iterator, newNode);
#ifdef DEBUG
		printf("Stamp3 ! \n");
		printf("New Node Str %s \n", newNode->str);
#endif
					break;
				}
				else	str_iterator = str_iterator->next;
			  
			}
			if((str_iterator->blankLength == negcard_index->blankLength) && (str_iterator == str->tail))
			  {
			    copy_replace(negcard_index, str_iterator, newNode);
#ifdef DEBUG
			    printf("Stamp 3'\n");
			    printf("New Node Str %s \n", newNode->str);
#endif
			  }

			if((str_iterator == str->tail) && (str_iterator->blankLength != negcard_index->blankLength))
			{
				negcard_index = negcard_index->next;
				DListRemove(neg_card, negcard_index->prev);
				break;
			}
#ifdef DEBUG
			printf("Stamp 4 ! \n");
#endif

			DListNode *pos_iterator = pos_card->head;
			if(pos_iterator == NULL)	DListInsertBefore(pos_card, NULL, newNode);
			else
			{

			  while((pos_iterator->blankLength < newNode->blankLength)&&(pos_iterator->next != pos_iterator)) pos_iterator = pos_iterator->next;
//				if(pos_iterator->blankLength > newNode->blankLength)
				DListInsertAfter(pos_card, pos_iterator, newNode);
//				else pos_iterator = pos_iterator->next;
			}
#ifdef DEBUG
			DListShow(pos_card);
			printf("Stamp 5!\n");
#endif


			if(negcard_index ->next == negcard_index)
			  {
			    DListRemove(neg_card, negcard_index);
			    negcard_index = NULL;
			  }
			else
			  {
			    negcard_index = negcard_index->next;
			    DListRemove(neg_card, negcard_index->prev);
			  }
			DListRemove(str, str_iterator);
			str_iterator = str->head;
		}

	}
}