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