User defined types (or UDTs) are structures that you can use in most BASIC
languages, Rapid-Q is no exception.
Using
TYPE
Here's an example of a user defined type: TYPE TWorld
CityName(100) AS STRING
Population(100) AS LONG
END TYPE
DIM World AS TWorld
As you can see, you can have arrays within UDTs. You can also create
arrays of UDTs: TYPE TWorld
CityName(100) AS STRING
Population(100) AS LONG
END TYPE
DIM Country(100) AS TWorld
There is currently an issue with the memory address of your array (within
UDT). Please note that this is hardly ever noticed unless you're going to pass
one of these structures to a DLL that require arrays within UDTs. This address
problem won't affect your program, but it's hard to explain (without getting too
deep). NOTE: it only occurs when you create arrays of UDTs that have arrays
within UDTs. In the first example (higher up), there is no address problem since
you're not creating an array of UDTs. You can safely pass that to a DLL.
Copying UDTs
To copy 2 UDTs, just
assign the two: TYPE TStuff
A AS LONG
B AS INTEGER
END TYPE
DIM S1 AS TStuff
DIM S2 AS TStuff
S1 = S2
Contents in S2 are copied to S1. When dealing with arrays within UDTs, the
arrays are not copied, only referenced. To copy arrays of UDTs, you'll have to
manually copy each one: DIM S1(100) AS TStuff
DIM S2(100) AS TStuff
FOR I = 1 TO 100
S1(I) = S2(I)
NEXT
Unhooking TYPE
There are
actually 2 ways to create your types, with TYPE and STRUCT. STRUCT is actually
mirrored in TYPE, to unhook the two, you have to undefine TYPE. $UNDEF TYPE
TYPE TWorld
CityName(100) AS STRING
Population(100) AS LONG
END TYPE
DIM World AS TWorld
Using TYPE and STRUCT are not the same. If you unhook the two, TYPE now
reverts back to the old style (pre-May 17 version), where arrays of UDTs is not
allowed. Why the heck would I want a stripped down version? Well, perhaps
performance. The old style TYPE lacks in many things, but makes up in
performance, if that's really necessary.