diff options
Diffstat (limited to 'libcc1/callbacks.hh')
-rw-r--r-- | libcc1/callbacks.hh | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/libcc1/callbacks.hh b/libcc1/callbacks.hh new file mode 100644 index 0000000..bde1100 --- /dev/null +++ b/libcc1/callbacks.hh @@ -0,0 +1,64 @@ +/* Callback management + Copyright (C) 2014 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#ifndef CC1_PLUGIN_CALLBACKS_HH +#define CC1_PLUGIN_CALLBACKS_HH + +#include "status.hh" +#include "hashtab.h" + +namespace cc1_plugin +{ + class connection; + + // The type of a callback method. + typedef status callback_ftype (connection *); + + // This class manages callback functions. A callback has a name and + // an underlying function. When a query packet arrives, the name is + // inspected and the corresponding function is called. A callback + // function has to know how to decode its own arguments, but + // wrappers are provided elsewhere to automate this. + class callbacks + { + public: + + callbacks (); + ~callbacks (); + + // Add a callback named NAME. FUNC is the function to call when + // this method is invoked. + void add_callback (const char *name, callback_ftype *func); + + // Look up a callback by name. Returns NULL if the method is not + // found. + callback_ftype *find_callback (const char *name); + + private: + + // Declared but not defined to avoid use. + callbacks (const callbacks &); + callbacks &operator= (const callbacks &); + + // The mapping. + htab_t m_registry; + }; +}; + +#endif // CC1_PLUGIN_CALLBACKS_HH |