[fpc-pascal] What is the portable approach?

Alan Mead cubrewer at yahoo.com
Fri Sep 30 18:38:34 CEST 2005


I have data that would fit an associative array if they really
existed in Pascal, but while the key is a string, the values are
reals [0,1].  So, I have been using a TStringList and something like
(from memory):

MyList.AddObjects('key1',pointer(round(value1*maxint));

I realized that someday I might get burned on a 64-bit machine ...
now (using 2.0) I am reminded of this each time I compile.

So.. what's the portable method?  I could declare a real on the heap
and store the pointer to it.  Or I could write an object to hold the
real and instansiate a new object when I add a record?  Or I could
store the values as text using the psuedo-associate properties of
TStringList?

All these seem clunky... I can esily imagine the first two options
resulting in nasty null pointer run-time errors; they at least double
the amount of space I'm using; and I imagine they will be far slower
(I have a program that spends 20% of it's time allocating little tiny
records on the heap). Using text to store a real seems clearly wrong.

Is one of them the right/accepted/guru way to do it?  Or am I missing
an alternative?  Should I be thinking of extending the TStringList
class?

Thanks!

-Alan



More information about the fpc-pascal mailing list