On Fri, Apr 23, 2010 at 04:18:40PM +0200, Anders Broman wrote:
> +const gchar*
> +match_strval_fast(const guint32 val, const value_string_fast *vs) {
> + guint low, idx, max;
> + guint32 item;
> + if(vs) {
> + switch(vs->match_type){
> + case VS_SEARCH:
> + match_strval( val, vs->vals);
> + break;
> + case VS_INDEX:
> + return vs->vals[val].strptr;
I think you need:
return (val < vs->length) ? vs->vals[val].strptr : NULL;
anyway sorry, but I dislike your idea :)
I would prefer other function or even macro:
#define match_strval_hyper_fast(val, vs) \
(val >= 0 && val < array_length(vs) && vs[val].val == val) ? \
vs[val].strptr : match_strval(val, vs) /* fallback (?) */
>> I think this is a good idea, but it obviously requires the value string
>> array to be properly sorted for it to work well.
>> And the bigger the array, the more enticing it would be to use this faster
>> method, but I think it will also be potentially harder to ensure that those
>> bigger arrays are indeed properly sorted.
>> Developers are bound to make mistakes, especially with the very large
>> arrays, and as other developers add new entries, they may not know that a
>> particular array is supposed to be sorted, and even if they do, there's no
>> guarantee that a properly sorted array will remain so.
Can't we do this check in tmp_fld_check_assert()?
I think most of value_strings are registered...
___________________________________________________________________________
Sent via: Wireshark-dev mailing list <[email protected]>
Archives: http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
mailto:[email protected]?subject=unsubscribe