Нет, там написано именно то, что хотели, просто так хотели (неподумавши).
Там циклический буфер размеорм 1/2/4/8К, "указатели" IP - 32-битные, но в буфере может не более его размера, поэтому для размера (в другом месте - для свободного места в буфере) достаточно 16-битной переменной. Для количества принятых данных вычитать всегда надо из указателя головы указатель хвоста и всё.
<{POST_SNAPBACK}>
Если циклический буфер, то так писать можно при условии, что размер буфера равен макс. числу в перенной size (65536 для 16bit int). Иначе надо писать size = (wr_ptr - rd_ptr) % BUFFER_SIZE; без всяких if.
Или, для оригинального варианта, следует заменить 0 на BUFFER_SIZE:
uint size;
ulong wr_ptr,rd_ptr;
if(wr_ptr >= rd_ptr) size = wr_ptr - rd_ptr;
else size = BUFFER_SIZE - rd_ptr + wr_ptr;
консенсус? :cheers:
<{POST_SNAPBACK}>
Может быть тогда не
uint size;
ulong wr_ptr,rd_ptr;
if(wr_ptr >= rd_ptr) size = wr_ptr - rd_ptr;
else size = BUFFER_SIZE - rd_ptr + wr_ptr;
а
uint size;
ulong wr_ptr,rd_ptr;
if(wr_ptr >= rd_ptr) size = wr_ptr - rd_ptr;
else size = (0xFFFF + 1 ) - rd_ptr + wr_ptr;
для понятности