X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Ftraceset.c;h=ce96b99a1e16d5fcc6ca3dbde5b99901276c32d0;hb=09e2606fca29ce45f4c0bc6aa0bfd0a00e9bb5f8;hp=ab04a4ee4937df5b63e7acc98bc51f0feab76570;hpb=dc87756342c051418eccb2b7d932ffa5453c6788;p=lttv.git diff --git a/ltt/branches/poly/lttv/traceset.c b/ltt/branches/poly/lttv/traceset.c index ab04a4ee..ce96b99a 100644 --- a/ltt/branches/poly/lttv/traceset.c +++ b/ltt/branches/poly/lttv/traceset.c @@ -1,5 +1,6 @@ #include +#include /* 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. @@ -8,61 +9,139 @@ */ 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; } +char * lttv_traceset_name(LttvTraceset * s) +{ + return s->filename; +} -LttvTraceset *lttv_traceset_destroy(LttvTraceset *s) +LttvTrace *lttv_trace_new(LttTrace *t) { - int i, nb; + 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; +} + - for(i = 0 ; i < s->attributes->len ; i++) { - lttv_attribute_free((lttv_attributes *)s->attributes->pdata[i]); +LttvTraceset *lttv_traceset_copy(LttvTraceset *s_orig) +{ + int i; + LttvTraceset *s; + LttvTrace * trace; + + s = g_new(LttvTraceset, 1); + s->filename = NULL; + s->traces = g_ptr_array_new(); + for(i=0;itraces->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; +} + + +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"); -void lttv_traceset_add(LttvTraceset *s, LttTrace *t) + 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 +154,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; +}