>> private int roundDown(int val) {
>> return val >> SHIFT << SHIFT;
>> }
> I would write this as
>
> return val & ~(1 << SHIFT);
That's not the same thing though. I assume you really mean:
return val & ~((1 << SHIFT) - 1);
And in fact that's what was there originally for positive numbers. Negative
numbers were handled differently, for reasons I don't understand (hence why
I'm asking on here).
I think I still prefer val >> SHIFT << SHIFT, it's clearer what's happening
(to me at least, I appreciate everything thinks about these things
differently).
It's also fewer clock cycles unless you're on a 286 or lower ;) Though the
clock cycle argument isn't relevant here, the code is only called twice during
the entire split!
>> private int roundUp(int val) {
>> return (val + (1 << SHIFT) - 1) >> SHIFT << SHIFT;
>> }
> And this one as
>
> return (val + ((1 << SHIFT) - 1))) & ~(1 << SHIFT);
Again, that would need to be (val + ((1 << SHIFT) - 1))) & ~((1 << SHIFT)
- 1);
> It's probably not a big deal, but if SHIFT is a compile-time constant
> and the compiler performs constant folding, the run-time code should
> be shorter and faster.
Yep I'd seen that and had originally coded it that way. I've now actually
moved the code to the Utils class and passed 'shift' in as a parameter for
flexibility, and because in this case performance doesn't matter.
Chris
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev