summaryrefslogtreecommitdiff
path: root/src/analysis/storage/storage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/storage/storage.c')
-rw-r--r--src/analysis/storage/storage.c65
1 files changed, 63 insertions, 2 deletions
diff --git a/src/analysis/storage/storage.c b/src/analysis/storage/storage.c
index c63f7d0..bd40353 100644
--- a/src/analysis/storage/storage.c
+++ b/src/analysis/storage/storage.c
@@ -380,8 +380,40 @@ GSerializableObject *g_object_storage_load_object(GObjectStorage *storage, const
* *
* Paramètres : storage = gestionnaire à manipuler. *
* name = désignation d'un nouveau groupe d'objets. *
-* pbuf = zone tampon à lire. *
-* pos = tête de lecture avant écriture, ou NULL. [OUT] *
+* pbuf = zone tampon à parcourir. *
+* *
+* Description : Charge un objet interne à partir de données rassemblées. *
+* *
+* Retour : Objet restauré en mémoire ou NULL en cas d'échec. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GSerializableObject *g_object_storage_unpack_object(GObjectStorage *storage, const char *name, packed_buffer *pbuf)
+{
+ GSerializableObject *result; /* Instance à retourner */
+ uint64_t pos; /* Localisation des données */
+ bool status; /* Bilan d'une opération */
+
+ result = NULL;
+
+ status = extract_packed_buffer(pbuf, &pos, sizeof(uint64_t), true);
+
+ if (status)
+ result = g_object_storage_load_object(storage, name, pos);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : storage = gestionnaire à manipuler. *
+* name = désignation d'un nouveau groupe d'objets. *
+* object = objet sérialisable à traiter. *
+* pos = tête de lecture avant écriture. [OUT] *
* *
* Description : Sauvegarde un object sous forme de données rassemblées. *
* *
@@ -439,3 +471,32 @@ bool g_object_storage_store_object(GObjectStorage *storage, const char *name, co
return result;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : storage = gestionnaire à manipuler. *
+* name = désignation d'un nouveau groupe d'objets. *
+* pbuf = zone tampon à remplir. *
+* *
+* Description : Sauvegarde un object interne sous forme de données. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_object_storage_pack_object(GObjectStorage *storage, const char *name, const GSerializableObject *object, packed_buffer *pbuf)
+{
+ bool result; /* Bilan à retourner */
+ off64_t pos; /* Localisation des données */
+
+ result = g_object_storage_store_object(storage, name, object, &pos);
+
+ if (result)
+ result = extend_packed_buffer(pbuf, (uint64_t []){ pos }, sizeof(uint64_t), true);
+
+ return result;
+
+}