There must be a better way

Unknown W. Brackets unknown at simplemachines.org
Wed Aug 2 00:27:56 PDT 2006


I'm not clear on where your going, but I like to keep things simpler and 
thus more maintainable.  Instead of:

array[wrap(something[var].maxX,currentX)][wrap(something[var].maxY,currentY)];

I would probably prefer...

whatever_t getWrapped(whatever_t[][] array, int x, int y, int var)
{
	return array[wrap(something[var].maxX, x)][wrap(something[var].maxY, y)];
}

Then you'd do:

array.getWrapped(currentX, currentY, var);

Which would seem much easier, and should be optimized out the same with 
inlining.  But this might not be practical depending on what "something" 
is (I'm guessing here it's a lookup or something.)

Also, fwiw, I use inout all the time.  I think there are specific design 
patterns and code paths with which it makes complete sense.  Example:

// Attempt to bring item to the top/head of the linked list.
if (!bringToTop(linked_list, item))
	writefln("Uh oh, %s was not found!", item.toString());

I don't think it's ambiguous that linked_list might be modified.  Just 
my opinion.  I might prefer "linked_list.bringToTop(item)" if it made 
sense, though (since that's even harder to misunderstand.)

-[Unknown]


> Thanks for the maths :)
> The maximum are not constant and writing out the place they live would yield 
> to something like:
> 
> array[wrap(something[var].maxX,currentX)][wrap(something[var].maxY,currentY)];
> 
> So the int was a bit of a hack... sorry :)
> 
> About the inout:
> How would you do something like this?
> 
> bool something(inout structure struc ,int var){
>   for (int i=0; i < struc.data[].length; i++){
>     if(struc.data[i].count==0){
>       struc.data[i].type=var;
>       struc.data[i].count=30;
>       return true;
>     }
>   }
>   return false;
> }
> 
> 
> 
> 
> 
> 
> 



More information about the Digitalmars-d-learn mailing list