Yes, if tabensure or similar was available as part of the public api, it would be handy when dynamically allocating arrays as part of opcode outputs. Of course it is possible without, although it would be convenient. 
Would it be possible to make an array allocation function that doesn't need to be explicitly freed by the opcode writer?

-- 
Edward Costello

On Saturday 20 July 2013 at 14:58, jpff@cs.bath.ac.uk wrote:

Are you asking for tabensure to be made avalable of something else? Not
sure I understand

Hey,

So I was able to write an opcode using the following syntax, dynamically
creating a new array.

kArr1[] init 5
kArr2[] init 5

kNewArray[] add kArr1, kArr2

The new array structure is created but the arrayMemberSize, sizes, data
and dimension members are 0 or NULL. I used a csound->Calloc to create the
array->sizes array and the array->data array. Then I used a
csound->RegisterDeinitCallback to call a csound->Free on these two arrays.
I also filled in the arrayMemberSize and dimensions members. It all seems
to be working ok. I was able to pass the newly created array to a
different opcode and it worked as expected.

As far as I can see there are two cases for dynamically allocating new
array variables, creating arrays that are copies of the input arguments in
the case of addition, subtraction, element wise multiplication etc.

Then there are cases for creating specifically sized arrays. In the case
of matrix multiplication, diskin style opcodes and numerous other cases
I'm sure.

So you could have a function like array copy:

void array_copy(ARRAYDAT *source, ARRAYDAT *destination);

Actually copy may not be the best name for that as you would really just
be duplicating the dimensions and sizes of the array but i'm sure a better
name could be chosen.

And a straight up array allocation like maybe:

void array_alloc(ARRAYDAT *array, int dimensions, int arrayMemberSize, int
*sizes);

Cheers,
Ed



On Friday 19 July 2013 at 23:03, Steven Yi wrote:

Hi Ed,

Having reusable array utility functions sounds handy. Maybe it's
worth prototyping API functions here on the list?

As for the dimensions, yeah, that's what my other email from a few
days ago was all about. I think right now the semantic analyzer
allows for any dimension array to match against an array arg
specifier. My proposal was to make k[] only match one dimension
k-arrays, and k[][] to only match against two-dimension k-arrays, etc.
No one has really replied to that other email and I've been
pre-occupied with other work; I'll probably go and implement the
proposal once I'm finished with the other work.

Thanks!
steven

On Fri, Jul 19, 2013 at 8:07 AM, Edward Costello
<edwardcostello@gmail.com (mailto:edwardcostello@gmail.com)> wrote:
Thanks Steven,

Yeah on closer inspection I noticed those functions were static, so
yeah
I'll have a look and just emulate what is being done in those
functions.
So am I right in thinking that generally, as it is supported now, all
arrays
need to be initialised using the init opcode before usage? It would be
nice
to have an array initialiser built in to the api, for things like
writing
opcodes like diskin opening samples to an array output, without having
to
query how many samples are in the file etc. or things like matrix to
matrix
multiplication where an output with the correct dimensions is
automatically
generated.
Another thing I am confused about is the opcode arguments for array
opcodes,
does "k[]" mean a one dimensional argument and "k[][]" mean a 2
dimensional?
You can use a one dimensional array on an argument that takes a
"k[][]" and
vice-versa and no error is reported.


--
Edward Costello

On Thursday 18 July 2013 at 18:45, Steven Yi wrote:

Hi Ed,

I think the ARRAYDAT should already be created by the compiler by the
time you see it in your opcode. However, it's dimensions and data may
not be initialized, which you may need to then modify yourself. I'm
not sure about needing a deinit callback. I don't know what the
standard practice is for freeing up memory for variables; perhaps we
need to add a var_free function to CS_TYPE to automatically handle
that...

Otherwise, I'd look at Opcodes/arrays.c and use the functions John
wrote as a model.

Good luck!
steven

On Wed, Jul 17, 2013 at 10:06 AM, Edward Costello
<edwardcostello@gmail.com (mailto:edwardcostello@gmail.com)> wrote:

Hi,

When creating a custom array opcode, for instance one that takes 2
arrays as
input and give 1 array as output, in the initialisation function for
the
opcode, when creating the output array does one create an ARRAYINIT
struct
and pass that to the array_init function? Conversely is there a need
to call
the array_del function from a RegisterDeinitCallback?
Thanks

--
Edward Costello


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
_______________________________________________
Csound-devel mailing list


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
_______________________________________________
Csound-devel mailing list



------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
_______________________________________________
Csound-devel mailing list


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
_______________________________________________
Csound-devel mailing list


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
Csound-devel mailing list



------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel