diff options
Diffstat (limited to 'src/extension/db.h')
-rw-r--r-- | src/extension/db.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/extension/db.h b/src/extension/db.h new file mode 100644 index 0000000..d585180 --- /dev/null +++ b/src/extension/db.h @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Functions to keep a listing of all modules in the system. Has its + * own file mostly for abstraction reasons, but is pretty simple + * otherwise. + * + * Authors: + * Ted Gould <ted@gould.cx> + * Lauris Kaplinski <lauris@kaplinski.com> + * + * Copyright (C) 2002-2004 Authors + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#ifndef SEEN_MODULES_DB_H +#define SEEN_MODULES_DB_H + +#include <map> +#include <list> +#include <cstring> + +#include <glib.h> + + +namespace Inkscape { +namespace Extension { + +class Input; +class Output; +class Effect; +class Extension; + +class DB { +private: + /** A string comparison function to be used in the moduledict + to find the different extensions in the hash map. */ + struct ltstr { + bool operator()(const char* s1, const char* s2) const { + if ( (s1 == nullptr) && (s2 != nullptr) ) { + return true; + } else if (s1 == nullptr || s2 == nullptr) { + return false; + } else { + return strcmp(s1, s2) < 0; + } + } + }; + /** This is the actual database. It has all of the modules in it, + indexed by their ids. It's a hash table for faster lookups */ + std::map <const char *, Extension *, ltstr> moduledict; + /** Maintain an ordered list of modules for generating the extension + lists via "foreach" */ + std::list <Extension *> modulelist; + + static void foreach_internal (gpointer in_key, gpointer in_value, gpointer in_data); + +public: + DB (); + Extension * get (const gchar *key) const; + void register_ext (Extension *module); + void unregister_ext (Extension *module); + void foreach (void (*in_func)(Extension * in_plug, gpointer in_data), gpointer in_data); + +private: + static void input_internal (Extension * in_plug, gpointer data); + static void output_internal (Extension * in_plug, gpointer data); + static void effect_internal (Extension * in_plug, gpointer data); + +public: + typedef std::list<Output *> OutputList; + typedef std::list<Input *> InputList; + typedef std::list<Effect *> EffectList; + + InputList &get_input_list (InputList &ou_list); + OutputList &get_output_list (OutputList &ou_list); + EffectList &get_effect_list (EffectList &ou_list); +}; /* class DB */ + +extern DB db; + +} } /* namespace Extension, Inkscape */ + +#endif // SEEN_MODULES_DB_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : |