V chkbang(I n,Vasp *a = NULL) { if(a && n > 0) { stored[n-1] = *a; delete a; } BL f = flags[n]; flags[n] = true; if(!f) { // flags have changed BL all = true; for(I i = 0; i < CntIn(); ++i) all = all && flags[i]; if(all) { if(ref.Ok()) { for(I i = CntIn()-1; i > 0; --i) ToOutVasp(i,stored[i-1]); ToOutVasp(0,ref); } else ToOutBang(0); if(autoreset) m_reset(); } } }
virtual V m_bang() { if(!ref.Ok()) { post("%s - Invalid vasp!",thisName()); return; } I fr = ref.ChkFrames(),o = 0; for(I i = 0; i < parts && (fr < 0 || fr); ++i) { I p = part[i]; if(fr >= 0) { p = min(p,fr); fr -= p; } Vasp ret(ref); ret.Frames(p); ret.OffsetD(o); ToOutVasp(0,ret); o += p; } if(fr) { Vasp ret(ref); ret.Frames(fr); ret.OffsetD(o); ToOutVasp(1,ret); } }
virtual V m_bang() { if(!ref.Ok() || !ref.Check()) { /* if(!frms) post("%s - No length defined!",thisName()); else */ { ImmBuf ibuf(frms,zero); Vasp ret(frms,Vasp::Ref(ibuf)); ToOutVasp(0,ret); } } else if(ref.Vectors() > 1) post("%s - More than one vector in vasp!",thisName()); else { VBuffer *buf = ref.Buffer(0); const I len = buf->Length(),chns = buf->Channels(); // size of memory reservation (at least frms samples) const I rlen = frms > len?frms:len; ImmBuf imm(rlen,false); BS *dst = imm.Pointer(); const BS *src = buf->Pointer(); // post("!copy: src: %p,%i,%i -> dst: %p,%i",src,len,chns,dst,rlen); register int i; _DE_LOOP(i,len, ( dst[i] = *src,src += chns ) ) if(zero && rlen > len) ZeroSamples(dst+len,rlen-len); Vasp::Ref vr(imm); // post("!vr: %s,%i",vr.Ok()?vr.Symbol().Name():"***",vr.Offset()); Vasp ret(len,vr); ToOutVasp(0,ret); delete buf; } }
virtual Vasp *tx_work(const Argument &arg) { OpParam p(thisName(),0); if(arg.CanbeVasp()) { CVasp dst(arg.GetAVasp()); Vasp *ret = do_copy(p,dst); ToOutVasp(1,dst); return ret; } else { post("%s - argument is not a valid vasp!",thisName()); // \todo check earlier! return NULL; } }