From a5b45e8e2e99686ea73fa2793d7fec84f0d1a3ed Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Tue, 17 Dec 2002 04:36:31 +0000 Subject: "" svn path=/trunk/; revision=303 --- externals/grill/vasp/changes.txt | 3 + externals/grill/vasp/pd-ex/freeze1.pd | 164 +++++++++++++++------------- externals/grill/vasp/source/buflib.cpp | 112 +++++++++++++------ externals/grill/vasp/source/classes.cpp | 22 +--- externals/grill/vasp/source/classes.h | 13 ++- externals/grill/vasp/source/main.cpp | 1 + externals/grill/vasp/source/obj_size.cpp | 10 +- externals/grill/vasp/source/obj_split.cpp | 13 ++- externals/grill/vasp/source/obj_vasp.cpp | 6 +- externals/grill/vasp/source/opbase.cpp | 8 +- externals/grill/vasp/source/opbase.h | 16 +-- externals/grill/vasp/source/ops_arith.h | 42 +++---- externals/grill/vasp/source/ops_assign.cpp | 10 +- externals/grill/vasp/source/ops_assign.h | 8 +- externals/grill/vasp/source/ops_carith.cpp | 2 +- externals/grill/vasp/source/ops_carith.h | 20 ++-- externals/grill/vasp/source/ops_cmp.h | 62 +++++------ externals/grill/vasp/source/ops_cplx.cpp | 2 +- externals/grill/vasp/source/ops_cplx.h | 12 +- externals/grill/vasp/source/ops_dft.cpp | 4 +- externals/grill/vasp/source/ops_dft.h | 8 +- externals/grill/vasp/source/ops_feature.cpp | 28 ++++- externals/grill/vasp/source/ops_feature.h | 8 +- externals/grill/vasp/source/ops_flt.cpp | 4 +- externals/grill/vasp/source/ops_flt.h | 10 +- externals/grill/vasp/source/ops_gate.cpp | 4 +- externals/grill/vasp/source/ops_gen.cpp | 10 +- externals/grill/vasp/source/ops_gen.h | 16 +-- externals/grill/vasp/source/ops_qminmax.cpp | 12 +- externals/grill/vasp/source/ops_rearr.cpp | 16 ++- externals/grill/vasp/source/ops_rearr.h | 12 +- externals/grill/vasp/source/ops_resmp.cpp | 14 ++- externals/grill/vasp/source/ops_resmp.h | 4 +- externals/grill/vasp/source/ops_search.cpp | 20 +++- externals/grill/vasp/source/ops_search.h | 6 +- externals/grill/vasp/source/ops_trnsc.cpp | 2 +- externals/grill/vasp/source/ops_trnsc.h | 16 +-- externals/grill/vasp/source/ops_wnd.cpp | 2 +- externals/grill/vasp/source/ops_wnd.h | 26 +++-- externals/grill/vasp/source/opvecs.cpp | 8 +- externals/grill/vasp/source/vasp.cpp | 73 ++++++++----- externals/grill/vasp/source/vasp.h | 34 ++++-- externals/grill/vasp/source/vecblk.cpp | 4 +- externals/grill/vasp/todo.txt | 8 +- 44 files changed, 498 insertions(+), 377 deletions(-) (limited to 'externals/grill/vasp') diff --git a/externals/grill/vasp/changes.txt b/externals/grill/vasp/changes.txt index 26d0043d..96d60de4 100644 --- a/externals/grill/vasp/changes.txt +++ b/externals/grill/vasp/changes.txt @@ -14,6 +14,9 @@ Version history: - ADD: vasp.tilt,vasp.xtilt - attributes "fill","inter" - ADD: vasp.offset=,vasp.frames= - attributes "dir","slope" - CHANGE: update m_method_ virtual functions of same objects +- FIX: immediate vasp garbage collection is now done in separate thread +- ADD: vasp.size... objects: attribute "keep" determines whether buffer content should be preserved (default = 1) +- CHANGE: buffer reference checks upon all operations enforced (by new CVasp (checked vasp) class) 0.1.1: - FIX: bug in resize of immediate buffers diff --git a/externals/grill/vasp/pd-ex/freeze1.pd b/externals/grill/vasp/pd-ex/freeze1.pd index d3aba0f8..26aa9d5a 100644 --- a/externals/grill/vasp/pd-ex/freeze1.pd +++ b/externals/grill/vasp/pd-ex/freeze1.pd @@ -1,12 +1,11 @@ -#N canvas 30 168 943 479 12; -#X obj 18 361 vasp.u; -#N canvas 387 42 535 624 freeze 0; +#N canvas 33 61 967 503 12; +#N canvas 387 42 567 656 freeze 0; #X obj 26 130 vasp.split 2; #X obj 27 404 vasp.join 2; #X obj 27 74 vasp.cfft @detach 1; #X obj 27 461 vasp.c!fft @detach 1; #X obj 25 13 inlet; -#X obj 27 567 outlet; +#X obj 27 589 outlet; #X obj 173 236 * 0.01; #X obj 302 17 inlet; #X obj 26 100 vasp.polar @detach 1; @@ -16,7 +15,7 @@ #X obj 26 371 vasp.sync; #X obj 25 209 vasp.max? @detach 1; #X obj 381 17 inlet; -#X obj 162 569 outlet; +#X obj 162 591 outlet; #X obj 29 536 vasp.opt; #N canvas 0 0 456 306 non0 0; #X obj 26 162 outlet; @@ -38,26 +37,27 @@ #X obj 302 45 + 100; #X obj 326 117 expr pow(2. \, -$f1/1200); #X obj 300 76 dbtorms; -#N canvas 445 282 454 304 cplx 0; -#X obj 87 181 vasp.!; +#N canvas 445 282 474 324 cplx 0; #X obj 19 229 vasp.join; #X obj 19 73 t a b a; -#X obj 129 138 vasp.f?; -#X obj 21 14 inlet; +#X obj 149 137 vasp.f?; +#X obj 19 14 inlet; #X obj 19 258 outlet; -#X text 196 136 get length of source; -#X text 143 178 make immediate; -#X text 143 193 initialized to 0; +#X text 216 135 get length of source; +#X text 225 181 make immediate; +#X text 225 196 initialized to 0; #X text 101 230 make complex vasp; -#X obj 19 44 vasp.chk; -#X connect 0 0 1 1; -#X connect 1 0 5 0; -#X connect 2 0 1 0; -#X connect 2 1 0 0; -#X connect 2 2 3 0; -#X connect 3 0 0 1; -#X connect 4 0 10 0; -#X connect 10 0 2 0; +#X obj 87 176 vasp.! @detach 1; +#X obj 19 203 vasp.sync; +#X connect 0 0 4 0; +#X connect 1 0 10 0; +#X connect 1 1 9 0; +#X connect 1 2 2 0; +#X connect 2 0 9 1; +#X connect 3 0 1 0; +#X connect 9 0 10 1; +#X connect 10 0 0 0; +#X connect 10 1 0 1; #X restore 27 43 pd cplx; #X text 280 169 resample; #X text 185 211 find spectral peak; @@ -70,12 +70,15 @@ #X text 198 460 inverse FFT; #X text 263 316 randomize complex arguments; #X text 225 496 get spectral density; -#X text 100 536 normalize result; #X obj 25 171 vasp.xtilt 1 @detach 1 @inter 2; #X obj 27 290 vasp.pow @detach 1; #X obj 441 21 inlet; #X text 181 289 treat spectrum exponentially; -#X connect 0 0 35 0; +#X obj 395 389 loadbang; +#X msg 395 414 detach 1; +#X text 102 536 normalize result; +#X text 388 435 no attributes yet; +#X connect 0 0 34 0; #X connect 0 1 11 0; #X connect 1 0 9 0; #X connect 2 0 8 0; @@ -85,7 +88,7 @@ #X connect 7 0 19 0; #X connect 8 0 0 0; #X connect 9 0 3 0; -#X connect 10 0 36 0; +#X connect 10 0 35 0; #X connect 11 0 27 0; #X connect 12 0 1 0; #X connect 12 0 17 0; @@ -97,13 +100,15 @@ #X connect 17 0 15 0; #X connect 18 0 16 0; #X connect 19 0 21 0; -#X connect 20 0 35 1; +#X connect 20 0 34 1; #X connect 21 0 6 1; #X connect 22 0 2 0; #X connect 27 0 12 1; -#X connect 35 0 13 0; -#X connect 36 0 12 0; -#X connect 37 0 36 1; +#X connect 34 0 13 0; +#X connect 35 0 12 0; +#X connect 36 0 35 1; +#X connect 38 0 39 0; +#X connect 39 0 16 0; #X restore 18 331 pd freeze; #X obj 104 214 nbx 6 18 -100 0 0 1 empty empty noise_rejection(dB) 0 -8 0 12 -225271 -1 -1 -61 256; @@ -165,8 +170,8 @@ #X restore 448 250 pd open; #X msg 381 222 stop; #N canvas 0 0 450 300 graph10 0; -#X array src 1.23699e+006 float 0; -#X coords 0 1 1.23699e+006 -1 600 150 1; +#X array src 1e+006 float 0; +#X coords 0 1 999999 -1 600 150 1; #X restore 322 20 graph; #X msg 447 222 new; #X msg 482 222 again; @@ -181,7 +186,7 @@ #X obj 105 115 nbx 12 18 0 1e+008 0 1 empty empty length(frames) 0 -8 0 12 -225271 -1 -1 1e+006 256; #X obj 85 368 nbx 9 14 -1e+037 1e+037 0 0 empty empty spectral_density -0 -6 0 10 -262131 -1 -1 0.18217 256; +0 -6 0 10 -262131 -1 -1 0.015744 256; #X obj 332 197 cnv 15 100 20 empty empty play_src 5 8 0 10 -261681 -66577 0; #X obj 447 197 cnv 15 100 20 empty empty read_src 5 8 0 10 -261681 @@ -196,7 +201,7 @@ #X msg 614 223 play; #X obj 614 198 cnv 15 100 20 empty empty play_dst 5 8 0 10 -261681 -66577 0; -#N canvas 0 0 495 347 playsrc 0; +#N canvas 0 0 501 353 playsrc 0; #X obj 18 245 dac~; #X obj 19 21 inlet; #X obj 17 49 route play; @@ -211,11 +216,13 @@ #X obj 19 81 t b; #X obj 19 159 lister; #X obj 77 105 loadbang; +#X obj 109 239 outlet; #X connect 1 0 2 0; #X connect 2 0 11 0; #X connect 2 1 3 0; #X connect 3 0 0 0; #X connect 3 0 0 1; +#X connect 3 1 14 0; #X connect 4 0 7 0; #X connect 5 0 8 0; #X connect 6 0 9 0; @@ -230,18 +237,20 @@ #X connect 12 0 3 0; #X connect 13 0 10 0; #X restore 332 250 pd playsrc; -#N canvas 0 0 481 333 playdst 0; +#N canvas 0 0 483 335 playdst 0; #X obj 21 118 dac~; #X obj 19 21 inlet; #X obj 22 51 route play; #X obj 21 83 tabplay~ dst; +#X obj 98 118 outlet; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 2 1 3 0; #X connect 3 0 0 0; #X connect 3 0 0 1; +#X connect 3 1 4 0; #X restore 614 251 pd playdst; -#N canvas 249 202 495 438 copy 0; +#N canvas 249 202 519 462 copy 0; #X obj 27 26 inlet; #X obj 27 51 t b b; #X obj 316 19 inlet; @@ -252,45 +261,43 @@ #X obj 128 31 r \$0-offs; #X obj 211 31 r \$0-len; #X obj 316 87 f 1e+006; -#X obj 187 174 vasp.s @ref dst; #X obj 366 21 loadbang; #X obj 84 169 *; #X obj 117 169 *; #X obj 82 139 vasp.f?; -#X obj 125 366 print; #X obj 27 109 t a a; #X obj 27 259 vasp.sync; #X obj 26 328 vasp.f -1; #X text 167 288 copy src to dst; #X text 108 328 take all dst; -#X text 316 175 resize dst buffer; -#X text 341 201 set to zero; -#X obj 185 202 vasp.= 0 @detach 1; +#X text 311 193 resize dst buffer; +#X text 341 221 set to zero; +#X obj 185 222 vasp.= 0 @detach 1; #X obj 26 287 vasp.-> @detach 1; +#X obj 187 174 vasp.s @ref dst @detach 1; #X connect 0 0 1 0; #X connect 1 0 4 0; -#X connect 1 1 10 0; +#X connect 1 1 23 0; #X connect 2 0 9 0; -#X connect 4 0 16 0; -#X connect 5 0 17 0; +#X connect 4 0 14 0; +#X connect 5 0 15 0; #X connect 6 0 5 0; -#X connect 7 0 12 1; -#X connect 8 0 13 1; -#X connect 9 0 10 1; -#X connect 10 0 23 0; -#X connect 11 0 9 0; -#X connect 12 0 6 1; -#X connect 13 0 5 1; -#X connect 14 0 12 0; -#X connect 14 0 13 0; -#X connect 16 0 6 0; -#X connect 16 1 14 0; -#X connect 17 0 24 0; -#X connect 17 1 24 1; -#X connect 18 0 3 0; -#X connect 18 1 15 0; -#X connect 23 0 17 1; -#X connect 24 1 18 0; +#X connect 7 0 11 1; +#X connect 8 0 12 1; +#X connect 9 0 23 1; +#X connect 10 0 9 0; +#X connect 11 0 6 1; +#X connect 12 0 5 1; +#X connect 13 0 11 0; +#X connect 13 0 12 0; +#X connect 14 0 6 0; +#X connect 14 1 13 0; +#X connect 15 0 22 0; +#X connect 15 1 22 1; +#X connect 16 0 3 0; +#X connect 21 0 15 1; +#X connect 22 1 16 0; +#X connect 23 0 21 0; #X restore 18 159 pd copy; #X text 85 160 copy and resize; #X obj 323 170 hsl 600 15 0 1 0 1 \$0-r2 empty empty -2 -6 1152 8 -262131 @@ -327,21 +334,24 @@ #X obj 104 301 nbx 7 18 0 3 0 1 empty empty power 0 -8 0 12 -225271 -1 -1 1 256; #X text 10 35 (needs zexy!); -#X connect 1 0 0 0; -#X connect 1 1 19 0; -#X connect 2 0 1 1; -#X connect 3 0 1 2; -#X connect 6 0 5 0; -#X connect 7 0 4 0; -#X connect 8 0 27 0; -#X connect 10 0 7 0; -#X connect 11 0 7 0; -#X connect 12 0 6 0; -#X connect 13 0 6 0; -#X connect 14 0 27 0; -#X connect 17 0 29 0; -#X connect 18 0 29 1; -#X connect 24 0 28 0; -#X connect 25 0 28 0; -#X connect 29 0 1 0; -#X connect 36 0 1 3; +#X obj 18 410 vasp.u; +#X text 76 412 update graphics; +#X connect 0 0 37 0; +#X connect 0 1 18 0; +#X connect 1 0 0 1; +#X connect 2 0 0 2; +#X connect 5 0 4 0; +#X connect 6 0 3 0; +#X connect 7 0 26 0; +#X connect 9 0 6 0; +#X connect 10 0 6 0; +#X connect 11 0 5 0; +#X connect 12 0 5 0; +#X connect 13 0 26 0; +#X connect 16 0 28 0; +#X connect 17 0 28 1; +#X connect 23 0 27 0; +#X connect 24 0 27 0; +#X connect 26 0 13 0; +#X connect 28 0 0 0; +#X connect 35 0 0 3; diff --git a/externals/grill/vasp/source/buflib.cpp b/externals/grill/vasp/source/buflib.cpp index 03c2944e..78866a8e 100644 --- a/externals/grill/vasp/source/buflib.cpp +++ b/externals/grill/vasp/source/buflib.cpp @@ -52,7 +52,6 @@ public: static BufEntry *libhead = NULL,*libtail = NULL; static FreeEntry *freehead = NULL,*freetail = NULL; static I libcnt = 0,libtick = 0; -static t_clock *libclk = NULL; #ifdef FLEXT_THREADS static flext::ThrMutex libmtx; @@ -114,6 +113,73 @@ V BufLib::DecRef(t_symbol *s) } } +static V Collect() +{ +#ifdef FLEXT_THREADS + libmtx.Lock(); +#endif + + // collect garbage + BufEntry *e,*p; + for(p = NULL,e = libhead; e; ) { + if(e->refcnt <= 0 && e->tick+LIBTOL < libtick) { + ASSERT(e->refcnt == 0); + + BufEntry *n = e->nxt; + + if(p) p->nxt = n; + else libhead = n; + + if(!n) libtail = p; + else e->nxt = NULL; + + delete e; + + e = n; + } + else + p = e,e = e->nxt; + } + +#ifdef FLEXT_THREADS + libmtx.Unlock(); +#endif +} + + +#ifdef FLEXT_THREADS +static bool libthractive = false; +static pthread_t libthrid; +static bool libthrexit = false; // currently not used +static flext::ThrCond *libthrcond = NULL; + +static V *LibThr(V *) +{ + flext::RelPriority(-2); + + while(libthrexit) { + libthrcond->TimedWait(0.5f); + // TODO - should process return value of TimedWait + Collect(); + } + return NULL; +} +#endif + +static t_clock *libclk = NULL; +static V LibTick(V *) +{ +#ifdef FLEXT_THREADS + libthrcond->Signal(); +#else + Collect(); +#endif + + ++libtick; + clock_delay(libclk,LIBTICK); + +} + static t_symbol *GetLibSym() { if(freehead) { @@ -135,7 +201,7 @@ static t_symbol *GetLibSym() libcnt++; return gensym(tmp); } - + clock_delay(libclk,LIBTICK); } @@ -147,44 +213,20 @@ static V FreeLibSym(t_symbol *sym) freetail = f; } -static V LibTick(V *) + +BufEntry *BufLib::NewImm(I fr,BL zero) { #ifdef FLEXT_THREADS - libmtx.Lock(); -#endif - - // collect garbage - BufEntry *e,*p; - for(p = NULL,e = libhead; e; ) { - if(e->refcnt <= 0 && e->tick+LIBTOL < libtick) { - ASSERT(e->refcnt == 0); - - BufEntry *n = e->nxt; - - if(p) p->nxt = n; - else libhead = n; - - if(!n) libtail = p; - else e->nxt = NULL; - - delete e; - - e = n; + if(!libthractive) { + int ret = pthread_create(&libthrid,NULL,LibThr,NULL); + if(ret) + error("vasp - Could not launch helper thread"); + else { + libthrcond = new flext::ThrCond; + libthractive = true; } - else - p = e,e = e->nxt; } - - ++libtick; - clock_delay(libclk,LIBTICK); - -#ifdef FLEXT_THREADS - libmtx.Unlock(); #endif -} - -BufEntry *BufLib::NewImm(I fr,BL zero) -{ if(!libclk) { libclk = (t_clock *)clock_new(NULL,(t_method)LibTick); clock_delay(libclk,LIBTICK); diff --git a/externals/grill/vasp/source/classes.cpp b/externals/grill/vasp/source/classes.cpp index 582f5959..fa9ff7d4 100644 --- a/externals/grill/vasp/source/classes.cpp +++ b/externals/grill/vasp/source/classes.cpp @@ -94,7 +94,6 @@ vasp_op::vasp_op(BL op) FLEXT_ADDBANG(0,m_dobang); FLEXT_ADDMETHOD_(0,"vasp",m_vasp); FLEXT_ADDMETHOD_(0,"set",m_set); -// if(op) FLEXT_ADDMETHOD_(0,"to",m_to); FLEXT_ADDATTR_VAR("ref",m_getref,m_setref); if(op) FLEXT_ADDATTR_VAR("to",m_getto,m_setto); @@ -170,23 +169,6 @@ V vasp_op::m_update(I argc,const t_atom *argv) } } - -/* -V vasp_op::m_detach(BL thr) -{ -#ifdef FLEXT_THREADS - detach = thr; -#endif -} - -V vasp_op::m_prior(I p) -{ -#ifdef FLEXT_THREADS - prior = p; -#endif -} -*/ - V vasp_op::m_stop() {} /////////////////////////////////////////////////////////////////////////// @@ -201,10 +183,10 @@ V vasp_tx::m_bang() Lock(); #ifdef FLEXT_THREADS -// ChangePriority(prior); +// RelPriority(prior); #endif - if(ref.Ok()) + if(ref.Check()) { Vasp *ret = x_work(); if(ret) { diff --git a/externals/grill/vasp/source/classes.h b/externals/grill/vasp/source/classes.h index d6a31413..64719cd3 100644 --- a/externals/grill/vasp/source/classes.h +++ b/externals/grill/vasp/source/classes.h @@ -256,7 +256,8 @@ protected: \ virtual Vasp *tx_work() \ { \ OpParam p(thisName(),0); \ - return VaspOp::m_##op(p,ref,&dst); \ + CVasp cdst(dst); \ + return VaspOp::m_##op(p,CVasp(ref),&cdst); \ } \ virtual V m_help() { post("%s - " help,thisName()); } \ }; \ @@ -269,12 +270,13 @@ class vasp_ ## op: \ { \ FLEXT_HEADER(vasp_##op,vasp_binop) \ public: \ - vasp_##op(I argc,const t_atom *argv): vasp_binop(argc,argv,def,to) {} \ + vasp_##op(I argc,const t_atom *argv): vasp_binop(argc,argv,def,to) {} \ protected: \ virtual Vasp *tx_work(const Argument &arg) \ { \ OpParam p(thisName(),1); \ - return VaspOp::m_##op(p,ref,arg,&dst); \ + CVasp cdst(dst); \ + return VaspOp::m_##op(p,CVasp(ref),arg,&cdst); \ } \ virtual V m_help() { post("%s - " help,thisName()); } \ }; \ @@ -287,12 +289,13 @@ class vasp_ ## op: \ { \ FLEXT_HEADER(vasp_##op,vasp_anyop) \ public: \ - vasp_##op(I argc,const t_atom *argv): vasp_anyop(argc,argv,def,to) {} \ + vasp_##op(I argc,const t_atom *argv): vasp_anyop(argc,argv,def,to) {} \ protected: \ virtual Vasp *tx_work(const Argument &arg) \ { \ OpParam p(thisName(),args); \ - return VaspOp::m_##op(p,ref,arg,&dst); \ + CVasp cdst(dst); \ + return VaspOp::m_##op(p,CVasp(ref),arg,&cdst); \ } \ virtual V m_help() { post("%s - " help,thisName()); } \ }; \ diff --git a/externals/grill/vasp/source/main.cpp b/externals/grill/vasp/source/main.cpp index 1603d107..b50cded2 100644 --- a/externals/grill/vasp/source/main.cpp +++ b/externals/grill/vasp/source/main.cpp @@ -36,6 +36,7 @@ V lib_setup() VASP_SETUP(check); // vasp.check VASP_SETUP(update); // vasp.update +// VASP_SETUP(post); // vasp.post VASP_SETUP(sync); // vasp.sync diff --git a/externals/grill/vasp/source/obj_size.cpp b/externals/grill/vasp/source/obj_size.cpp index 6c38184c..1d28b1cb 100644 --- a/externals/grill/vasp/source/obj_size.cpp +++ b/externals/grill/vasp/source/obj_size.cpp @@ -34,7 +34,7 @@ class vasp_size: public: vasp_size(I argc,t_atom *argv,BL abs = true): - size(0),sets(false) + size(0),sets(false),keep(true) { if(argc >= 1 && CanbeFloat(argv[0])) m_arg(GetAFloat(argv[0])); @@ -47,6 +47,7 @@ public: FLEXT_ADDMETHOD(1,m_arg); if(abs) FLEXT_ADDATTR_VAR("frames",size,m_arg); + FLEXT_ADDATTR_VAR1("keep",keep); } virtual V m_arg(F s) @@ -58,19 +59,20 @@ public: virtual Vasp *x_work() { Vasp *ret = new Vasp(ref); - if(sets) ret->Size(size); + if(sets) ret->Size(size,keep); return ret; } virtual V m_help() { post("%s - Set the size of the vector buffers",thisName()); } protected: I size; - BL sets; + BL sets,keep; private: FLEXT_CALLBACK_F(m_arg); FLEXT_CALLSET_I(m_arg); FLEXT_ATTRGET_I(size); + FLEXT_ATTRVAR_B(keep); }; FLEXT_LIB_V("vasp, vasp.size vasp.s",vasp_size) @@ -227,7 +229,7 @@ public: virtual V m_bang() { - if(!ref.Ok()) + if(!ref.Check()) post("%s - Invalid vasp!",thisName()); else if(ref.Vectors() > 1) post("%s - More than one vector in vasp!",thisName()); diff --git a/externals/grill/vasp/source/obj_split.cpp b/externals/grill/vasp/source/obj_split.cpp index 04eb3eea..e308e19c 100644 --- a/externals/grill/vasp/source/obj_split.cpp +++ b/externals/grill/vasp/source/obj_split.cpp @@ -62,7 +62,7 @@ public: } if(rem > 0) { Vasp v(ref.Frames(),ref.Vector(outs)); - for(I i = 1; i < rem; ++i) v += ref.Vector(outs+i); + for(I i = 1; i < rem; ++i) v.AddVector(ref.Vector(outs+i)); ToOutVasp(outs,v); } else @@ -122,7 +122,7 @@ public: ~vasp_join() { if(vi) delete[] vi; } virtual Vasp *x_work() { - Vasp *ret = new Vasp(ref); + CVasp *ret = new CVasp(ref); for(I i = 0; i < cnt-1; ++i) if(vi[i]) *ret += *vi[i]; return ret; } @@ -255,25 +255,26 @@ public: virtual Vasp *x_work() { - Vasp *ret = new Vasp(ref); - *ret += dst; + CVasp *ret = new CVasp(ref); + *ret += cdst; m_reset(); return ret; } - V m_reset() { ref.Clear(); dst.Clear(); rem = cnt; } + V m_reset() { ref.Clear(); cdst.Clear(); rem = cnt; } virtual I m_set(I argc,t_atom *argv) { rem = cnt; return vasp_tx::m_set(argc,argv); } V m_add(I argc,t_atom *argv) { - dst += Vasp(argc,argv); + cdst += Vasp(argc,argv); if(cnt && !--rem) m_bang(); } virtual V m_help() { post("%s - Gather several vasps into one",thisName()); } private: I cnt,rem; + CVasp cdst; FLEXT_CALLBACK(m_reset) FLEXT_CALLBACK_V(m_add) diff --git a/externals/grill/vasp/source/obj_vasp.cpp b/externals/grill/vasp/source/obj_vasp.cpp index ba91a7c5..680bede7 100644 --- a/externals/grill/vasp/source/obj_vasp.cpp +++ b/externals/grill/vasp/source/obj_vasp.cpp @@ -189,8 +189,10 @@ public: virtual V m_bang() { - Vasp r(ref); - for(I i = CntOut()-1; i >= 0; --i) ToOutVasp(i,r); + if(ref.Check()) + for(I i = CntOut()-1; i >= 0; --i) ToOutVasp(i,ref); + else + post("%s - Invalid vasp",thisName()); } virtual V m_help() { post("%s - Output a vasp multiple times",thisName()); } diff --git a/externals/grill/vasp/source/opbase.cpp b/externals/grill/vasp/source/opbase.cpp index df4150f1..989a4952 100644 --- a/externals/grill/vasp/source/opbase.cpp +++ b/externals/grill/vasp/source/opbase.cpp @@ -12,7 +12,7 @@ WARRANTIES, see the file, "license.txt," in this distribution. #include "opbase.h" #include "opdefs.h" -Vasp *VaspOp::m_run(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun) +Vasp *VaspOp::m_run(OpParam &p,CVasp &src,CVasp *dst,VecOp::opfun *fun) { Vasp *ret = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,dst); @@ -24,7 +24,7 @@ Vasp *VaspOp::m_run(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun) return ret; } -Vasp *VaspOp::m_cun(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun) +Vasp *VaspOp::m_cun(OpParam &p,CVasp &src,CVasp *dst,VecOp::opfun *fun) { Vasp *ret = NULL; CVecBlock *vecs = GetCVecs(p.opname,src,dst); @@ -36,7 +36,7 @@ Vasp *VaspOp::m_cun(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun) return ret; } -Vasp *VaspOp::m_rbin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,VecOp::opfun *fun) +Vasp *VaspOp::m_rbin(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,VecOp::opfun *fun) { Vasp *ret = NULL; BL argvasp = arg.IsVasp(); @@ -58,7 +58,7 @@ Vasp *VaspOp::m_rbin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,VecOp::o return ret; } -Vasp *VaspOp::m_cbin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,VecOp::opfun *fun) +Vasp *VaspOp::m_cbin(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,VecOp::opfun *fun) { Vasp *ret = NULL; BL argvasp = arg.IsVasp(); diff --git a/externals/grill/vasp/source/opbase.h b/externals/grill/vasp/source/opbase.h index a4d1347b..a429b7a6 100644 --- a/externals/grill/vasp/source/opbase.h +++ b/externals/grill/vasp/source/opbase.h @@ -29,10 +29,10 @@ namespace VecOp { namespace VaspOp { - RVecBlock *GetRVecs(const C *op,Vasp &src,Vasp *dst = NULL); - CVecBlock *GetCVecs(const C *op,Vasp &src,Vasp *dst = NULL,BL full = false); - RVecBlock *GetRVecs(const C *op,Vasp &src,const Vasp &arg,Vasp *dst = NULL,I multi = -1,BL ssize = true); - CVecBlock *GetCVecs(const C *op,Vasp &src,const Vasp &arg,Vasp *dst = NULL,I multi = -1,BL ssize = true,BL full = false); + RVecBlock *GetRVecs(const C *op,CVasp &src,CVasp *dst = NULL); + CVecBlock *GetCVecs(const C *op,CVasp &src,CVasp *dst = NULL,BL full = false); + RVecBlock *GetRVecs(const C *op,CVasp &src,const CVasp &arg,CVasp *dst = NULL,I multi = -1,BL ssize = true); + CVecBlock *GetCVecs(const C *op,CVasp &src,const CVasp &arg,CVasp *dst = NULL,I multi = -1,BL ssize = true,BL full = false); Vasp *DoOp(RVecBlock *vecs,VecOp::opfun *fun,OpParam &p,BL symm = false); Vasp *DoOp(CVecBlock *vecs,VecOp::opfun *fun,OpParam &p,BL symm = false); @@ -40,11 +40,11 @@ namespace VaspOp { // -------- transformations ----------------------------------- // unary functions - Vasp *m_run(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun); // real unary (one vec or real) - Vasp *m_cun(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun); // complex unary (one vec or complex) + Vasp *m_run(OpParam &p,CVasp &src,CVasp *dst,VecOp::opfun *fun); // real unary (one vec or real) + Vasp *m_cun(OpParam &p,CVasp &src,CVasp *dst,VecOp::opfun *fun); // complex unary (one vec or complex) // binary functions - Vasp *m_rbin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,VecOp::opfun *fun); // real binary (one vec or real) - Vasp *m_cbin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,VecOp::opfun *fun); // complex binary (one vec or complex) + Vasp *m_rbin(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,VecOp::opfun *fun); // real binary (one vec or real) + Vasp *m_cbin(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,VecOp::opfun *fun); // complex binary (one vec or complex) } #endif diff --git a/externals/grill/vasp/source/ops_arith.h b/externals/grill/vasp/source/ops_arith.h index 6e2bb879..d4fcd470 100644 --- a/externals/grill/vasp/source/ops_arith.h +++ b/externals/grill/vasp/source/ops_arith.h @@ -42,31 +42,31 @@ namespace VecOp { } namespace VaspOp { - inline Vasp *m_add(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_add); } // add to (one vec or real) - inline Vasp *m_sub(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_sub); } // sub from (one vec or real) - inline Vasp *m_subr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_subr); } // reverse sub from (one vec or real) - inline Vasp *m_mul(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_mul); } // mul with (one vec or real) - inline Vasp *m_div(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_div); } // div by (one vec or real) - inline Vasp *m_divr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_divr); } // reverse div by (one vec or real) - inline Vasp *m_mod(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_mod); } // modulo by (one vec or real) + inline Vasp *m_add(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_add); } // add to (one vec or real) + inline Vasp *m_sub(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_sub); } // sub from (one vec or real) + inline Vasp *m_subr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_subr); } // reverse sub from (one vec or real) + inline Vasp *m_mul(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_mul); } // mul with (one vec or real) + inline Vasp *m_div(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_div); } // div by (one vec or real) + inline Vasp *m_divr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_divr); } // reverse div by (one vec or real) + inline Vasp *m_mod(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_mod); } // modulo by (one vec or real) - inline Vasp *m_cadd(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cadd); } // complex add (pairs of vecs or complex) - inline Vasp *m_csub(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csub); } // complex sub (pairs of vecs or complex) - inline Vasp *m_csubr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csubr); } // reverse complex sub (pairs of vecs or complex) - inline Vasp *m_cmul(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cmul); } // complex mul (pairs of vecs or complex) - inline Vasp *m_cdiv(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdiv); } // complex div (pairs of vecs or complex) - inline Vasp *m_cdivr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdivr); } // complex reverse div (pairs of vecs or complex) + inline Vasp *m_cadd(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cadd); } // complex add (pairs of vecs or complex) + inline Vasp *m_csub(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csub); } // complex sub (pairs of vecs or complex) + inline Vasp *m_csubr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csubr); } // reverse complex sub (pairs of vecs or complex) + inline Vasp *m_cmul(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cmul); } // complex mul (pairs of vecs or complex) + inline Vasp *m_cdiv(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdiv); } // complex div (pairs of vecs or complex) + inline Vasp *m_cdivr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdivr); } // complex reverse div (pairs of vecs or complex) - inline Vasp *m_sqr(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sqr); } // unsigned square - inline Vasp *m_ssqr(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_ssqr); } // signed square - inline Vasp *m_csqr(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqr); } // complex square (with each two channels) -// inline Vasp *m_csqrt(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqrt); } // complex square root (how about branches?) + inline Vasp *m_sqr(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sqr); } // unsigned square + inline Vasp *m_ssqr(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_ssqr); } // signed square + inline Vasp *m_csqr(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqr); } // complex square (with each two channels) +// inline Vasp *m_csqrt(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqrt); } // complex square root (how about branches?) - Vasp *m_cpowi(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // complex integer power (with each two channels) + Vasp *m_cpowi(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // complex integer power (with each two channels) - inline Vasp *m_sign(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sign); } // sign function - inline Vasp *m_abs(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_abs); } // absolute values - inline Vasp *m_cabs(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cabs); } // absolute values + inline Vasp *m_sign(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sign); } // sign function + inline Vasp *m_abs(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_abs); } // absolute values + inline Vasp *m_cabs(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cabs); } // absolute values } #endif diff --git a/externals/grill/vasp/source/ops_assign.cpp b/externals/grill/vasp/source/ops_assign.cpp index a8033bb9..2495d68a 100644 --- a/externals/grill/vasp/source/ops_assign.cpp +++ b/externals/grill/vasp/source/ops_assign.cpp @@ -32,7 +32,7 @@ VASP_BINARY("vasp.cset vasp.c=",cset,false,VASP_ARG_R(0),"Assigns a complex valu -Vasp *VaspOp::m_copy(OpParam &p,Vasp &src,Vasp &arg) +Vasp *VaspOp::m_copy(OpParam &p,CVasp &src,CVasp &arg) { Vasp *s = NULL,*d = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,&arg); @@ -45,7 +45,7 @@ Vasp *VaspOp::m_copy(OpParam &p,Vasp &src,Vasp &arg) return s; } -Vasp *VaspOp::m_ccopy(OpParam &p,Vasp &src,Vasp &arg) +Vasp *VaspOp::m_ccopy(OpParam &p,CVasp &src,CVasp &arg) { Vasp *s = NULL,*d = NULL; CVecBlock *vecs = GetCVecs(p.opname,src,&arg); @@ -69,14 +69,14 @@ public: virtual V m_to(I,const t_atom *) { post("s - destination vasp is ignored!",thisName()); } - virtual Vasp *do_copy(OpParam &p,Vasp &dst) { return VaspOp::m_copy(p,ref,dst); } + virtual Vasp *do_copy(OpParam &p,CVasp &dst) { return VaspOp::m_copy(p,CVasp(ref),dst); } virtual Vasp *tx_work(const Argument &arg) { OpParam p(thisName(),0); if(arg.CanbeVasp()) { - Vasp dst = arg.GetAVasp(); + CVasp dst(arg.GetAVasp()); Vasp *ret = do_copy(p,dst); ToOutVasp(1,dst); return ret; @@ -100,7 +100,7 @@ public: vasp_ccopy(I argc,const t_atom *argv): vasp_copy(argc,argv) {} - virtual Vasp *do_copy(OpParam &p,Vasp &dst) { return VaspOp::m_ccopy(p,ref,dst); } + virtual Vasp *do_copy(OpParam &p,CVasp &dst) { return VaspOp::m_ccopy(p,CVasp(ref),dst); } virtual V m_help() { post("%s - Copies complex pairs of the triggering vasp to the argument vasp",thisName()); } }; diff --git a/externals/grill/vasp/source/ops_assign.h b/externals/grill/vasp/source/ops_assign.h index e80501f0..e27b3798 100644 --- a/externals/grill/vasp/source/ops_assign.h +++ b/externals/grill/vasp/source/ops_assign.h @@ -24,11 +24,11 @@ namespace VecOp { } namespace VaspOp { - inline Vasp *m_set(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_set); } // copy to (one vec or real) - inline Vasp *m_cset(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cset); } // complex copy (pairs of vecs or complex) + inline Vasp *m_set(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_set); } // copy to (one vec or real) + inline Vasp *m_cset(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cset); } // complex copy (pairs of vecs or complex) - Vasp *m_copy(OpParam &p,Vasp &src,Vasp &dst); - Vasp *m_ccopy(OpParam &p,Vasp &src,Vasp &dst); + Vasp *m_copy(OpParam &p,CVasp &src,CVasp &dst); + Vasp *m_ccopy(OpParam &p,CVasp &src,CVasp &dst); } #endif diff --git a/externals/grill/vasp/source/ops_carith.cpp b/externals/grill/vasp/source/ops_carith.cpp index cf00b439..cece7031 100644 --- a/externals/grill/vasp/source/ops_carith.cpp +++ b/externals/grill/vasp/source/ops_carith.cpp @@ -71,7 +71,7 @@ template V f_cpowi(T &rv,T &iv,T ra,T ia,OpParam &p) BL VecOp::d_cpowi(OpParam &p) { d__cop(f_cpowi,p); } -Vasp *VaspOp::m_cpowi(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) +Vasp *VaspOp::m_cpowi(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { Vasp *ret = NULL; CVecBlock *vecs = GetCVecs(p.opname,src,dst); diff --git a/externals/grill/vasp/source/ops_carith.h b/externals/grill/vasp/source/ops_carith.h index 7f841750..3910c0ad 100644 --- a/externals/grill/vasp/source/ops_carith.h +++ b/externals/grill/vasp/source/ops_carith.h @@ -30,19 +30,19 @@ namespace VecOp { } namespace VaspOp { - inline Vasp *m_cadd(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cadd); } // complex add (pairs of vecs or complex) - inline Vasp *m_csub(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csub); } // complex sub (pairs of vecs or complex) - inline Vasp *m_csubr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csubr); } // reverse complex sub (pairs of vecs or complex) - inline Vasp *m_cmul(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cmul); } // complex mul (pairs of vecs or complex) - inline Vasp *m_cdiv(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdiv); } // complex div (pairs of vecs or complex) - inline Vasp *m_cdivr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdivr); } // complex reverse div (pairs of vecs or complex) + inline Vasp *m_cadd(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cadd); } // complex add (pairs of vecs or complex) + inline Vasp *m_csub(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csub); } // complex sub (pairs of vecs or complex) + inline Vasp *m_csubr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csubr); } // reverse complex sub (pairs of vecs or complex) + inline Vasp *m_cmul(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cmul); } // complex mul (pairs of vecs or complex) + inline Vasp *m_cdiv(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdiv); } // complex div (pairs of vecs or complex) + inline Vasp *m_cdivr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdivr); } // complex reverse div (pairs of vecs or complex) - inline Vasp *m_csqr(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqr); } // complex square (with each two channels) -// inline Vasp *m_csqrt(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqrt); } // complex square root (how about branches?) + inline Vasp *m_csqr(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqr); } // complex square (with each two channels) +// inline Vasp *m_csqrt(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqrt); } // complex square root (how about branches?) - Vasp *m_cpowi(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // complex integer power (with each two channels) + Vasp *m_cpowi(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // complex integer power (with each two channels) - inline Vasp *m_cabs(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cabs); } // absolute values + inline Vasp *m_cabs(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cabs); } // absolute values } #endif diff --git a/externals/grill/vasp/source/ops_cmp.h b/externals/grill/vasp/source/ops_cmp.h index 87af3a19..8fab0e27 100644 --- a/externals/grill/vasp/source/ops_cmp.h +++ b/externals/grill/vasp/source/ops_cmp.h @@ -50,37 +50,37 @@ namespace VecOp { } namespace VaspOp { - inline Vasp *m_lwr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_lwr); } // lower than - inline Vasp *m_gtr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_gtr); } // greater than - inline Vasp *m_alwr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_alwr); } // abs lower than - inline Vasp *m_agtr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_agtr); } // abs greater than - inline Vasp *m_leq(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_leq); } // abs lower than - inline Vasp *m_geq(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_geq); } // abs greater than - inline Vasp *m_aleq(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_aleq); } // lower than - inline Vasp *m_ageq(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_ageq); } // greater than - inline Vasp *m_equ(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_equ); } // lower than - inline Vasp *m_neq(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_neq); } // greater than - - inline Vasp *m_min(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_min); } // min (one vec or real) - inline Vasp *m_max(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_max); } // max (one vec or real) - - inline Vasp *m_rmin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_rmin); } // complex (radius) min (pairs of vecs or complex) - inline Vasp *m_rmax(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_rmax); } // complex (radius) max (pairs of vecs or complex) - - inline Vasp *m_minmax(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_minmax); } // min/max - - inline Vasp *m_qmin(OpParam &p,Vasp &src) { return m_run(p,src,NULL,VecOp::d_minq); } // get minimum sample value - inline Vasp *m_qmax(OpParam &p,Vasp &src) { return m_run(p,src,NULL,VecOp::d_maxq); } // get maximum sample value - inline Vasp *m_qamin(OpParam &p,Vasp &src) { return m_run(p,src,NULL,VecOp::d_aminq); } // get minimum sample value - inline Vasp *m_qamax(OpParam &p,Vasp &src) { return m_run(p,src,NULL,VecOp::d_amaxq); } // get maximum sample value - - inline Vasp *m_qrmin(OpParam &p,Vasp &src) { return m_cun(p,src,NULL,VecOp::d_rminq); } // get minimum sample value - inline Vasp *m_qrmax(OpParam &p,Vasp &src) { return m_cun(p,src,NULL,VecOp::d_rmaxq); } // get maximum sample value - - Vasp *m_gate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // gate - Vasp *m_igate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // inverse gate - Vasp *m_rgate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // radius gate - Vasp *m_rigate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // inverse radius gate + inline Vasp *m_lwr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_lwr); } // lower than + inline Vasp *m_gtr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_gtr); } // greater than + inline Vasp *m_alwr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_alwr); } // abs lower than + inline Vasp *m_agtr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_agtr); } // abs greater than + inline Vasp *m_leq(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_leq); } // abs lower than + inline Vasp *m_geq(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_geq); } // abs greater than + inline Vasp *m_aleq(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_aleq); } // lower than + inline Vasp *m_ageq(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_ageq); } // greater than + inline Vasp *m_equ(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_equ); } // lower than + inline Vasp *m_neq(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_neq); } // greater than + + inline Vasp *m_min(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_min); } // min (one vec or real) + inline Vasp *m_max(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_max); } // max (one vec or real) + + inline Vasp *m_rmin(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_rmin); } // complex (radius) min (pairs of vecs or complex) + inline Vasp *m_rmax(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_rmax); } // complex (radius) max (pairs of vecs or complex) + + inline Vasp *m_minmax(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_minmax); } // min/max + + inline Vasp *m_qmin(OpParam &p,CVasp &src) { return m_run(p,src,NULL,VecOp::d_minq); } // get minimum sample value + inline Vasp *m_qmax(OpParam &p,CVasp &src) { return m_run(p,src,NULL,VecOp::d_maxq); } // get maximum sample value + inline Vasp *m_qamin(OpParam &p,CVasp &src) { return m_run(p,src,NULL,VecOp::d_aminq); } // get minimum sample value + inline Vasp *m_qamax(OpParam &p,CVasp &src) { return m_run(p,src,NULL,VecOp::d_amaxq); } // get maximum sample value + + inline Vasp *m_qrmin(OpParam &p,CVasp &src) { return m_cun(p,src,NULL,VecOp::d_rminq); } // get minimum sample value + inline Vasp *m_qrmax(OpParam &p,CVasp &src) { return m_cun(p,src,NULL,VecOp::d_rmaxq); } // get maximum sample value + + Vasp *m_gate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // gate + Vasp *m_igate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // inverse gate + Vasp *m_rgate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // radius gate + Vasp *m_rigate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // inverse radius gate } #endif diff --git a/externals/grill/vasp/source/ops_cplx.cpp b/externals/grill/vasp/source/ops_cplx.cpp index 5311b2db..b2f01788 100644 --- a/externals/grill/vasp/source/ops_cplx.cpp +++ b/externals/grill/vasp/source/ops_cplx.cpp @@ -40,7 +40,7 @@ template V f_radd(T &rv,T &iv,T ra,T ia,T rb,T) BL VecOp::d_radd(OpParam &p) { d__cbin(f_radd,p); } -Vasp *VaspOp::m_radd(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) +Vasp *VaspOp::m_radd(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { Vasp *ret = NULL; CVecBlock *vecs = GetCVecs(p.opname,src,dst); diff --git a/externals/grill/vasp/source/ops_cplx.h b/externals/grill/vasp/source/ops_cplx.h index de1426f2..b3aaa4c6 100644 --- a/externals/grill/vasp/source/ops_cplx.h +++ b/externals/grill/vasp/source/ops_cplx.h @@ -28,15 +28,15 @@ namespace VecOp { } namespace VaspOp { - inline Vasp *m_polar(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_polar); } // cartesian -> polar (each two) - inline Vasp *m_rect(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_rect); } // polar -> cartesian (each two) + inline Vasp *m_polar(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_polar); } // cartesian -> polar (each two) + inline Vasp *m_rect(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_rect); } // polar -> cartesian (each two) - Vasp *m_radd(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // radius offset + Vasp *m_radd(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // radius offset - inline Vasp *m_cnorm(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cnorm); } // complex normalize + inline Vasp *m_cnorm(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cnorm); } // complex normalize -// inline Vasp *m_cswap(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cswap); } // swap real and imaginary parts - inline Vasp *m_cconj(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cconj); } // complex conjugate +// inline Vasp *m_cswap(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cswap); } // swap real and imaginary parts + inline Vasp *m_cconj(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cconj); } // complex conjugate } #endif diff --git a/externals/grill/vasp/source/ops_dft.cpp b/externals/grill/vasp/source/ops_dft.cpp index dec49a26..827c2a03 100644 --- a/externals/grill/vasp/source/ops_dft.cpp +++ b/externals/grill/vasp/source/ops_dft.cpp @@ -584,7 +584,7 @@ static I radix2(I size) return j == size?i:-1; } -Vasp *VaspOp::m_rfft(OpParam &p,Vasp &src,Vasp *dst,BL inv) +Vasp *VaspOp::m_rfft(OpParam &p,CVasp &src,CVasp *dst,BL inv) { RVecBlock *vecs = GetRVecs(p.opname,src,dst); if(vecs) { @@ -614,7 +614,7 @@ Vasp *VaspOp::m_rfft(OpParam &p,Vasp &src,Vasp *dst,BL inv) return NULL; } -Vasp *VaspOp::m_cfft(OpParam &p,Vasp &src,Vasp *dst,BL inv) +Vasp *VaspOp::m_cfft(OpParam &p,CVasp &src,CVasp *dst,BL inv) { CVecBlock *vecs = GetCVecs(p.opname,src,dst,true); if(vecs) { diff --git a/externals/grill/vasp/source/ops_dft.h b/externals/grill/vasp/source/ops_dft.h index f2f3fe40..24b9a23d 100644 --- a/externals/grill/vasp/source/ops_dft.h +++ b/externals/grill/vasp/source/ops_dft.h @@ -16,10 +16,10 @@ WARRANTIES, see the file, "license.txt," in this distribution. // Fourier transforms namespace VaspOp { - Vasp *m_rfft(OpParam &p,Vasp &src,Vasp *dst = NULL,BL inv = false); // real forward - inline Vasp *m_rifft(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_rfft(p,src,dst,true); } // real inverse - Vasp *m_cfft(OpParam &p,Vasp &src,Vasp *dst = NULL,BL inv = false); // complex forward - inline Vasp *m_cifft(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cfft(p,src,dst,true); } // complex inverse + Vasp *m_rfft(OpParam &p,CVasp &src,CVasp *dst = NULL,BL inv = false); // real forward + inline Vasp *m_rifft(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_rfft(p,src,dst,true); } // real inverse + Vasp *m_cfft(OpParam &p,CVasp &src,CVasp *dst = NULL,BL inv = false); // complex forward + inline Vasp *m_cifft(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cfft(p,src,dst,true); } // complex inverse } #endif diff --git a/externals/grill/vasp/source/ops_feature.cpp b/externals/grill/vasp/source/ops_feature.cpp index ede711e2..3e33f313 100644 --- a/externals/grill/vasp/source/ops_feature.cpp +++ b/externals/grill/vasp/source/ops_feature.cpp @@ -101,7 +101,7 @@ inline BL d_rvalleys(OpParam &p) { return d_vlpk(p,lower); } \param inv true for valley operation \return normalized destination vasp */ -Vasp *VaspOp::m_peaks(OpParam &p,Vasp &src,Vasp *dst,BL inv) +Vasp *VaspOp::m_peaks(OpParam &p,CVasp &src,CVasp *dst,BL inv) { Vasp *ret = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,dst); @@ -123,7 +123,7 @@ Vasp *VaspOp::m_peaks(OpParam &p,Vasp &src,Vasp *dst,BL inv) \param inv true for valley operation \return normalized destination vasp */ -Vasp *VaspOp::m_rpeaks(OpParam &p,Vasp &src,Vasp *dst,BL inv) +Vasp *VaspOp::m_rpeaks(OpParam &p,CVasp &src,CVasp *dst,BL inv) { Vasp *ret = NULL; CVecBlock *vecs = GetCVecs(p.opname,src,dst); @@ -146,7 +146,11 @@ public: vasp_anyop(argc,argv,VASP_ARG(),true,XletCode(xlet::tp_float,0)) {} - virtual Vasp *do_peaks(OpParam &p) { return VaspOp::m_peaks(p,ref,&dst); } + virtual Vasp *do_peaks(OpParam &p) + { + CVasp cdst(dst); + return VaspOp::m_peaks(p,CVasp(ref),&cdst); + } virtual Vasp *tx_work(const Argument &arg) { @@ -174,7 +178,11 @@ class vasp_valleys: FLEXT_HEADER(vasp_valleys,vasp_peaks) public: vasp_valleys(I argc,const t_atom *argv): vasp_peaks(argc,argv) {} - virtual Vasp *do_peaks(OpParam &p) { return VaspOp::m_valleys(p,ref,&dst); } + virtual Vasp *do_peaks(OpParam &p) + { + CVasp cdst(dst); + return VaspOp::m_valleys(p,CVasp(ref),&cdst); + } }; FLEXT_LIB_V("vasp, vasp.valleys",vasp_valleys) @@ -185,7 +193,11 @@ class vasp_rpeaks: FLEXT_HEADER(vasp_rpeaks,vasp_peaks) public: vasp_rpeaks(I argc,const t_atom *argv): vasp_peaks(argc,argv) {} - virtual Vasp *do_peaks(OpParam &p) { return VaspOp::m_rpeaks(p,ref,&dst); } + virtual Vasp *do_peaks(OpParam &p) + { + CVasp cdst(dst); + return VaspOp::m_rpeaks(p,CVasp(ref),&cdst); + } }; FLEXT_LIB_V("vasp, vasp.rpeaks",vasp_rpeaks) @@ -196,7 +208,11 @@ class vasp_rvalleys: FLEXT_HEADER(vasp_rvalleys,vasp_peaks) public: vasp_rvalleys(I argc,const t_atom *argv): vasp_peaks(argc,argv) {} - virtual Vasp *do_peaks(OpParam &p) { return VaspOp::m_rvalleys(p,ref,&dst); } + virtual Vasp *do_peaks(OpParam &p) + { + CVasp cdst(dst); + return VaspOp::m_rvalleys(p,CVasp(ref),&cdst); + } }; FLEXT_LIB_V("vasp, vasp.rvalleys",vasp_rvalleys) diff --git a/externals/grill/vasp/source/ops_feature.h b/externals/grill/vasp/source/ops_feature.h index 05efc8b5..95293bad 100644 --- a/externals/grill/vasp/source/ops_feature.h +++ b/externals/grill/vasp/source/ops_feature.h @@ -20,10 +20,10 @@ namespace VecOp { namespace VaspOp { // extrema functions - Vasp *m_peaks(OpParam &p,Vasp &src,Vasp *dst = NULL,BL inv = false); //! find peaks - inline Vasp *m_valleys(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_peaks(p,src,dst,true); } //! find valleys - Vasp *m_rpeaks(OpParam &p,Vasp &src,Vasp *dst = NULL,BL inv = false); //! find radius peaks - inline Vasp *m_rvalleys(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_rpeaks(p,src,dst,true); } //! find radius valleys + Vasp *m_peaks(OpParam &p,CVasp &src,CVasp *dst = NULL,BL inv = false); //! find peaks + inline Vasp *m_valleys(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_peaks(p,src,dst,true); } //! find valleys + Vasp *m_rpeaks(OpParam &p,CVasp &src,CVasp *dst = NULL,BL inv = false); //! find radius peaks + inline Vasp *m_rvalleys(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_rpeaks(p,src,dst,true); } //! find radius valleys } #endif diff --git a/externals/grill/vasp/source/ops_flt.cpp b/externals/grill/vasp/source/ops_flt.cpp index 7784b081..fae66f56 100644 --- a/externals/grill/vasp/source/ops_flt.cpp +++ b/externals/grill/vasp/source/ops_flt.cpp @@ -105,7 +105,7 @@ BL VecOp::d_flp(OpParam &p) -Vasp *VaspOp::m_fhp(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL hp) +Vasp *VaspOp::m_fhp(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL hp) { Vasp *ret = NULL; if(arg.IsList() && arg.GetList().Count() >= 1) { @@ -186,7 +186,7 @@ BL VecOp::d_dif(OpParam &p) \param inv true for differentiation \return normalized destination vasp */ -Vasp *VaspOp::m_int(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL inv) +Vasp *VaspOp::m_int(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL inv) { Vasp *ret = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,dst); diff --git a/externals/grill/vasp/source/ops_flt.h b/externals/grill/vasp/source/ops_flt.h index 0ab37111..21761d90 100644 --- a/externals/grill/vasp/source/ops_flt.h +++ b/externals/grill/vasp/source/ops_flt.h @@ -27,15 +27,15 @@ namespace VecOp { namespace VaspOp { // passive filters - Vasp *m_fhp(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL,BL hp = true); //! hi pass - inline Vasp *m_flp(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_fhp(p,src,arg,dst,false); } //! lo pass + Vasp *m_fhp(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL,BL hp = true); //! hi pass + inline Vasp *m_flp(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_fhp(p,src,arg,dst,false); } //! lo pass // int/dif functions - Vasp *m_int(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL,BL inv = false); //! integrate - inline Vasp *m_dif(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_int(p,src,arg,dst,true); } //! differentiate + Vasp *m_int(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL,BL inv = false); //! integrate + inline Vasp *m_dif(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_int(p,src,arg,dst,true); } //! differentiate // fix denormals/NANs - inline Vasp *m_fix(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_fix); } // ! NAN/denormal filter + inline Vasp *m_fix(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_fix); } // ! NAN/denormal filter } #endif diff --git a/externals/grill/vasp/source/ops_gate.cpp b/externals/grill/vasp/source/ops_gate.cpp index 97faf682..3dd15fbb 100644 --- a/externals/grill/vasp/source/ops_gate.cpp +++ b/externals/grill/vasp/source/ops_gate.cpp @@ -43,7 +43,7 @@ BL VecOp::d_rigate(OpParam &p) { d__cbin(f_rigate,p); } -Vasp *VaspOp::m_gate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) +Vasp *VaspOp::m_gate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { Vasp *ret = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,dst); @@ -62,7 +62,7 @@ Vasp *VaspOp::m_gate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) } -Vasp *VaspOp::m_rgate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) +Vasp *VaspOp::m_rgate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { Vasp *ret = NULL; CVecBlock *vecs = GetCVecs(p.opname,src,dst); diff --git a/externals/grill/vasp/source/ops_gen.cpp b/externals/grill/vasp/source/ops_gen.cpp index f45be684..fb354468 100644 --- a/externals/grill/vasp/source/ops_gen.cpp +++ b/externals/grill/vasp/source/ops_gen.cpp @@ -48,7 +48,7 @@ BL VecOp::d_mosc(OpParam &p) \todo Replace period length by frequency specification */ -Vasp *VaspOp::m_osc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul) +Vasp *VaspOp::m_osc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul) { Vasp *ret = NULL; if(arg.IsList() && arg.GetList().Count() >= 1) { @@ -109,7 +109,7 @@ BL VecOp::d_mcosc(OpParam &p) \todo Replace period length by frequency specification */ -Vasp *VaspOp::m_cosc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul) +Vasp *VaspOp::m_cosc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul) { Vasp *ret = NULL; if(arg.IsList() && arg.GetList().Count() >= 1) { @@ -172,7 +172,7 @@ BL VecOp::d_mphasor(OpParam &p) \todo Replace period length by frequency specification */ -Vasp *VaspOp::m_phasor(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul) +Vasp *VaspOp::m_phasor(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul) { Vasp *ret = NULL; if(arg.IsList() && arg.GetList().Count() >= 1) { @@ -220,7 +220,7 @@ BL VecOp::d_noise(OpParam &p) \return normalized destination vasp */ -Vasp *VaspOp::m_noise(OpParam &p,Vasp &src,Vasp *dst) +Vasp *VaspOp::m_noise(OpParam &p,CVasp &src,CVasp *dst) { Vasp *ret = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,dst); @@ -250,7 +250,7 @@ BL VecOp::d_cnoise(OpParam &p) \todo Replace period length by frequency specification */ -Vasp *VaspOp::m_cnoise(OpParam &p,Vasp &src,Vasp *dst) +Vasp *VaspOp::m_cnoise(OpParam &p,CVasp &src,CVasp *dst) { Vasp *ret = NULL; CVecBlock *vecs = GetCVecs(p.opname,src,dst); diff --git a/externals/grill/vasp/source/ops_gen.h b/externals/grill/vasp/source/ops_gen.h index 9d1902d5..eff28710 100644 --- a/externals/grill/vasp/source/ops_gen.h +++ b/externals/grill/vasp/source/ops_gen.h @@ -27,14 +27,14 @@ namespace VecOp { } namespace VaspOp { - Vasp *m_osc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul = false); // real osc - inline Vasp *m_mosc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_osc(p,src,arg,dst,true); } // * real osc - Vasp *m_cosc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul = false); // complex osc (phase rotates) - inline Vasp *m_mcosc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_cosc(p,src,arg,dst,true); } // * complex osc (phase rotates) - Vasp *m_phasor(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul = false); // phasor - inline Vasp *m_mphasor(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_phasor(p,src,arg,dst,true); } // * phasor - Vasp *m_noise(OpParam &p,Vasp &src,Vasp *dst); // real noise - Vasp *m_cnoise(OpParam &p,Vasp &src,Vasp *dst); // complex noise (arg and abs random) + Vasp *m_osc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul = false); // real osc + inline Vasp *m_mosc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_osc(p,src,arg,dst,true); } // * real osc + Vasp *m_cosc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul = false); // complex osc (phase rotates) + inline Vasp *m_mcosc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_cosc(p,src,arg,dst,true); } // * complex osc (phase rotates) + Vasp *m_phasor(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul = false); // phasor + inline Vasp *m_mphasor(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_phasor(p,src,arg,dst,true); } // * phasor + Vasp *m_noise(OpParam &p,CVasp &src,CVasp *dst); // real noise + Vasp *m_cnoise(OpParam &p,CVasp &src,CVasp *dst); // complex noise (arg and abs random) } #endif diff --git a/externals/grill/vasp/source/ops_qminmax.cpp b/externals/grill/vasp/source/ops_qminmax.cpp index adcb15d2..debbfbd2 100644 --- a/externals/grill/vasp/source/ops_qminmax.cpp +++ b/externals/grill/vasp/source/ops_qminmax.cpp @@ -84,7 +84,7 @@ public: virtual Vasp *do_opt(OpParam &p) { p.norm.minmax = BIG; - Vasp *ret = VaspOp::m_qmin(p,ref); + Vasp *ret = VaspOp::m_qmin(p,CVasp(ref)); if(p.norm.minmax == BIG) p.norm.minmax = 0; return ret; } @@ -124,7 +124,7 @@ public: virtual Vasp *do_opt(OpParam &p) { p.norm.minmax = BIG; - Vasp *ret = VaspOp::m_qamin(p,ref); + Vasp *ret = VaspOp::m_qamin(p,CVasp(ref)); if(p.norm.minmax == BIG) p.norm.minmax = 0; return ret; } @@ -157,7 +157,7 @@ public: virtual Vasp *do_opt(OpParam &p) { p.norm.minmax = -BIG; - Vasp *ret = VaspOp::m_qmax(p,ref); + Vasp *ret = VaspOp::m_qmax(p,CVasp(ref)); if(p.norm.minmax == -BIG) p.norm.minmax = 0; return ret; } @@ -190,7 +190,7 @@ public: virtual Vasp *do_opt(OpParam &p) { p.norm.minmax = 0; - return VaspOp::m_qamax(p,ref); + return VaspOp::m_qamax(p,CVasp(ref)); } virtual V m_help() { post("%s - Get a vasp's maximum absolute sample value",thisName()); } @@ -225,7 +225,7 @@ public: virtual Vasp *do_opt(OpParam &p) { p.norm.minmax = BIG; - Vasp *ret = VaspOp::m_qrmin(p,ref); + Vasp *ret = VaspOp::m_qrmin(p,CVasp(ref)); if(p.norm.minmax == BIG) p.norm.minmax = 0; return ret; } @@ -266,7 +266,7 @@ public: virtual Vasp *do_opt(OpParam &p) { p.norm.minmax = 0; - return VaspOp::m_qrmax(p,ref); + return VaspOp::m_qrmax(p,CVasp(ref)); } virtual V m_help() { post("%s - Get a vasp's maximum complex radius",thisName()); } diff --git a/externals/grill/vasp/source/ops_rearr.cpp b/externals/grill/vasp/source/ops_rearr.cpp index bee58c56..80093c17 100644 --- a/externals/grill/vasp/source/ops_rearr.cpp +++ b/externals/grill/vasp/source/ops_rearr.cpp @@ -16,7 +16,7 @@ WARRANTIES, see the file, "license.txt," in this distribution. /*! \brief vasp shift or rotation \todo units for shift */ -Vasp *VaspOp::m_shift(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL shift,BL symm) +Vasp *VaspOp::m_shift(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL shift,BL symm) { Vasp *ret = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,dst); @@ -114,7 +114,11 @@ public: xsf_none = 0,xsf_zero,xsf_edge }; - virtual Vasp *do_shift(OpParam &p) { return VaspOp::m_shift(p,ref,arg,&dst); } + virtual Vasp *do_shift(OpParam &p) + { + CVasp cdst(dst); + return VaspOp::m_shift(p,CVasp(ref),arg,&cdst); + } virtual Vasp *tx_work(const Argument &arg) { @@ -144,7 +148,11 @@ public: vasp_xshift(I argc,const t_atom *argv): vasp_shift(argc,argv) {} - virtual Vasp *do_shift(OpParam &p) { return VaspOp::m_xshift(p,ref,arg,&dst); } + virtual Vasp *do_shift(OpParam &p) + { + CVasp cdst(dst); + return VaspOp::m_xshift(p,CVasp(ref),arg,&cdst); + } virtual V m_help() { post("%s - Shifts buffer data symmetrically (in two halves)",thisName()); } }; @@ -225,7 +233,7 @@ BL VecOp::d_mirr(OpParam &p) /*! \brief vasp mirror */ -Vasp *VaspOp::m_mirr(OpParam &p,Vasp &src,Vasp *dst,BL symm) +Vasp *VaspOp::m_mirr(OpParam &p,CVasp &src,CVasp *dst,BL symm) { Vasp *ret = NULL; RVecBlock *vecs = GetRVecs(p.opname,src,dst); diff --git a/externals/grill/vasp/source/ops_rearr.h b/externals/grill/vasp/source/ops_rearr.h index d1c6ce73..aa412937 100644 --- a/externals/grill/vasp/source/ops_rearr.h +++ b/externals/grill/vasp/source/ops_rearr.h @@ -22,12 +22,12 @@ namespace VecOp { } namespace VaspOp { - Vasp *m_shift(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL,BL sh = true,BL symm = false); // shift buffer - inline Vasp *m_xshift(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_shift(p,src,arg,dst,true,true); } // shift buffer (symmetrically) - inline Vasp *m_rot(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_shift(p,src,arg,dst,false,false); } // rotate buffer - inline Vasp *m_xrot(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_shift(p,src,arg,dst,false,true); } // rotate buffer (symmetrically) - Vasp *m_mirr(OpParam &p,Vasp &src,Vasp *dst = NULL,BL symm = false); //! mirror buffer - inline Vasp *m_xmirr(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_mirr(p,src,dst,true); } //! mirror buffer (symmetrically) + Vasp *m_shift(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL,BL sh = true,BL symm = false); // shift buffer + inline Vasp *m_xshift(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_shift(p,src,arg,dst,true,true); } // shift buffer (symmetrically) + inline Vasp *m_rot(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_shift(p,src,arg,dst,false,false); } // rotate buffer + inline Vasp *m_xrot(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_shift(p,src,arg,dst,false,true); } // rotate buffer (symmetrically) + Vasp *m_mirr(OpParam &p,CVasp &src,CVasp *dst = NULL,BL symm = false); //! mirror buffer + inline Vasp *m_xmirr(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_mirr(p,src,dst,true); } //! mirror buffer (symmetrically) } diff --git a/externals/grill/vasp/source/ops_resmp.cpp b/externals/grill/vasp/source/ops_resmp.cpp index cb51dbac..16780df8 100644 --- a/externals/grill/vasp/source/ops_resmp.cpp +++ b/externals/grill/vasp/source/ops_resmp.cpp @@ -176,7 +176,7 @@ BL VecOp::d_tilt(OpParam &p) \param mode interpolation mode \return normalized destination vasp */ -Vasp *VaspOp::m_tilt(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL symm) +Vasp *VaspOp::m_tilt(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL symm) { Vasp *ret = NULL; if(arg.IsList() && arg.GetList().Count() >= 1) { @@ -222,7 +222,11 @@ public: xti_inpl = 0,xti_none,xti_lin,xti_4p }; - virtual Vasp *do_shift(OpParam &p) { return VaspOp::m_tilt(p,ref,arg,&dst); } + virtual Vasp *do_shift(OpParam &p) + { + CVasp cdst(dst); + return VaspOp::m_tilt(p,CVasp(ref),arg,&cdst); + } virtual Vasp *tx_work(const Argument &arg) { @@ -255,7 +259,11 @@ public: vasp_xtilt(I argc,t_atom *argv): vasp_tilt(argc,argv) {} - virtual Vasp *do_shift(OpParam &p) { return VaspOp::m_xtilt(p,ref,arg,&dst); } + virtual Vasp *do_shift(OpParam &p) + { + CVasp cdst(dst); + return VaspOp::m_xtilt(p,CVasp(ref),arg,&cdst); + } virtual V m_help() { post("%s - Resamples buffer data symmetrically (in two halves)",thisName()); } }; diff --git a/externals/grill/vasp/source/ops_resmp.h b/externals/grill/vasp/source/ops_resmp.h index 9c4a8bde..e164ee0b 100644 --- a/externals/grill/vasp/source/ops_resmp.h +++ b/externals/grill/vasp/source/ops_resmp.h @@ -20,9 +20,9 @@ namespace VecOp { } namespace VaspOp { - Vasp *m_tilt(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL,BL symm = false); + Vasp *m_tilt(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL,BL symm = false); // Symmetric resampling (around center sample) - inline Vasp *m_xtilt(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_tilt(p,src,arg,dst,true); } + inline Vasp *m_xtilt(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_tilt(p,src,arg,dst,true); } } #endif diff --git a/externals/grill/vasp/source/ops_search.cpp b/externals/grill/vasp/source/ops_search.cpp index 4202a77c..f514d6f3 100644 --- a/externals/grill/vasp/source/ops_search.cpp +++ b/externals/grill/vasp/source/ops_search.cpp @@ -70,17 +70,17 @@ BL VecOp::d_search(OpParam &p) return true; } -Vasp *VaspOp::m_search(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL st) +Vasp *VaspOp::m_search(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL st) { Vasp *ret = NULL; if(src.Vectors() > 1) post("%s - More than one vector in vasp!",p.opName()); else if(arg.CanbeFloat() || (arg.IsList() && arg.GetList().Count() >= 1)) { - I fr = src.ChkFrames(); + I fr = src.Frames(); I o = src.Vector(0).Offset(); I sz = src.Buffer(0)->Frames(); - Vasp all(src); + CVasp all(src); if(st) { // search start point p.srch.offs = o; @@ -112,7 +112,7 @@ Vasp *VaspOp::m_search(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL st) if(ret) { ret->Offset(o); ret->Frames(fr); - ret->Frames(ret->ChkFrames()); + ret->Frames(ret->ChkFrames()); // What's that???? } delete vecs; @@ -167,7 +167,11 @@ class vasp_soffset: FLEXT_HEADER(vasp_soffset,vasp_search) public: vasp_soffset(I argc,t_atom *argv): vasp_search(argc,argv) {} - virtual Vasp *do_work(OpParam &p) { return VaspOp::m_soffset(p,ref,arg,&dst); } + virtual Vasp *do_work(OpParam &p) + { + CVasp cdst(dst); + return VaspOp::m_soffset(p,CVasp(ref),arg,&cdst); + } }; FLEXT_LIB_V("vasp, vasp.offset= vasp.o=",vasp_soffset) @@ -178,7 +182,11 @@ class vasp_sframes: FLEXT_HEADER(vasp_sframes,vasp_search) public: vasp_sframes(I argc,t_atom *argv): vasp_search(argc,argv) {} - virtual Vasp *do_work(OpParam &p) { return VaspOp::m_sframes(p,ref,arg,&dst); } + virtual Vasp *do_work(OpParam &p) + { + CVasp cdst(dst); + return VaspOp::m_sframes(p,CVasp(ref),arg,&cdst); + } }; FLEXT_LIB_V("vasp, vasp.frames= vasp.f=",vasp_sframes) diff --git a/externals/grill/vasp/source/ops_search.h b/externals/grill/vasp/source/ops_search.h index e7a04e5c..ef199f71 100644 --- a/externals/grill/vasp/source/ops_search.h +++ b/externals/grill/vasp/source/ops_search.h @@ -21,9 +21,9 @@ namespace VecOp { namespace VaspOp { // search functions - Vasp *m_search(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL st); //! find values - inline Vasp *m_soffset(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_search(p,src,arg,dst,true); } - inline Vasp *m_sframes(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_search(p,src,arg,dst,false); } + Vasp *m_search(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL st); //! find values + inline Vasp *m_soffset(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_search(p,src,arg,dst,true); } + inline Vasp *m_sframes(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_search(p,src,arg,dst,false); } } #endif diff --git a/externals/grill/vasp/source/ops_trnsc.cpp b/externals/grill/vasp/source/ops_trnsc.cpp index ac4cea1f..88089fbb 100644 --- a/externals/grill/vasp/source/ops_trnsc.cpp +++ b/externals/grill/vasp/source/ops_trnsc.cpp @@ -33,7 +33,7 @@ template V f_crpow(T &rv,T &iv,T ra,T ia,T rb,T) BL VecOp::d_rpow(OpParam &p) { d__cbin(f_crpow,p); } -Vasp *VaspOp::m_rpow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) +Vasp *VaspOp::m_rpow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { Vasp *ret = NULL; CVecBlock *vecs = GetCVecs(p.opname,src,dst); diff --git a/externals/grill/vasp/source/ops_trnsc.h b/externals/grill/vasp/source/ops_trnsc.h index 81009298..ee919ea9 100644 --- a/externals/grill/vasp/source/ops_trnsc.h +++ b/externals/grill/vasp/source/ops_trnsc.h @@ -29,18 +29,18 @@ namespace VecOp { } namespace VaspOp { - inline Vasp *m_pow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_pow); } // power + inline Vasp *m_pow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_pow); } // power - Vasp *m_rpow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // radius power (with each two channels) + Vasp *m_rpow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // radius power (with each two channels) - inline Vasp *m_sqrt(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sqrt); } // square root (from abs value) - inline Vasp *m_ssqrt(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_ssqrt); } // square root (from abs value) + inline Vasp *m_sqrt(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sqrt); } // square root (from abs value) + inline Vasp *m_ssqrt(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_ssqrt); } // square root (from abs value) - inline Vasp *m_exp(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_exp); } // exponential function - inline Vasp *m_log(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_log); } // natural logarithm + inline Vasp *m_exp(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_exp); } // exponential function + inline Vasp *m_log(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_log); } // natural logarithm -// inline Vasp *m_cexp(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cexp); } // complex exponential function -// inline Vasp *m_clog(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_clog); } // complex logarithm (how about branches?) +// inline Vasp *m_cexp(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cexp); } // complex exponential function +// inline Vasp *m_clog(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_clog); } // complex logarithm (how about branches?) } diff --git a/externals/grill/vasp/source/ops_wnd.cpp b/externals/grill/vasp/source/ops_wnd.cpp index daee3a9e..278e7bf1 100644 --- a/externals/grill/vasp/source/ops_wnd.cpp +++ b/externals/grill/vasp/source/ops_wnd.cpp @@ -141,7 +141,7 @@ BL VecOp::d_window(OpParam &p) return true; } -Vasp *VaspOp::m_window(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL inv,BL mul,BL symm) +Vasp *VaspOp::m_window(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL inv,BL mul,BL symm) { static const int wndnum = 8; static const char *wndtps[wndnum] = {"lin","sin","hanning","hamming","blackman","connes","welch","lanczos" /*,"gaussian","kaiser"*/}; diff --git a/externals/grill/vasp/source/ops_wnd.h b/externals/grill/vasp/source/ops_wnd.h index 21bafb59..9103d978 100644 --- a/externals/grill/vasp/source/ops_wnd.h +++ b/externals/grill/vasp/source/ops_wnd.h @@ -16,24 +16,26 @@ WARRANTIES, see the file, "license.txt," in this distribution. // Window functions namespace VecOp { +/* BL d_bevel(OpParam &p); BL d_mbevel(OpParam &p); - +*/ BL d_window(OpParam &p); } namespace VaspOp { - Vasp *m_bevelup(OpParam &p,Vasp &src,Vasp *dst,BL up = true,BL mul = false); // bevel up - inline Vasp *m_mbevelup(OpParam &p,Vasp &src,Vasp *dst) { return m_bevelup(p,src,dst,true,true); } // * bevel up (fade in) - inline Vasp *m_beveldn(OpParam &p,Vasp &src,Vasp *dst) { return m_bevelup(p,src,dst,false,false); } // bevel down - inline Vasp *m_mbeveldn(OpParam &p,Vasp &src,Vasp *dst) { return m_bevelup(p,src,dst,false,true); } // * bevel down (fade out) - - Vasp *m_window(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL inv = false,BL mul = false,BL symm = false); // window curve - inline Vasp *m_mwindow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_window(p,src,arg,dst,false,true,false); } // * window curve - inline Vasp *m_iwindow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_window(p,src,arg,dst,true,false,false); } // inverse window curve - inline Vasp *m_miwindow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_window(p,src,arg,dst,true,true,false); } // * inverse window curve - inline Vasp *m_xwindow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_window(p,src,arg,dst,false,false,true); } // symmetrical window curve - inline Vasp *m_mxwindow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_window(p,src,arg,dst,false,true,true); } // * symmetrical window curve +/* + Vasp *m_bevelup(OpParam &p,CVasp &src,CVasp *dst,BL up = true,BL mul = false); // bevel up + inline Vasp *m_mbevelup(OpParam &p,CVasp &src,CVasp *dst) { return m_bevelup(p,src,dst,true,true); } // * bevel up (fade in) + inline Vasp *m_beveldn(OpParam &p,CVasp &src,CVasp *dst) { return m_bevelup(p,src,dst,false,false); } // bevel down + inline Vasp *m_mbeveldn(OpParam &p,CVasp &src,CVasp *dst) { return m_bevelup(p,src,dst,false,true); } // * bevel down (fade out) +*/ + Vasp *m_window(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL inv = false,BL mul = false,BL symm = false); // window curve + inline Vasp *m_mwindow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_window(p,src,arg,dst,false,true,false); } // * window curve + inline Vasp *m_iwindow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_window(p,src,arg,dst,true,false,false); } // inverse window curve + inline Vasp *m_miwindow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_window(p,src,arg,dst,true,true,false); } // * inverse window curve + inline Vasp *m_xwindow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_window(p,src,arg,dst,false,false,true); } // symmetrical window curve + inline Vasp *m_mxwindow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_window(p,src,arg,dst,false,true,true); } // * symmetrical window curve } #endif diff --git a/externals/grill/vasp/source/opvecs.cpp b/externals/grill/vasp/source/opvecs.cpp index 1a226eb3..e29f39bc 100644 --- a/externals/grill/vasp/source/opvecs.cpp +++ b/externals/grill/vasp/source/opvecs.cpp @@ -65,7 +65,7 @@ inline BL corrlen(I &frms,VBuffer &b) \remark working size is maximum common vector size */ -RVecBlock *VaspOp::GetRVecs(const C *op,Vasp &src,Vasp *dst) +RVecBlock *VaspOp::GetRVecs(const C *op,CVasp &src,CVasp *dst) { I nvecs = src.Vectors(); if(dst && dst->Ok() && dst->Vectors() != nvecs) { @@ -116,7 +116,7 @@ RVecBlock *VaspOp::GetRVecs(const C *op,Vasp &src,Vasp *dst) \param full true if imaginary part is compulsory \return struct with vector data */ -CVecBlock *VaspOp::GetCVecs(const C *op,Vasp &src,Vasp *dst,BL full) +CVecBlock *VaspOp::GetCVecs(const C *op,CVasp &src,CVasp *dst,BL full) { I nvecs = src.Vectors(); if(dst && dst->Ok() && dst->Vectors() != nvecs) { @@ -193,7 +193,7 @@ CVecBlock *VaspOp::GetCVecs(const C *op,Vasp &src,Vasp *dst,BL full) \param multi 0 off/1 on/-1 auto... controls whether argument vector is single- or multi-vectored \return struct with vector data */ -RVecBlock *VaspOp::GetRVecs(const C *op,Vasp &src,const Vasp &arg,Vasp *dst,I multi,BL ssize) +RVecBlock *VaspOp::GetRVecs(const C *op,CVasp &src,const CVasp &arg,CVasp *dst,I multi,BL ssize) { if(!arg.Ok()) { post("%s - invalid argument vasp detected and ignored",op); @@ -285,7 +285,7 @@ RVecBlock *VaspOp::GetRVecs(const C *op,Vasp &src,const Vasp &arg,Vasp *dst,I mu \param full true if imaginary part is compulsory \return struct with vector data */ -CVecBlock *VaspOp::GetCVecs(const C *op,Vasp &src,const Vasp &arg,Vasp *dst,I multi,BL ssize,BL full) +CVecBlock *VaspOp::GetCVecs(const C *op,CVasp &src,const CVasp &arg,CVasp *dst,I multi,BL ssize,BL full) { if(!arg.Ok()) { post("%s - invalid argument vasp detected and ignored",op); diff --git a/externals/grill/vasp/source/vasp.cpp b/externals/grill/vasp/source/vasp.cpp index efb3b7a6..66bffccb 100644 --- a/externals/grill/vasp/source/vasp.cpp +++ b/externals/grill/vasp/source/vasp.cpp @@ -54,13 +54,20 @@ Vasp::Vasp(I fr,const Ref &r): refs(0),chns(0),ref(NULL), frames(fr) { - operator +=(r); + AddVector(r); } Vasp::~Vasp() { + Clear(); +} + +Vasp &Vasp::Clear() +{ + refs = frames = chns = 0; if(ref) delete[] ref; + return *this; } @@ -131,7 +138,7 @@ Vasp &Vasp::operator =(const Vasp &v) } -Vasp &Vasp::operator +=(const Ref &r) +Vasp &Vasp::AddVector(const Ref &r) { Resize(chns+1); ref[chns++] = r; @@ -139,23 +146,6 @@ Vasp &Vasp::operator +=(const Ref &r) } -Vasp &Vasp::operator +=(const Vasp &v) -{ - if(v.Ok()) { - if(!Ok()) *this = v; - else { - if(Frames() != v.Frames()) { - post("vasp - Frame count of joined vasps is different - taking the minimum"); - Frames(min(Frames(),v.Frames())); - } - - Resize(Vectors()+v.Vectors()); - for(I i = 0; i < v.Vectors(); ++i) *this += v.Vector(i); - } - } - return *this; -} - // parse argument list Vasp &Vasp::operator ()(I argc,const t_atom *argv) { @@ -291,37 +281,37 @@ V Vasp::Channel(I c) } -V Vasp::Size(I s) +V Vasp::Size(I s,BL keep) { for(I i = 0; i < Vectors(); ++i) { VBuffer *buf = Buffer(i); if(buf) { - buf->Frames(s,true); + buf->Frames(s,keep); delete buf; } } } -V Vasp::SizeD(I sd) +V Vasp::SizeD(I sd,BL keep) { for(I i = 0; i < Vectors(); ++i) { VBuffer *buf = Buffer(i); if(buf) { I s = buf->Frames()+sd; - buf->Frames(s >= 0?s:0,true); + buf->Frames(s >= 0?s:0,keep); delete buf; } } } -V Vasp::SizeM(R f) +V Vasp::SizeM(R f,BL keep) { for(I i = 0; i < Vectors(); ++i) { VBuffer *buf = Buffer(i); if(buf) { I s = (I)(buf->Frames()*f); - buf->Frames(s >= 0?s:0,true); + buf->Frames(s >= 0?s:0,keep); delete buf; } } @@ -359,3 +349,36 @@ I Vasp::ChkFrames() const return frms < 0?0:frms; } + +// ------------------------------------ + +CVasp::CVasp() {} + +CVasp::CVasp(const Vasp &v): + Vasp(v) +{ + if(!Check()) + Clear(); + else + Frames(ChkFrames()); +} + +CVasp &CVasp::operator +=(const CVasp &v) +{ + if(v.Ok()) { + if(!Ok()) *this = v; + else { + I f = Frames(),vf = v.Frames(); + + if(f != vf) { + post("vasp - Frame count of joined vasps is different - taking the minimum"); + Frames(min(f,vf)); + } + + Resize(Vectors()+v.Vectors()); + for(I i = 0; i < v.Vectors(); ++i) AddVector(v.Vector(i)); + } + } + return *this; +} + diff --git a/externals/grill/vasp/source/vasp.h b/externals/grill/vasp/source/vasp.h index 94e1ad73..3f76b5bd 100644 --- a/externals/grill/vasp/source/vasp.h +++ b/externals/grill/vasp/source/vasp.h @@ -60,13 +60,8 @@ public: Vasp &operator =(const Vasp &v); Vasp &operator ()(I argc,const t_atom *argv /*,BL withvasp = false*/); - // add another vector - Vasp &operator +=(const Ref &r); - // add vectors of another vasp - Vasp &operator +=(const Vasp &v); - // set used channels to 0 - Vasp &Clear() { frames = 0; chns = 0; return *this; } + Vasp &Clear(); // used vectors I Vectors() const { return chns; } @@ -83,13 +78,13 @@ public: V FramesR(R f) { if(f) FramesM(1./f); else Frames(0); } // set buffer sizes - V Size(I fr); + V Size(I fr,BL keep = true); // set frame count differentially - V SizeD(I frd); + V SizeD(I frd,BL keep = true); // set frame count - V SizeM(R f); + V SizeM(R f,BL keep = true); // set frame count - V SizeR(R f) { if(f) SizeM(1./f); else Size(0); } + V SizeR(R f,BL keep = true) { if(f) SizeM(1./f,keep); else Size(0,false); } // actual length of the vasp (in frames) I ChkFrames() const; @@ -120,6 +115,9 @@ public: // get buffer associated to a channel VBuffer *Buffer(I ix) const; + // add another vector + Vasp &AddVector(const Ref &r); + // Real/Complex VBuffer *ReBuffer() const { return Buffer(0); } VBuffer *ImBuffer() const { return Buffer(1); } @@ -141,4 +139,20 @@ protected: V Resize(I rcnt); }; +/*! \brief Checked vasp + \remark Only use that for immediate operation! +*/ +class CVasp: + public Vasp +{ +public: + CVasp(); + CVasp(const Vasp &v); + + // add vectors of another vasp + CVasp &operator +=(const CVasp &v); + +}; + + #endif diff --git a/externals/grill/vasp/source/vecblk.cpp b/externals/grill/vasp/source/vecblk.cpp index 8310cc2f..80917237 100644 --- a/externals/grill/vasp/source/vecblk.cpp +++ b/externals/grill/vasp/source/vecblk.cpp @@ -39,7 +39,7 @@ Vasp *VecBlock::_DstVasp(I n) { Vasp *ret = new Vasp; ret->Frames(Frames()); - for(I i = 0; i < n; ++i) *ret += Vasp::Ref(*_Dst(i)); + for(I i = 0; i < n; ++i) ret->AddVector(Vasp::Ref(*_Dst(i))); return ret; } @@ -47,7 +47,7 @@ Vasp *VecBlock::_SrcVasp(I n) { Vasp *ret = new Vasp; ret->Frames(Frames()); - for(I i = 0; i < n; ++i) *ret += Vasp::Ref(*_Src(i)); + for(I i = 0; i < n; ++i) ret->AddVector(Vasp::Ref(*_Src(i))); return ret; } diff --git a/externals/grill/vasp/todo.txt b/externals/grill/vasp/todo.txt index 584d552d..4504fee0 100644 --- a/externals/grill/vasp/todo.txt +++ b/externals/grill/vasp/todo.txt @@ -21,6 +21,8 @@ warning, treat as 0, calculate unit operation, loop, mirror on buffer end, stay - make in place rotation more efficient (use temporary space) +- introduce "groups" for attribute organisation (e.g. detach etc.) + objects: --------------------- - wave object for table-lookup oscs. @@ -43,17 +45,11 @@ objects: bugs: --------------------- -- vasp.join doesn't like length -1 - -- immediate vasp garbage collection causes clicks.... do it in a separate thread! - tests: --------------------- -- vasp.size always keeps the data... do we want that? -> flag if yes/no - in-place operation (src == dst), test if strides are equal! - should frame count always be pre-evaluated (e.g. in vasp.f+ etc. ?) -- review/change questionable permutation algorithm - test DFT objects on strided buffers - check for odd remainder frame on symmetric operations!! -- cgit v1.2.1