[sane-devel] Fixing sequencing issues (was Re: Proposed Upgrade (pu) branches on GitLab)
Johannes Meixner
jsmeix at suse.de
Thu Oct 1 11:46:20 UTC 2015
Hello,
an addendum only for the fun of it that is not meant
as starting point for a discussion about coding style:
On Sep 28 21:07 m. allan noah wrote (excerpt):
> On Mon, Sep 28, 2015 at 7:04 AM, Johannes Meixner <jsmeix at suse.de> wrote:
>> In sane-backends-git20150928 in backend/microtek2.c
>> there is line 7456:
>>
>> ms->buf.current_src = ++ms->buf.current_src % 2;
>>
>> My "decent educated guess" is that
>>
>> ++ms->buf.current_src;
>> ms->buf.current_src = ms->buf.current_src % 2;
>>
>> is meant.
>
> I'd guess it is just trying to swap 0 and 1, since all it is used for
> is an index into ms->buf.src_buffer, which is defined as:
> uint8_t *src_buffer[2]; /* two buffers because of CCD gap */
>
> So all the code should do is:
>
> ms->buf.current_src = ! ms->buf.current_src;
>
A perfect example for a "source code extremist" (TM Olaf Meeuwissen)
point of view ;-)
I think when the actual meaning is to toggle between
using src_buffer[0] and src_buffer[1] then the toggling
should be made obvious by explicit coding.
For the fun of it here an example what I mean:
--------------------------------------------------------------------------
// array[size > 2] cyclic access versus array[2] access via toggling:
#include <stdio.h>
#include <stdlib.h>
#define array_size 3
int
main (int argc, char *argv[])
{
int i;
int array[array_size];
int array_index;
for (array_index = 0; array_index < array_size; ++array_index)
{ array[array_index] = array_index * 2;
}
array_index = 0;
for (i = 0; i < 6; ++i)
{ fprintf (stdout, "array[%i]=%i\n", array_index, array[array_index]);
// next array element and wrap around:
array_index = (array_index + 1) % array_size;
}
char toggle[] = { 'a', 'b' };
int toggle_state = 0;
for (i = 1; i <= 6; ++i)
{ fprintf (stdout, "toggle[%i]=%c\n", toggle_state, toggle[toggle_state]);
// Bad because fragile dependency on i (fails for i=0..5)
// and obscure constant 2:
// toggle_state = i % 2;
// Better but obscure not operation insted of explicit value setting:
// toggle_state = ! toggle_state;
// Explicit toggling "if it is 0 make it 1 otherwise make it 0":
toggle_state = (toggle_state == 0) ? 1 : 0;
}
return EXIT_SUCCESS;
}
--------------------------------------------------------------------------
So from my "source code extremist" point of view
explicite coding should be:
ms->buf.current_src = (ms->buf.current_src == 0) ? 1 : 0;
Again: This is only for the fun of it and not intended
to have microtek2.c changed again.
Kind Regards
Johannes Meixner
--
SUSE LINUX GmbH - GF: Felix Imendoerffer, Jane Smithard,
Graham Norton - HRB 21284 (AG Nuernberg)
More information about the sane-devel
mailing list