]> git.street.me.uk Git - andy/viking.git/blobdiff - src/vikwaypoint.c
gtk_object_sink has been deprecated since gtk version 2.10, use g_object_ref_sink...
[andy/viking.git] / src / vikwaypoint.c
index d530d4228e6e3652eeba2a4ba46685800f19eb6d..576266719d2a9ce7d511028aac61a39e85221548 100644 (file)
  */
 
 #include <glib.h>
  */
 
 #include <glib.h>
+#include <string.h>
 #include "coords.h"
 #include "vikcoord.h"
 #include "vikwaypoint.h"
 #include "coords.h"
 #include "vikcoord.h"
 #include "vikwaypoint.h"
+#include "globals.h"
 
 
 VikWaypoint *vik_waypoint_new()
 {
   VikWaypoint *wp = g_malloc ( sizeof ( VikWaypoint ) );
 
 
 VikWaypoint *vik_waypoint_new()
 {
   VikWaypoint *wp = g_malloc ( sizeof ( VikWaypoint ) );
+  wp->altitude = VIK_DEFAULT_ALTITUDE;
   wp->comment = NULL;
   wp->image = NULL;
   wp->symbol = NULL;
   wp->comment = NULL;
   wp->image = NULL;
   wp->symbol = NULL;
@@ -98,3 +101,50 @@ VikWaypoint *vik_waypoint_copy(const VikWaypoint *wp)
   return new_wp;
 }
 
   return new_wp;
 }
 
+void vik_waypoint_marshall ( VikWaypoint *wp, guint8 **data, guint *datalen)
+{
+  GByteArray *b = g_byte_array_new();
+  guint len;
+
+  g_byte_array_append(b, (guint8 *)wp, sizeof(*wp));
+
+#define vwm_append(s) \
+  len = (s) ? strlen(s)+1 : 0; \
+  g_byte_array_append(b, (guint8 *)&len, sizeof(len)); \
+  if (s) g_byte_array_append(b, (guint8 *)s, len);
+
+  vwm_append(wp->comment);
+  vwm_append(wp->image);
+  vwm_append(wp->symbol);
+
+  *data = b->data;
+  *datalen = b->len;
+  g_byte_array_free(b, FALSE);
+#undef vwm_append
+}
+
+VikWaypoint *vik_waypoint_unmarshall (guint8 *data, guint datalen)
+{
+  guint len;
+  VikWaypoint *new_wp = vik_waypoint_new();
+  memcpy(new_wp, data, sizeof(*new_wp));
+  data += sizeof(*new_wp);
+
+#define vwu_get(s) \
+  len = *(guint *)data; \
+  data += sizeof(len); \
+  if (len) { \
+    (s) = g_strdup((gchar *)data); \
+  } else { \
+    (s) = NULL; \
+  } \
+  data += len;
+
+  vwu_get(new_wp->comment);
+  vwu_get(new_wp->image); 
+  vwu_get(new_wp->symbol);
+  
+  return new_wp;
+#undef vwu_get
+}
+