Reference to "Parent"

BlitzMax Forums/BlitzMax Beginners Area/Reference to "Parent"

adrian25(Posted 2005) [#1]
Hi I'm new to BlitzMax and have a quick question for someone who can help!

I want to have an object (let's say objectA) create/manage a list of other objects (let's call this List of objectB's).

I want objectB's to be able to reference it's "Parent" ObjectA when they need to. I tried passing SELF but ObjectB's dont know what type objectA is unless I Include a referenc to ObjectA's file ala:

Include "objectA.bmx"

The problem I'm having is that objectA.bmx is already included in another file thus locked.

A simple problem I'm having is having ObjectA hold a list of ObjectB's and when ObjectB's die off I need them to remove themselves from ObjectA's list of them.

Does this make sense? Ha lots of A's n B's.

Thanks for the help!!!


skidracer(Posted 2005) [#2]
Neither of them should include each other, instead your main program file should include both of them.

You can then use Lock Build file on the main file that includes everything else in order to avoid compiling the other files by themselves which of course they can't due to being inter-dependent on other files in the include tree.

They can however import each other but I won't go there as you should have a solid grip on the include command first.


adrian25(Posted 2005) [#3]
OK so that's cool. That's much cleaner. Thanks.

Now how do I pass a reference of ObjA to ObjB?


Arowx(Posted 2005) [#4]
Maybe something like...
Type ObjectA
   Field ListOfBs:TList
   
   Method release:Int(toRelease:ObjectA) ' receives a reference to the object it should let go
   ... Searches for and releases the object 
   ... Note you might want to use a HashMap (or even Array) 
   ... container if this happens a lot as searching through long lists will be slow!
   End Method

   Method add:Int(toAdd:ObjectB)
      ListOfBs.AddLast(toAdd)
      toAdd.setObjectA(Self)  ' Self is the key for passing this ObjectA back to B
   End Method


End Type
Hope this helps the key to passing back a reference of the current object is Self.


CoderLaureate(Posted 2005) [#5]
Why not extend the TList Object?

Type ObjList Extends TList
    '....
End Type

It already has an add and remove method that you can overload and make whatever changes you like.
Type ObjA
     Field MyParent:ObjB
     'yada yada yada
End Type

Type ObjB Extends TList

     'Overloading the original AddLast method
     Method AddLast:TLink(obj:Object)
          Local oa:ObjA = ObjA(obj)
          if oa <> Null then
               oa.MyParent = Self
               Super.AddLast(oa) 'This calls the original AddLast Method
          end if
     End Method

End Type



adrian25(Posted 2005) [#6]
Thanks for help! Gotta say I'm really diggin BlitzMax.