In Memory String Pool
I spent the whole day on just two aspects of this class.
The first part was trying to create a new type of object which matches a given type of
SPObject, and compares either larger or smaller than every instance of that type. I called this class
SPLimit. I had initially hoped to create a kind of
SPObject whose byte buffer would always compare larger or smaller, but on closer inspection I realised that the byte buffer could be translated into almost any kind of data type, and this plan would not work.
Instead I had to override the comparator to enforce my semantics. To avoid excessive usage of the expensive
instanceof operator, I introduced a new method to
comparatorOverride which returns a boolean. The comparator calls this on its arguments before deciding to proceed normally or with my new comparison operation.
I also re-worked the existing lowValue-highValue version of the
findGNodes method to make it a little simpler and straightforward. I also noticed that I could probably avoid creating a new set for appending an
SPObject if I play with the iterators a little more. I haven't done this yet, but it may be worthwhile, as it would allow subsets to be exclusively used, saving significantly on memory in some circumstances.
The other part of the code was a new
Tuples object for returning from the two
findGNodes methods. Internally I had a sorted set of the required
SPObject, but the required data was a
Tuples of local nodes (which are all long integers). This was a relatively simple wrapper which does a translation from
long as required. Unfortunately it took a long time to implement something so simple (and get it right), as
Tuples has 21 of methods other than the constructor.
I left the
SetWrapperTuples as a private inner class of
MemoryStringPoolImpl. This was partly to hide it, and also to provide access to the private maps that the
MemoryStringPoolImpl holds, so it can do local node lookups on the fly.
This took me all day, and I only just got it compiling by the time I had to leave, so I won't be testing and debugging until tomorrow.
I saw Bob again today, and discussed a couple of useful things. I hadn't done much as I should have, but I figured I could wing it. However, toward the end he confirmed with me that after the triathlon this weekend that I would start "thinking again".
Oops. Looks like I got caught out. :-)
While I'm at it, this blog has been suffering lately as well. Perhaps I'll start putting some more effort in again after the weekend. In the meantime, I'm just concentrating on exercise, food and rest, so my technical interests are taking a back seat.
Tuesday, November 02, 2004
In Memory String Pool