On Tue, Jan 14, 2014 at 12:22 AM,  <q...@c9x.me> wrote:
> On Mon, Jan 13, 2014 at 11:19:49AM -0800, Silvan Jegen wrote:
>> I have rewritten "tr" to use mmap and the wchar.h functions. It seems
>> to be quite slow but as far as I can tell it works reasonably well (at
>> least when using a UTF-8 locale). Comments/review and testing welcome
>> (I am relatively new to C so beware)!
>>
>> +     void (*mapfunc) (const wchar_t*, char*);
>> +
>> +     setlocale(LC_ALL, "");
>> +
>> +     mappings = (wchar_t *) mmap(NULL, 0x110000 * sizeof(wchar_t), 
>> PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
>> +
>> +     if(argc >= 2) {
>> +             parse_mapping(argv[0], argv[1], mappings);
>> +             mapfunc = map_to_set;
>> +     } else {
>> +             parse_mapping(argv[0], NULL, mappings);
>> +             mapfunc = map_to_null;
>> +     }
>> +
>> +     while(afgets(&buf, &size, stdin))
>> +             mapfunc(mappings, buf);
>
> Hi,
>
> if you want it to be faster I would suggest dropping the function
> pointer so the compiler can inline instead of doing an indirect
> call.

I wasn't aware of the performance implications when using a function pointer.

I will try to implement the function in a way that allows for it to be
inlined by the compiler and maybe do some measurements.

Thanks for the suggestion!


Cheers,

Silvan

Reply via email to