Esempio n. 1
0
	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();
			}
		}
	}
Esempio n. 2
0
	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);
		}
	}
Esempio n. 3
0
	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;
		}
	}
Esempio n. 4
0
	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;
		}
	}