| 
							- /*
 -   ZynAddSubFX - a software synthesizer
 - 
 -   WatchPoint.h - Synthesis State Watcher
 -   Copyright (C) 2015-2015 Mark McCurry
 -   Author: Mark McCurry
 - 
 -   This program is free software; you can redistribute it and/or
 -   modify it under the terms of the GNU General Public License
 -   as published by the Free Software Foundation; either version 2
 -   of the License, or (at your option) any later version.
 - */
 - 
 - #pragma once
 - 
 - struct WatchManager;
 - namespace rtosc {class ThreadLink;}
 - 
 - struct WatchPoint
 - {
 -     bool          active;
 -     int           samples_left;
 -     WatchManager *reference;
 -     char          identity[128];
 - 
 -     WatchPoint(WatchManager *ref, const char *prefix, const char *id);
 -     bool is_active(void);
 - };
 - 
 - #define MAX_WATCH 16
 - #define MAX_WATCH_PATH 128
 - #define MAX_SAMPLE 128
 - struct WatchManager
 - {
 -     typedef rtosc::ThreadLink thrlnk;
 -     thrlnk *write_back;
 -     bool    new_active;
 -     char    active_list[MAX_WATCH][MAX_WATCH_PATH];
 -     float   data_list[MAX_SAMPLE][MAX_WATCH];
 -     int     sample_list[MAX_WATCH];
 -     bool    deactivate[MAX_WATCH];
 - 
 -     //External API
 -     WatchManager(thrlnk *link=0);
 -     void add_watch(const char *);
 -     void del_watch(const char *);
 -     void tick(void);
 - 
 -     //Watch Point Query API
 -     bool active(const char *) const;
 -     int  samples(const char *) const;
 - 
 -     //Watch Point Response API
 -     void satisfy(const char *, float);
 -     void satisfy(const char *, float*, int);
 - };
 - 
 - struct FloatWatchPoint:public WatchPoint
 - {
 -     FloatWatchPoint(WatchManager *ref, const char *prefix, const char *id);
 -     inline void operator()(float f)
 -     {
 -         if(is_active() && reference) {
 -             reference->satisfy(identity, f);
 -             active = false;
 -         }
 -     }
 - };
 - 
 - //basically the same as the float watch point, only it consumes tuples
 - struct VecWatchPoint : public WatchPoint
 - {
 -     VecWatchPoint(WatchManager *ref, const char *prefix, const char *id);
 -     inline void operator()(float *f, int n)
 -     {
 -         if(is_active() && reference) {
 -             reference->satisfy(identity, f, n);
 -             active = false;
 -         }
 -     }
 - };
 
 
  |