From 9815096db22c73cacdbb65512d1b61d633db7fa8 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Mon, 2 Dec 2002 19:21:08 +0000 Subject: "version 0.1.1" svn path=/trunk/; revision=267 --- externals/grill/vasp/source/vecblk.h | 105 +++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 externals/grill/vasp/source/vecblk.h (limited to 'externals/grill/vasp/source/vecblk.h') diff --git a/externals/grill/vasp/source/vecblk.h b/externals/grill/vasp/source/vecblk.h new file mode 100644 index 00000000..a938558e --- /dev/null +++ b/externals/grill/vasp/source/vecblk.h @@ -0,0 +1,105 @@ +/* + +VASP modular - vector assembling signal processor / objects for Max/MSP and PD + +Copyright (c) 2002 Thomas Grill (xovo@gmx.net) +For information on usage and redistribution, and for a DISCLAIMER OF ALL +WARRANTIES, see the file, "license.txt," in this distribution. + +*/ + +#ifndef __VASP_VECBLK_H +#define __VASP_VECBLK_H + +#include "vasp.h" + +class VecBlock +{ +public: + + I Frames() const { return frms; } + V Frames(I fr) { frms = fr; } + I ArgFrames() const { return afrms; } + V ArgFrames(I fr) { afrms = fr; } + I ArgBlks() const { return barg; } + + BL Complex() { return cplx; } + +protected: + VecBlock(BL cplx,I msrc,I mdst,I marg,I blarg); + ~VecBlock(); + + Vasp *_SrcVasp(I n); + Vasp *_DstVasp(I n); + Vasp *_ResVasp(I n); // either Dst or Src + + VBuffer *_Src(I ix) { return vecs[ix]; } + VBuffer *_Dst(I ix) { return vecs[asrc+aarg*barg+ix]; } + V _Src(I ix,VBuffer *v) { vecs[ix] = v; } + V _Dst(I ix,VBuffer *v) { vecs[asrc+aarg*barg+ix] = v; } + + VBuffer *_Arg(I ix,I bl = 0) { return vecs[asrc+bl*aarg+ix]; } + V _Arg(I ix,VBuffer *v,I bl = 0) { vecs[asrc+bl*aarg+ix] = v; } + +private: + BL cplx; + I asrc,adst,aarg,barg; + VBuffer **vecs; + I frms,afrms; +}; + + +class RVecBlock: + public VecBlock +{ +public: + RVecBlock(I _n,I _a = 0,I _ba = 0): VecBlock(false,_n,_n,_a,_ba),n(_n),a(_a) {} + + VBuffer *Src(I ix) { return _Src(ix); } + VBuffer *Dst(I ix) { return _Dst(ix); } + V Src(I ix,VBuffer *v) { _Src(ix,v); } + V Dst(I ix,VBuffer *v) { _Dst(ix,v); } + + VBuffer *Arg(I ix,I bl = 0) { return _Arg(ix,bl); } + V Arg(I ix,VBuffer *v,I bl = 0) { _Arg(ix,v,bl); } + + I Vecs() const { return n; } + I Args() const { return a; } + + Vasp *SrcVasp() { return _SrcVasp(n); } + Vasp *DstVasp() { return _DstVasp(n); } + Vasp *ResVasp() { return _ResVasp(n); } + +protected: + I n,a; +}; + +class CVecBlock: + public VecBlock +{ +public: + CVecBlock(I _np,I _ap = 0,I _bap = 0): VecBlock(true,_np*2,_np*2,_ap*2,_bap),np(_np),ap(_ap) {} + + VBuffer *ReSrc(I ix) { return _Src(ix*2); } + VBuffer *ImSrc(I ix) { return _Src(ix*2+1); } + VBuffer *ReDst(I ix) { return _Dst(ix*2); } + VBuffer *ImDst(I ix) { return _Dst(ix*2+1); } + V Src(I ix,VBuffer *vre,VBuffer *vim) { _Src(ix*2,vre); _Src(ix*2+1,vim); } + V Dst(I ix,VBuffer *vre,VBuffer *vim) { _Dst(ix*2,vre); _Dst(ix*2+1,vim); } + + VBuffer *ReArg(I ix,I bl = 0) { return _Arg(ix*2,bl); } + VBuffer *ImArg(I ix,I bl = 0) { return _Arg(ix*2+1,bl); } + V Arg(I ix,VBuffer *vre,VBuffer *vim,I bl = 0) { _Arg(ix*2,vre,bl); _Arg(ix*2+1,vim,bl); } + + I Pairs() const { return np; } + I Args() const { return ap; } + + Vasp *SrcVasp() { return _SrcVasp(np*2); } + Vasp *DstVasp() { return _DstVasp(np*2); } + Vasp *ResVasp() { return _ResVasp(np*2); } + +protected: + I np,ap; +}; + +#endif -- cgit v1.2.1