Wireshark-dev: Re: [Wireshark-dev] RFC: sorted value_string + bsearch
From: Anders Broman <anders.broman@xxxxxxxxxxxx>
Date: Thu, 22 Apr 2010 16:06:39 +0200
 

-----Original Message-----
From: wireshark-dev-bounces@xxxxxxxxxxxxx [mailto:wireshark-dev-bounces@xxxxxxxxxxxxx] On Behalf Of Jakub Zawadzki
Sent: den 22 april 2010 15:40
To: Developer support list for Wireshark
Subject: Re: [Wireshark-dev] RFC: sorted value_string + bsearch

On Tue, Apr 20, 2010 at 11:43:49PM +0200, Anders Broman wrote:
>> Would it be faster to use hash tables instead of very large 
>> value_strings? In diameter i think 3gpp AVP codes are in a 
>> value_string > 2k
>
>I think main problem with hash tables, is that you need to have big table, and good hash function.
>
>
>Binary search is O(log2 n), so for 5k we have at most 13 lookups.
>To achieve it with hash table we need 384 (5000/13) buckets (HASHPORTSIZE in addr_resolv.c is only 256).
>
>And I think it's hard to implement hash tables, using current value_string ABI.
>
>Cheers.
Disclaimer: Hobby C programmer :-)

A crude sketch:
I was hoping it would be possible to provide a pointer to the hash table like:
-	{ &hf_diameter_vendor_id,
-		  { "VendorId",	"diameter.vendorId", FT_UINT32, BASE_DEC, VALS(sminmpec_values),
-			  0x0,NULL, HFILL }},
+	{ &hf_diameter_vendor_id,
+		  { "VendorId",	"diameter.vendorId", FT_UINT32, BASE_DEC, HASH_VALS(hastablep),
+			  0x0,NULL, HFILL }},

Use g_hastable_new_full() gint version and stuff the value_string into the hash table
In proto_register, then have proto.c extract the value. Alternatively we could perhaps
Pass a "get_value" function pointer?
 I'm not sure this will work :-)

Regards
Anders
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@xxxxxxxxxxxxx>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe