Serialize

Serialize — Object serialisation

Functions

gboolean gwy_serialize_gio ()
gboolean gwy_serialize_group_gio ()

Includes

#include <libgwyddion/gwyddion.h>

Description

Functions available here at this moment implement the GWY binary data format, version 3.

Details of Serialization

The following information is not necessary for implementing GwySerializable interface in your classes, but it can help prevent wrong decision about serialised representation of your objects. Also, it might help implementing a different serialisation backend than GWY files.

Serialization occurs in several steps.

First, all objects are recursively asked to represent themselves as GwySerializableGroup, which is a list of items. The groups can contain nested groups in v_group item values to represent object- and boxed-valued components. The creation of the items may require the allocation of temporary data structures, if the internal object representation does not match the serialised representation. This step is independent on the serialisation backend format.

Second, the top-level group is written to the output stream, recusring to contiained groups, byte-swapping or otherwise normalizing the data on the fly if necessary. This part strongly depends on the storage format.

Finally, virtual method done() is called on all objects in the tree which define it. This step frees the temporary storage allocated in the itemisation step, if any. It is done in reverse order of which the objects have been serialised, although this should not matter. The serialiser does the recursion. Hence, objects do not need to implement done() if do not needed themselves but some of their member objects might. At the very end the groups are freed too.

Functions

gwy_serialize_gio()

gboolean
gwy_serialize_gio (GwySerializable *serializable,
                   GOutputStream *output,
                   GError **error);

Serialises an object to GIO stream in GWY format.

The data writing employs internal buffering. If the output stream is already buffered (e.g., GBufferedOutputStream), the output will be unnecessarily buffered twice.

Parameters

serializable

A serialisable object.

 

output

Output stream to write the serialised object to.

 

error

Location to store the error occuring, NULL to ignore. Errors from G_IO_ERROR domain can occur.

 

Returns

TRUE if the operation succeeded, FALSE if it failed.


gwy_serialize_group_gio()

gboolean
gwy_serialize_group_gio (GwySerializableGroup *group,
                         GwySerializeSizeType sizetype,
                         GOutputStream *output,
                         GError **error);

Serialises itemised data to GIO stream in GWY format.

This is low-level function, mean when group was created or modified manually or the itemisation was run separately for some other reason. Use gwy_serialize_gio() for normal object serialisation. Remember to call gwy_serializable_group_done() on the group and gwy_serializable_done() on the top-level object if needed. This function only carries out the serialisation to an output stream.

The data writing employs internal buffering. If the output stream is already buffered (e.g., GBufferedOutputStream), the output will be unnecessarily buffered twice.

Parameters

group

Itemised object components.

 

sizetype

Type of size representation.

 

output

Output stream to write the serialised object to.

 

error

Location to store the error occuring, NULL to ignore. Errors from G_IO_ERROR domain can occur.

 

Returns

TRUE if the operation succeeded, FALSE if it failed.