try find the fastest way to convert a group string into index?

Diederik de Groot ddegroot at talon.nl
Sun Sep 16 10:56:33 UTC 2018


Homework ?

I think it would also be better to only walk/match the 
Header.data and header_keys only once (using the generated switch 
statement that Vladimir suggested). So your Headers struct should 
have a parse() function, which will match all of the headers to 
the keys and store them locally in a 'matches[Type] = string' 
array (aka map). Then the get() function can simply  return 
matches[type] without any work.

Other improvements/Bonus Points:
- Because the parse() function is only called/initialize once, 
you could make the matches array immutable/const if.
- Your Type enum and header_keys contain the same data, and if 
you are going to use Vlafimir's suggestion of using a mixin, you 
can stringify the enum names an use them instead. This way you 
don't have to keep anything  in sync.
- If these Headers are coming from a client over the internet, it 
might be wise to set and check some (arbitrary) bounds for 
header-length and content. You are currently blindly copying it 
and expecting it is 'clean/correct'.
- Why copy the data to Header.data, instead of just providing it 
by ref to the get()/parse() function. You are copying it to then 
later indexing into Header.data using the map(). Why not 
copy/move piecemeal and assign them to an indexed array after 
inspecting/matching them. That  could make for cleaner code and 
nicer API. (With two caveats: we could loose the original headers 
if we don't save them somewhere else and unmatched/unknown Header 
Types will not be copied).



More information about the Digitalmars-d-learn mailing list