70 lines
1.4 KiB
Plaintext
70 lines
1.4 KiB
Plaintext
#define max(a, b) Iif(a>b,a,b)
|
|
|
|
enum datatype
|
|
'for this demonstration we'll allow these five data types
|
|
BOOL
|
|
STRNG
|
|
BYYTE
|
|
INTEG
|
|
FLOAT
|
|
end enum
|
|
|
|
union value
|
|
bool as boolean
|
|
strng as string*32
|
|
byyte as byte
|
|
integ as integer
|
|
float as double
|
|
end union
|
|
|
|
type dicitem
|
|
'one part of the dictionary entry, either the key or the value
|
|
datatype as datatype 'need to keep track of what kind of data it is
|
|
value as value
|
|
end type
|
|
|
|
type dicentry
|
|
'a dic entry has two things, a key and a value
|
|
key as dicitem
|
|
value as dicitem
|
|
end type
|
|
|
|
sub add_dicentry( Dic() as dicentry, entry as dicentry )
|
|
redim preserve Dic(0 to max(ubound(Dic)+1,0))
|
|
Dic(ubound(Dic)) = entry
|
|
return
|
|
end sub
|
|
|
|
redim as dicentry Dictionary(-1) 'initialise a dictionary with no entries as yet
|
|
|
|
dim as dicentry thing1, thing2
|
|
|
|
'generate some test dictionary entries
|
|
with thing1
|
|
with .key
|
|
.datatype = STRNG
|
|
.value.strng = "Cat"
|
|
end with
|
|
with .value
|
|
.datatype = STRNG
|
|
.value.strng = "Mittens"
|
|
end with
|
|
end with
|
|
|
|
with thing2
|
|
with .key
|
|
.datatype = integ
|
|
.value.integ = 32767
|
|
end with
|
|
with .value
|
|
.datatype = float
|
|
.value.float = 2.718281828
|
|
end with
|
|
end with
|
|
|
|
add_dicentry( Dictionary(), thing1 )
|
|
add_dicentry( Dictionary(), thing2 )
|
|
|
|
print Dictionary(0).value.value.strng
|
|
print Dictionary(1).key.value.integ
|