aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2002-12-17 04:36:31 +0000
committerThomas Grill <xovo@users.sourceforge.net>2002-12-17 04:36:31 +0000
commita5b45e8e2e99686ea73fa2793d7fec84f0d1a3ed (patch)
tree4b31406382bacd13aa784ea22d584ac634f8d8ad
parenta0cb0bd2e02740e50ec16dde2fb4e07f1702d1d0 (diff)
""
svn path=/trunk/; revision=303
-rw-r--r--externals/grill/flext/flext.cwbin202097 -> 202097 bytes
-rw-r--r--externals/grill/flext/flext.doxy15
-rw-r--r--externals/grill/flext/flext.dsp2
-rw-r--r--externals/grill/flext/readme.txt8
-rw-r--r--externals/grill/flext/source/flclass.h41
-rw-r--r--externals/grill/flext/source/flext.cpp2
-rwxr-xr-xexternals/grill/flext/source/flprefix.h50
-rw-r--r--externals/grill/flext/source/flsupport.h37
-rw-r--r--externals/grill/flext/source/flthr.cpp180
-rw-r--r--externals/grill/flext/tutorial/thread1/thread1.cwbin68426 -> 68426 bytes
-rw-r--r--externals/grill/guitest/flgui.cpp16
-rw-r--r--externals/grill/guitest/flgui.h6
-rw-r--r--externals/grill/guitest/flguiobj.cpp64
-rw-r--r--externals/grill/guitest/flguiobj.h6
-rw-r--r--externals/grill/guitest/main.cpp2
-rw-r--r--externals/grill/py/source/modmeth.cpp2
-rw-r--r--externals/grill/vasp/changes.txt3
-rw-r--r--externals/grill/vasp/pd-ex/freeze1.pd164
-rw-r--r--externals/grill/vasp/source/buflib.cpp112
-rw-r--r--externals/grill/vasp/source/classes.cpp22
-rw-r--r--externals/grill/vasp/source/classes.h13
-rw-r--r--externals/grill/vasp/source/main.cpp1
-rw-r--r--externals/grill/vasp/source/obj_size.cpp10
-rw-r--r--externals/grill/vasp/source/obj_split.cpp13
-rw-r--r--externals/grill/vasp/source/obj_vasp.cpp6
-rw-r--r--externals/grill/vasp/source/opbase.cpp8
-rw-r--r--externals/grill/vasp/source/opbase.h16
-rw-r--r--externals/grill/vasp/source/ops_arith.h42
-rw-r--r--externals/grill/vasp/source/ops_assign.cpp10
-rw-r--r--externals/grill/vasp/source/ops_assign.h8
-rw-r--r--externals/grill/vasp/source/ops_carith.cpp2
-rw-r--r--externals/grill/vasp/source/ops_carith.h20
-rw-r--r--externals/grill/vasp/source/ops_cmp.h62
-rw-r--r--externals/grill/vasp/source/ops_cplx.cpp2
-rw-r--r--externals/grill/vasp/source/ops_cplx.h12
-rw-r--r--externals/grill/vasp/source/ops_dft.cpp4
-rw-r--r--externals/grill/vasp/source/ops_dft.h8
-rw-r--r--externals/grill/vasp/source/ops_feature.cpp28
-rw-r--r--externals/grill/vasp/source/ops_feature.h8
-rw-r--r--externals/grill/vasp/source/ops_flt.cpp4
-rw-r--r--externals/grill/vasp/source/ops_flt.h10
-rw-r--r--externals/grill/vasp/source/ops_gate.cpp4
-rw-r--r--externals/grill/vasp/source/ops_gen.cpp10
-rw-r--r--externals/grill/vasp/source/ops_gen.h16
-rw-r--r--externals/grill/vasp/source/ops_qminmax.cpp12
-rw-r--r--externals/grill/vasp/source/ops_rearr.cpp16
-rw-r--r--externals/grill/vasp/source/ops_rearr.h12
-rw-r--r--externals/grill/vasp/source/ops_resmp.cpp14
-rw-r--r--externals/grill/vasp/source/ops_resmp.h4
-rw-r--r--externals/grill/vasp/source/ops_search.cpp20
-rw-r--r--externals/grill/vasp/source/ops_search.h6
-rw-r--r--externals/grill/vasp/source/ops_trnsc.cpp2
-rw-r--r--externals/grill/vasp/source/ops_trnsc.h16
-rw-r--r--externals/grill/vasp/source/ops_wnd.cpp2
-rw-r--r--externals/grill/vasp/source/ops_wnd.h26
-rw-r--r--externals/grill/vasp/source/opvecs.cpp8
-rw-r--r--externals/grill/vasp/source/vasp.cpp73
-rw-r--r--externals/grill/vasp/source/vasp.h34
-rw-r--r--externals/grill/vasp/source/vecblk.cpp4
-rw-r--r--externals/grill/vasp/todo.txt8
60 files changed, 702 insertions, 604 deletions
diff --git a/externals/grill/flext/flext.cw b/externals/grill/flext/flext.cw
index e6e05add..0cb21636 100644
--- a/externals/grill/flext/flext.cw
+++ b/externals/grill/flext/flext.cw
Binary files differ
diff --git a/externals/grill/flext/flext.doxy b/externals/grill/flext/flext.doxy
index 553294ee..a1aa48f9 100644
--- a/externals/grill/flext/flext.doxy
+++ b/externals/grill/flext/flext.doxy
@@ -1,10 +1,10 @@
-# Doxyfile 1.2.17
+# Doxyfile 1.3-rc2
#---------------------------------------------------------------------------
# General configuration options
#---------------------------------------------------------------------------
PROJECT_NAME = flext
-PROJECT_NUMBER = "version 0.4.0"
+PROJECT_NUMBER = "version 0.4.1"
OUTPUT_DIRECTORY = f:/prog/max/flext/doc/
OUTPUT_LANGUAGE = English
EXTRACT_ALL = NO
@@ -14,6 +14,7 @@ EXTRACT_LOCAL_CLASSES = YES
HIDE_UNDOC_MEMBERS = YES
HIDE_UNDOC_CLASSES = YES
HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ALWAYS_DETAILED_SEC = NO
@@ -21,7 +22,6 @@ INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = NO
STRIP_FROM_PATH =
INTERNAL_DOCS = YES
-STRIP_CODE_COMMENTS = YES
CASE_SENSE_NAMES = YES
SHORT_NAMES = NO
HIDE_SCOPE_NAMES = NO
@@ -51,6 +51,7 @@ SHOW_USED_FILES = YES
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = NO
+WARN_IF_DOC_ERROR = YES
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
@@ -73,6 +74,7 @@ FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
#---------------------------------------------------------------------------
@@ -142,6 +144,13 @@ XML_DTD =
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
diff --git a/externals/grill/flext/flext.dsp b/externals/grill/flext/flext.dsp
index 1de1cb26..d13680e9 100644
--- a/externals/grill/flext/flext.dsp
+++ b/externals/grill/flext/flext.dsp
@@ -89,7 +89,7 @@ LIB32=link.exe -lib
# PROP Intermediate_Dir "pd-msvc\td"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GR /ZI /Od /I "c:\programme\audio\pd\src" /I "." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "PD" /D "NT" /D "FLEXT_THREADS" /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "c:\programme\audio\pd\src" /I "f:\prog\packs\sndobj\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D FLEXT_SYS=2 /D "FLEXT_THREADS" /FR /YX"flext.h" /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "c:\programme\audio\pd\src" /I "f:\prog\packs\sndobj\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "FLEXT_SYS_PD" /D "FLEXT_THREADS" /FR /YX"flext.h" /FD /GZ /c
# ADD BASE RSC /l 0xc07 /d "_DEBUG"
# ADD RSC /l 0xc07 /d "_DEBUG"
BSC32=bscmake.exe
diff --git a/externals/grill/flext/readme.txt b/externals/grill/flext/readme.txt
index b58df39c..7fbcc8dc 100644
--- a/externals/grill/flext/readme.txt
+++ b/externals/grill/flext/readme.txt
@@ -111,6 +111,10 @@ Version history:
- SndObjs: fixed typo (numbers of output slots was wrong) and init bug
- introduced a helper thread for launching flext threads in the background
- threads are now handled on class (as opposed to object) level
+- threads can now be terminated separately
+- put more flext functions into flext static class
+- replaced ChangePriority by RefPriority
+- fixed setting of priorities... problems were caused by a compiler bug (MSVC 6)
0.4.0:
- the use of the const keyword is enforced (e.g. the preferred type for symbols is now "const t_symbol *")
@@ -274,12 +278,8 @@ TODO list:
general:
- documentation
- add log messages for debugging version
-- where to put flext source/lib in linux: /usr/local/lib,/usr/local/include ?
-- clean up headers (eliminate flstdc.h?)
-- check that SetupInOut is only called once
- feed assist function with in/outlet description
- MaxMSP: how to call separate help files for objects in a library?
-- MaxMSP for OSX: add support
bugs:
- PD: problems with timed buffer redrawing (takes a lot of cpu time)
diff --git a/externals/grill/flext/source/flclass.h b/externals/grill/flext/source/flclass.h
index 6f74b5fe..66da8e7a 100644
--- a/externals/grill/flext/source/flclass.h
+++ b/externals/grill/flext/source/flclass.h
@@ -392,37 +392,8 @@ public:
@{
*/
- /*! \brief Check if current thread should terminate
- \todo Check for currently running thread
- */
- bool ShouldExit() const { return shouldexit; }
-
- //! Check if current thread is the realtime system's thread
- bool IsSystemThread() const { pthread_t cur = pthread_self(); return pthread_equal(cur,thrid) != 0; }
-
- /*! \brief Yield to other threads
- \remark A call to this is only needed for systems with cooperative multitasking like MacOS<=9
- */
- static void ThrYield() { sched_yield(); }
-
- typedef pthread_t thrid_t;
-
- /*! \brief Get current thread id
- */
- static thrid_t GetThreadId();
-
- /*! \brief Increase/Decrease priority of a thread
- */
- static bool ChangePriority(int dp,thrid_t thr = GetThreadId());
-
- /*! \brief Get priority of a thread
- */
- static int GetPriority(thrid_t thr = GetThreadId());
-
- /*! \brief Set priority of a thread
- */
- static bool SetPriority(int p,thrid_t thr = GetThreadId());
-
+ //! Check if current thread should terminate
+ bool ShouldExit() const;
#endif // FLEXT_THREADS
@@ -467,12 +438,12 @@ protected:
class thr_entry
{
public:
- thr_entry(flext_base *t,void *(*m)(thr_params *),thr_params *p,pthread_t id = pthread_self()): th(t),meth(m),params(p),thrid(id),active(false),nxt(NULL) {}
+ thr_entry(flext_base *t,void *(*m)(thr_params *),thr_params *p,pthread_t id = pthread_self());
//! \brief Check if this class represents the current thread
bool Is(pthread_t id = pthread_self()) const { return pthread_equal(thrid,id) != 0; }
- bool active;
+ bool active,shouldexit;
pthread_t thrid;
void *(*meth)(thr_params *);
thr_params *params;
@@ -660,10 +631,6 @@ private:
static bool cb_SetAttrib(flext_base *c,const t_symbol *s,int argc,const t_atom *argv) { return c->SetAttrib(s,argc,argv); }
#ifdef FLEXT_THREADS
- bool shouldexit;
- int thrcount;
-
- static pthread_t thrid; // the thread that created the object (the system thread)
ThrMutex qmutex;
static thr_entry *thrhead,*thrtail;
diff --git a/externals/grill/flext/source/flext.cpp b/externals/grill/flext/source/flext.cpp
index d0fdb766..764bfa98 100644
--- a/externals/grill/flext/source/flext.cpp
+++ b/externals/grill/flext/source/flext.cpp
@@ -130,7 +130,7 @@ flext_base::flext_base():
LOG1("%s - flext logging is on",thisName());
#ifdef FLEXT_THREADS
- shouldexit = false;
+// shouldexit = false;
// thrhead = thrtail = NULL;
#endif
qhead = qtail = NULL;
diff --git a/externals/grill/flext/source/flprefix.h b/externals/grill/flext/source/flprefix.h
index 34debe69..d2c7f173 100755
--- a/externals/grill/flext/source/flprefix.h
+++ b/externals/grill/flext/source/flprefix.h
@@ -15,41 +15,61 @@ WARRANTIES, see the file, "license.txt," in this distribution.
#ifndef __FLEXT_PREFIX_H
#define __FLEXT_PREFIX_H
-// definitions for FLEXT_SYS
+// --- definitions for FLEXT_SYS ---------------------
#define FLEXT_SYS_UNKNOWN 0
-#define FLEXT_SYS_MAX 1
-#define FLEXT_SYS_PD 2
-// definitions for FLEXT_OS
+#ifndef FLEXT_SYS_MAX
+ #define FLEXT_SYS_MAX 1
+#else
+ // already defined
+ #undef FLEXT_SYS_MAX
+ #define FLEXT_SYS_MAX 1
+ #define FLEXT_SYS FLEXT_SYS_MAX
+#endif
+
+#ifndef FLEXT_SYS_PD
+ #define FLEXT_SYS_PD 2
+#else
+ // already defined
+ #undef FLEXT_SYS_PD
+ #define FLEXT_SYS_PD 2
+ #define FLEXT_SYS FLEXT_SYS_PD
+#endif
+
+// --- definitions for FLEXT_OS ----------------------
#define FLEXT_OS_UNKNOWN 0
#define FLEXT_OS_WIN 1
#define FLEXT_OS_MACOS 2
#define FLEXT_OS_LINUX 3
#define FLEXT_OS_IRIX 4
-// definitions for FLEXT_CPU
+// --- definitions for FLEXT_CPU ---------------------
#define FLEXT_CPU_UNKNOWN 0
#define FLEXT_CPU_INTEL 1
#define FLEXT_CPU_PPC 2
#define FLEXT_CPU_MIPS 3
#define FLEXT_CPU_ALPHA 4
-
-
-// Old definitions
-#if defined(MAXMSP)
- #define FLEXT_SYS FLEXT_SYS_MAX
-// #undef MAXMSP
-#elif defined(PD)
- #define FLEXT_SYS FLEXT_SYS_PD
-// #undef PD
-// #undef NT
+// ---------------------------------------------------
+// support old definitions
+
+#ifndef FLEXT_SYS
+ #if defined(MAXMSP)
+ #define FLEXT_SYS FLEXT_SYS_MAX
+ // #undef MAXMSP
+ #elif defined(PD)
+ #define FLEXT_SYS FLEXT_SYS_PD
+ // #undef PD
+ // #undef NT
+ #endif
#endif
#if defined(_DEBUG)
#define FLEXT_DEBUG
#endif
+// ---------------------------------------------------
+
// Definition of supported real-time systems
#if FLEXT_SYS == FLEXT_SYS_MAX
#elif FLEXT_SYS == FLEXT_SYS_PD
diff --git a/externals/grill/flext/source/flsupport.h b/externals/grill/flext/source/flsupport.h
index 08036ff5..9429599d 100644
--- a/externals/grill/flext/source/flsupport.h
+++ b/externals/grill/flext/source/flsupport.h
@@ -391,6 +391,43 @@ public:
@{
*/
+ //! thread type
+ typedef pthread_t thrid_t;
+
+protected:
+ //! system's thread id
+ static thrid_t thrid; // the system thread
+
+public:
+
+ //! Check if current thread is the realtime system's thread
+ static bool IsSystemThread() { pthread_t cur = pthread_self(); return pthread_equal(cur,thrid) != 0; }
+
+ /*! \brief Yield to other threads
+ \remark A call to this is only needed for systems with cooperative multitasking like MacOS<=9
+ */
+ static void ThrYield() { sched_yield(); }
+
+ /*! \brief Get current thread id
+ */
+ static thrid_t GetThreadId() { return pthread_self(); }
+
+ /*! \brief Get current thread id
+ */
+ static thrid_t GetSysThreadId() { return thrid; }
+
+ /*! \brief Increase/Decrease priority of a thread
+ */
+ static bool RelPriority(int dp,thrid_t ref = GetSysThreadId(),thrid_t thr = GetThreadId());
+
+ /*! \brief Get priority of a thread
+ */
+ static int GetPriority(thrid_t thr = GetThreadId());
+
+ /*! \brief Set priority of a thread
+ */
+ static bool SetPriority(int p,thrid_t thr = GetThreadId());
+
/*! \brief Thread mutex
\sa pthreads documentation
*/
diff --git a/externals/grill/flext/source/flthr.cpp b/externals/grill/flext/source/flthr.cpp
index 97da5584..36184025 100644
--- a/externals/grill/flext/source/flthr.cpp
+++ b/externals/grill/flext/source/flthr.cpp
@@ -24,10 +24,10 @@ WARRANTIES, see the file, "license.txt," in this distribution.
#include <errno.h>
//! Thread id of system thread
-pthread_t flext_base::thrid;
+flext::thrid_t flext::thrid;
//! Thread id of helper thread
-pthread_t flext_base::thrhelpid;
+flext::thrid_t flext_base::thrhelpid;
flext_base::thr_entry *flext_base::thrhead = NULL,*flext_base::thrtail = NULL;
flext::ThrMutex flext_base::tlmutex;
@@ -35,8 +35,17 @@ flext::ThrMutex flext_base::tlmutex;
//! Helper thread should terminate
bool thrhelpexit = false;
+//! Helper thread conditional
flext::ThrCond *thrhelpcond = NULL;
+
+flext_base::thr_entry::thr_entry(flext_base *t,void *(*m)(thr_params *),thr_params *p,pthread_t id):
+ th(t),meth(m),params(p),thrid(id),
+ active(false),shouldexit(false),
+ nxt(NULL)
+{}
+
+
//! Start helper thread
bool flext_base::StartHelper()
{
@@ -75,15 +84,7 @@ void flext_base::ThrHelper(void *)
// set thread priority one point below normal
// so thread construction won't disturb real-time audio
- sched_param parm;
- int policy;
- pthread_getschedparam(thrhelpid,&policy,&parm);
- int prio = parm.sched_priority;
- int schmin = sched_get_priority_min(policy);
- if(prio > schmin) {
- parm.sched_priority = prio-1;
- pthread_setschedparam(thrhelpid,policy,&parm);
- }
+ RelPriority(-1);
thrhelpcond = new ThrCond;
@@ -151,105 +152,19 @@ bool flext_base::StartThread(void *(*meth)(thr_params *p),thr_params *p,char *me
return true;
}
-/*
-bool flext_base::StartThread(void *(*meth)(thr_params *p),thr_params *p,char *methname)
+bool flext_base::ShouldExit() const
{
-#ifdef FLEXT_DEBUG
- if(!p) {
- ERRINTERNAL();
- return false;
- }
-#endif
-
- static bool init = false;
- static pthread_attr_t attr;
- if(!init) {
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
- init = true;
- }
+ for(thr_entry *ti = thrhead; ti; ti = ti->nxt)
+ if(ti->Is()) return ti->shouldexit;
- // set thread priority one point below normal
- // so thread construction won't disturb real-time audio
- pthread_t id = pthread_self();
- sched_param parm;
- int policy;
- pthread_getschedparam(id,&policy,&parm);
- int prio = parm.sched_priority;
- int schmin = sched_get_priority_min(policy);
- if(prio > schmin) {
- parm.sched_priority = prio-1;
- pthread_setschedparam(id,policy,&parm);
- }
-
- pthread_t thrid;
- int ret = pthread_create (&thrid,&attr,(void *(*)(void *))meth,p);
-
- // set thread priority back to normal
- parm.sched_priority = prio;
- pthread_setschedparam(id,policy,&parm);
-
- if(ret) {
-#ifdef FLEXT_DEBUG
- error((char *)(ret == EAGAIN?"%s - Unsufficient resources to launch thread!":"%s - Could not launch method!"),methname);
-#else
- error((char *)("%s - Could not launch method!"),methname);
-#endif
-
- delete p;
- return false;
- }
- else
- return true;
+ // thread was not found -> EXIT!!!
+ return true;
}
-*/
bool flext_base::PushThread()
{
- tlmutex.Lock();
-
-// post("Push thread");
-
-/*
- // make an entry into thread list
- thr_entry *nt = new thr_entry;
- if(thrtail) thrtail->nxt = nt;
- else thrhead = nt;
- thrtail = nt;
-*/
- {
-#if FLEXT_OS == FLEXT_OS_WIN
- // set detached thread to lower priority class
- DWORD err;
- HANDLE thr = GetCurrentThread();
- DWORD cl = GetThreadPriority(thr);
- if(!cl && (err = GetLastError()))
- post("flext - error getting thread priority");
- else {
- BOOL ret = SetThreadPriority(thr,cl-2);
- if(!ret) {
- err = GetLastError();
- if(!err) post("flext - error setting thread priority");
- }
- }
-#else
- // set initial detached thread priority two points below normal
- sched_param parm;
- int policy;
- if(pthread_getschedparam(nt->thrid,&policy,&parm))
- post("flext - can't get thread parameters");
- int prio = parm.sched_priority;
- int schmin = sched_get_priority_min(policy);
- if(prio > schmin) {
- parm.sched_priority = prio-2;
- if(pthread_setschedparam(nt->thrid,policy,&parm))
- post("flext - can't set thread parameters");
- }
-#endif
- }
-
- tlmutex.Unlock();
-
+ // set priority of newly created thread one point below the system thread's
+ RelPriority(-1);
return true;
}
@@ -284,17 +199,33 @@ void flext_base::PopThread()
tlmutex.Unlock();
}
+//! Terminate all object threads
void flext_base::TermThreads()
{
+ thr_entry *t;
+
+ // signal termination
+ for(t = thrhead; t; t = t->nxt)
+ if(t->th == this) t->shouldexit = true;
+
+ // TODO: maybe there should be a thread conditional for every thread so that it can be signaled
+
// wait for thread termination
- shouldexit = true;
- for(int wi = 0; thrhead && wi < 100; ++wi) Sleep(0.01f);
+ for(int wi = 0; wi < 100; ++wi) {
+ int cnt = 0;
+ for(t = thrhead; t; t = t->nxt)
+ if(t->th == this) ++cnt;
+ if(!cnt) break;
+ Sleep(0.01f);
+ }
+
+ // --- all object threads have terminated by now -------
qmutex.Lock(); // Lock message queue
tlmutex.Lock();
// timeout -> hard termination
- for(thr_entry *t = thrhead; t; )
+ for(t = thrhead; t; )
if(t->th == this) {
if(pthread_cancel(t->thrid)) post("%s - Thread could not be terminated!",thisName());
thr_entry *tn = t->nxt;
@@ -307,26 +238,39 @@ void flext_base::TermThreads()
qmutex.Unlock();
}
-flext_base::thrid_t flext_base::GetThreadId()
-{
- return pthread_self();
-}
-
-bool flext_base::ChangePriority(int dp,thrid_t id)
+bool flext::RelPriority(int dp,thrid_t ref,thrid_t id)
{
sched_param parm;
int policy;
- if(pthread_getschedparam(id,&policy,&parm) < 0) {
+ if(pthread_getschedparam(ref,&policy,&parm) < 0) {
#ifdef FLEXT_DEBUG
- post("flext - failed to get parms");
+ post("flext - failed to get thread priority");
#endif
return false;
}
else {
parm.sched_priority += dp;
+
+ // MSVC++ 6 produces wrong code with the following lines!!!
+// int schmin = sched_get_priority_min(policy);
+// int schmax = sched_get_priority_max(policy);
+
+ if(parm.sched_priority < sched_get_priority_min(policy)) {
+#ifdef FLEXT_DEBUG
+ post("flext - minimum thread priority reached");
+#endif
+ parm.sched_priority = sched_get_priority_min(policy);
+ }
+ else if(parm.sched_priority > sched_get_priority_max(policy)) {
+#ifdef FLEXT_DEBUG
+ post("flext - maximum thread priority reached");
+#endif
+ parm.sched_priority = sched_get_priority_max(policy);
+ }
+
if(pthread_setschedparam(id,policy,&parm) < 0) {
#ifdef FLEXT_DEBUG
- post("flext - failed to change priority");
+ post("flext - failed to change thread priority");
#endif
return false;
}
@@ -335,7 +279,7 @@ bool flext_base::ChangePriority(int dp,thrid_t id)
}
-int flext_base::GetPriority(thrid_t id)
+int flext::GetPriority(thrid_t id)
{
sched_param parm;
int policy;
@@ -349,7 +293,7 @@ int flext_base::GetPriority(thrid_t id)
}
-bool flext_base::SetPriority(int p,thrid_t id)
+bool flext::SetPriority(int p,thrid_t id)
{
sched_param parm;
int policy;
diff --git a/externals/grill/flext/tutorial/thread1/thread1.cw b/externals/grill/flext/tutorial/thread1/thread1.cw
index f5cb4b53..3e7cce36 100644
--- a/externals/grill/flext/tutorial/thread1/thread1.cw
+++ b/externals/grill/flext/tutorial/thread1/thread1.cw
Binary files differ
diff --git a/externals/grill/guitest/flgui.cpp b/externals/grill/guitest/flgui.cpp
index 86d8e4ea..1bad0851 100644
--- a/externals/grill/guitest/flgui.cpp
+++ b/externals/grill/guitest/flgui.cpp
@@ -7,7 +7,7 @@
#include <stdlib.h>
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
t_class *flext_gui::px_class = NULL;
t_class *flext_gui::pxkey_class = NULL;
@@ -31,10 +31,10 @@ struct flext_gui::pxkey_object // no virtual table!
flext_gui::flext_gui(int xs,int ys):
objs(NULL),
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
xsize(xs),ysize(ys),
#endif
-#ifdef MAXMSP
+#if FLEXT_SYS == FLEXT_SYS_MAX
curx(-1),cury(-1),curmod(-1),
created(false),
#endif
@@ -43,7 +43,7 @@ flext_gui::flext_gui(int xs,int ys):
canvas = new Canvas(thisCanvas());
objs = new GuiGroup(canvas);
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
AddCanvas();
#else
t_box *b = (t_box *)gensym("#B")->s_thing;
@@ -58,7 +58,7 @@ flext_gui::flext_gui(int xs,int ys):
flext_gui::~flext_gui()
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
RmvCanvas();
#endif
@@ -69,7 +69,7 @@ flext_gui::~flext_gui()
void flext_gui::setup(t_class *c)
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
SetWidget(c);
pxkey_class = class_new(gensym("flext_gui key proxy"),NULL,NULL,sizeof(pxkey_object),CLASS_PD|CLASS_NOINLET, A_NULL);
@@ -105,7 +105,7 @@ void flext_gui::setup(t_class *c)
#endif
}
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
int flext_gui::evmask = evMotion|evMouseDown|evKeyDown|evKeyUp;
int flext_gui::curmod = 0;
@@ -216,7 +216,7 @@ void flext_gui::pxkey_method(pxkey_object *obj,const t_symbol *s,int argc,t_atom
}
}
}
-#ifdef DEBUG
+#if 0 //def FLEXT_DEBUG
else
post("unknown modifier %s",str);
#endif
diff --git a/externals/grill/guitest/flgui.h b/externals/grill/guitest/flgui.h
index d9b302db..211a4935 100644
--- a/externals/grill/guitest/flgui.h
+++ b/externals/grill/guitest/flgui.h
@@ -4,7 +4,7 @@
#define FLEXT_VIRT
#include <flext.h>
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
#pragma warning( disable : 4091 )
#include <g_canvas.h>
#endif
@@ -72,7 +72,7 @@ protected:
virtual bool g_Focus(GuiObj &obj,bool on,int mod) { return false; }
*/
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
bool Selected() const { return selected; }
void FixLines() { canvas_fixlinesfor( thisCanvas(), thisHdr() ); }
@@ -143,7 +143,7 @@ private:
virtual void m_Method(const CBParams &p);
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
bool selected;
int xsize,ysize;
diff --git a/externals/grill/guitest/flguiobj.cpp b/externals/grill/guitest/flguiobj.cpp
index b845ae5e..5641e9b5 100644
--- a/externals/grill/guitest/flguiobj.cpp
+++ b/externals/grill/guitest/flguiobj.cpp
@@ -12,26 +12,26 @@
#define ZONE 1000
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
bool Canvas::store = true;
bool Canvas::debug = false;
#endif
Canvas::Canvas(t_canvas *c):
canvas(c)
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
,buffer(new char[BUFSIZE]),bufix(0),waiting(0)
#endif
{}
Canvas::~Canvas()
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
if(buffer) delete[] buffer;
#endif
}
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
void Canvas::Send(const char *t)
{
if(debug) post("GUI - %s",t);
@@ -96,7 +96,7 @@ Canvas &Canvas::Tk(char *fmt,...)
bool Canvas::Pre(int x,int y)
{
xpos = x,ypos = y;
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
++waiting;
return true;
#else
@@ -113,7 +113,7 @@ bool Canvas::Pre(int x,int y)
void Canvas::Post()
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
if(!--waiting) SendBuf();
#else
if(svgp) {
@@ -210,7 +210,7 @@ GuiSingle *GuiSingle::Find(const t_symbol *s)
GuiObj &GuiSingle::MoveTo(int x,int y)
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
if(active) {
canvas->TkC().Tk("coords %s %i %i\n",GetString(Id()), x, y);
}
@@ -221,7 +221,7 @@ GuiObj &GuiSingle::MoveTo(int x,int y)
GuiObj &GuiSingle::MoveRel(int dx,int dy)
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
if(active) {
canvas->TkC().Tk("move %s %i %i\n",GetString(Id()), dx, dy);
}
@@ -232,7 +232,7 @@ GuiObj &GuiSingle::MoveRel(int dx,int dy)
GuiObj &GuiSingle::Delete()
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
if(active) {
canvas->TkC().Tk("delete -tags %s\n",GetString(Id()));
active = false;
@@ -243,7 +243,7 @@ GuiObj &GuiSingle::Delete()
GuiObj &GuiSingle::FillColor(unsigned long col)
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
if(active) {
canvas->TkC().Tk("itemconfigure %s -fill #%06x\n",GetString(Id()),col);
}
@@ -253,7 +253,7 @@ GuiObj &GuiSingle::FillColor(unsigned long col)
GuiObj &GuiSingle::Outline(unsigned long col)
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
if(active) {
canvas->TkC().Tk("itemconfigure %s -outline #%06x\n",GetString(Id()),col);
}
@@ -263,7 +263,7 @@ GuiObj &GuiSingle::Outline(unsigned long col)
GuiObj &GuiSingle::Focus()
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
if(active) {
canvas->TkC().Tk("focus %s\n",GetString(Id()));
}
@@ -337,7 +337,7 @@ void GuiGroup::Clear()
{
for(Part *ix = head; ix; ) {
Part *n = ix->nxt;
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
RemoveTag(ix->obj);
#endif
if(ix->owner) delete ix->obj;
@@ -350,7 +350,7 @@ void GuiGroup::Clear()
void GuiGroup::Add(GuiObj *o,bool owner)
{
o->canvas = canvas;
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
AddTag(o); // valid only for GuiSingle!
#endif
Part *n = new Part(o,owner);
@@ -380,7 +380,7 @@ GuiSingle *GuiGroup::Detach(const t_symbol *s)
if(p) p->nxt = ix->nxt;
GuiSingle *ret = (GuiSingle *)(ix->obj);
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
RemoveTag(ret);
#endif
if(head == ix) head = ix->nxt;
@@ -398,7 +398,7 @@ GuiSingle *GuiGroup::Detach(const t_symbol *s)
GuiObj &GuiGroup::MoveRel(int dx,int dy)
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
canvas->TkC().Tk("move %s %i %i\n",GetString(Id()), dx, dy);
#endif
for(Part *ix = head; ix; ix = ix->nxt) {
@@ -409,7 +409,7 @@ GuiObj &GuiGroup::MoveRel(int dx,int dy)
GuiObj &GuiGroup::Delete()
{
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
canvas->TkC().Tk("delete -tags %s\n",GetString(Id()));
for(Part *ix = head; ix; ix = ix->nxt) ix->obj->Inactive();
@@ -425,7 +425,7 @@ GuiObj &GuiGroup::Draw()
}
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
void GuiGroup::AddTag(GuiObj *o)
{
@@ -542,7 +542,7 @@ GuiObj &GuiPoint::Set(int x,int y,long fl)
fill = fl;
rect(x,y,x,y);
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
canvas->TkC();
canvas->Tk("create line %i %i %i %i -tags %s",x,y,x+1,y,GetString(Id()));
if(fill >= 0) canvas->Tk(" -fill #%06x",fill);
@@ -555,7 +555,7 @@ GuiObj &GuiPoint::Set(int x,int y,long fl)
GuiObj &GuiPoint::Draw()
{
-#ifdef MAXMSP
+#if FLEXT_SYS == FLEXT_SYS_MAX
#endif
return *this;
}
@@ -571,7 +571,7 @@ GuiObj &GuiCloud::Set(int n,const Pnt *p,long fl)
rect(pnt[0] = p[0],p[0]);
for(i = 1; i < n; ++i) rect.Add(pnt[i] = p[i]);
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
canvas->TkC().Tk("create line");
for(i = 0; i < n; ++i)
canvas->Tk(" %i %i",p[i].X(),p[i].Y());
@@ -586,7 +586,7 @@ GuiObj &GuiCloud::Set(int n,const Pnt *p,long fl)
GuiObj &GuiCloud::Draw()
{
-#ifdef MAXMSP
+#if FLEXT_SYS == FLEXT_SYS_MAX
#endif
return *this;
}
@@ -604,7 +604,7 @@ GuiObj &GuiBox::Set(int x,int y,int xsz,int ysz,int wd,long fl,long outl)
rect(x,y,x+xsz-1,y+ysz-1);
width = wd,fill = fl,outln = outl;
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
canvas->TkC().Tk("create rectangle %i %i %i %i -tags %s",x,y,x+xsz,y+ysz,GetString(Id()));
if(wd >= 0) canvas->Tk(" -width %i",wd);
if(fl >= 0) canvas->Tk(" -fill #%06x",fl);
@@ -618,7 +618,7 @@ GuiObj &GuiBox::Set(int x,int y,int xsz,int ysz,int wd,long fl,long outl)
GuiObj &GuiBox::Draw()
{
-#ifdef MAXMSP
+#if FLEXT_SYS == FLEXT_SYS_MAX
::Rect r;
::RGBColor col;
int w = width;
@@ -653,7 +653,7 @@ GuiObj &GuiRect::Set(int x,int y,int xsz,int ysz,int wd,long outl)
rect(x,y,x+xsz-1,y+ysz-1);
width = wd,outln = outl;
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
canvas->TkC().Tk("create line %i %i %i %i %i %i %i %i %i %i -tags %s",x,y,x+xsz,y,x+xsz,y+ysz,x,y+ysz,x,y,GetString(Id()));
if(width >= 0) canvas->Tk(" -width %i",width);
if(outl >= 0) canvas->Tk(" -fill #%06x",outl);
@@ -666,7 +666,7 @@ GuiObj &GuiRect::Set(int x,int y,int xsz,int ysz,int wd,long outl)
GuiObj &GuiRect::Draw()
{
-#ifdef MAXMSP
+#if FLEXT_SYS == FLEXT_SYS_MAX
#endif
return *this;
}
@@ -678,7 +678,7 @@ GuiObj &GuiLine::Set(int x1,int y1,int x2,int y2,int wd,long fl)
rect(p1(x1,y1),p2(x2,y2));
width = wd,fill = fl;
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
canvas->TkC().Tk("create line %i %i %i %i -tags %s",x1,y1,x2,y2,GetString(Id()));
if(width >= 0) canvas->Tk(" -width %i",width);
if(fill >= 0) canvas->Tk(" -fill #%06x",fill);
@@ -691,7 +691,7 @@ GuiObj &GuiLine::Set(int x1,int y1,int x2,int y2,int wd,long fl)
GuiObj &GuiLine::Draw()
{
-#ifdef MAXMSP
+#if FLEXT_SYS == FLEXT_SYS_MAX
::Point p;
::RGBColor col;
int w = width;
@@ -724,7 +724,7 @@ GuiObj &GuiPoly::Set(int n,const Pnt *p,int wd,long fl)
rect(pnt[0] = p[0],p[0]);
for(i = 1; i < n; ++i) rect.Add(pnt[i] = p[i]);
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
canvas->TkC().Tk("create line");
for(i = 0; i < n; ++i)
canvas->Tk(" %i %i",p[i].X(),p[i].Y());
@@ -740,7 +740,7 @@ GuiObj &GuiPoly::Set(int n,const Pnt *p,int wd,long fl)
GuiObj &GuiPoly::Draw()
{
-#ifdef MAXMSP
+#if FLEXT_SYS == FLEXT_SYS_MAX
::Point p;
::RGBColor col;
int ox = Canv().X(),oy = Canv().Y();
@@ -777,7 +777,7 @@ GuiObj &GuiText::Set(int x,int y,const char *txt,long fl,just_t jt)
rect(x,y,x,y);
fill = fl,just = jt;
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
canvas->TkC().Tk("create text %i %i -tags %s",x,y,GetString(Id()));
if(txt) canvas->Tk(" -text %s",txt);
if(fill >= 0) canvas->Tk(" -fill #%06x",fill);
@@ -794,7 +794,7 @@ GuiObj &GuiText::Set(int x,int y,const char *txt,long fl,just_t jt)
GuiObj &GuiText::Draw()
{
-#ifdef MAXMSP
+#if FLEXT_SYS == FLEXT_SYS_MAX
#endif
return *this;
}
diff --git a/externals/grill/guitest/flguiobj.h b/externals/grill/guitest/flguiobj.h
index 807b0f07..b4448bc2 100644
--- a/externals/grill/guitest/flguiobj.h
+++ b/externals/grill/guitest/flguiobj.h
@@ -12,7 +12,7 @@ public:
Canvas(t_canvas *c);
~Canvas();
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
Canvas &Tk(char *fmt,...);
Canvas &TkC();
Canvas &TkE();
@@ -31,7 +31,7 @@ protected:
t_canvas *canvas;
int xpos,ypos;
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
void Send(const char *t);
void SendBuf();
@@ -339,7 +339,7 @@ public:
GuiSingle *Remove(GuiSingle *obj);
protected:
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
void AddTag(GuiObj *o);
void RemoveTag(GuiObj *o);
#endif
diff --git a/externals/grill/guitest/main.cpp b/externals/grill/guitest/main.cpp
index 775a206b..cfedfa86 100644
--- a/externals/grill/guitest/main.cpp
+++ b/externals/grill/guitest/main.cpp
@@ -82,7 +82,7 @@ void guitest::g_Properties()
void guitest::g_Save(t_binbuf *b)
{
post("save");
-#ifdef PD
+#if FLEXT_SYS == FLEXT_SYS_PD
binbuf_addv(b, "ssiis;", gensym("#X"),gensym("obj"),
(t_int)XLo(), (t_int)YLo(),MakeSymbol(thisName())
// here the arguments
diff --git a/externals/grill/py/source/modmeth.cpp b/externals/grill/py/source/modmeth.cpp
index 50d4ac81..96108099 100644
--- a/externals/grill/py/source/modmeth.cpp
+++ b/externals/grill/py/source/modmeth.cpp
@@ -178,7 +178,7 @@ PyObject *py::py_priority(PyObject *self,PyObject *args)
post("py/pyext - Syntax: _priority [int]");
}
else
- ChangePriority(val);
+ RelPriority(val);
Py_INCREF(Py_None);
return Py_None;
diff --git a/externals/grill/vasp/changes.txt b/externals/grill/vasp/changes.txt
index 26d0043d..96d60de4 100644
--- a/externals/grill/vasp/changes.txt
+++ b/externals/grill/vasp/changes.txt
@@ -14,6 +14,9 @@ Version history:
- ADD: vasp.tilt,vasp.xtilt - attributes "fill","inter"
- ADD: vasp.offset=,vasp.frames= - attributes "dir","slope"
- CHANGE: update m_method_ virtual functions of same objects
+- FIX: immediate vasp garbage collection is now done in separate thread
+- ADD: vasp.size... objects: attribute "keep" determines whether buffer content should be preserved (default = 1)
+- CHANGE: buffer reference checks upon all operations enforced (by new CVasp (checked vasp) class)
0.1.1:
- FIX: bug in resize of immediate buffers
diff --git a/externals/grill/vasp/pd-ex/freeze1.pd b/externals/grill/vasp/pd-ex/freeze1.pd
index d3aba0f8..26aa9d5a 100644
--- a/externals/grill/vasp/pd-ex/freeze1.pd
+++ b/externals/grill/vasp/pd-ex/freeze1.pd
@@ -1,12 +1,11 @@
-#N canvas 30 168 943 479 12;
-#X obj 18 361 vasp.u;
-#N canvas 387 42 535 624 freeze 0;
+#N canvas 33 61 967 503 12;
+#N canvas 387 42 567 656 freeze 0;
#X obj 26 130 vasp.split 2;
#X obj 27 404 vasp.join 2;
#X obj 27 74 vasp.cfft @detach 1;
#X obj 27 461 vasp.c!fft @detach 1;
#X obj 25 13 inlet;
-#X obj 27 567 outlet;
+#X obj 27 589 outlet;
#X obj 173 236 * 0.01;
#X obj 302 17 inlet;
#X obj 26 100 vasp.polar @detach 1;
@@ -16,7 +15,7 @@
#X obj 26 371 vasp.sync;
#X obj 25 209 vasp.max? @detach 1;
#X obj 381 17 inlet;
-#X obj 162 569 outlet;
+#X obj 162 591 outlet;
#X obj 29 536 vasp.opt;
#N canvas 0 0 456 306 non0 0;
#X obj 26 162 outlet;
@@ -38,26 +37,27 @@
#X obj 302 45 + 100;
#X obj 326 117 expr pow(2. \, -$f1/1200);
#X obj 300 76 dbtorms;
-#N canvas 445 282 454 304 cplx 0;
-#X obj 87 181 vasp.!;
+#N canvas 445 282 474 324 cplx 0;
#X obj 19 229 vasp.join;
#X obj 19 73 t a b a;
-#X obj 129 138 vasp.f?;
-#X obj 21 14 inlet;
+#X obj 149 137 vasp.f?;
+#X obj 19 14 inlet;
#X obj 19 258 outlet;
-#X text 196 136 get length of source;
-#X text 143 178 make immediate;
-#X text 143 193 initialized to 0;
+#X text 216 135 get length of source;
+#X text 225 181 make immediate;
+#X text 225 196 initialized to 0;
#X text 101 230 make complex vasp;
-#X obj 19 44 vasp.chk;
-#X connect 0 0 1 1;
-#X connect 1 0 5 0;
-#X connect 2 0 1 0;
-#X connect 2 1 0 0;
-#X connect 2 2 3 0;
-#X connect 3 0 0 1;
-#X connect 4 0 10 0;
-#X connect 10 0 2 0;
+#X obj 87 176 vasp.! @detach 1;
+#X obj 19 203 vasp.sync;
+#X connect 0 0 4 0;
+#X connect 1 0 10 0;
+#X connect 1 1 9 0;
+#X connect 1 2 2 0;
+#X connect 2 0 9 1;
+#X connect 3 0 1 0;
+#X connect 9 0 10 1;
+#X connect 10 0 0 0;
+#X connect 10 1 0 1;
#X restore 27 43 pd cplx;
#X text 280 169 resample;
#X text 185 211 find spectral peak;
@@ -70,12 +70,15 @@
#X text 198 460 inverse FFT;
#X text 263 316 randomize complex arguments;
#X text 225 496 get spectral density;
-#X text 100 536 normalize result;
#X obj 25 171 vasp.xtilt 1 @detach 1 @inter 2;
#X obj 27 290 vasp.pow @detach 1;
#X obj 441 21 inlet;
#X text 181 289 treat spectrum exponentially;
-#X connect 0 0 35 0;
+#X obj 395 389 loadbang;
+#X msg 395 414 detach 1;
+#X text 102 536 normalize result;
+#X text 388 435 no attributes yet;
+#X connect 0 0 34 0;
#X connect 0 1 11 0;
#X connect 1 0 9 0;
#X connect 2 0 8 0;
@@ -85,7 +88,7 @@
#X connect 7 0 19 0;
#X connect 8 0 0 0;
#X connect 9 0 3 0;
-#X connect 10 0 36 0;
+#X connect 10 0 35 0;
#X connect 11 0 27 0;
#X connect 12 0 1 0;
#X connect 12 0 17 0;
@@ -97,13 +100,15 @@
#X connect 17 0 15 0;
#X connect 18 0 16 0;
#X connect 19 0 21 0;
-#X connect 20 0 35 1;
+#X connect 20 0 34 1;
#X connect 21 0 6 1;
#X connect 22 0 2 0;
#X connect 27 0 12 1;
-#X connect 35 0 13 0;
-#X connect 36 0 12 0;
-#X connect 37 0 36 1;
+#X connect 34 0 13 0;
+#X connect 35 0 12 0;
+#X connect 36 0 35 1;
+#X connect 38 0 39 0;
+#X connect 39 0 16 0;
#X restore 18 331 pd freeze;
#X obj 104 214 nbx 6 18 -100 0 0 1 empty empty noise_rejection(dB)
0 -8 0 12 -225271 -1 -1 -61 256;
@@ -165,8 +170,8 @@
#X restore 448 250 pd open;
#X msg 381 222 stop;
#N canvas 0 0 450 300 graph10 0;
-#X array src 1.23699e+006 float 0;
-#X coords 0 1 1.23699e+006 -1 600 150 1;
+#X array src 1e+006 float 0;
+#X coords 0 1 999999 -1 600 150 1;
#X restore 322 20 graph;
#X msg 447 222 new;
#X msg 482 222 again;
@@ -181,7 +186,7 @@
#X obj 105 115 nbx 12 18 0 1e+008 0 1 empty empty length(frames) 0
-8 0 12 -225271 -1 -1 1e+006 256;
#X obj 85 368 nbx 9 14 -1e+037 1e+037 0 0 empty empty spectral_density
-0 -6 0 10 -262131 -1 -1 0.18217 256;
+0 -6 0 10 -262131 -1 -1 0.015744 256;
#X obj 332 197 cnv 15 100 20 empty empty play_src 5 8 0 10 -261681
-66577 0;
#X obj 447 197 cnv 15 100 20 empty empty read_src 5 8 0 10 -261681
@@ -196,7 +201,7 @@
#X msg 614 223 play;
#X obj 614 198 cnv 15 100 20 empty empty play_dst 5 8 0 10 -261681
-66577 0;
-#N canvas 0 0 495 347 playsrc 0;
+#N canvas 0 0 501 353 playsrc 0;
#X obj 18 245 dac~;
#X obj 19 21 inlet;
#X obj 17 49 route play;
@@ -211,11 +216,13 @@
#X obj 19 81 t b;
#X obj 19 159 lister;
#X obj 77 105 loadbang;
+#X obj 109 239 outlet;
#X connect 1 0 2 0;
#X connect 2 0 11 0;
#X connect 2 1 3 0;
#X connect 3 0 0 0;
#X connect 3 0 0 1;
+#X connect 3 1 14 0;
#X connect 4 0 7 0;
#X connect 5 0 8 0;
#X connect 6 0 9 0;
@@ -230,18 +237,20 @@
#X connect 12 0 3 0;
#X connect 13 0 10 0;
#X restore 332 250 pd playsrc;
-#N canvas 0 0 481 333 playdst 0;
+#N canvas 0 0 483 335 playdst 0;
#X obj 21 118 dac~;
#X obj 19 21 inlet;
#X obj 22 51 route play;
#X obj 21 83 tabplay~ dst;
+#X obj 98 118 outlet;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 2 1 3 0;
#X connect 3 0 0 0;
#X connect 3 0 0 1;
+#X connect 3 1 4 0;
#X restore 614 251 pd playdst;
-#N canvas 249 202 495 438 copy 0;
+#N canvas 249 202 519 462 copy 0;
#X obj 27 26 inlet;
#X obj 27 51 t b b;
#X obj 316 19 inlet;
@@ -252,45 +261,43 @@
#X obj 128 31 r \$0-offs;
#X obj 211 31 r \$0-len;
#X obj 316 87 f 1e+006;
-#X obj 187 174 vasp.s @ref dst;
#X obj 366 21 loadbang;
#X obj 84 169 *;
#X obj 117 169 *;
#X obj 82 139 vasp.f?;
-#X obj 125 366 print;
#X obj 27 109 t a a;
#X obj 27 259 vasp.sync;
#X obj 26 328 vasp.f -1;
#X text 167 288 copy src to dst;
#X text 108 328 take all dst;
-#X text 316 175 resize dst buffer;
-#X text 341 201 set to zero;
-#X obj 185 202 vasp.= 0 @detach 1;
+#X text 311 193 resize dst buffer;
+#X text 341 221 set to zero;
+#X obj 185 222 vasp.= 0 @detach 1;
#X obj 26 287 vasp.-> @detach 1;
+#X obj 187 174 vasp.s @ref dst @detach 1;
#X connect 0 0 1 0;
#X connect 1 0 4 0;
-#X connect 1 1 10 0;
+#X connect 1 1 23 0;
#X connect 2 0 9 0;
-#X connect 4 0 16 0;
-#X connect 5 0 17 0;
+#X connect 4 0 14 0;
+#X connect 5 0 15 0;
#X connect 6 0 5 0;
-#X connect 7 0 12 1;
-#X connect 8 0 13 1;
-#X connect 9 0 10 1;
-#X connect 10 0 23 0;
-#X connect 11 0 9 0;
-#X connect 12 0 6 1;
-#X connect 13 0 5 1;
-#X connect 14 0 12 0;
-#X connect 14 0 13 0;
-#X connect 16 0 6 0;
-#X connect 16 1 14 0;
-#X connect 17 0 24 0;
-#X connect 17 1 24 1;
-#X connect 18 0 3 0;
-#X connect 18 1 15 0;
-#X connect 23 0 17 1;
-#X connect 24 1 18 0;
+#X connect 7 0 11 1;
+#X connect 8 0 12 1;
+#X connect 9 0 23 1;
+#X connect 10 0 9 0;
+#X connect 11 0 6 1;
+#X connect 12 0 5 1;
+#X connect 13 0 11 0;
+#X connect 13 0 12 0;
+#X connect 14 0 6 0;
+#X connect 14 1 13 0;
+#X connect 15 0 22 0;
+#X connect 15 1 22 1;
+#X connect 16 0 3 0;
+#X connect 21 0 15 1;
+#X connect 22 1 16 0;
+#X connect 23 0 21 0;
#X restore 18 159 pd copy;
#X text 85 160 copy and resize;
#X obj 323 170 hsl 600 15 0 1 0 1 \$0-r2 empty empty -2 -6 1152 8 -262131
@@ -327,21 +334,24 @@
#X obj 104 301 nbx 7 18 0 3 0 1 empty empty power 0 -8 0 12 -225271
-1 -1 1 256;
#X text 10 35 (needs zexy!);
-#X connect 1 0 0 0;
-#X connect 1 1 19 0;
-#X connect 2 0 1 1;
-#X connect 3 0 1 2;
-#X connect 6 0 5 0;
-#X connect 7 0 4 0;
-#X connect 8 0 27 0;
-#X connect 10 0 7 0;
-#X connect 11 0 7 0;
-#X connect 12 0 6 0;
-#X connect 13 0 6 0;
-#X connect 14 0 27 0;
-#X connect 17 0 29 0;
-#X connect 18 0 29 1;
-#X connect 24 0 28 0;
-#X connect 25 0 28 0;
-#X connect 29 0 1 0;
-#X connect 36 0 1 3;
+#X obj 18 410 vasp.u;
+#X text 76 412 update graphics;
+#X connect 0 0 37 0;
+#X connect 0 1 18 0;
+#X connect 1 0 0 1;
+#X connect 2 0 0 2;
+#X connect 5 0 4 0;
+#X connect 6 0 3 0;
+#X connect 7 0 26 0;
+#X connect 9 0 6 0;
+#X connect 10 0 6 0;
+#X connect 11 0 5 0;
+#X connect 12 0 5 0;
+#X connect 13 0 26 0;
+#X connect 16 0 28 0;
+#X connect 17 0 28 1;
+#X connect 23 0 27 0;
+#X connect 24 0 27 0;
+#X connect 26 0 13 0;
+#X connect 28 0 0 0;
+#X connect 35 0 0 3;
diff --git a/externals/grill/vasp/source/buflib.cpp b/externals/grill/vasp/source/buflib.cpp
index 03c2944e..78866a8e 100644
--- a/externals/grill/vasp/source/buflib.cpp
+++ b/externals/grill/vasp/source/buflib.cpp
@@ -52,7 +52,6 @@ public:
static BufEntry *libhead = NULL,*libtail = NULL;
static FreeEntry *freehead = NULL,*freetail = NULL;
static I libcnt = 0,libtick = 0;
-static t_clock *libclk = NULL;
#ifdef FLEXT_THREADS
static flext::ThrMutex libmtx;
@@ -114,6 +113,73 @@ V BufLib::DecRef(t_symbol *s)
}
}
+static V Collect()
+{
+#ifdef FLEXT_THREADS
+ libmtx.Lock();
+#endif
+
+ // collect garbage
+ BufEntry *e,*p;
+ for(p = NULL,e = libhead; e; ) {
+ if(e->refcnt <= 0 && e->tick+LIBTOL < libtick) {
+ ASSERT(e->refcnt == 0);
+
+ BufEntry *n = e->nxt;
+
+ if(p) p->nxt = n;
+ else libhead = n;
+
+ if(!n) libtail = p;
+ else e->nxt = NULL;
+
+ delete e;
+
+ e = n;
+ }
+ else
+ p = e,e = e->nxt;
+ }
+
+#ifdef FLEXT_THREADS
+ libmtx.Unlock();
+#endif
+}
+
+
+#ifdef FLEXT_THREADS
+static bool libthractive = false;
+static pthread_t libthrid;
+static bool libthrexit = false; // currently not used
+static flext::ThrCond *libthrcond = NULL;
+
+static V *LibThr(V *)
+{
+ flext::RelPriority(-2);
+
+ while(libthrexit) {
+ libthrcond->TimedWait(0.5f);
+ // TODO - should process return value of TimedWait
+ Collect();
+ }
+ return NULL;
+}
+#endif
+
+static t_clock *libclk = NULL;
+static V LibTick(V *)
+{
+#ifdef FLEXT_THREADS
+ libthrcond->Signal();
+#else
+ Collect();
+#endif
+
+ ++libtick;
+ clock_delay(libclk,LIBTICK);
+
+}
+
static t_symbol *GetLibSym()
{
if(freehead) {
@@ -135,7 +201,7 @@ static t_symbol *GetLibSym()
libcnt++;
return gensym(tmp);
}
-
+
clock_delay(libclk,LIBTICK);
}
@@ -147,44 +213,20 @@ static V FreeLibSym(t_symbol *sym)
freetail = f;
}
-static V LibTick(V *)
+
+BufEntry *BufLib::NewImm(I fr,BL zero)
{
#ifdef FLEXT_THREADS
- libmtx.Lock();
-#endif
-
- // collect garbage
- BufEntry *e,*p;
- for(p = NULL,e = libhead; e; ) {
- if(e->refcnt <= 0 && e->tick+LIBTOL < libtick) {
- ASSERT(e->refcnt == 0);
-
- BufEntry *n = e->nxt;
-
- if(p) p->nxt = n;
- else libhead = n;
-
- if(!n) libtail = p;
- else e->nxt = NULL;
-
- delete e;
-
- e = n;
+ if(!libthractive) {
+ int ret = pthread_create(&libthrid,NULL,LibThr,NULL);
+ if(ret)
+ error("vasp - Could not launch helper thread");
+ else {
+ libthrcond = new flext::ThrCond;
+ libthractive = true;
}
- else
- p = e,e = e->nxt;
}
-
- ++libtick;
- clock_delay(libclk,LIBTICK);
-
-#ifdef FLEXT_THREADS
- libmtx.Unlock();
#endif
-}
-
-BufEntry *BufLib::NewImm(I fr,BL zero)
-{
if(!libclk) {
libclk = (t_clock *)clock_new(NULL,(t_method)LibTick);
clock_delay(libclk,LIBTICK);
diff --git a/externals/grill/vasp/source/classes.cpp b/externals/grill/vasp/source/classes.cpp
index 582f5959..fa9ff7d4 100644
--- a/externals/grill/vasp/source/classes.cpp
+++ b/externals/grill/vasp/source/classes.cpp
@@ -94,7 +94,6 @@ vasp_op::vasp_op(BL op)
FLEXT_ADDBANG(0,m_dobang);
FLEXT_ADDMETHOD_(0,"vasp",m_vasp);
FLEXT_ADDMETHOD_(0,"set",m_set);
-// if(op) FLEXT_ADDMETHOD_(0,"to",m_to);
FLEXT_ADDATTR_VAR("ref",m_getref,m_setref);
if(op) FLEXT_ADDATTR_VAR("to",m_getto,m_setto);
@@ -170,23 +169,6 @@ V vasp_op::m_update(I argc,const t_atom *argv)
}
}
-
-/*
-V vasp_op::m_detach(BL thr)
-{
-#ifdef FLEXT_THREADS
- detach = thr;
-#endif
-}
-
-V vasp_op::m_prior(I p)
-{
-#ifdef FLEXT_THREADS
- prior = p;
-#endif
-}
-*/
-
V vasp_op::m_stop() {}
///////////////////////////////////////////////////////////////////////////
@@ -201,10 +183,10 @@ V vasp_tx::m_bang()
Lock();
#ifdef FLEXT_THREADS
-// ChangePriority(prior);
+// RelPriority(prior);
#endif
- if(ref.Ok())
+ if(ref.Check())
{
Vasp *ret = x_work();
if(ret) {
diff --git a/externals/grill/vasp/source/classes.h b/externals/grill/vasp/source/classes.h
index d6a31413..64719cd3 100644
--- a/externals/grill/vasp/source/classes.h
+++ b/externals/grill/vasp/source/classes.h
@@ -256,7 +256,8 @@ protected: \
virtual Vasp *tx_work() \
{ \
OpParam p(thisName(),0); \
- return VaspOp::m_##op(p,ref,&dst); \
+ CVasp cdst(dst); \
+ return VaspOp::m_##op(p,CVasp(ref),&cdst); \
} \
virtual V m_help() { post("%s - " help,thisName()); } \
}; \
@@ -269,12 +270,13 @@ class vasp_ ## op: \
{ \
FLEXT_HEADER(vasp_##op,vasp_binop) \
public: \
- vasp_##op(I argc,const t_atom *argv): vasp_binop(argc,argv,def,to) {} \
+ vasp_##op(I argc,const t_atom *argv): vasp_binop(argc,argv,def,to) {} \
protected: \
virtual Vasp *tx_work(const Argument &arg) \
{ \
OpParam p(thisName(),1); \
- return VaspOp::m_##op(p,ref,arg,&dst); \
+ CVasp cdst(dst); \
+ return VaspOp::m_##op(p,CVasp(ref),arg,&cdst); \
} \
virtual V m_help() { post("%s - " help,thisName()); } \
}; \
@@ -287,12 +289,13 @@ class vasp_ ## op: \
{ \
FLEXT_HEADER(vasp_##op,vasp_anyop) \
public: \
- vasp_##op(I argc,const t_atom *argv): vasp_anyop(argc,argv,def,to) {} \
+ vasp_##op(I argc,const t_atom *argv): vasp_anyop(argc,argv,def,to) {} \
protected: \
virtual Vasp *tx_work(const Argument &arg) \
{ \
OpParam p(thisName(),args); \
- return VaspOp::m_##op(p,ref,arg,&dst); \
+ CVasp cdst(dst); \
+ return VaspOp::m_##op(p,CVasp(ref),arg,&cdst); \
} \
virtual V m_help() { post("%s - " help,thisName()); } \
}; \
diff --git a/externals/grill/vasp/source/main.cpp b/externals/grill/vasp/source/main.cpp
index 1603d107..b50cded2 100644
--- a/externals/grill/vasp/source/main.cpp
+++ b/externals/grill/vasp/source/main.cpp
@@ -36,6 +36,7 @@ V lib_setup()
VASP_SETUP(check); // vasp.check
VASP_SETUP(update); // vasp.update
+// VASP_SETUP(post); // vasp.post
VASP_SETUP(sync); // vasp.sync
diff --git a/externals/grill/vasp/source/obj_size.cpp b/externals/grill/vasp/source/obj_size.cpp
index 6c38184c..1d28b1cb 100644
--- a/externals/grill/vasp/source/obj_size.cpp
+++ b/externals/grill/vasp/source/obj_size.cpp
@@ -34,7 +34,7 @@ class vasp_size:
public:
vasp_size(I argc,t_atom *argv,BL abs = true):
- size(0),sets(false)
+ size(0),sets(false),keep(true)
{
if(argc >= 1 && CanbeFloat(argv[0]))
m_arg(GetAFloat(argv[0]));
@@ -47,6 +47,7 @@ public:
FLEXT_ADDMETHOD(1,m_arg);
if(abs) FLEXT_ADDATTR_VAR("frames",size,m_arg);
+ FLEXT_ADDATTR_VAR1("keep",keep);
}
virtual V m_arg(F s)
@@ -58,19 +59,20 @@ public:
virtual Vasp *x_work()
{
Vasp *ret = new Vasp(ref);
- if(sets) ret->Size(size);
+ if(sets) ret->Size(size,keep);
return ret;
}
virtual V m_help() { post("%s - Set the size of the vector buffers",thisName()); }
protected:
I size;
- BL sets;
+ BL sets,keep;
private:
FLEXT_CALLBACK_F(m_arg);
FLEXT_CALLSET_I(m_arg);
FLEXT_ATTRGET_I(size);
+ FLEXT_ATTRVAR_B(keep);
};
FLEXT_LIB_V("vasp, vasp.size vasp.s",vasp_size)
@@ -227,7 +229,7 @@ public:
virtual V m_bang()
{
- if(!ref.Ok())
+ if(!ref.Check())
post("%s - Invalid vasp!",thisName());
else if(ref.Vectors() > 1)
post("%s - More than one vector in vasp!",thisName());
diff --git a/externals/grill/vasp/source/obj_split.cpp b/externals/grill/vasp/source/obj_split.cpp
index 04eb3eea..e308e19c 100644
--- a/externals/grill/vasp/source/obj_split.cpp
+++ b/externals/grill/vasp/source/obj_split.cpp
@@ -62,7 +62,7 @@ public:
}
if(rem > 0) {
Vasp v(ref.Frames(),ref.Vector(outs));
- for(I i = 1; i < rem; ++i) v += ref.Vector(outs+i);
+ for(I i = 1; i < rem; ++i) v.AddVector(ref.Vector(outs+i));
ToOutVasp(outs,v);
}
else
@@ -122,7 +122,7 @@ public:
~vasp_join() { if(vi) delete[] vi; }
virtual Vasp *x_work() {
- Vasp *ret = new Vasp(ref);
+ CVasp *ret = new CVasp(ref);
for(I i = 0; i < cnt-1; ++i) if(vi[i]) *ret += *vi[i];
return ret;
}
@@ -255,25 +255,26 @@ public:
virtual Vasp *x_work()
{
- Vasp *ret = new Vasp(ref);
- *ret += dst;
+ CVasp *ret = new CVasp(ref);
+ *ret += cdst;
m_reset();
return ret;
}
- V m_reset() { ref.Clear(); dst.Clear(); rem = cnt; }
+ V m_reset() { ref.Clear(); cdst.Clear(); rem = cnt; }
virtual I m_set(I argc,t_atom *argv) { rem = cnt; return vasp_tx::m_set(argc,argv); }
V m_add(I argc,t_atom *argv)
{
- dst += Vasp(argc,argv);
+ cdst += Vasp(argc,argv);
if(cnt && !--rem) m_bang();
}
virtual V m_help() { post("%s - Gather several vasps into one",thisName()); }
private:
I cnt,rem;
+ CVasp cdst;
FLEXT_CALLBACK(m_reset)
FLEXT_CALLBACK_V(m_add)
diff --git a/externals/grill/vasp/source/obj_vasp.cpp b/externals/grill/vasp/source/obj_vasp.cpp
index ba91a7c5..680bede7 100644
--- a/externals/grill/vasp/source/obj_vasp.cpp
+++ b/externals/grill/vasp/source/obj_vasp.cpp
@@ -189,8 +189,10 @@ public:
virtual V m_bang()
{
- Vasp r(ref);
- for(I i = CntOut()-1; i >= 0; --i) ToOutVasp(i,r);
+ if(ref.Check())
+ for(I i = CntOut()-1; i >= 0; --i) ToOutVasp(i,ref);
+ else
+ post("%s - Invalid vasp",thisName());
}
virtual V m_help() { post("%s - Output a vasp multiple times",thisName()); }
diff --git a/externals/grill/vasp/source/opbase.cpp b/externals/grill/vasp/source/opbase.cpp
index df4150f1..989a4952 100644
--- a/externals/grill/vasp/source/opbase.cpp
+++ b/externals/grill/vasp/source/opbase.cpp
@@ -12,7 +12,7 @@ WARRANTIES, see the file, "license.txt," in this distribution.
#include "opbase.h"
#include "opdefs.h"
-Vasp *VaspOp::m_run(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun)
+Vasp *VaspOp::m_run(OpParam &p,CVasp &src,CVasp *dst,VecOp::opfun *fun)
{
Vasp *ret = NULL;
RVecBlock *vecs = GetRVecs(p.opname,src,dst);
@@ -24,7 +24,7 @@ Vasp *VaspOp::m_run(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun)
return ret;
}
-Vasp *VaspOp::m_cun(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun)
+Vasp *VaspOp::m_cun(OpParam &p,CVasp &src,CVasp *dst,VecOp::opfun *fun)
{
Vasp *ret = NULL;
CVecBlock *vecs = GetCVecs(p.opname,src,dst);
@@ -36,7 +36,7 @@ Vasp *VaspOp::m_cun(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun)
return ret;
}
-Vasp *VaspOp::m_rbin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,VecOp::opfun *fun)
+Vasp *VaspOp::m_rbin(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,VecOp::opfun *fun)
{
Vasp *ret = NULL;
BL argvasp = arg.IsVasp();
@@ -58,7 +58,7 @@ Vasp *VaspOp::m_rbin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,VecOp::o
return ret;
}
-Vasp *VaspOp::m_cbin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,VecOp::opfun *fun)
+Vasp *VaspOp::m_cbin(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,VecOp::opfun *fun)
{
Vasp *ret = NULL;
BL argvasp = arg.IsVasp();
diff --git a/externals/grill/vasp/source/opbase.h b/externals/grill/vasp/source/opbase.h
index a4d1347b..a429b7a6 100644
--- a/externals/grill/vasp/source/opbase.h
+++ b/externals/grill/vasp/source/opbase.h
@@ -29,10 +29,10 @@ namespace VecOp {
namespace VaspOp {
- RVecBlock *GetRVecs(const C *op,Vasp &src,Vasp *dst = NULL);
- CVecBlock *GetCVecs(const C *op,Vasp &src,Vasp *dst = NULL,BL full = false);
- RVecBlock *GetRVecs(const C *op,Vasp &src,const Vasp &arg,Vasp *dst = NULL,I multi = -1,BL ssize = true);
- CVecBlock *GetCVecs(const C *op,Vasp &src,const Vasp &arg,Vasp *dst = NULL,I multi = -1,BL ssize = true,BL full = false);
+ RVecBlock *GetRVecs(const C *op,CVasp &src,CVasp *dst = NULL);
+ CVecBlock *GetCVecs(const C *op,CVasp &src,CVasp *dst = NULL,BL full = false);
+ RVecBlock *GetRVecs(const C *op,CVasp &src,const CVasp &arg,CVasp *dst = NULL,I multi = -1,BL ssize = true);
+ CVecBlock *GetCVecs(const C *op,CVasp &src,const CVasp &arg,CVasp *dst = NULL,I multi = -1,BL ssize = true,BL full = false);
Vasp *DoOp(RVecBlock *vecs,VecOp::opfun *fun,OpParam &p,BL symm = false);
Vasp *DoOp(CVecBlock *vecs,VecOp::opfun *fun,OpParam &p,BL symm = false);
@@ -40,11 +40,11 @@ namespace VaspOp {
// -------- transformations -----------------------------------
// unary functions
- Vasp *m_run(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun); // real unary (one vec or real)
- Vasp *m_cun(OpParam &p,Vasp &src,Vasp *dst,VecOp::opfun *fun); // complex unary (one vec or complex)
+ Vasp *m_run(OpParam &p,CVasp &src,CVasp *dst,VecOp::opfun *fun); // real unary (one vec or real)
+ Vasp *m_cun(OpParam &p,CVasp &src,CVasp *dst,VecOp::opfun *fun); // complex unary (one vec or complex)
// binary functions
- Vasp *m_rbin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,VecOp::opfun *fun); // real binary (one vec or real)
- Vasp *m_cbin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,VecOp::opfun *fun); // complex binary (one vec or complex)
+ Vasp *m_rbin(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,VecOp::opfun *fun); // real binary (one vec or real)
+ Vasp *m_cbin(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,VecOp::opfun *fun); // complex binary (one vec or complex)
}
#endif
diff --git a/externals/grill/vasp/source/ops_arith.h b/externals/grill/vasp/source/ops_arith.h
index 6e2bb879..d4fcd470 100644
--- a/externals/grill/vasp/source/ops_arith.h
+++ b/externals/grill/vasp/source/ops_arith.h
@@ -42,31 +42,31 @@ namespace VecOp {
}
namespace VaspOp {
- inline Vasp *m_add(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_add); } // add to (one vec or real)
- inline Vasp *m_sub(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_sub); } // sub from (one vec or real)
- inline Vasp *m_subr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_subr); } // reverse sub from (one vec or real)
- inline Vasp *m_mul(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_mul); } // mul with (one vec or real)
- inline Vasp *m_div(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_div); } // div by (one vec or real)
- inline Vasp *m_divr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_divr); } // reverse div by (one vec or real)
- inline Vasp *m_mod(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_mod); } // modulo by (one vec or real)
+ inline Vasp *m_add(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_add); } // add to (one vec or real)
+ inline Vasp *m_sub(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_sub); } // sub from (one vec or real)
+ inline Vasp *m_subr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_subr); } // reverse sub from (one vec or real)
+ inline Vasp *m_mul(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_mul); } // mul with (one vec or real)
+ inline Vasp *m_div(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_div); } // div by (one vec or real)
+ inline Vasp *m_divr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_divr); } // reverse div by (one vec or real)
+ inline Vasp *m_mod(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_mod); } // modulo by (one vec or real)
- inline Vasp *m_cadd(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cadd); } // complex add (pairs of vecs or complex)
- inline Vasp *m_csub(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csub); } // complex sub (pairs of vecs or complex)
- inline Vasp *m_csubr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csubr); } // reverse complex sub (pairs of vecs or complex)
- inline Vasp *m_cmul(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cmul); } // complex mul (pairs of vecs or complex)
- inline Vasp *m_cdiv(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdiv); } // complex div (pairs of vecs or complex)
- inline Vasp *m_cdivr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdivr); } // complex reverse div (pairs of vecs or complex)
+ inline Vasp *m_cadd(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cadd); } // complex add (pairs of vecs or complex)
+ inline Vasp *m_csub(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csub); } // complex sub (pairs of vecs or complex)
+ inline Vasp *m_csubr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csubr); } // reverse complex sub (pairs of vecs or complex)
+ inline Vasp *m_cmul(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cmul); } // complex mul (pairs of vecs or complex)
+ inline Vasp *m_cdiv(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdiv); } // complex div (pairs of vecs or complex)
+ inline Vasp *m_cdivr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdivr); } // complex reverse div (pairs of vecs or complex)
- inline Vasp *m_sqr(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sqr); } // unsigned square
- inline Vasp *m_ssqr(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_ssqr); } // signed square
- inline Vasp *m_csqr(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqr); } // complex square (with each two channels)
-// inline Vasp *m_csqrt(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqrt); } // complex square root (how about branches?)
+ inline Vasp *m_sqr(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sqr); } // unsigned square
+ inline Vasp *m_ssqr(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_ssqr); } // signed square
+ inline Vasp *m_csqr(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqr); } // complex square (with each two channels)
+// inline Vasp *m_csqrt(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqrt); } // complex square root (how about branches?)
- Vasp *m_cpowi(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // complex integer power (with each two channels)
+ Vasp *m_cpowi(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // complex integer power (with each two channels)
- inline Vasp *m_sign(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sign); } // sign function
- inline Vasp *m_abs(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_abs); } // absolute values
- inline Vasp *m_cabs(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cabs); } // absolute values
+ inline Vasp *m_sign(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sign); } // sign function
+ inline Vasp *m_abs(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_abs); } // absolute values
+ inline Vasp *m_cabs(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cabs); } // absolute values
}
#endif
diff --git a/externals/grill/vasp/source/ops_assign.cpp b/externals/grill/vasp/source/ops_assign.cpp
index a8033bb9..2495d68a 100644
--- a/externals/grill/vasp/source/ops_assign.cpp
+++ b/externals/grill/vasp/source/ops_assign.cpp
@@ -32,7 +32,7 @@ VASP_BINARY("vasp.cset vasp.c=",cset,false,VASP_ARG_R(0),"Assigns a complex valu
-Vasp *VaspOp::m_copy(OpParam &p,Vasp &src,Vasp &arg)
+Vasp *VaspOp::m_copy(OpParam &p,CVasp &src,CVasp &arg)
{
Vasp *s = NULL,*d = NULL;
RVecBlock *vecs = GetRVecs(p.opname,src,&arg);
@@ -45,7 +45,7 @@ Vasp *VaspOp::m_copy(OpParam &p,Vasp &src,Vasp &arg)
return s;
}
-Vasp *VaspOp::m_ccopy(OpParam &p,Vasp &src,Vasp &arg)
+Vasp *VaspOp::m_ccopy(OpParam &p,CVasp &src,CVasp &arg)
{
Vasp *s = NULL,*d = NULL;
CVecBlock *vecs = GetCVecs(p.opname,src,&arg);
@@ -69,14 +69,14 @@ public:
virtual V m_to(I,const t_atom *) { post("s - destination vasp is ignored!",thisName()); }
- virtual Vasp *do_copy(OpParam &p,Vasp &dst) { return VaspOp::m_copy(p,ref,dst); }
+ virtual Vasp *do_copy(OpParam &p,CVasp &dst) { return VaspOp::m_copy(p,CVasp(ref),dst); }
virtual Vasp *tx_work(const Argument &arg)
{
OpParam p(thisName(),0);
if(arg.CanbeVasp()) {
- Vasp dst = arg.GetAVasp();
+ CVasp dst(arg.GetAVasp());
Vasp *ret = do_copy(p,dst);
ToOutVasp(1,dst);
return ret;
@@ -100,7 +100,7 @@ public:
vasp_ccopy(I argc,const t_atom *argv): vasp_copy(argc,argv) {}
- virtual Vasp *do_copy(OpParam &p,Vasp &dst) { return VaspOp::m_ccopy(p,ref,dst); }
+ virtual Vasp *do_copy(OpParam &p,CVasp &dst) { return VaspOp::m_ccopy(p,CVasp(ref),dst); }
virtual V m_help() { post("%s - Copies complex pairs of the triggering vasp to the argument vasp",thisName()); }
};
diff --git a/externals/grill/vasp/source/ops_assign.h b/externals/grill/vasp/source/ops_assign.h
index e80501f0..e27b3798 100644
--- a/externals/grill/vasp/source/ops_assign.h
+++ b/externals/grill/vasp/source/ops_assign.h
@@ -24,11 +24,11 @@ namespace VecOp {
}
namespace VaspOp {
- inline Vasp *m_set(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_set); } // copy to (one vec or real)
- inline Vasp *m_cset(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cset); } // complex copy (pairs of vecs or complex)
+ inline Vasp *m_set(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_set); } // copy to (one vec or real)
+ inline Vasp *m_cset(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cset); } // complex copy (pairs of vecs or complex)
- Vasp *m_copy(OpParam &p,Vasp &src,Vasp &dst);
- Vasp *m_ccopy(OpParam &p,Vasp &src,Vasp &dst);
+ Vasp *m_copy(OpParam &p,CVasp &src,CVasp &dst);
+ Vasp *m_ccopy(OpParam &p,CVasp &src,CVasp &dst);
}
#endif
diff --git a/externals/grill/vasp/source/ops_carith.cpp b/externals/grill/vasp/source/ops_carith.cpp
index cf00b439..cece7031 100644
--- a/externals/grill/vasp/source/ops_carith.cpp
+++ b/externals/grill/vasp/source/ops_carith.cpp
@@ -71,7 +71,7 @@ template<class T> V f_cpowi(T &rv,T &iv,T ra,T ia,OpParam &p)
BL VecOp::d_cpowi(OpParam &p) { d__cop(f_cpowi<S>,p); }
-Vasp *VaspOp::m_cpowi(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst)
+Vasp *VaspOp::m_cpowi(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst)
{
Vasp *ret = NULL;
CVecBlock *vecs = GetCVecs(p.opname,src,dst);
diff --git a/externals/grill/vasp/source/ops_carith.h b/externals/grill/vasp/source/ops_carith.h
index 7f841750..3910c0ad 100644
--- a/externals/grill/vasp/source/ops_carith.h
+++ b/externals/grill/vasp/source/ops_carith.h
@@ -30,19 +30,19 @@ namespace VecOp {
}
namespace VaspOp {
- inline Vasp *m_cadd(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cadd); } // complex add (pairs of vecs or complex)
- inline Vasp *m_csub(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csub); } // complex sub (pairs of vecs or complex)
- inline Vasp *m_csubr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csubr); } // reverse complex sub (pairs of vecs or complex)
- inline Vasp *m_cmul(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cmul); } // complex mul (pairs of vecs or complex)
- inline Vasp *m_cdiv(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdiv); } // complex div (pairs of vecs or complex)
- inline Vasp *m_cdivr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdivr); } // complex reverse div (pairs of vecs or complex)
+ inline Vasp *m_cadd(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cadd); } // complex add (pairs of vecs or complex)
+ inline Vasp *m_csub(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csub); } // complex sub (pairs of vecs or complex)
+ inline Vasp *m_csubr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_csubr); } // reverse complex sub (pairs of vecs or complex)
+ inline Vasp *m_cmul(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cmul); } // complex mul (pairs of vecs or complex)
+ inline Vasp *m_cdiv(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdiv); } // complex div (pairs of vecs or complex)
+ inline Vasp *m_cdivr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_cdivr); } // complex reverse div (pairs of vecs or complex)
- inline Vasp *m_csqr(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqr); } // complex square (with each two channels)
-// inline Vasp *m_csqrt(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqrt); } // complex square root (how about branches?)
+ inline Vasp *m_csqr(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqr); } // complex square (with each two channels)
+// inline Vasp *m_csqrt(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_csqrt); } // complex square root (how about branches?)
- Vasp *m_cpowi(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // complex integer power (with each two channels)
+ Vasp *m_cpowi(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // complex integer power (with each two channels)
- inline Vasp *m_cabs(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cabs); } // absolute values
+ inline Vasp *m_cabs(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cabs); } // absolute values
}
#endif
diff --git a/externals/grill/vasp/source/ops_cmp.h b/externals/grill/vasp/source/ops_cmp.h
index 87af3a19..8fab0e27 100644
--- a/externals/grill/vasp/source/ops_cmp.h
+++ b/externals/grill/vasp/source/ops_cmp.h
@@ -50,37 +50,37 @@ namespace VecOp {
}
namespace VaspOp {
- inline Vasp *m_lwr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_lwr); } // lower than
- inline Vasp *m_gtr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_gtr); } // greater than
- inline Vasp *m_alwr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_alwr); } // abs lower than
- inline Vasp *m_agtr(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_agtr); } // abs greater than
- inline Vasp *m_leq(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_leq); } // abs lower than
- inline Vasp *m_geq(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_geq); } // abs greater than
- inline Vasp *m_aleq(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_aleq); } // lower than
- inline Vasp *m_ageq(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_ageq); } // greater than
- inline Vasp *m_equ(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_equ); } // lower than
- inline Vasp *m_neq(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_neq); } // greater than
-
- inline Vasp *m_min(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_min); } // min (one vec or real)
- inline Vasp *m_max(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_max); } // max (one vec or real)
-
- inline Vasp *m_rmin(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_rmin); } // complex (radius) min (pairs of vecs or complex)
- inline Vasp *m_rmax(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_rmax); } // complex (radius) max (pairs of vecs or complex)
-
- inline Vasp *m_minmax(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_minmax); } // min/max
-
- inline Vasp *m_qmin(OpParam &p,Vasp &src) { return m_run(p,src,NULL,VecOp::d_minq); } // get minimum sample value
- inline Vasp *m_qmax(OpParam &p,Vasp &src) { return m_run(p,src,NULL,VecOp::d_maxq); } // get maximum sample value
- inline Vasp *m_qamin(OpParam &p,Vasp &src) { return m_run(p,src,NULL,VecOp::d_aminq); } // get minimum sample value
- inline Vasp *m_qamax(OpParam &p,Vasp &src) { return m_run(p,src,NULL,VecOp::d_amaxq); } // get maximum sample value
-
- inline Vasp *m_qrmin(OpParam &p,Vasp &src) { return m_cun(p,src,NULL,VecOp::d_rminq); } // get minimum sample value
- inline Vasp *m_qrmax(OpParam &p,Vasp &src) { return m_cun(p,src,NULL,VecOp::d_rmaxq); } // get maximum sample value
-
- Vasp *m_gate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // gate
- Vasp *m_igate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // inverse gate
- Vasp *m_rgate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // radius gate
- Vasp *m_rigate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // inverse radius gate
+ inline Vasp *m_lwr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_lwr); } // lower than
+ inline Vasp *m_gtr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_gtr); } // greater than
+ inline Vasp *m_alwr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_alwr); } // abs lower than
+ inline Vasp *m_agtr(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_agtr); } // abs greater than
+ inline Vasp *m_leq(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_leq); } // abs lower than
+ inline Vasp *m_geq(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_geq); } // abs greater than
+ inline Vasp *m_aleq(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_aleq); } // lower than
+ inline Vasp *m_ageq(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_ageq); } // greater than
+ inline Vasp *m_equ(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_equ); } // lower than
+ inline Vasp *m_neq(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_neq); } // greater than
+
+ inline Vasp *m_min(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_min); } // min (one vec or real)
+ inline Vasp *m_max(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_max); } // max (one vec or real)
+
+ inline Vasp *m_rmin(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_rmin); } // complex (radius) min (pairs of vecs or complex)
+ inline Vasp *m_rmax(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_cbin(p,src,arg,dst,VecOp::d_rmax); } // complex (radius) max (pairs of vecs or complex)
+
+ inline Vasp *m_minmax(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_minmax); } // min/max
+
+ inline Vasp *m_qmin(OpParam &p,CVasp &src) { return m_run(p,src,NULL,VecOp::d_minq); } // get minimum sample value
+ inline Vasp *m_qmax(OpParam &p,CVasp &src) { return m_run(p,src,NULL,VecOp::d_maxq); } // get maximum sample value
+ inline Vasp *m_qamin(OpParam &p,CVasp &src) { return m_run(p,src,NULL,VecOp::d_aminq); } // get minimum sample value
+ inline Vasp *m_qamax(OpParam &p,CVasp &src) { return m_run(p,src,NULL,VecOp::d_amaxq); } // get maximum sample value
+
+ inline Vasp *m_qrmin(OpParam &p,CVasp &src) { return m_cun(p,src,NULL,VecOp::d_rminq); } // get minimum sample value
+ inline Vasp *m_qrmax(OpParam &p,CVasp &src) { return m_cun(p,src,NULL,VecOp::d_rmaxq); } // get maximum sample value
+
+ Vasp *m_gate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // gate
+ Vasp *m_igate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // inverse gate
+ Vasp *m_rgate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // radius gate
+ Vasp *m_rigate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // inverse radius gate
}
#endif
diff --git a/externals/grill/vasp/source/ops_cplx.cpp b/externals/grill/vasp/source/ops_cplx.cpp
index 5311b2db..b2f01788 100644
--- a/externals/grill/vasp/source/ops_cplx.cpp
+++ b/externals/grill/vasp/source/ops_cplx.cpp
@@ -40,7 +40,7 @@ template<class T> V f_radd(T &rv,T &iv,T ra,T ia,T rb,T)
BL VecOp::d_radd(OpParam &p) { d__cbin(f_radd<S>,p); }
-Vasp *VaspOp::m_radd(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst)
+Vasp *VaspOp::m_radd(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst)
{
Vasp *ret = NULL;
CVecBlock *vecs = GetCVecs(p.opname,src,dst);
diff --git a/externals/grill/vasp/source/ops_cplx.h b/externals/grill/vasp/source/ops_cplx.h
index de1426f2..b3aaa4c6 100644
--- a/externals/grill/vasp/source/ops_cplx.h
+++ b/externals/grill/vasp/source/ops_cplx.h
@@ -28,15 +28,15 @@ namespace VecOp {
}
namespace VaspOp {
- inline Vasp *m_polar(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_polar); } // cartesian -> polar (each two)
- inline Vasp *m_rect(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_rect); } // polar -> cartesian (each two)
+ inline Vasp *m_polar(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_polar); } // cartesian -> polar (each two)
+ inline Vasp *m_rect(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_rect); } // polar -> cartesian (each two)
- Vasp *m_radd(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // radius offset
+ Vasp *m_radd(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // radius offset
- inline Vasp *m_cnorm(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cnorm); } // complex normalize
+ inline Vasp *m_cnorm(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cnorm); } // complex normalize
-// inline Vasp *m_cswap(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cswap); } // swap real and imaginary parts
- inline Vasp *m_cconj(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cconj); } // complex conjugate
+// inline Vasp *m_cswap(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cswap); } // swap real and imaginary parts
+ inline Vasp *m_cconj(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cconj); } // complex conjugate
}
#endif
diff --git a/externals/grill/vasp/source/ops_dft.cpp b/externals/grill/vasp/source/ops_dft.cpp
index dec49a26..827c2a03 100644
--- a/externals/grill/vasp/source/ops_dft.cpp
+++ b/externals/grill/vasp/source/ops_dft.cpp
@@ -584,7 +584,7 @@ static I radix2(I size)
return j == size?i:-1;
}
-Vasp *VaspOp::m_rfft(OpParam &p,Vasp &src,Vasp *dst,BL inv)
+Vasp *VaspOp::m_rfft(OpParam &p,CVasp &src,CVasp *dst,BL inv)
{
RVecBlock *vecs = GetRVecs(p.opname,src,dst);
if(vecs) {
@@ -614,7 +614,7 @@ Vasp *VaspOp::m_rfft(OpParam &p,Vasp &src,Vasp *dst,BL inv)
return NULL;
}
-Vasp *VaspOp::m_cfft(OpParam &p,Vasp &src,Vasp *dst,BL inv)
+Vasp *VaspOp::m_cfft(OpParam &p,CVasp &src,CVasp *dst,BL inv)
{
CVecBlock *vecs = GetCVecs(p.opname,src,dst,true);
if(vecs) {
diff --git a/externals/grill/vasp/source/ops_dft.h b/externals/grill/vasp/source/ops_dft.h
index f2f3fe40..24b9a23d 100644
--- a/externals/grill/vasp/source/ops_dft.h
+++ b/externals/grill/vasp/source/ops_dft.h
@@ -16,10 +16,10 @@ WARRANTIES, see the file, "license.txt," in this distribution.
// Fourier transforms
namespace VaspOp {
- Vasp *m_rfft(OpParam &p,Vasp &src,Vasp *dst = NULL,BL inv = false); // real forward
- inline Vasp *m_rifft(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_rfft(p,src,dst,true); } // real inverse
- Vasp *m_cfft(OpParam &p,Vasp &src,Vasp *dst = NULL,BL inv = false); // complex forward
- inline Vasp *m_cifft(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cfft(p,src,dst,true); } // complex inverse
+ Vasp *m_rfft(OpParam &p,CVasp &src,CVasp *dst = NULL,BL inv = false); // real forward
+ inline Vasp *m_rifft(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_rfft(p,src,dst,true); } // real inverse
+ Vasp *m_cfft(OpParam &p,CVasp &src,CVasp *dst = NULL,BL inv = false); // complex forward
+ inline Vasp *m_cifft(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cfft(p,src,dst,true); } // complex inverse
}
#endif
diff --git a/externals/grill/vasp/source/ops_feature.cpp b/externals/grill/vasp/source/ops_feature.cpp
index ede711e2..3e33f313 100644
--- a/externals/grill/vasp/source/ops_feature.cpp
+++ b/externals/grill/vasp/source/ops_feature.cpp
@@ -101,7 +101,7 @@ inline BL d_rvalleys(OpParam &p) { return d_vlpk(p,lower); }
\param inv true for valley operation
\return normalized destination vasp
*/
-Vasp *VaspOp::m_peaks(OpParam &p,Vasp &src,Vasp *dst,BL inv)
+Vasp *VaspOp::m_peaks(OpParam &p,CVasp &src,CVasp *dst,BL inv)
{
Vasp *ret = NULL;
RVecBlock *vecs = GetRVecs(p.opname,src,dst);
@@ -123,7 +123,7 @@ Vasp *VaspOp::m_peaks(OpParam &p,Vasp &src,Vasp *dst,BL inv)
\param inv true for valley operation
\return normalized destination vasp
*/
-Vasp *VaspOp::m_rpeaks(OpParam &p,Vasp &src,Vasp *dst,BL inv)
+Vasp *VaspOp::m_rpeaks(OpParam &p,CVasp &src,CVasp *dst,BL inv)
{
Vasp *ret = NULL;
CVecBlock *vecs = GetCVecs(p.opname,src,dst);
@@ -146,7 +146,11 @@ public:
vasp_anyop(argc,argv,VASP_ARG(),true,XletCode(xlet::tp_float,0))
{}
- virtual Vasp *do_peaks(OpParam &p) { return VaspOp::m_peaks(p,ref,&dst); }
+ virtual Vasp *do_peaks(OpParam &p)
+ {
+ CVasp cdst(dst);
+ return VaspOp::m_peaks(p,CVasp(ref),&cdst);
+ }
virtual Vasp *tx_work(const Argument &arg)
{
@@ -174,7 +178,11 @@ class vasp_valleys:
FLEXT_HEADER(vasp_valleys,vasp_peaks)
public:
vasp_valleys(I argc,const t_atom *argv): vasp_peaks(argc,argv) {}
- virtual Vasp *do_peaks(OpParam &p) { return VaspOp::m_valleys(p,ref,&dst); }
+ virtual Vasp *do_peaks(OpParam &p)
+ {
+ CVasp cdst(dst);
+ return VaspOp::m_valleys(p,CVasp(ref),&cdst);
+ }
};
FLEXT_LIB_V("vasp, vasp.valleys",vasp_valleys)
@@ -185,7 +193,11 @@ class vasp_rpeaks:
FLEXT_HEADER(vasp_rpeaks,vasp_peaks)
public:
vasp_rpeaks(I argc,const t_atom *argv): vasp_peaks(argc,argv) {}
- virtual Vasp *do_peaks(OpParam &p) { return VaspOp::m_rpeaks(p,ref,&dst); }
+ virtual Vasp *do_peaks(OpParam &p)
+ {
+ CVasp cdst(dst);
+ return VaspOp::m_rpeaks(p,CVasp(ref),&cdst);
+ }
};
FLEXT_LIB_V("vasp, vasp.rpeaks",vasp_rpeaks)
@@ -196,7 +208,11 @@ class vasp_rvalleys:
FLEXT_HEADER(vasp_rvalleys,vasp_peaks)
public:
vasp_rvalleys(I argc,const t_atom *argv): vasp_peaks(argc,argv) {}
- virtual Vasp *do_peaks(OpParam &p) { return VaspOp::m_rvalleys(p,ref,&dst); }
+ virtual Vasp *do_peaks(OpParam &p)
+ {
+ CVasp cdst(dst);
+ return VaspOp::m_rvalleys(p,CVasp(ref),&cdst);
+ }
};
FLEXT_LIB_V("vasp, vasp.rvalleys",vasp_rvalleys)
diff --git a/externals/grill/vasp/source/ops_feature.h b/externals/grill/vasp/source/ops_feature.h
index 05efc8b5..95293bad 100644
--- a/externals/grill/vasp/source/ops_feature.h
+++ b/externals/grill/vasp/source/ops_feature.h
@@ -20,10 +20,10 @@ namespace VecOp {
namespace VaspOp {
// extrema functions
- Vasp *m_peaks(OpParam &p,Vasp &src,Vasp *dst = NULL,BL inv = false); //! find peaks
- inline Vasp *m_valleys(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_peaks(p,src,dst,true); } //! find valleys
- Vasp *m_rpeaks(OpParam &p,Vasp &src,Vasp *dst = NULL,BL inv = false); //! find radius peaks
- inline Vasp *m_rvalleys(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_rpeaks(p,src,dst,true); } //! find radius valleys
+ Vasp *m_peaks(OpParam &p,CVasp &src,CVasp *dst = NULL,BL inv = false); //! find peaks
+ inline Vasp *m_valleys(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_peaks(p,src,dst,true); } //! find valleys
+ Vasp *m_rpeaks(OpParam &p,CVasp &src,CVasp *dst = NULL,BL inv = false); //! find radius peaks
+ inline Vasp *m_rvalleys(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_rpeaks(p,src,dst,true); } //! find radius valleys
}
#endif
diff --git a/externals/grill/vasp/source/ops_flt.cpp b/externals/grill/vasp/source/ops_flt.cpp
index 7784b081..fae66f56 100644
--- a/externals/grill/vasp/source/ops_flt.cpp
+++ b/externals/grill/vasp/source/ops_flt.cpp
@@ -105,7 +105,7 @@ BL VecOp::d_flp(OpParam &p)
-Vasp *VaspOp::m_fhp(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL hp)
+Vasp *VaspOp::m_fhp(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL hp)
{
Vasp *ret = NULL;
if(arg.IsList() && arg.GetList().Count() >= 1) {
@@ -186,7 +186,7 @@ BL VecOp::d_dif(OpParam &p)
\param inv true for differentiation
\return normalized destination vasp
*/
-Vasp *VaspOp::m_int(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL inv)
+Vasp *VaspOp::m_int(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL inv)
{
Vasp *ret = NULL;
RVecBlock *vecs = GetRVecs(p.opname,src,dst);
diff --git a/externals/grill/vasp/source/ops_flt.h b/externals/grill/vasp/source/ops_flt.h
index 0ab37111..21761d90 100644
--- a/externals/grill/vasp/source/ops_flt.h
+++ b/externals/grill/vasp/source/ops_flt.h
@@ -27,15 +27,15 @@ namespace VecOp {
namespace VaspOp {
// passive filters
- Vasp *m_fhp(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL,BL hp = true); //! hi pass
- inline Vasp *m_flp(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_fhp(p,src,arg,dst,false); } //! lo pass
+ Vasp *m_fhp(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL,BL hp = true); //! hi pass
+ inline Vasp *m_flp(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_fhp(p,src,arg,dst,false); } //! lo pass
// int/dif functions
- Vasp *m_int(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL,BL inv = false); //! integrate
- inline Vasp *m_dif(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_int(p,src,arg,dst,true); } //! differentiate
+ Vasp *m_int(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL,BL inv = false); //! integrate
+ inline Vasp *m_dif(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_int(p,src,arg,dst,true); } //! differentiate
// fix denormals/NANs
- inline Vasp *m_fix(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_fix); } // ! NAN/denormal filter
+ inline Vasp *m_fix(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_fix); } // ! NAN/denormal filter
}
#endif
diff --git a/externals/grill/vasp/source/ops_gate.cpp b/externals/grill/vasp/source/ops_gate.cpp
index 97faf682..3dd15fbb 100644
--- a/externals/grill/vasp/source/ops_gate.cpp
+++ b/externals/grill/vasp/source/ops_gate.cpp
@@ -43,7 +43,7 @@ BL VecOp::d_rigate(OpParam &p) { d__cbin(f_rigate<S>,p); }
-Vasp *VaspOp::m_gate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst)
+Vasp *VaspOp::m_gate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst)
{
Vasp *ret = NULL;
RVecBlock *vecs = GetRVecs(p.opname,src,dst);
@@ -62,7 +62,7 @@ Vasp *VaspOp::m_gate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst)
}
-Vasp *VaspOp::m_rgate(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst)
+Vasp *VaspOp::m_rgate(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst)
{
Vasp *ret = NULL;
CVecBlock *vecs = GetCVecs(p.opname,src,dst);
diff --git a/externals/grill/vasp/source/ops_gen.cpp b/externals/grill/vasp/source/ops_gen.cpp
index f45be684..fb354468 100644
--- a/externals/grill/vasp/source/ops_gen.cpp
+++ b/externals/grill/vasp/source/ops_gen.cpp
@@ -48,7 +48,7 @@ BL VecOp::d_mosc(OpParam &p)
\todo Replace period length by frequency specification
*/
-Vasp *VaspOp::m_osc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul)
+Vasp *VaspOp::m_osc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul)
{
Vasp *ret = NULL;
if(arg.IsList() && arg.GetList().Count() >= 1) {
@@ -109,7 +109,7 @@ BL VecOp::d_mcosc(OpParam &p)
\todo Replace period length by frequency specification
*/
-Vasp *VaspOp::m_cosc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul)
+Vasp *VaspOp::m_cosc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul)
{
Vasp *ret = NULL;
if(arg.IsList() && arg.GetList().Count() >= 1) {
@@ -172,7 +172,7 @@ BL VecOp::d_mphasor(OpParam &p)
\todo Replace period length by frequency specification
*/
-Vasp *VaspOp::m_phasor(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul)
+Vasp *VaspOp::m_phasor(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul)
{
Vasp *ret = NULL;
if(arg.IsList() && arg.GetList().Count() >= 1) {
@@ -220,7 +220,7 @@ BL VecOp::d_noise(OpParam &p)
\return normalized destination vasp
*/
-Vasp *VaspOp::m_noise(OpParam &p,Vasp &src,Vasp *dst)
+Vasp *VaspOp::m_noise(OpParam &p,CVasp &src,CVasp *dst)
{
Vasp *ret = NULL;
RVecBlock *vecs = GetRVecs(p.opname,src,dst);
@@ -250,7 +250,7 @@ BL VecOp::d_cnoise(OpParam &p)
\todo Replace period length by frequency specification
*/
-Vasp *VaspOp::m_cnoise(OpParam &p,Vasp &src,Vasp *dst)
+Vasp *VaspOp::m_cnoise(OpParam &p,CVasp &src,CVasp *dst)
{
Vasp *ret = NULL;
CVecBlock *vecs = GetCVecs(p.opname,src,dst);
diff --git a/externals/grill/vasp/source/ops_gen.h b/externals/grill/vasp/source/ops_gen.h
index 9d1902d5..eff28710 100644
--- a/externals/grill/vasp/source/ops_gen.h
+++ b/externals/grill/vasp/source/ops_gen.h
@@ -27,14 +27,14 @@ namespace VecOp {
}
namespace VaspOp {
- Vasp *m_osc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul = false); // real osc
- inline Vasp *m_mosc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_osc(p,src,arg,dst,true); } // * real osc
- Vasp *m_cosc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul = false); // complex osc (phase rotates)
- inline Vasp *m_mcosc(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_cosc(p,src,arg,dst,true); } // * complex osc (phase rotates)
- Vasp *m_phasor(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL mul = false); // phasor
- inline Vasp *m_mphasor(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_phasor(p,src,arg,dst,true); } // * phasor
- Vasp *m_noise(OpParam &p,Vasp &src,Vasp *dst); // real noise
- Vasp *m_cnoise(OpParam &p,Vasp &src,Vasp *dst); // complex noise (arg and abs random)
+ Vasp *m_osc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul = false); // real osc
+ inline Vasp *m_mosc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_osc(p,src,arg,dst,true); } // * real osc
+ Vasp *m_cosc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul = false); // complex osc (phase rotates)
+ inline Vasp *m_mcosc(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_cosc(p,src,arg,dst,true); } // * complex osc (phase rotates)
+ Vasp *m_phasor(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL mul = false); // phasor
+ inline Vasp *m_mphasor(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_phasor(p,src,arg,dst,true); } // * phasor
+ Vasp *m_noise(OpParam &p,CVasp &src,CVasp *dst); // real noise
+ Vasp *m_cnoise(OpParam &p,CVasp &src,CVasp *dst); // complex noise (arg and abs random)
}
#endif
diff --git a/externals/grill/vasp/source/ops_qminmax.cpp b/externals/grill/vasp/source/ops_qminmax.cpp
index adcb15d2..debbfbd2 100644
--- a/externals/grill/vasp/source/ops_qminmax.cpp
+++ b/externals/grill/vasp/source/ops_qminmax.cpp
@@ -84,7 +84,7 @@ public:
virtual Vasp *do_opt(OpParam &p)
{
p.norm.minmax = BIG;
- Vasp *ret = VaspOp::m_qmin(p,ref);
+ Vasp *ret = VaspOp::m_qmin(p,CVasp(ref));
if(p.norm.minmax == BIG) p.norm.minmax = 0;
return ret;
}
@@ -124,7 +124,7 @@ public:
virtual Vasp *do_opt(OpParam &p)
{
p.norm.minmax = BIG;
- Vasp *ret = VaspOp::m_qamin(p,ref);
+ Vasp *ret = VaspOp::m_qamin(p,CVasp(ref));
if(p.norm.minmax == BIG) p.norm.minmax = 0;
return ret;
}
@@ -157,7 +157,7 @@ public:
virtual Vasp *do_opt(OpParam &p)
{
p.norm.minmax = -BIG;
- Vasp *ret = VaspOp::m_qmax(p,ref);
+ Vasp *ret = VaspOp::m_qmax(p,CVasp(ref));
if(p.norm.minmax == -BIG) p.norm.minmax = 0;
return ret;
}
@@ -190,7 +190,7 @@ public:
virtual Vasp *do_opt(OpParam &p)
{
p.norm.minmax = 0;
- return VaspOp::m_qamax(p,ref);
+ return VaspOp::m_qamax(p,CVasp(ref));
}
virtual V m_help() { post("%s - Get a vasp's maximum absolute sample value",thisName()); }
@@ -225,7 +225,7 @@ public:
virtual Vasp *do_opt(OpParam &p)
{
p.norm.minmax = BIG;
- Vasp *ret = VaspOp::m_qrmin(p,ref);
+ Vasp *ret = VaspOp::m_qrmin(p,CVasp(ref));
if(p.norm.minmax == BIG) p.norm.minmax = 0;
return ret;
}
@@ -266,7 +266,7 @@ public:
virtual Vasp *do_opt(OpParam &p)
{
p.norm.minmax = 0;
- return VaspOp::m_qrmax(p,ref);
+ return VaspOp::m_qrmax(p,CVasp(ref));
}
virtual V m_help() { post("%s - Get a vasp's maximum complex radius",thisName()); }
diff --git a/externals/grill/vasp/source/ops_rearr.cpp b/externals/grill/vasp/source/ops_rearr.cpp
index bee58c56..80093c17 100644
--- a/externals/grill/vasp/source/ops_rearr.cpp
+++ b/externals/grill/vasp/source/ops_rearr.cpp
@@ -16,7 +16,7 @@ WARRANTIES, see the file, "license.txt," in this distribution.
/*! \brief vasp shift or rotation
\todo units for shift
*/
-Vasp *VaspOp::m_shift(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL shift,BL symm)
+Vasp *VaspOp::m_shift(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL shift,BL symm)
{
Vasp *ret = NULL;
RVecBlock *vecs = GetRVecs(p.opname,src,dst);
@@ -114,7 +114,11 @@ public:
xsf_none = 0,xsf_zero,xsf_edge
};
- virtual Vasp *do_shift(OpParam &p) { return VaspOp::m_shift(p,ref,arg,&dst); }
+ virtual Vasp *do_shift(OpParam &p)
+ {
+ CVasp cdst(dst);
+ return VaspOp::m_shift(p,CVasp(ref),arg,&cdst);
+ }
virtual Vasp *tx_work(const Argument &arg)
{
@@ -144,7 +148,11 @@ public:
vasp_xshift(I argc,const t_atom *argv): vasp_shift(argc,argv) {}
- virtual Vasp *do_shift(OpParam &p) { return VaspOp::m_xshift(p,ref,arg,&dst); }
+ virtual Vasp *do_shift(OpParam &p)
+ {
+ CVasp cdst(dst);
+ return VaspOp::m_xshift(p,CVasp(ref),arg,&cdst);
+ }
virtual V m_help() { post("%s - Shifts buffer data symmetrically (in two halves)",thisName()); }
};
@@ -225,7 +233,7 @@ BL VecOp::d_mirr(OpParam &p)
/*! \brief vasp mirror
*/
-Vasp *VaspOp::m_mirr(OpParam &p,Vasp &src,Vasp *dst,BL symm)
+Vasp *VaspOp::m_mirr(OpParam &p,CVasp &src,CVasp *dst,BL symm)
{
Vasp *ret = NULL;
RVecBlock *vecs = GetRVecs(p.opname,src,dst);
diff --git a/externals/grill/vasp/source/ops_rearr.h b/externals/grill/vasp/source/ops_rearr.h
index d1c6ce73..aa412937 100644
--- a/externals/grill/vasp/source/ops_rearr.h
+++ b/externals/grill/vasp/source/ops_rearr.h
@@ -22,12 +22,12 @@ namespace VecOp {
}
namespace VaspOp {
- Vasp *m_shift(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL,BL sh = true,BL symm = false); // shift buffer
- inline Vasp *m_xshift(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_shift(p,src,arg,dst,true,true); } // shift buffer (symmetrically)
- inline Vasp *m_rot(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_shift(p,src,arg,dst,false,false); } // rotate buffer
- inline Vasp *m_xrot(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_shift(p,src,arg,dst,false,true); } // rotate buffer (symmetrically)
- Vasp *m_mirr(OpParam &p,Vasp &src,Vasp *dst = NULL,BL symm = false); //! mirror buffer
- inline Vasp *m_xmirr(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_mirr(p,src,dst,true); } //! mirror buffer (symmetrically)
+ Vasp *m_shift(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL,BL sh = true,BL symm = false); // shift buffer
+ inline Vasp *m_xshift(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_shift(p,src,arg,dst,true,true); } // shift buffer (symmetrically)
+ inline Vasp *m_rot(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_shift(p,src,arg,dst,false,false); } // rotate buffer
+ inline Vasp *m_xrot(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_shift(p,src,arg,dst,false,true); } // rotate buffer (symmetrically)
+ Vasp *m_mirr(OpParam &p,CVasp &src,CVasp *dst = NULL,BL symm = false); //! mirror buffer
+ inline Vasp *m_xmirr(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_mirr(p,src,dst,true); } //! mirror buffer (symmetrically)
}
diff --git a/externals/grill/vasp/source/ops_resmp.cpp b/externals/grill/vasp/source/ops_resmp.cpp
index cb51dbac..16780df8 100644
--- a/externals/grill/vasp/source/ops_resmp.cpp
+++ b/externals/grill/vasp/source/ops_resmp.cpp
@@ -176,7 +176,7 @@ BL VecOp::d_tilt(OpParam &p)
\param mode interpolation mode
\return normalized destination vasp
*/
-Vasp *VaspOp::m_tilt(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL symm)
+Vasp *VaspOp::m_tilt(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL symm)
{
Vasp *ret = NULL;
if(arg.IsList() && arg.GetList().Count() >= 1) {
@@ -222,7 +222,11 @@ public:
xti_inpl = 0,xti_none,xti_lin,xti_4p
};
- virtual Vasp *do_shift(OpParam &p) { return VaspOp::m_tilt(p,ref,arg,&dst); }
+ virtual Vasp *do_shift(OpParam &p)
+ {
+ CVasp cdst(dst);
+ return VaspOp::m_tilt(p,CVasp(ref),arg,&cdst);
+ }
virtual Vasp *tx_work(const Argument &arg)
{
@@ -255,7 +259,11 @@ public:
vasp_xtilt(I argc,t_atom *argv): vasp_tilt(argc,argv) {}
- virtual Vasp *do_shift(OpParam &p) { return VaspOp::m_xtilt(p,ref,arg,&dst); }
+ virtual Vasp *do_shift(OpParam &p)
+ {
+ CVasp cdst(dst);
+ return VaspOp::m_xtilt(p,CVasp(ref),arg,&cdst);
+ }
virtual V m_help() { post("%s - Resamples buffer data symmetrically (in two halves)",thisName()); }
};
diff --git a/externals/grill/vasp/source/ops_resmp.h b/externals/grill/vasp/source/ops_resmp.h
index 9c4a8bde..e164ee0b 100644
--- a/externals/grill/vasp/source/ops_resmp.h
+++ b/externals/grill/vasp/source/ops_resmp.h
@@ -20,9 +20,9 @@ namespace VecOp {
}
namespace VaspOp {
- Vasp *m_tilt(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL,BL symm = false);
+ Vasp *m_tilt(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL,BL symm = false);
// Symmetric resampling (around center sample)
- inline Vasp *m_xtilt(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_tilt(p,src,arg,dst,true); }
+ inline Vasp *m_xtilt(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_tilt(p,src,arg,dst,true); }
}
#endif
diff --git a/externals/grill/vasp/source/ops_search.cpp b/externals/grill/vasp/source/ops_search.cpp
index 4202a77c..f514d6f3 100644
--- a/externals/grill/vasp/source/ops_search.cpp
+++ b/externals/grill/vasp/source/ops_search.cpp
@@ -70,17 +70,17 @@ BL VecOp::d_search(OpParam &p)
return true;
}
-Vasp *VaspOp::m_search(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL st)
+Vasp *VaspOp::m_search(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL st)
{
Vasp *ret = NULL;
if(src.Vectors() > 1)
post("%s - More than one vector in vasp!",p.opName());
else if(arg.CanbeFloat() || (arg.IsList() && arg.GetList().Count() >= 1)) {
- I fr = src.ChkFrames();
+ I fr = src.Frames();
I o = src.Vector(0).Offset();
I sz = src.Buffer(0)->Frames();
- Vasp all(src);
+ CVasp all(src);
if(st) {
// search start point
p.srch.offs = o;
@@ -112,7 +112,7 @@ Vasp *VaspOp::m_search(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL st)
if(ret) {
ret->Offset(o);
ret->Frames(fr);
- ret->Frames(ret->ChkFrames());
+ ret->Frames(ret->ChkFrames()); // What's that????
}
delete vecs;
@@ -167,7 +167,11 @@ class vasp_soffset:
FLEXT_HEADER(vasp_soffset,vasp_search)
public:
vasp_soffset(I argc,t_atom *argv): vasp_search(argc,argv) {}
- virtual Vasp *do_work(OpParam &p) { return VaspOp::m_soffset(p,ref,arg,&dst); }
+ virtual Vasp *do_work(OpParam &p)
+ {
+ CVasp cdst(dst);
+ return VaspOp::m_soffset(p,CVasp(ref),arg,&cdst);
+ }
};
FLEXT_LIB_V("vasp, vasp.offset= vasp.o=",vasp_soffset)
@@ -178,7 +182,11 @@ class vasp_sframes:
FLEXT_HEADER(vasp_sframes,vasp_search)
public:
vasp_sframes(I argc,t_atom *argv): vasp_search(argc,argv) {}
- virtual Vasp *do_work(OpParam &p) { return VaspOp::m_sframes(p,ref,arg,&dst); }
+ virtual Vasp *do_work(OpParam &p)
+ {
+ CVasp cdst(dst);
+ return VaspOp::m_sframes(p,CVasp(ref),arg,&cdst);
+ }
};
FLEXT_LIB_V("vasp, vasp.frames= vasp.f=",vasp_sframes)
diff --git a/externals/grill/vasp/source/ops_search.h b/externals/grill/vasp/source/ops_search.h
index e7a04e5c..ef199f71 100644
--- a/externals/grill/vasp/source/ops_search.h
+++ b/externals/grill/vasp/source/ops_search.h
@@ -21,9 +21,9 @@ namespace VecOp {
namespace VaspOp {
// search functions
- Vasp *m_search(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL st); //! find values
- inline Vasp *m_soffset(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_search(p,src,arg,dst,true); }
- inline Vasp *m_sframes(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_search(p,src,arg,dst,false); }
+ Vasp *m_search(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL st); //! find values
+ inline Vasp *m_soffset(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_search(p,src,arg,dst,true); }
+ inline Vasp *m_sframes(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_search(p,src,arg,dst,false); }
}
#endif
diff --git a/externals/grill/vasp/source/ops_trnsc.cpp b/externals/grill/vasp/source/ops_trnsc.cpp
index ac4cea1f..88089fbb 100644
--- a/externals/grill/vasp/source/ops_trnsc.cpp
+++ b/externals/grill/vasp/source/ops_trnsc.cpp
@@ -33,7 +33,7 @@ template<class T> V f_crpow(T &rv,T &iv,T ra,T ia,T rb,T)
BL VecOp::d_rpow(OpParam &p) { d__cbin(f_crpow<S>,p); }
-Vasp *VaspOp::m_rpow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst)
+Vasp *VaspOp::m_rpow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst)
{
Vasp *ret = NULL;
CVecBlock *vecs = GetCVecs(p.opname,src,dst);
diff --git a/externals/grill/vasp/source/ops_trnsc.h b/externals/grill/vasp/source/ops_trnsc.h
index 81009298..ee919ea9 100644
--- a/externals/grill/vasp/source/ops_trnsc.h
+++ b/externals/grill/vasp/source/ops_trnsc.h
@@ -29,18 +29,18 @@ namespace VecOp {
}
namespace VaspOp {
- inline Vasp *m_pow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_pow); } // power
+ inline Vasp *m_pow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL) { return m_rbin(p,src,arg,dst,VecOp::d_pow); } // power
- Vasp *m_rpow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst = NULL); // radius power (with each two channels)
+ Vasp *m_rpow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst = NULL); // radius power (with each two channels)
- inline Vasp *m_sqrt(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sqrt); } // square root (from abs value)
- inline Vasp *m_ssqrt(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_ssqrt); } // square root (from abs value)
+ inline Vasp *m_sqrt(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_sqrt); } // square root (from abs value)
+ inline Vasp *m_ssqrt(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_ssqrt); } // square root (from abs value)
- inline Vasp *m_exp(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_exp); } // exponential function
- inline Vasp *m_log(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_log); } // natural logarithm
+ inline Vasp *m_exp(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_exp); } // exponential function
+ inline Vasp *m_log(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_run(p,src,dst,VecOp::d_log); } // natural logarithm
-// inline Vasp *m_cexp(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cexp); } // complex exponential function
-// inline Vasp *m_clog(OpParam &p,Vasp &src,Vasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_clog); } // complex logarithm (how about branches?)
+// inline Vasp *m_cexp(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_cexp); } // complex exponential function
+// inline Vasp *m_clog(OpParam &p,CVasp &src,CVasp *dst = NULL) { return m_cun(p,src,dst,VecOp::d_clog); } // complex logarithm (how about branches?)
}
diff --git a/externals/grill/vasp/source/ops_wnd.cpp b/externals/grill/vasp/source/ops_wnd.cpp
index daee3a9e..278e7bf1 100644
--- a/externals/grill/vasp/source/ops_wnd.cpp
+++ b/externals/grill/vasp/source/ops_wnd.cpp
@@ -141,7 +141,7 @@ BL VecOp::d_window(OpParam &p)
return true;
}
-Vasp *VaspOp::m_window(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL inv,BL mul,BL symm)
+Vasp *VaspOp::m_window(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL inv,BL mul,BL symm)
{
static const int wndnum = 8;
static const char *wndtps[wndnum] = {"lin","sin","hanning","hamming","blackman","connes","welch","lanczos" /*,"gaussian","kaiser"*/};
diff --git a/externals/grill/vasp/source/ops_wnd.h b/externals/grill/vasp/source/ops_wnd.h
index 21bafb59..9103d978 100644
--- a/externals/grill/vasp/source/ops_wnd.h
+++ b/externals/grill/vasp/source/ops_wnd.h
@@ -16,24 +16,26 @@ WARRANTIES, see the file, "license.txt," in this distribution.
// Window functions
namespace VecOp {
+/*
BL d_bevel(OpParam &p);
BL d_mbevel(OpParam &p);
-
+*/
BL d_window(OpParam &p);
}
namespace VaspOp {
- Vasp *m_bevelup(OpParam &p,Vasp &src,Vasp *dst,BL up = true,BL mul = false); // bevel up
- inline Vasp *m_mbevelup(OpParam &p,Vasp &src,Vasp *dst) { return m_bevelup(p,src,dst,true,true); } // * bevel up (fade in)
- inline Vasp *m_beveldn(OpParam &p,Vasp &src,Vasp *dst) { return m_bevelup(p,src,dst,false,false); } // bevel down
- inline Vasp *m_mbeveldn(OpParam &p,Vasp &src,Vasp *dst) { return m_bevelup(p,src,dst,false,true); } // * bevel down (fade out)
-
- Vasp *m_window(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst,BL inv = false,BL mul = false,BL symm = false); // window curve
- inline Vasp *m_mwindow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_window(p,src,arg,dst,false,true,false); } // * window curve
- inline Vasp *m_iwindow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_window(p,src,arg,dst,true,false,false); } // inverse window curve
- inline Vasp *m_miwindow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_window(p,src,arg,dst,true,true,false); } // * inverse window curve
- inline Vasp *m_xwindow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_window(p,src,arg,dst,false,false,true); } // symmetrical window curve
- inline Vasp *m_mxwindow(OpParam &p,Vasp &src,const Argument &arg,Vasp *dst) { return m_window(p,src,arg,dst,false,true,true); } // * symmetrical window curve
+/*
+ Vasp *m_bevelup(OpParam &p,CVasp &src,CVasp *dst,BL up = true,BL mul = false); // bevel up
+ inline Vasp *m_mbevelup(OpParam &p,CVasp &src,CVasp *dst) { return m_bevelup(p,src,dst,true,true); } // * bevel up (fade in)
+ inline Vasp *m_beveldn(OpParam &p,CVasp &src,CVasp *dst) { return m_bevelup(p,src,dst,false,false); } // bevel down
+ inline Vasp *m_mbeveldn(OpParam &p,CVasp &src,CVasp *dst) { return m_bevelup(p,src,dst,false,true); } // * bevel down (fade out)
+*/
+ Vasp *m_window(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst,BL inv = false,BL mul = false,BL symm = false); // window curve
+ inline Vasp *m_mwindow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_window(p,src,arg,dst,false,true,false); } // * window curve
+ inline Vasp *m_iwindow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_window(p,src,arg,dst,true,false,false); } // inverse window curve
+ inline Vasp *m_miwindow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_window(p,src,arg,dst,true,true,false); } // * inverse window curve
+ inline Vasp *m_xwindow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_window(p,src,arg,dst,false,false,true); } // symmetrical window curve
+ inline Vasp *m_mxwindow(OpParam &p,CVasp &src,const Argument &arg,CVasp *dst) { return m_window(p,src,arg,dst,false,true,true); } // * symmetrical window curve
}
#endif
diff --git a/externals/grill/vasp/source/opvecs.cpp b/externals/grill/vasp/source/opvecs.cpp
index 1a226eb3..e29f39bc 100644
--- a/externals/grill/vasp/source/opvecs.cpp
+++ b/externals/grill/vasp/source/opvecs.cpp
@@ -65,7 +65,7 @@ inline BL corrlen(I &frms,VBuffer &b)
\remark working size is maximum common vector size
*/
-RVecBlock *VaspOp::GetRVecs(const C *op,Vasp &src,Vasp *dst)
+RVecBlock *VaspOp::GetRVecs(const C *op,CVasp &src,CVasp *dst)
{
I nvecs = src.Vectors();
if(dst && dst->Ok() && dst->Vectors() != nvecs) {
@@ -116,7 +116,7 @@ RVecBlock *VaspOp::GetRVecs(const C *op,Vasp &src,Vasp *dst)
\param full true if imaginary part is compulsory
\return struct with vector data
*/
-CVecBlock *VaspOp::GetCVecs(const C *op,Vasp &src,Vasp *dst,BL full)
+CVecBlock *VaspOp::GetCVecs(const C *op,CVasp &src,CVasp *dst,BL full)
{
I nvecs = src.Vectors();
if(dst && dst->Ok() && dst->Vectors() != nvecs) {
@@ -193,7 +193,7 @@ CVecBlock *VaspOp::GetCVecs(const C *op,Vasp &src,Vasp *dst,BL full)
\param multi 0 off/1 on/-1 auto... controls whether argument vector is single- or multi-vectored
\return struct with vector data
*/
-RVecBlock *VaspOp::GetRVecs(const C *op,Vasp &src,const Vasp &arg,Vasp *dst,I multi,BL ssize)
+RVecBlock *VaspOp::GetRVecs(const C *op,CVasp &src,const CVasp &arg,CVasp *dst,I multi,BL ssize)
{
if(!arg.Ok()) {
post("%s - invalid argument vasp detected and ignored",op);
@@ -285,7 +285,7 @@ RVecBlock *VaspOp::GetRVecs(const C *op,Vasp &src,const Vasp &arg,Vasp *dst,I mu
\param full true if imaginary part is compulsory
\return struct with vector data
*/
-CVecBlock *VaspOp::GetCVecs(const C *op,Vasp &src,const Vasp &arg,Vasp *dst,I multi,BL ssize,BL full)
+CVecBlock *VaspOp::GetCVecs(const C *op,CVasp &src,const CVasp &arg,CVasp *dst,I multi,BL ssize,BL full)
{
if(!arg.Ok()) {
post("%s - invalid argument vasp detected and ignored",op);
diff --git a/externals/grill/vasp/source/vasp.cpp b/externals/grill/vasp/source/vasp.cpp
index efb3b7a6..66bffccb 100644
--- a/externals/grill/vasp/source/vasp.cpp
+++ b/externals/grill/vasp/source/vasp.cpp
@@ -54,13 +54,20 @@ Vasp::Vasp(I fr,const Ref &r):
refs(0),chns(0),ref(NULL),
frames(fr)
{
- operator +=(r);
+ AddVector(r);
}
Vasp::~Vasp()
{
+ Clear();
+}
+
+Vasp &Vasp::Clear()
+{
+ refs = frames = chns = 0;
if(ref) delete[] ref;
+ return *this;
}
@@ -131,7 +138,7 @@ Vasp &Vasp::operator =(const Vasp &v)
}
-Vasp &Vasp::operator +=(const Ref &r)
+Vasp &Vasp::AddVector(const Ref &r)
{
Resize(chns+1);
ref[chns++] = r;
@@ -139,23 +146,6 @@ Vasp &Vasp::operator +=(const Ref &r)
}
-Vasp &Vasp::operator +=(const Vasp &v)
-{
- if(v.Ok()) {
- if(!Ok()) *this = v;
- else {
- if(Frames() != v.Frames()) {
- post("vasp - Frame count of joined vasps is different - taking the minimum");
- Frames(min(Frames(),v.Frames()));
- }
-
- Resize(Vectors()+v.Vectors());
- for(I i = 0; i < v.Vectors(); ++i) *this += v.Vector(i);
- }
- }
- return *this;
-}
-
// parse argument list
Vasp &Vasp::operator ()(I argc,const t_atom *argv)
{
@@ -291,37 +281,37 @@ V Vasp::Channel(I c)
}
-V Vasp::Size(I s)
+V Vasp::Size(I s,BL keep)
{
for(I i = 0; i < Vectors(); ++i) {
VBuffer *buf = Buffer(i);
if(buf) {
- buf->Frames(s,true);
+ buf->Frames(s,keep);
delete buf;
}
}
}
-V Vasp::SizeD(I sd)
+V Vasp::SizeD(I sd,BL keep)
{
for(I i = 0; i < Vectors(); ++i) {
VBuffer *buf = Buffer(i);
if(buf) {
I s = buf->Frames()+sd;
- buf->Frames(s >= 0?s:0,true);
+ buf->Frames(s >= 0?s:0,keep);
delete buf;
}
}
}
-V Vasp::SizeM(R f)
+V Vasp::SizeM(R f,BL keep)
{
for(I i = 0; i < Vectors(); ++i) {
VBuffer *buf = Buffer(i);
if(buf) {
I s = (I)(buf->Frames()*f);
- buf->Frames(s >= 0?s:0,true);
+ buf->Frames(s >= 0?s:0,keep);
delete buf;
}
}
@@ -359,3 +349,36 @@ I Vasp::ChkFrames() const
return frms < 0?0:frms;
}
+
+// ------------------------------------
+
+CVasp::CVasp() {}
+
+CVasp::CVasp(const Vasp &v):
+ Vasp(v)
+{
+ if(!Check())
+ Clear();
+ else
+ Frames(ChkFrames());
+}
+
+CVasp &CVasp::operator +=(const CVasp &v)
+{
+ if(v.Ok()) {
+ if(!Ok()) *this = v;
+ else {
+ I f = Frames(),vf = v.Frames();
+
+ if(f != vf) {
+ post("vasp - Frame count of joined vasps is different - taking the minimum");
+ Frames(min(f,vf));
+ }
+
+ Resize(Vectors()+v.Vectors());
+ for(I i = 0; i < v.Vectors(); ++i) AddVector(v.Vector(i));
+ }
+ }
+ return *this;
+}
+
diff --git a/externals/grill/vasp/source/vasp.h b/externals/grill/vasp/source/vasp.h
index 94e1ad73..3f76b5bd 100644
--- a/externals/grill/vasp/source/vasp.h
+++ b/externals/grill/vasp/source/vasp.h
@@ -60,13 +60,8 @@ public:
Vasp &operator =(const Vasp &v);
Vasp &operator ()(I argc,const t_atom *argv /*,BL withvasp = false*/);
- // add another vector
- Vasp &operator +=(const Ref &r);
- // add vectors of another vasp
- Vasp &operator +=(const Vasp &v);
-
// set used channels to 0
- Vasp &Clear() { frames = 0; chns = 0; return *this; }
+ Vasp &Clear();
// used vectors
I Vectors() const { return chns; }
@@ -83,13 +78,13 @@ public:
V FramesR(R f) { if(f) FramesM(1./f); else Frames(0); }
// set buffer sizes
- V Size(I fr);
+ V Size(I fr,BL keep = true);
// set frame count differentially
- V SizeD(I frd);
+ V SizeD(I frd,BL keep = true);
// set frame count
- V SizeM(R f);
+ V SizeM(R f,BL keep = true);
// set frame count
- V SizeR(R f) { if(f) SizeM(1./f); else Size(0); }
+ V SizeR(R f,BL keep = true) { if(f) SizeM(1./f,keep); else Size(0,false); }
// actual length of the vasp (in frames)
I ChkFrames() const;
@@ -120,6 +115,9 @@ public:
// get buffer associated to a channel
VBuffer *Buffer(I ix) const;
+ // add another vector
+ Vasp &AddVector(const Ref &r);
+
// Real/Complex
VBuffer *ReBuffer() const { return Buffer(0); }
VBuffer *ImBuffer() const { return Buffer(1); }
@@ -141,4 +139,20 @@ protected:
V Resize(I rcnt);
};
+/*! \brief Checked vasp
+ \remark Only use that for immediate operation!
+*/
+class CVasp:
+ public Vasp
+{
+public:
+ CVasp();
+ CVasp(const Vasp &v);
+
+ // add vectors of another vasp
+ CVasp &operator +=(const CVasp &v);
+
+};
+
+
#endif
diff --git a/externals/grill/vasp/source/vecblk.cpp b/externals/grill/vasp/source/vecblk.cpp
index 8310cc2f..80917237 100644
--- a/externals/grill/vasp/source/vecblk.cpp
+++ b/externals/grill/vasp/source/vecblk.cpp
@@ -39,7 +39,7 @@ Vasp *VecBlock::_DstVasp(I n)
{
Vasp *ret = new Vasp;
ret->Frames(Frames());
- for(I i = 0; i < n; ++i) *ret += Vasp::Ref(*_Dst(i));
+ for(I i = 0; i < n; ++i) ret->AddVector(Vasp::Ref(*_Dst(i)));
return ret;
}
@@ -47,7 +47,7 @@ Vasp *VecBlock::_SrcVasp(I n)
{
Vasp *ret = new Vasp;
ret->Frames(Frames());
- for(I i = 0; i < n; ++i) *ret += Vasp::Ref(*_Src(i));
+ for(I i = 0; i < n; ++i) ret->AddVector(Vasp::Ref(*_Src(i)));
return ret;
}
diff --git a/externals/grill/vasp/todo.txt b/externals/grill/vasp/todo.txt
index 584d552d..4504fee0 100644
--- a/externals/grill/vasp/todo.txt
+++ b/externals/grill/vasp/todo.txt
@@ -21,6 +21,8 @@ warning, treat as 0, calculate unit operation, loop, mirror on buffer end, stay
- make in place rotation more efficient (use temporary space)
+- introduce "groups" for attribute organisation (e.g. detach etc.)
+
objects:
---------------------
- wave object for table-lookup oscs.
@@ -43,17 +45,11 @@ objects:
bugs:
---------------------
-- vasp.join doesn't like length -1
-
-- immediate vasp garbage collection causes clicks.... do it in a separate thread!
-
tests:
---------------------
-- vasp.size always keeps the data... do we want that? -> flag if yes/no
- in-place operation (src == dst), test if strides are equal!
- should frame count always be pre-evaluated (e.g. in vasp.f+ etc. ?)
-- review/change questionable permutation algorithm
- test DFT objects on strided buffers
- check for odd remainder frame on symmetric operations!!