GetLastInList

BlitzMax Forums/BlitzMax Beginners Area/GetLastInList

Matt McFarland(Posted 2005) [#1]
How do I get the last object in a linked list?

I was hoping Object.GetLastInList would work but it doesnt.
Any ideas?


Oddball(Posted 2005) [#2]
The method Last() returns the last Object in a Tlist.

Example
lastobj:Object=mylist.Last()



Matt McFarland(Posted 2005) [#3]
Thank you very much your post was very helpful and will be applied to my program. However, I have another question.

Lets say I made a program that let me go through each type one by one.

If I hit the UP ARROW, I would go to the NEXT type, and if I hit the DOWN ARROW, I would go to the PREVIOUS type.

Now if I hit the UP ARROW and I was at the last type, then obviously I would want it to go to the FIRST type (from first to last if down arrow hit respectrivly)

How do you select each type?

All I can see is First, Last, and EachIn() but not a specific number?


Matt McFarland(Posted 2005) [#4]
WARPY from the #blitzbasic IRC responded with a great answer..
We need to add links.. and we're good to go..
mylist:TList=New TList
'(fill up list)

link:TLink=mylist.FirstLink()

While whatever
   If KeyHit(KEY_UP)
      'move to previous item
      If link.PrevLink()
         link=link.PrevLink()
      Else 'this was the first link, so wrap around to the last one in the list
         link=mylist.LastLink()
      EndIf
   ElseIf KeyHit(KEY_DOWN)   
      'move to next item
      If link.NextLink()
         link=link.NextLink()
      Else 'this is the last link, so wrap around to the first one in the list
         link=mylist.FirstLink()
      EndIf
   EndIf

'do whatever you do with the current link here

Wend



tonyg(Posted 2005) [#5]
Might be too late but does this help...
prevlink


Matt McFarland(Posted 2005) [#6]
you mean:
www.BlitzMax.com/Community/posts.php?topic=51996&hl=prevlink

lol


tonyg(Posted 2005) [#7]
... don't know what you mean :)
Anyway, if that's LOL then keep away from the Comedy store. :)


Matt McFarland(Posted 2005) [#8]
LOL

All your cookies are belong to blitzmax now.


Matt McFarland(Posted 2005) [#9]
For some reason I cant get any of the field data from the Object when I do it this way.
It treats it like the field data does not exist, why?
Please pay attention to the code with ***** in front of it
Type TBezier

	Field x1,x2,vx1,vx2,y1,y2,vy1,vy2
	Field t:Float
	Field pointx:Float,pointy:Float

	Function AddBezier(x1,x2,vx1,vx2,y1,y2,vy1,vy2)
		Local Bezier:TBezier = New TBezier

		Bezier.x1=x1  ' ***************  But x1 IS DEFINED
		Bezier.y1=y1
		Bezier.x2=x2
		Bezier.y2=y2
		Bezier.vx1=vx1
		Bezier.vx2=vx2
		Bezier.vy2=vy2
		Bezier.vy1=vy1
		
		BezierList.AddLast(Bezier)

	End Function

	Function DrawBeziers()
		For Local Bezier:TBezier = EachIn BezierList
			For Bezier.t:Float=0 To 1 Step .005
				Bezier.pointx:Float = bezier.x1*(1-bezier.t)^3 + 3*bezier.vx1*(1-bezier.t)^2*bezier.t + 3*bezier.vx2*(1-bezier.t)*bezier.t^2 + bezier.x2*bezier.t^3
				Bezier.pointy:Float = bezier.y1*(1-bezier.t)^3 + 3*bezier.vy1*(1-bezier.t)^2*bezier.t + 3*bezier.vy2*(1-bezier.t)*bezier.t^2 + bezier.y2*bezier.t^3
				SetColor 180,180,180
				Plot bezier.pointx,bezier.pointy
			Next
		Next
	EndFunction
	Function SubBezier()
		Local Bezier = BezierList.Last()
		Print Bezier.x1 ' ******************** <- This will return an error saying x1 is not found
		BezierList.Remove(Bezier)
	End Function
End Type



Perturbatio(Posted 2005) [#10]
Type TBezier

	Field x1,x2,vx1,vx2,y1,y2,vy1,vy2
	Field t:Float
	Field pointx:Float,pointy:Float

	Function AddBezier(x1,x2,vx1,vx2,y1,y2,vy1,vy2)
		Local Bezier:TBezier = New TBezier

		Bezier.x1=x1  ' ***************  But x1 IS DEFINED
		Bezier.y1=y1
		Bezier.x2=x2
		Bezier.y2=y2
		Bezier.vx1=vx1
		Bezier.vx2=vx2
		Bezier.vy2=vy2
		Bezier.vy1=vy1
		
		BezierList.AddLast(Bezier)

	End Function

	Function DrawBeziers()
		For Local Bezier:TBezier = EachIn BezierList
			For Bezier.t:Float=0 To 1 Step .005
				Bezier.pointx:Float = bezier.x1*(1-bezier.t)^3 + 3*bezier.vx1*(1-bezier.t)^2*bezier.t + 3*bezier.vx2*(1-bezier.t)*bezier.t^2 + bezier.x2*bezier.t^3
				Bezier.pointy:Float = bezier.y1*(1-bezier.t)^3 + 3*bezier.vy1*(1-bezier.t)^2*bezier.t + 3*bezier.vy2*(1-bezier.t)*bezier.t^2 + bezier.y2*bezier.t^3
				SetColor 180,180,180
				Plot bezier.pointx,bezier.pointy
			Next
		Next
	EndFunction
	Function SubBezier()
		Local Bezier:TBezier = BezierList.Last() <---- need to define the type
		Print Bezier.x1 ' ******************** <- This will return an error saying x1 is not found
		BezierList.Remove(Bezier)
	End Function
End Type



BlackSp1der(Posted 2005) [#11]
Why I can't run the code?

Compiler Error
Unable to convert from 'Object' to 'TBezier'

line:
Local Bezier:TBezier = BezierList.Last()


Brucey(Posted 2005) [#12]
If that line is a problem then try this :
Local Bezier:TBezier = TBezier(BezierList.Last())

casting from Object (which I assume Last() is returning?) to your TBezier type.


BlackSp1der(Posted 2005) [#13]
Thanks Brucey.