in reply to Algorithm::Diff icult to use
Makeshifts last the longest.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
(tye)Re: Algorithm::Diff icult to use
by tye (Sage) on Aug 22, 2002 at 07:42 UTC | |
Thanks again to everyone for the feedback. First, the easy one. I'm not adding a prototype. The existing routines don't have prototypes and I only use prototypes in very specific situations and this isn't one of those. While a LoL isn't very deeply nested, it does open up the possiblity for creating a very large number of very small anonymous arrays. Each array adds a chunk of overhead. For smalls arrays, this overhead becomes a significant percentage. So I like splitting up the return value some but would make it optional. As for adding more fields for convenience, I'm reluctant for two reasons. The first is the same as above; it reduces the size of problem you can address with the same resources. The second is that it makes it harder to remember which index gives you back which bit of information. In fact, this has made me realize that much of what I was returning is redundant. I could reduce it from 5 down to just 2 like so:
by just making the loop logic a bit more complex like so: which gives me a neat idea! I'll store the data very efficiently (a single list with 2 entries per 'hunk') but provide routines for traversing the list in a convenient manner (which also solves my 'naming' problem).
Note how $diff->aRange() returns the lines falling into that range but, in a scalar context, returns the number of lines in that range (the $aLen you wanted) which also happens to be "false" only if there are no lines in that range (like the bits of $diff you asked for). Other methods would include
Note, in case you plan to complain about me optimizing for RAM size by resorting to OO methods, which run a bit slower than regular subroutines (or direct manipulation of a data structure). It is a good trade-off, IMO, because if your problem requires 30% more RAM than what you have available, then either it just fails or it runs really, really slowly. While, it running 10% slower is a minor problem in comparison. - tye (but my friends call me "Tye") | [reply] [d/l] [select] |
by bart (Canon) on Aug 22, 2002 at 09:35 UTC | |
Ouch! Precisely what I wanted to avoid: a modification in the number of items. Well, you could export a constant for this number, whether it be 2 or 5. BTW if memory efficiency is what you're worried about, why don't you just use 1 scalar for each item? After all, these are all just integers, so messing with pack()/unpack() or vec() would allow you to combine them, in one scalar. Only an 8 (or 20) byte string per item! The joy! The savings! (The pain!) | [reply] [d/l] |
by Aristotle (Chancellor) on Aug 22, 2002 at 10:12 UTC | |
Makeshifts last the longest. | [reply] |