-------------- Original message ----------------------
From: "Jeremy White" <[EMAIL PROTECTED]>
> >With the following conclusions:
> >1. In all cases the new algorithm is faster. This differs
> > from the results at work in which the Minimum test showed
> > that the existing algorithm was faster.
>
> I'm not convinced that it's worth speeding up this area of Win32::GUI. Even
> if this algorithm was several orders of magnitude faster it wouldn't make
> that much difference (if at all) to a running Win32::GUI programme.
Excellent point and consistent with Glenn Linderman's analysis. Apart from
personal involvement, I am a believer that where you can speed an application
you should. The sum of all very small inefficiencies can lead to a large speed
problem. However, it is a 'feeling' and not a certainty and I certainly see how
there might be a reasonable cause to defer action. Other than the observation
that if all constant search tables were reorganized into the same format as
that used in the GUI_Constants.cpp file then it is possible to develop an
inline binary search function which is everywhere usable, I'm going to abandon
this effort.
And wanting to get the last word in even though I have already gotten the last
word in, modifying all constant searches to use the same data structure reduces
maintenance overhead. For one thing, the current hash algorithm requires coding
for each insertion and the coding requires analysis and checkout. The new
algorithm involves data insertion in a sorted list. No analysis. No coding. If
it works once it works forever. So if one measure of cost is maintainence then
the buyin is both speed and reduction in maintenance time.
And wanting to get yet another last word in over the last, last word. There is
another useful technique in coding which I have independantly discovored (and
since there is "nothing new under the sun" the best that can be said is that
others have discovered it before me). Suppose that after the 'search' the user
wants to do something. Then a companion algorithm would be:
typedef int *function(args); // can never remember the exact syntax
function array[] = { &function1, &function2, ... }
if ( *array[search(arg)] ) statement; //direct execution of a arg dependent
action
Executing a function after a search becomes a direct access into an array of
functions. Since failure conditions are returned with a known value, the array
is prepacked with a function(s) which handle error conditions. And again,
maintenance is reduced to the extent that for new functionality the array is
extended and the function is written but there is no need for new code 'glue'
to determine what to do. Depending on the extent of the 'glue', performance is
increased and the code footprint is reduced.
If you like the idea, it's worth 2 cents (jez's point). If you don't, it's no
cents.
Thank you one and all.
art