Some news about the management of dynamic arrays in the math parser.
I’ve added new functions in command math_lib
to ease handling this type of structure.
Basically, you first define a 1-column image with the number of channels you want (filled with 0
). It will be used to represent your dynamic array. One example is worth a thousand words :
test :
1,1,1,3 # A dynamic array of RGB colors (initially empty).
v -
eval ${-math_lib}"
print(dar_size(#0)); # Print number of elements -> '0'
# 500 insertions at random positions.
for (k = 0, k<500, ++k,
dar_insert(#0,u([255,255,255]),round(u(dar_size(#0))));
ext('w[0] 200,100%,0'); # Display array
);
print(dar_size(#0)); # Print number of elements -> '500'
# 200 removal at random positions.
for (k = 0, k<200, ++k,
dar_remove(#0,round(u(dar_size(#0)-1)));
ext('w[0] 200,100%,0'); # Display array
);
print(dar_size(#0)); # Print number of elements -> '300'
# Access to individual element by I[#ind,pos] :
dar_insert(#0,[1,2,3],125);
print(I[#0,125]);
"
v +
Maybe @garagecoder will be able to use those functions ?
EDIT: How this internally work ?
The trick here is to store the current number of element in the image, at position [w*h*d-1]
, and to have a image height that is always greater or equal than dar_size() + 1
. The function dar_insert()
resizes the image when needed, and the function dar_remove()
also resizes to save memory usage.
The height of an image is not equal to the number of elements in your dynamic arrays, that’s why there is a function dar_size()
to get this information.