Does anybody know about an automatic SOA-builder library in Nim? Ideally I 
would like something like this: 
    
    
    type
      Thing[T] = object
        position: Vec3d[T]
        orientation: Quaternion[T]
      
      ThingArrAos[N: static[int], T] = array[N, Thing[T]]
      ThingArrSoa[N: static[int], T] = arraySoa[N, Thing[T]]
    
    ...
    
    let a = newGridArrAos(Thing(...), 4)
    # in memory: Vec3d[T], Quaternion[T], Vec3d[T], Quaternion[T], Vec3d[T], 
Quaternion[T], Vec3d[T], Quaternion[T]
    
    let s = newGridArrSoa(Thing(...), 4)
    # in memory: Vec3d[T], Vec3d[T], Vec3d[T], Vec3d[T], Quaternion[T], 
Quaternion[T], Quaternion[T], Quaternion[T]
    

Of course things like: 
    
    
    # generates ThingArrSoa type
    defSoa type ThingArrSoa[N: static[int], T] = arraySoa[N, Thing[T]]
    
    # generates array, dynamic array (casual seq is a little pointless) and 
similar types (handy!)
    defSoa Thing[T]
    

Would ok too.

Reply via email to