Finding an item in a collection of types

Blitz3D Forums/Blitz3D Programming/Finding an item in a collection of types

LostCargo(Posted 2003) [#1]
Okay here is the issue. I have 5 or 6 checkboxes for the gui i am desigining. And each is a type. Each is assigned a unique name.
However, i want to be able to get the state/value of that checkbox, but simply passing its unique name into a function.
The code below works. But if its called every game loop one function slows the entire game down immensely.

Anyone know a better way to do this?




;==========================================================
;GET THE VALUE OF THE GIVEN CHECK BOX
;=========================================================
Function GUI_GET_CHECKBOX_VAL( CHECKBOXNAMESTR$ )
For TARGET_CHECK.GUI_CHECKBOX_TYPE=Each GUI_CHECKBOX_TYPE
If TARGET_CHECK\NAME$ = CHECKBOXNAMESTR$ Then

Return TARGET_CHECK\Value
End If
Next
End Function


SSS(Posted 2003) [#2]
well you could use handles... like have instead of a name the function would return a handle then you could just do
TargetCheck.Gui = Object.Target(handle)
return TargetCheck\Value


DrakeX(Posted 2003) [#3]
5 or 6 types shouldn't slow it down that much!

should it?


LostCargo(Posted 2003) [#4]
DrakeX ,
well, i think it super slow because i was using the function inefficiently in sub loop (dumb mistake). but now i am interested in finding a better way of doing this since it has peaked my interest.

SSS,
Is this an undocumented method or is it standard practice?


cyberseth(Posted 2003) [#5]
Why not check against the gadget handle instead of the name? Just like images, sounds and meshes, gadgets have a handle number.

Type checkbox
    Field hnd
End Type

For i=1 to 5
    chk.checkbox = new checkbox
    chk\hnd = CreateButton(.......)
Next

Function FindChecked.checkbox()
    ; This function returns a chk type reference so you can use it like...
    ; chk.checkbox = FindChecked()

    For chk.checkbox = each checkbox
        If ButtonState(chk\hnd) = 1
            Return chk
        End If
    Next
End Function



LostCargo(Posted 2003) [#6]
The speed of the comparision isnt any faster. The function still needs to iterate through the loop.
I was hoping for something a bit more in the flavor of a native function.

i might use SSS's method dealing with the handles is a good idea, but i need more of a human interface. By this i mean a method that a developer can use tofind a checkbox by using the name, since the developer is not going to know the handle id right off the bat.

Thanks for the help though. Very much appreciated


SSS(Posted 2003) [#7]
well the developer could know the handle right off the bat if you did something like this

type Button
    field x,y
    ....
end type


function CreateButton(...)
   b.Button = new Button
   ;set the parameters

   return Handle(b)
end function

function FindButton.Button(hButton)
    b.Button = Object.Button(hButton)
    return b
end function



LostCargo(Posted 2003) [#8]
ahh.. there we go... thanks SSS.