static void aggregate_layer_marshall( VikAggregateLayer *val, guint8 **data, gint *datalen ) { GList *child = val->children; VikLayer *child_layer; guint8 *ld; gint ll; GByteArray* b = g_byte_array_new (); gint len; #define alm_append(obj, sz) \ len = (sz); \ g_byte_array_append ( b, (guint8 *)&len, sizeof(len) ); \ g_byte_array_append ( b, (guint8 *)(obj), len ); vik_layer_marshall_params(VIK_LAYER(val), &ld, &ll); alm_append(ld, ll); g_free(ld); while (child) { child_layer = VIK_LAYER(child->data); vik_layer_marshall ( child_layer, &ld, &ll ); if (ld) { alm_append(ld, ll); g_free(ld); } child = child->next; } *data = b->data; *datalen = b->len; g_byte_array_free(b, FALSE); #undef alm_append }
static void coord_layer_marshall( VikCoordLayer *vcl, guint8 **data, gint *len ) { vik_layer_marshall_params ( VIK_LAYER(vcl), data, len ); }
static void dem_layer_marshall( VikDEMLayer *vdl, guint8 **data, gint *len ) { vik_layer_marshall_params ( VIK_LAYER(vdl), data, len ); }
static void georef_layer_marshall( VikGeorefLayer *vgl, guint8 **data, gint *len ) { vik_layer_marshall_params ( VIK_LAYER(vgl), data, len ); }