Custom Types and TMaps

BlitzMax Forums/BlitzMax Beginners Area/Custom Types and TMaps

CASO(Posted 2007) [#1]
Is there a way to create a TMap with a values of a custom type?

Example:
Type TCountry
	Field Hemi$
	Field People$
EndType

Map=CreateMap()
Local a:TCountry
	a.Hemi="West"
	a.People="American"
	MapInsert(Map,"america",a)
Local b:TCountry
	b.Hemi="East"
	b.People="Chinese"
	MapInsert(Map,"china",b)
Local c:TCountry
	c.Hemi="West"
	c.People="Canadian"
	MapInsert(Map,"canada",c)
Local d:TCountry
	d.Hemi="East"
	d.People="Indian"
	MapInsert(Map,"india",d)

Repeat
	In$=Input$()
	If MapContains(Map,In)
		Print "Hemisphere: "+MapValueForKey(Map,In).Hemi
		Print "People: "+MapValueForKey(Map,In).People
	Else
		Print "Not Recognised"
	EndIf
Until In=""



CASO(Posted 2007) [#2]
WOW! I searched and searched...gave up...created a topic...wandered around...found the solution ten minutes later.

Apparently you have to cast the value to the type.
		Print "Hemisphere: "+TCountry(MapValueForKey(Map,In)).Hemi
		Print "People: "+TCountry(MapValueForKey(Map,In)).People



Dreamora(Posted 2007) [#3]
Sure, all datastructures only return OBJECT, if you want to access anything on it, you first must have an object of your desired class again.


Zethrax(Posted 2007) [#4]
This gave me some grief at one point, too, until I got the hang of doing a type cast. One of the many things in BlitzMax that needs better documentation.

Mark could probably give himself a fairly big pay rise by giving the docs some serious love. Most people are put off from buying products with inadequate documentation.


Czar Flavius(Posted 2007) [#5]
Just to be nosey, might you consider making the hemisphere and possibly the people into types of their own? Storing the text string east/west/etc multiple times doesn't seem an efficient solution and is easy to make inconsistant.