gtkcustom --> gtkmultivpaned
[lttv.git] / ltt / branches / poly / lttv / traceset.c
index ab04a4ee4937df5b63e7acc98bc51f0feab76570..508afb16cbc875d95b7ddaa7d56374e49fca13d4 100644 (file)
@@ -1,5 +1,6 @@
 
 #include <lttv/traceset.h>
+#include <stdio.h>
 
 /* A trace is a sequence of events gathered in the same tracing session. The
    events may be stored in several tracefiles in the same directory. 
 */
 
 struct _LttvTraceset {
+  char * filename;
   GPtrArray *traces;
-  GPtrArray *attributes;
   LttvAttribute *a;
 };
 
 
-LttvTraceset *lttv_trace_set_new() 
+struct _LttvTrace {
+  LttTrace *t;
+  LttvAttribute *a;
+  guint ref_count;
+};
+
+
+LttvTraceset *lttv_traceset_new() 
 {
-  LttvTraceset s;
+  LttvTraceset *s;
 
   s = g_new(LttvTraceset, 1);
+  s->filename = NULL;
   s->traces = g_ptr_array_new();
-  s->attributes = g_ptr_array_new();
-  s->a = g_object_new(LTTV_ATTRIBUTE_TYPE);
+  s->a = g_object_new(LTTV_ATTRIBUTE_TYPE, NULL);
+  return s;
+}
+
+LttvTrace *lttv_trace_new(LttTrace *t) 
+{
+  LttvTrace *new_trace;
+
+  new_trace = g_new(LttvTrace, 1);
+  new_trace->a = g_object_new(LTTV_ATTRIBUTE_TYPE, NULL);
+  new_trace->t = t;
+  new_trace->ref_count = 0;
+  return new_trace;
 }
 
 
-LttvTraceset *lttv_traceset_destroy(LttvTraceset *s
+LttvTraceset *lttv_traceset_copy(LttvTraceset *s_orig
 {
-  int i, nb;
+  int i;
+  LttvTraceset *s;
+  LttvTrace * trace;
 
-  for(i = 0 ; i < s->attributes->len ; i++) {
-    lttv_attribute_free((lttv_attributes *)s->attributes->pdata[i]);
+  s = g_new(LttvTraceset, 1);
+  s->filename = NULL;
+  s->traces = g_ptr_array_new();
+  for(i=0;i<s_orig->traces->len;i++)
+  {
+    trace = g_ptr_array_index(s_orig->traces, i);
+    trace->ref_count++;
+
+    /*CHECK this used ltt_trace_copy while it may not be needed. Need to
+      define how traces and tracesets are shared */
+    g_ptr_array_add(
+        s->traces,
+       g_ptr_array_index(s_orig->traces, i));
   }
-  g_ptr_array_free(s->attributes);
-  g_ptr_array_free(s->traces);
-  lttv_attribute_free(s->a);
-  return g_free(s);
+  s->a = LTTV_ATTRIBUTE(lttv_iattribute_deep_copy(LTTV_IATTRIBUTE(s_orig->a)));
+  return s;
 }
 
 
-void lttv_traceset_add(LttvTraceset *s, LttTrace *t) 
+LttvTraceset *lttv_traceset_load(const gchar *filename)
+{
+  LttvTraceset *s = g_new(LttvTraceset,1);
+  FILE *tf;
+  
+  s->filename = g_strdup(filename);
+  tf = fopen(filename,"r");
+
+  g_critical("NOT IMPLEMENTED : load traceset data from a XML file");
+  
+  fclose(tf);
+  return s;
+}
+
+gint lttv_traceset_save(LttvTraceset *s)
 {
+  FILE *tf;
+
+  tf = fopen(s->filename, "w");
+  
+  g_critical("NOT IMPLEMENTED : save traceset data in a XML file");
+
+  fclose(tf);
+  return 0;
+}
+
+void lttv_traceset_destroy(LttvTraceset *s) 
+{
+  g_ptr_array_free(s->traces, TRUE);
+  g_object_unref(s->a);
+  g_free(s);
+}
+
+void lttv_trace_destroy(LttvTrace *t) 
+{
+  g_object_unref(t->a);
+  g_free(t);
+}
+
+
+void lttv_traceset_add(LttvTraceset *s, LttvTrace *t) 
+{
+  t->ref_count++;
   g_ptr_array_add(s->traces, t);
-  g_ptr_array_add(s->attributes, g_object_new(LTTV_ATTRIBUTE_TYPE));
 }
 
 
 unsigned lttv_traceset_number(LttvTraceset *s) 
 {
-  return s->traces.len;
+  return s->traces->len;
 }
 
 
-LttTrace *lttv_traceset_get(LttvTraceset *s, unsigned i) 
+LttvTrace *lttv_traceset_get(LttvTraceset *s, unsigned i) 
 {
   g_assert(s->traces->len > i);
-  return ((LttTrace *)s->traces.pdata[i]);
+  return ((LttvTrace *)s->traces->pdata[i]);
 }
 
 
-LttTrace *lttv_traceset_remove(LttvTraceset *s, unsigned i) 
+void lttv_traceset_remove(LttvTraceset *s, unsigned i) 
 {
-  return g_ptr_array_remove_index(s->traces, i);
-  lttv_attribute_free(g_ptr_array_remove_index(s->attributes,i));
+  LttvTrace * t;
+  g_assert(s->traces->len > i);
+  t = (LttvTrace *)s->traces->pdata[i];
+  t->ref_count--;
+  g_ptr_array_remove_index(s->traces, i);
 }
 
 
@@ -75,9 +149,18 @@ LttvAttribute *lttv_traceset_attribute(LttvTraceset *s)
 }
 
 
-LttvAttribute *lttv_traceset_trace_attribute(LttvTraceset *s, unsigned i)
+LttvAttribute *lttv_trace_attribute(LttvTrace *t)
 {
-  return (LttAttribute *)s->attributes->pdata[i];
+  return t->a;
 }
 
 
+LttTrace *lttv_trace(LttvTrace *t)
+{
+  return t->t;
+}
+
+guint lttv_trace_get_ref_number(LttvTrace * t)
+{
+  return t->ref_count;
+}
This page took 0.025682 seconds and 4 git commands to generate.