1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/*
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 flext
{
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
|