[Resolved] Structure and list in structure

Just starting out? Need help? Post your questions and find answers here.
Golfy
User
User
Posts: 97
Joined: Wed Mar 21, 2012 6:10 pm

[Resolved] Structure and list in structure

Post by Golfy »

Hi everybody,

working on Velbus house automation, the object concept would have helped me but Purebasic isn't good at that.
I've module with attributes : class, address, type, NumberPart, and...
I've part with attributes : name, partID, status, etc.

My problem is that a kind of module have only one part whereas some other could have up to 32 parts

I was thinking about 2 structures :
Structure Module and Structure Part... but I don't know how to link the two Structure (without inherit possibilities)

I was thinking to a list in structure but not sure it will work??? and maybe there are better solutions I've not seen ??? please help me "Obiwan you're our only hope" ;)
Last edited by Golfy on Sat Jul 28, 2018 4:59 pm, edited 1 time in total.
User avatar
StarBootics
Addict
Addict
Posts: 1006
Joined: Sun Jul 07, 2013 11:35 am
Location: Canada

Re: Structure and list or array in structure

Post by StarBootics »

Golfy wrote:Hi everybody,

working on Velbus house automation, the object concept would have helped me but Purebasic isn't good at that.
I've module with attributes : class, address, type, NumberPart, and...
I've part with attributes : name, partID, status, etc.

My problem is that a kind of module have only one part whereas some other could have up to 32 parts

I was thinking about 2 structures :
Structure Module and Structure Part... but I don't know how to link the two Structure (without inherit possibilities)

I was thinking to a list in structure but not sure it will work??? and maybe there are better solutions I've not seen ??? please help me "Obiwan you're our only hope" ;)

Code: Select all

Structure Part
  
  name
  partID
  status
 
EndStructure

Structure VelbusModule
  
  class
  address
  type
  NumberPart
  List Parts.Part()
  
EndStructure
This will work. if the memory is not a problem :

Code: Select all

Structure Part
  
  name
  partID
  status
 
EndStructure

Structure VelbusModule
  
  class
  address
  type
  NumberPart
  Parts.Part[32]
  
EndStructure
will also work.

Best regards
StarBootics
Last edited by StarBootics on Sun Aug 12, 2018 11:11 pm, edited 1 time in total.
The Stone Age did not end due to a shortage of stones !
Golfy
User
User
Posts: 97
Joined: Wed Mar 21, 2012 6:10 pm

Re: Structure and list or array in structure

Post by Golfy »

But to be sure, is this code correct then ?

Code: Select all

    ; No module. This message is the first. We've to create it !
    AddElement(VMBModule())
    VMBModule()\modClass = GetClassName(Octet(2))
    VMBModule()\modPartNumber = GetPartNumber(Octet(2))
    For t=0 To VMBModule()\modPartNumber-1
      AddElement(VMBModule()\modPart())
    Next t
Or should I use AddElement(modPart()) directly ?
Golfy
User
User
Posts: 97
Joined: Wed Mar 21, 2012 6:10 pm

Re: list in structure containing an structure

Post by Golfy »

I've tried a example in side of my mainprogram. It works perfectly !!!

Here is my example

Code: Select all

Structure GPS
  x.f
  y.f
  a.f
EndStructure

Structure VILLE
  villeName.s
  List coordonnees.GPS()
EndStructure

NewList lesVilles.VILLE()

AddElement(lesvilles())
lesVilles()\villeName="Valence"
AddElement(lesvilles()\coordonnees())
lesVilles()\coordonnees()\x = 128
lesVilles()\coordonnees()\y = 94
lesVilles()\coordonnees()\a = 600
Debug "Altitude of "+lesVilles()\villeName+" is "+StrF(lesVilles()\coordonnees()\a)+" meters"

ClearList(lesVilles()\coordonnees())
AddElement(lesvilles()\coordonnees())
lesVilles()\coordonnees()\x = 44.5559
lesVilles()\coordonnees()\y = 4.5400
lesVilles()\coordonnees()\a = 128
Debug "Altitude of "+lesVilles()\villeName+" is "+StrF(lesVilles()\coordonnees()\a)+" meters"
Thanks a lot! it's near POO enough for me 8)
User avatar
blueb
Addict
Addict
Posts: 1111
Joined: Sat Apr 26, 2003 2:15 pm
Location: Cuernavaca, Mexico

Re: [Resolved] Structure and list in structure

Post by blueb »

Hi Golphy,
I'm not sure where your GPS data is derived from, but
couldn't FLOATS possibly create problems?

I'd be tempted to use doubles if any accuracy is needed.

I used GPS with 'doubles' as an example.

PS - Valence, France looks like a very lovely area. :)

see: https://www.south-of-france.com/valence ... of-france/

Code: Select all

Structure GPS
  Longditude.d
  Latitude.d
  Altitude.d
EndStructure

Structure VILLE
  villeName.s
  List coordonnees.GPS()
EndStructure

NewList lesVilles.VILLE()

AddElement(lesvilles())
     lesVilles()\villeName="Valence, France"
AddElement(lesvilles()\coordonnees())
     lesVilles()\coordonnees()\Longditude = 128
     lesVilles()\coordonnees()\Latitude = 94
     lesVilles()\coordonnees()\Altitude = 600
     
Debug "Altitude of "+lesVilles()\villeName+" is "+StrD(lesVilles()\coordonnees()\Altitude)+" meters"
Debug "---------------"

ClearList(lesVilles()\coordonnees())

AddElement(lesvilles()\coordonnees())
     lesVilles()\coordonnees()\Longditude = 44.5559    ;44°56′00″N
     lesVilles()\coordonnees()\Latitude = 4.5400       ;4°53′30″E
     lesVilles()\coordonnees()\Altitude = 128          ;avg. 123 meters
     
     Debug "Longitude of "+lesVilles()\villeName+" is "+StrD(lesVilles()\coordonnees()\Longditude)+" degrees"
     Debug "Latitude of "+lesVilles()\villeName+" is "+StrD(lesVilles()\coordonnees()\Latitude)+" degrees"
     Debug "Altitude of "+lesVilles()\villeName+" is "+StrD(lesVilles()\coordonnees()\Altitude)+" meters"
- It was too lonely at the top.

System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
Golfy
User
User
Posts: 97
Joined: Wed Mar 21, 2012 6:10 pm

Re: [Resolved] Structure and list in structure

Post by Golfy »

blueb wrote:Hi Golphy,
I'm not sure where your GPS data is derived from, but
couldn't FLOATS possibly create problems?

I'd be tempted to use doubles if any accuracy is needed.
Yes, you're right, it was a "virtual" example and I didin't look at real needed type. Thanks for the correction :)
Post Reply