/* gserialize.h * Copyright (C) 1998 Jay Cox * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __GSERIALIZE_H__ #define __GSERIALIZE_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include typedef enum { GSERIAL_END, /* for internal use only */ GSERIAL_INT8, GSERIAL_INT16, GSERIAL_INT32, GSERIAL_FLOAT, /* 32 bit IEEE fp value */ GSERIAL_DOUBLE, /* 64 bit IEEE fp value */ GSERIAL_STRING, GSERIAL_INT8ARRAY, GSERIAL_INT16ARRAY, GSERIAL_INT32ARRAY, GSERIAL_FLOATARRAY, GSERIAL_DOUBLEARRAY, GSERIAL_LAST_TYPE } GSerialType; typedef struct _GSerialItem GSerialItem; typedef struct _GSerialDescription GSerialDescription; GSerialItem *g_new_serial_item(GSerialType type, gulong offset, gint32 length, gulong length_offset); #define g_serial_item(type, struct_, member) \ g_new_serial_item(type, G_STRUCT_OFFSET(struct_, member), 0, 0) #define g_serial_array(type, struct_, member, length) \ g_new_serial_item(type, G_STRUCT_OFFSET(struct_, member), length, 0) #define g_serial_vlen_array(type, struct_, member, length_member) \ g_new_serial_item(type, G_STRUCT_OFFSET(struct_, member), -1, \ G_STRUCT_OFFSET(struct_, length_member)) GSerialDescription *g_new_serial_description(char *name, ...); /* pass it g_serial_s. null terminated */ void g_free_serial_description(GSerialDescription *); long g_serialize(GSerialDescription *d, void **output, void *struct_data); /* returns the length of the serialized data. g_mallocs space for the data and stores a pointer to it in output */ void g_deserialize(GSerialDescription *d, void *output, void *serial); /* output must be a preallocated area large enough to hold the deserialized struct. */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __GSERIALIZE_H__*/