From 9973e13610585d3f6a5b5d733caa1d15c74a3051 Mon Sep 17 00:00:00 2001 From: Cyrille Henry Date: Tue, 26 Mar 2013 22:17:19 +0000 Subject: code simplificatoin and "size" parametter addition. svn path=/trunk/externals/share_mem/; revision=17067 --- shmem-help.pd | 12 ++++++---- shmem.c | 70 +++++++++++++++++++++++++---------------------------------- 2 files changed, 37 insertions(+), 45 deletions(-) diff --git a/shmem-help.pd b/shmem-help.pd index d8d3572..7999463 100644 --- a/shmem-help.pd +++ b/shmem-help.pd @@ -1,4 +1,4 @@ -#N canvas 122 50 1064 468 10; +#N canvas 120 82 1232 469 10; #N canvas 1 89 450 300 (subpatch) 0; #X array array2 100 float 3; #A 0 -0.857141 -0.799998 -0.72857 -0.657141 -0.585713 -0.542856 -0.499999 @@ -21,7 +21,7 @@ #X text 185 282 write a list (or a float) to the shared memory : 1st value is index \, other are data to store; #X msg 22 223 memset 0 array1; -#N canvas 0 22 450 300 (subpatch) 0; +#N canvas 0 50 450 300 (subpatch) 0; #X array array1 100 float 3; #A 0 -0.87857 -0.864284 -0.849998 -0.835713 -0.835713 -0.807141 -0.792856 -0.77857 -0.749998 -0.749998 -0.735713 -0.707141 -0.692856 -0.67857 @@ -70,9 +70,12 @@ the exisiting segment.; #X text 475 168 array1 and array 2 are size 100; #X msg 69 318 memset 50 5 5 5 1 1 0.1 0.2 0.3 0.4 0.5 0.6 0.7; #X text 21 192 WRITING INTO MEMORY; -#X msg 588 282 memdump 0 array2 50; -#X text 708 282 dump shared memory from index 0 to array2 from index +#X msg 578 274 memdump 0 array2 50; +#X text 698 274 dump shared memory from index 0 to array2 from index 50; +#X msg 588 294 memdump 0 array2 50 10; +#X text 738 294 dump shared memory from index 0 to array2 from index +50 to index 60 (50 + 10); #X connect 1 0 8 0; #X connect 3 0 8 0; #X connect 6 0 8 0; @@ -83,3 +86,4 @@ the exisiting segment.; #X connect 23 0 8 0; #X connect 26 0 8 0; #X connect 28 0 14 0; +#X connect 30 0 14 0; diff --git a/shmem.c b/shmem.c index dfc24bb..f4c01b8 100644 --- a/shmem.c +++ b/shmem.c @@ -29,11 +29,7 @@ void shmem_set(t_shmem *x, t_symbol *unused, int argc, t_atom *argv) t_word *vec; int i, index_max, shmem_offset; - if (argc <= 1) { - pd_error(x, "shmem usage : [memset offset data [offset_data]( (data can be a float, a list, or a table name)"); - return; - } - if (argv[0].a_type != A_FLOAT) { + if ((argc <= 1) || (argv[0].a_type != A_FLOAT) ){ pd_error(x, "shmem usage : [memset offset data [offset_data]( (data can be a float, a list, or a table name)"); return; } @@ -75,53 +71,45 @@ void shmem_set(t_shmem *x, t_symbol *unused, int argc, t_atom *argv) void shmem_dump(t_shmem *x, t_symbol *unused, int argc, t_atom *argv) { - int i, vecsize, index_max, shmem_offset, dest_offset; + int i, vecsize, index_max, shmem_offset, dest_offset, size; t_garray *a; t_word *vec; - if (argc < 2) { - pd_error(x, "shmem usage : [memdump offset dest [offset_dest]( "); - return; - } - if (argv[0].a_type != A_FLOAT) { - pd_error(x, "shmem usage : [memdump offset dest [offset_dest]( "); + if ((argc < 2) || (argv[0].a_type != A_FLOAT) || (argv[1].a_type != A_SYMBOL)){ + pd_error(x, "shmem usage : [memdump offset dest [offset_dest [size]]( "); return; } + shmem_offset = atom_getfloatarg(0,argc,argv); if (shmem_offset < 0) shmem_offset = 0; if (shmem_offset > x->segment_size-1) i = x->segment_size-1; // post("i=%d", offset); - if (argv[1].a_type == A_SYMBOL) { // [memdump offset dest - t_symbol *s = atom_getsymbolarg(1,argc,argv); - if (!(a = (t_garray *)pd_findbyclass(s, garray_class))) - pd_error(x, "%s: no such array", s->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", s->s_name); - else { - if (argc == 2) { - index_max = x->segment_size-shmem_offset; - if (index_max > vecsize) - index_max = vecsize; - // post("i=%d", index_max); - for (i=0; ishare_memory[i+shmem_offset]; - } - else if (argc == 3) { + t_symbol *s = atom_getsymbolarg(1,argc,argv); + if (!(a = (t_garray *)pd_findbyclass(s, garray_class))) + pd_error(x, "%s: no such array", s->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", s->s_name); + else { + dest_offset = 0; + size = vecsize; + if ((argc >= 3) && ( argv[2].a_type == A_FLOAT )){ dest_offset = atom_getfloatarg(2,argc,argv); - index_max = min(x->segment_size-shmem_offset,vecsize-dest_offset); - // post("i=%d", index_max); - for (i=0; ishare_memory[i+shmem_offset]; - } - garray_redraw(a); - } - } - else { - pd_error(x, "shmem usage : [memdump offset dest [offset_dest]( "); - return; - } - + } + if ((argc >= 4) && ( argv[3].a_type == A_FLOAT )){ + size = atom_getfloatarg(3,argc,argv); + } + + int index_max_shmem = min(shmem_offset+size, x->segment_size); + int index_max_vec = min(dest_offset+size, vecsize); + index_max = min(index_max_shmem, index_max_vec); + // index_max = min(x->segment_size-shmem_offset,vecsize-dest_offset); + // post("shmem_offset : %d\tdestoffset %d\tsize=%d\tindex_max %d",shmem_offset,dest_offset, size, index_max); + for (i=0; ishare_memory[i+shmem_offset]; + + garray_redraw(a); + } } void shmem_read(t_shmem *x, t_float index) -- cgit v1.2.1