aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/vasp/source/opparam.h
diff options
context:
space:
mode:
Diffstat (limited to 'externals/grill/vasp/source/opparam.h')
-rw-r--r--externals/grill/vasp/source/opparam.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/externals/grill/vasp/source/opparam.h b/externals/grill/vasp/source/opparam.h
new file mode 100644
index 00000000..0b6e5bd5
--- /dev/null
+++ b/externals/grill/vasp/source/opparam.h
@@ -0,0 +1,128 @@
+/*
+
+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_OPPARAM_H
+#define __VASP_OPPARAM_H
+
+#include "vecblk.h"
+#include "arg.h"
+
+class OpParam {
+public:
+ OpParam(const C *opnm,I args);
+ ~OpParam();
+
+ V InitArgs(I nargs);
+ V Clear();
+
+ BL HasArg() const { return arg != NULL; }
+
+ const C *opName() const { return opname; }
+
+ // check for overlap
+ // \remark if on same vector, stride is the same for src, arg, dst!
+ inline BL SR_In() const { return rddt > rsdt && rddt < rsdt+frames*rss; }
+ inline BL SI_In() const { return iddt > isdt && iddt < isdt+frames*iss; }
+ BL AR_In(I bl) const;
+ BL AI_In(I bl) const;
+ BL AR_In() const;
+ BL AI_In() const;
+
+ // Can we reverse direction?
+ inline BL SR_Can() const { return rsdt <= rddt || rsdt >= rddt+frames*rds; }
+ inline BL SI_Can() const { return isdt <= iddt || isdt >= iddt+frames*ids; }
+ BL AR_Can(I bl) const;
+ BL AI_Can(I bl) const;
+ BL AR_Can() const;
+ BL AI_Can() const;
+
+ // does it overlap? (works only with rss,rds,ras.... > 0)
+ inline BL SR_Ovr() const { return rddt != rsdt && rddt < rsdt+frames*rss && rsdt < rddt+frames*rds; }
+ inline BL SI_Ovr() const { return iddt != isdt && iddt < isdt+frames*iss && isdt < iddt+frames*ids; }
+ BL AR_Ovr(I bl) const;
+ BL AI_Ovr(I bl) const;
+ BL AR_Ovr() const;
+ BL AI_Ovr() const;
+
+ V AR_Rev();
+ V AI_Rev();
+
+ V R_Rev();
+ V C_Rev();
+
+ V SkipOddMiddle();
+ V SkipOddMiddle(S m);
+
+ const C *opname;
+ I frames,symm,args;
+ BL ovrlap,revdir,oddrem;
+ S *rsdt,*isdt; I rss,iss;
+ S *rddt,*iddt; I rds,ids;
+
+ class Arg
+ {
+ public:
+ Arg(): argtp(arg_) {}
+// Arg(const Arg &op) { operator =(op); }
+ ~Arg() { Clear(); }
+ V Clear();
+
+ BL Is() const { return argtp != arg_; }
+
+// Arg &operator =(const Arg &op);
+// Arg &operator =(const Argument &arg);
+
+ Arg &SetX(S r,S i = 0);
+ Arg &SetV(S *r,I rs,S *i = NULL,I is = 0);
+ Arg &SetE(const Env *bp);
+
+ typedef struct env_t { const Env *env; };
+ typedef struct v_t { S *rdt,*idt; I rs,is; };
+ typedef struct x_t { R r,i; };
+
+ enum { arg_ = 0,arg_x,arg_v,arg_env } argtp;
+ union {
+ x_t x;
+ v_t v;
+ env_t e;
+ };
+ };
+
+ Arg *arg;
+
+ union {
+ struct { R coef,carry; I rep; } flt;
+ struct { R carry; I rep; } intdif;
+ struct { BL cx; R density; I cnt; } peaks;
+ struct { R ph,phinc; } gen;
+ struct { R factor,center; I mode,fill; } tilt;
+ struct { R cur,inc; } bvl;
+ struct { R sh; I ish; I fill; } sh;
+ struct { I wndtp; BL inv,mul; R p1,p2,p3; } wnd;
+ struct { R minmax,scl; } norm;
+ struct { I arg; } ibin;
+ struct { R arg; } rbin;
+ struct { R rarg,iarg; } cbin;
+ struct { I *order; } perm;
+ struct { R val; I offs,dif,dir,slope; } srch;
+ };
+
+private:
+ // reverse direction
+ inline V SR_Rev() { rsdt -= (frames-1)*(rss = -rss); }
+ inline V SI_Rev() { isdt -= (frames-1)*(iss = -iss); }
+ V AR_Rev(I bl);
+ V AI_Rev(I bl);
+ inline V DR_Rev() { rddt -= (frames-1)*(rds = -rds); }
+ inline V DI_Rev() { iddt -= (frames-1)*(ids = -ids); }
+
+};
+
+#endif