Translating from C to Haxe

  • Hello, guys!
    I'm translating some C code and I just faced this function:

    cvgQERef *cvgQERot(cvgQERef *edge)
       return (edge->r < 3) ? edge+1 : edge-3;

    As you can see, he's returning a pointer to the memory address where that edge is. That edge is part of an array, of course.
    My question is: can I do that with HaxeFlixel or should I workaround it (like passing the array as a parameter)?

    Thanks in advance!

  • You pass objects (array elements), and Haxe cares about reference counting and GC. But for optimization you can see how HaxeFlixel does pools with FlxPoint get() and put().

  • I'm not sure if I understood your answer correctly, but in case you're suggesting me to use a pool, I can't, because that function needs to return a specific edge. Thanks for your answer anyway.

  • You don't need a pool. Basically, just have an Array<Edge> a = new Array<Edge>() (where Edge is your type) and return a[i]. Or do you ask about linked lists?

  • I was trying to achieve is something similar to the original C function.
    Which would be something like this:

    public function rot(edge:Edge):Edge
       return (edge.r < 3) ? edge + 1 : edge - 3;
    //where edge+1 is equivalent to arr[edgeIndex + 1]
    //somewhere else:
    var arr = new Array<Edge>();
    //in case arr[2].r == 2, then specificEdge would be arr[3]
    var specificEdge = rot(arr[2]);

    but apparently I can't do that in Haxe. So a workaround would be passing the array "arr" to the function, instead of just one edge.

  • Hmm, you could cook your own wrapper that includes array and index and acts similar to pointer.

  • Ok, that might work. Thanks @starry-abyss!

Log in to reply

Looks like your connection to HaxeFlixel was lost, please wait while we try to reconnect.