[cdev] ������ 4, 135 ��.

Grigoriy A. Sitkarev sitkarev �� komitex.ru
�� ��� 11 22:52:13 MSK 2010


��������, � �� �ӣ �������.

��������, ���-�� ��������� �������� � �������.

��������, ������� ���������:

void
parray_delete(struct parray *pa, void *ptr)
{
	int i;
	for(i = 0; i < pa->nelems; ++i){
		if (pa->data[i] == ptr){
			break;
		}
	}
	
	if (i < pa->nelems){
		if (i == pa->nelems - 1) {
			--pa->nelems;
		}
		if (i < pa->nelems-1){
			--pa->nelems;
			memmove(pa->data + i,
			   pa->data + i + 1,
			   (pa->nelems - (i + 1))*sizeof(void *));
		}
	} else {
		fprintf(stderr, "elems cann't delete\n");
	}
}

� ����� �� �ӣ ������, �� ��� ���� ��� ������:

1. ��� ��� ��� ������� if (i == pa->nelems - 1) � ����� ����� �ģ� if (i 
< pa->nelems-1) ���� ����� �� ���� �������:

if (i == pa->nelems - 1) {
	--pa->nelems;
} else {
	...
}

� ����� � �������� �����. � ������ ������ - ����� �� �������� ���ޣ�� 
���������� ��������� ��������� ������, �� �� ������� ��������� 
pa->nelems �� ����, � ����� ��������� �� ���� �� ������� ������ ��� 
�����. ����� ���� 4-� �������� � �������, ������� �� ������ 1. ���� 
������� �� 4-� - (1+1)=2, 4-2=2, ������� ������� ��������� ����� 
�������� � memmove(), �� (!!!) � ��� ��� ��� ������-�� �� 4, � 3, �.�. 
�� ��������� �������� pa->nelems �� ����� �� �������. ������� ���� 
������� ��� (pa->nelems-i) ��� �� ������ ��������� ����� memmove().

� �ӣ ����� ���� ������������� ��� ��������� ��������, ������ ����� � 
���� ������� ��� ���������� ������� �� ����-��� ������, ����� ���������� 
����� ��������� ������� �� �������.

� �� ������ �ݣ ��� ��������� � ���������� ���� ���������� ��������� 
���������, �����. ����� ��������� ����, � �ݣ ��� �������, ��� �� ����� 
������� � ���� ����.

--
�.�.

������ ��������� �����:
> memmove(pa->data + nth, pa->data + nth + pa->nelems - nth,
> (pa->nelems - (pa->nelems - nth))*sizeof(void *));
> nth ����������� � �� ����� ������� �� ������� �������. ������ ����������
> �����-�� nth ���������, � ������ ���������� ������ ���-��.
> 
> ��� � �� ���� ������ �� �����, ������ ����� � ��������� ������ ��������� ���, ������ ��������� ����, ������ �� ����!!!
> 






��������� ���������� � ������ �������� cdev