diff options
Diffstat (limited to 'src/analysis/storage')
-rw-r--r-- | src/analysis/storage/storage.c | 65 | ||||
-rw-r--r-- | src/analysis/storage/storage.h | 6 |
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 */ |