summaryrefslogtreecommitdiff
path: root/src/analysis/storage
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2021-03-07 21:20:37 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2021-03-07 21:20:37 (GMT)
commitc728479b9006dde8d377e9029936de9a625c806b (patch)
tree36228a10cca08737a3df9c4eb22dc490d3205452 /src/analysis/storage
parentfde9e3b46192a065ec622da1395c48015df3cf32 (diff)
Load and store data types with proper functions.
Diffstat (limited to 'src/analysis/storage')
-rw-r--r--src/analysis/storage/storage.c65
-rw-r--r--src/analysis/storage/storage.h6
2 files changed, 69 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;
+
+}
diff --git a/src/analysis/storage/storage.h b/src/analysis/storage/storage.h
index 611e49e..c568267 100644
--- a/src/analysis/storage/storage.h
+++ b/src/analysis/storage/storage.h
@@ -62,9 +62,15 @@ bool g_object_storage_add_backend(GObjectStorage *, const char *, const char *);
/* Charge un objet à partir de données rassemblées. */
GSerializableObject *g_object_storage_load_object(GObjectStorage *, const char *, off64_t);
+/* Charge un objet interne à partir de données rassemblées. */
+GSerializableObject *g_object_storage_unpack_object(GObjectStorage *, const char *, packed_buffer *);
+
/* Sauvegarde un object sous forme de données rassemblées. */
bool g_object_storage_store_object(GObjectStorage *, const char *, const GSerializableObject *, off64_t *);
+/* Sauvegarde un object interne sous forme de données. */
+bool g_object_storage_pack_object(GObjectStorage *, const char *, const GSerializableObject *, packed_buffer *);
+
#endif /* _ANALYSIS_STORAGE_STORAGE_H */