From: Paul L. <pa...@sq...> - 2007-05-19 12:56:13
|
On 5/19/07, Thijs Kinkhorst <ki...@sq...> wrote: > On Friday 18 May 2007 12:17, pdo...@us... wrote: > > +//FIXME: please document why it is we have to check the first char of the > > flag but we then go ahead and do a full string comparison anyway. Is this > > a speed enhancement? If not, let's keep it simple and just compare the > > full string and forget the switch block. > > Yes, this is a well known strategy in parsers. The idea is that you do it like > this: > > starts with R? > yes -> > is it References? > yes-> parse References > is it Reply-To? > yes -> parse Reply To > is it Received? > yes -> parse Received > starts with M? > is Message-ID? > yes -> parse Message-ID > > Say you have the header Message-ID, you would now do 3 comparisons (M=R, M=M, > Message-ID=Message-ID) instead of 4 (Message-ID=References, > Message-ID=Reply-To, Message-ID=Received). This is of course a simple case > and the differences becomes larger for each new header you'd add. Problem is that the code in this file is much more simple. There is only one real value under each letter listed. So I don't think it saves any cycles at all -- in terms of number of comparisons (ignoring that they are different kinds), the way we have it ends up doing more comparisons (I think exactly one more than necessary for any one value). - Paul |