diff options
author | John Glover <glover.john@gmail.com> | 2011-07-08 18:06:21 +0100 |
---|---|---|
committer | John Glover <glover.john@gmail.com> | 2011-07-08 18:06:21 +0100 |
commit | d6073e01c933c77f1e2bc3c3fe1126d617003549 (patch) | |
tree | 695d23677c5b84bf3a0f88fbd4959b4f7cbc0e90 /src/loris/Notifier.h | |
parent | 641688b252da468eb374674a0dbaae1bbac70b2b (diff) | |
download | simpl-d6073e01c933c77f1e2bc3c3fe1126d617003549.tar.gz simpl-d6073e01c933c77f1e2bc3c3fe1126d617003549.tar.bz2 simpl-d6073e01c933c77f1e2bc3c3fe1126d617003549.zip |
Start adding Loris files
Diffstat (limited to 'src/loris/Notifier.h')
-rw-r--r-- | src/loris/Notifier.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/loris/Notifier.h b/src/loris/Notifier.h new file mode 100644 index 0000000..c0269f2 --- /dev/null +++ b/src/loris/Notifier.h @@ -0,0 +1,126 @@ +#ifndef INCLUDE_NOTIFIER_H +#define INCLUDE_NOTIFIER_H +/* + * This is the Loris C++ Class Library, implementing analysis, + * manipulation, and synthesis of digitized sounds using the Reassigned + * Bandwidth-Enhanced Additive Sound Model. + * + * Loris is Copyright (c) 1999-2010 by Kelly Fitz and Lippold Haken + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * Notifier.h + * + * A pair of dedicated streams, notifier and debugger, are used for + * notification throughout the Loris class library. These streams are used + * like cout or cerr, but they buffer their contents until a newline is + * receieved. Then they post their entire contents to a notification + * handler. The default handler just prints to stderr, but other handlers + * may be dynamically specified using setNotifierHandler() and + * setDebuggerHandler(). + * + * debugger is enabled only when compiled with the preprocessor macro + * Debug_Loris defined. It cannot be enabled using setDebuggerHandler() if + * Debug_Loris is undefined.When Debug_Loris is not defined, characters + * streamed onto debugger are never posted nor are they otherwise + * accessible. + * + * Notifier.h may be included in c files. The stream declarations are + * omitted, but the notification handler routines are accessible. + * + * + * Kelly Fitz, 28 Feb 2000 + * loris@cerlsoundgroup.org + * + * http://www.cerlsoundgroup.org/Loris/ + * + */ + + +/* + * stream declaration, C++ only: + */ +#ifdef __cplusplus + +#include <iostream> + +// begin namespace +namespace Loris { + +std::ostream & getNotifierStream(void); +std::ostream & getDebuggerStream(void); + +// declare streams: +static std::ostream & notifier = getNotifierStream(); +/* This stream is used throughout Loris (and may be used by clients) + to provide user feedback. Characters streamed onto notifier are + buffered until a newline is received, and then the entire contents + of the stream are flushed to the current notification handler (stderr, + by default). + */ + +static std::ostream & debugger = getDebuggerStream(); +/* This stream is used throughout Loris (and may be used by clients) + to provide debugging information. Characters streamed onto debugger are + buffered until a newline is received, and then the entire contents + of the stream are flushed to the current debugger handler (stderr, + by default). + + debugger is enabled only when compiled with the preprocessor macro + Debug_Loris defined. It cannot be enabled using setDebuggerHandler() + if Debug_Loris is undefined. When Debug_Loris is not defined, + characters streamed onto debugger are never posted nor are they + otherwise accessible. + */ + +// for convenience, import endl and ends from std into Loris: +using std::endl; +using std::ends; + +} // end of namespace Loris + +#endif /* def __cplusplus */ + +/* + * handler assignment, c linkable: + */ + +#ifdef __cplusplus +// begin namespace +namespace Loris { +extern "C" { +#endif // def __cplusplus + +// These functions do not throw exceptions. +typedef void(*NotificationHandler)(const char * s); +NotificationHandler setNotifierHandler( NotificationHandler fn ); +/* Specify a new handling procedure for posting user feedback, and return + the current handler. + */ + +NotificationHandler setDebuggerHandler( NotificationHandler fn ); +/* Specify a new handling procedure for posting debugging information, and return + the current handler. This has no effect unless compiled with the Debug_Loris + preprocessor macro defined. + */ + +#ifdef __cplusplus +} // end extern "C" +} // end of namespace Loris +#endif // def __cplusplus + + +#endif /* ndef INCLUDE_NOTIFIER_H */ |