diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2024-12-08 18:33:48 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2024-12-08 18:33:48 (GMT) |
commit | 2c33301f914d19516f8a107033a5dd7a97d70d07 (patch) | |
tree | b96cce5b44c867e3fce6583d16aafdd93268db12 /plugins | |
parent | 29a47836eb9dd9c21c81da904b7ad5372a538144 (diff) |
Restore a reviewed singleton interface.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/pychrysalide/glibext/Makefile.am | 2 | ||||
-rw-r--r-- | plugins/pychrysalide/glibext/module.c | 7 | ||||
-rw-r--r-- | plugins/pychrysalide/glibext/singleton.c | 176 |
3 files changed, 8 insertions, 177 deletions
diff --git a/plugins/pychrysalide/glibext/Makefile.am b/plugins/pychrysalide/glibext/Makefile.am index 8b021bb..69d272a 100644 --- a/plugins/pychrysalide/glibext/Makefile.am +++ b/plugins/pychrysalide/glibext/Makefile.am @@ -10,7 +10,6 @@ noinst_LTLIBRARIES = libpychrysaglibext.la # linecursor.h linecursor.c \ # linegen.h linegen.c \ # module.h module.c \ -# singleton.h singleton.c # if BUILD_GTK_SUPPORT @@ -25,6 +24,7 @@ libpychrysaglibext_la_SOURCES = \ constants.h constants.c \ module.h module.c \ portion.h portion.c \ + singleton.h singleton.c \ work.h work.c \ workqueue.h workqueue.c diff --git a/plugins/pychrysalide/glibext/module.c b/plugins/pychrysalide/glibext/module.c index e62d587..d913d92 100644 --- a/plugins/pychrysalide/glibext/module.c +++ b/plugins/pychrysalide/glibext/module.c @@ -39,9 +39,9 @@ #include "linegen.h" #include "loadedpanel.h" #include "named.h" -#include "singleton.h" */ #include "portion.h" +#include "singleton.h" #include "work.h" #include "workqueue.h" #include "../helpers.h" @@ -110,12 +110,14 @@ bool populate_glibext_module(void) result = true; + if (result) result = ensure_python_singleton_candidate_is_registered(); + if (result) result = ensure_python_binary_portion_is_registered(); if (result) result = ensure_python_generic_work_is_registered(); + if (result) result = ensure_python_singleton_factory_is_registered(); if (result) result = ensure_python_work_queue_is_registered(); /* - if (result) result = ensure_python_singleton_candidate_is_registered(); if (result) result = ensure_python_binary_cursor_is_registered(); if (result) result = ensure_python_buffer_cache_is_registered(); @@ -133,7 +135,6 @@ bool populate_glibext_module(void) if (result) result = ensure_python_loaded_panel_is_registered(); if (result) result = ensure_python_named_widget_is_registered(); #endif - if (result) result = ensure_python_singleton_factory_is_registered(); */ assert(result); diff --git a/plugins/pychrysalide/glibext/singleton.c b/plugins/pychrysalide/glibext/singleton.c index 8491473..4aad7f5 100644 --- a/plugins/pychrysalide/glibext/singleton.c +++ b/plugins/pychrysalide/glibext/singleton.c @@ -42,7 +42,7 @@ /* Procède à l'initialisation de l'interface de candidature. */ -static void py_singleton_candidate_interface_init(GSingletonCandidateIface *, gpointer *); +static void py_singleton_candidate_interface_init(GSingletonCandidateInterface *, gpointer *); /* Fournit une liste de candidats embarqués par un candidat. */ static GSingletonCandidate **py_singleton_candidate_list_inner_instances_wrapper(const GSingletonCandidate *, size_t *); @@ -56,21 +56,12 @@ static guint py_singleton_candidate___hash__wrapper(const GSingletonCandidate *) /* Détermine si deux candidats à l'unicité sont identiques. */ static gboolean py_singleton_candidate___eq__wrapper(const GSingletonCandidate *, const GSingletonCandidate *); -/* Marque un candidat comme figé. */ -static void py_singleton_candidate_set_ro_wrapper(GSingletonCandidate *); - -/* Indique si le candidat est figé. */ -static bool py_singleton_candidate_is_ro_wrapper(const GSingletonCandidate *); - /* Fournit l'empreinte d'un candidat à une centralisation. */ static PyObject *py_singleton_candidate_hash(PyObject *, PyObject *); /* Fournit une liste de candidats embarqués par un candidat. */ static PyObject *py_singleton_candidate_get_inner_instances(PyObject *, void *); -/* Indique si le candidat est figé. */ -static PyObject *py_singleton_candidate_get_read_only(PyObject *, void *); - /* Effectue une comparaison avec un objet 'SingletonCandidate'. */ static PyObject *py_singleton_candidate_richcompare(PyObject *, PyObject *, int); @@ -108,7 +99,7 @@ static PyObject *py_singleton_factory_get_instance(PyObject *, PyObject *); * * ******************************************************************************/ -static void py_singleton_candidate_interface_init(GSingletonCandidateIface *iface, gpointer *unused) +static void py_singleton_candidate_interface_init(GSingletonCandidateInterface *iface, gpointer *unused) { #define SINGLETON_CANDIDATE_DOC \ "The SingletonCandidate class is a required interface for objects" \ @@ -127,9 +118,7 @@ static void py_singleton_candidate_interface_init(GSingletonCandidateIface *ifac "* pychrysalide.glibext.SingletonCandidate._list_inner_instances();\n" \ "* pychrysalide.glibext.SingletonCandidate._update_inner_instances();\n"\ "* pychrysalide.glibext.SingletonCandidate.__hash__();\n" \ - "* pychrysalide.glibext.SingletonCandidate.__eq__();\n" \ - "* pychrysalide.glibext.SingletonCandidate._set_read_only();\n" \ - "* pychrysalide.glibext.SingletonCandidate._is_read_only().\n" + "* pychrysalide.glibext.SingletonCandidate.__eq__().\n" iface->update_inner = py_singleton_candidate_update_inner_instances_wrapper; iface->list_inner = py_singleton_candidate_list_inner_instances_wrapper; @@ -137,9 +126,6 @@ static void py_singleton_candidate_interface_init(GSingletonCandidateIface *ifac iface->hash = py_singleton_candidate___hash__wrapper; iface->is_equal = py_singleton_candidate___eq__wrapper; - iface->set_ro = py_singleton_candidate_set_ro_wrapper; - iface->is_ro = py_singleton_candidate_is_ro_wrapper; - } @@ -440,111 +426,6 @@ static gboolean py_singleton_candidate___eq__wrapper(const GSingletonCandidate * /****************************************************************************** * * -* Paramètres : candidate = objet dont l'instance se veut unique. * -* * -* Description : Marque un candidat comme figé. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void py_singleton_candidate_set_ro_wrapper(GSingletonCandidate *candidate) -{ - PyGILState_STATE gstate; /* Sauvegarde d'environnement */ - PyObject *pyobj; /* Objet Python concerné */ - PyObject *pyret; /* Bilan de consultation */ - -#define SINGLETON_CANDIDATE_SET_RO_WRAPPER PYTHON_WRAPPER_DEF \ -( \ - _set_read_only, "$self, /", \ - METH_NOARGS, \ - "Abstract method used to mark the content of a singleton" \ - " candidate as read-only.\n" \ - "\n" \ - "The read-only state is mandatory once the candidate is" \ - " registered inside a pychrysalide.glibext.SingletonFactory"\ - " instance as official singleton." \ -) - - gstate = PyGILState_Ensure(); - - pyobj = pygobject_new(G_OBJECT(candidate)); - - if (has_python_method(pyobj, "_set_read_only")) - { - pyret = run_python_method(pyobj, "_set_read_only", NULL); - - Py_XDECREF(pyret); - - } - - Py_DECREF(pyobj); - - PyGILState_Release(gstate); - -} - - -/****************************************************************************** -* * -* Paramètres : candidate = objet dont l'instance se veut unique. * -* * -* Description : Indique si le candidat est figé. * -* * -* Retour : true si le contenu du candidat ne peut plus être modifié. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static bool py_singleton_candidate_is_ro_wrapper(const GSingletonCandidate *candidate) -{ - bool result; /* Etat à retourner */ - PyGILState_STATE gstate; /* Sauvegarde d'environnement */ - PyObject *pyobj; /* Objet Python concerné */ - PyObject *pyret; /* Bilan de consultation */ - -#define SINGLETON_CANDIDATE_IS_RO_WRAPPER PYTHON_WRAPPER_DEF \ -( \ - _is_read_only, "$self, /", \ - METH_NOARGS, \ - "Abstract method used to retrieve the status of the data" \ - " contained by a singleton candidate.\n" \ - "\n" \ - "The retured value is *True* if the candidate is" \ - " registered inside a pychrysalide.glibext.SingletonFactory"\ - " instance as official singleton, *False* otherwise." \ -) - - result = false; - - gstate = PyGILState_Ensure(); - - pyobj = pygobject_new(G_OBJECT(candidate)); - - if (has_python_method(pyobj, "_is_read_only")) - { - pyret = run_python_method(pyobj, "_is_read_only", NULL); - - result = (pyret == Py_True); - - Py_XDECREF(pyret); - - } - - Py_DECREF(pyobj); - - PyGILState_Release(gstate); - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : self = objet dont l'instance se veut unique. * * args = adresse non utilisée ici. * * * @@ -644,49 +525,6 @@ static PyObject *py_singleton_candidate_get_inner_instances(PyObject *self, void /****************************************************************************** * * -* Paramètres : self = objet Python concerné par l'appel. * -* closure = non utilisé ici. * -* * -* Description : Indique si le candidat est figé. * -* * -* Retour : true si le contenu du candidat ne peut plus être modifié. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_singleton_candidate_get_read_only(PyObject *self, void *closure) -{ - PyObject *result; /* Valeur à retourner */ - GSingletonCandidate *candidate; /* Mécanismes natifs */ - bool status; /* Etat de l'élément consulté */ - -#define SINGLETON_CANDIDATE_READ_ONLY_ATTRIB PYTHON_GET_DEF_FULL \ -( \ - read_only, py_singleton_candidate, \ - "State of the singleton candidate content.\n" \ - "\n" \ - "The result is a boolean: *True* if the object is registered" \ - " as singleton, *False* otherwise.\n" \ - "\n" \ - "Once a singleton, the object must not change its content as" \ - " it is a shared instance." \ -) - - candidate = G_SINGLETON_CANDIDATE(pygobject_get(self)); - - status = g_singleton_candidate_is_read_only(candidate); - - result = status ? Py_True : Py_False; - Py_INCREF(result); - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : a = premier object Python à consulter. * * b = second object Python à consulter. * * op = type de comparaison menée. * @@ -755,15 +593,12 @@ PyTypeObject *get_python_singleton_candidate_type(void) SINGLETON_CANDIDATE_UPDATE_INNER_INSTANCES_WRAPPER, SINGLETON_CANDIDATE_HASH_WRAPPER, SINGLETON_CANDIDATE_EQ_WRAPPER, - SINGLETON_CANDIDATE_SET_RO_WRAPPER, - SINGLETON_CANDIDATE_IS_RO_WRAPPER, SINGLETON_CANDIDATE_HASH_METHOD, { NULL } }; static PyGetSetDef py_singleton_candidate_getseters[] = { SINGLETON_CANDIDATE_INNER_INSTANCES_ATTRIB, - SINGLETON_CANDIDATE_READ_ONLY_ATTRIB, { NULL } }; @@ -973,11 +808,6 @@ static int py_singleton_factory_init(PyObject *self, PyObject *args, PyObject *k "\n" \ "The first processed instance defines the type handled by the factory." - /* Récupération des paramètres */ - - ret = PyArg_ParseTuple(args, ""); - if (!ret) return -1; - /* Initialisation d'un objet GLib */ ret = forward_pygobjet_init(self); |