create directories branches, tags, trunk
[lttv.git] / ltt / branches / poly / ltt / event.h
index 4cee97133a0106767817540f0b8791657c6c83e5..2574a271b04f653de53e63c92fb97ea8abc7cc89 100644 (file)
@@ -1,56 +1,63 @@
-/* This file is part of the Linux Trace Toolkit trace reading library
- * Copyright (C) 2003-2004 Michel Dagenais
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License Version 2.1 as published by the Free Software Foundation.
- *
- * 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 EVENT_H
-#define EVENT_H
+#ifndef _LTT_EVENT_H
+#define _LTT_EVENT_H
 
+#include <glib.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <endian.h>
 #include <ltt/ltt.h>
+#include <ltt/time.h>
 
-/* Events and their content, including the raw data, are only valid 
-   until reading another event from the same tracefile. 
-   Indeed, since event reading is critical to the performance, 
-   the memory associated with an event may be reused at each read. */
-
-
-/* Obtain the trace unique integer id associated with the type of 
-   this event */
-
-unsigned ltt_event_eventtype_id(LttEvent *e);
-
-
-/* Facility and type for the event */
-
-LttFacility *ltt_event_facility(LttEvent *e);
-
-LttEventType *ltt_event_eventtype(LttEvent *e);
-
-
-/* Root field for the event */
-
-LttField *ltt_event_field(LttEvent *e);
-
-
-/* Time and cycle count for the event */
-
-LttTime ltt_event_time(LttEvent *e);
-
-LttCycleCount ltt_event_cycle_count(LttEvent *e);
+struct marker_field;
 
+/*
+ * Structure LttEvent and LttEventPosition must begin with the _exact_ same
+ * fields in the exact same order. LttEventPosition is a parent of LttEvent.
+ */
+struct LttEvent {
+       /* Begin of LttEventPosition fields */
+       LttTracefile *tracefile;
+       unsigned int block;
+       unsigned int offset;
+
+       /* Timekeeping */
+       uint64_t tsc;           /* Current timestamp counter */
+       
+       /* End of LttEventPosition fields */
+       guint32 timestamp;      /* truncated timestamp */
+
+       guint16 event_id;
+
+       LttTime event_time;
+
+       void *data;             /* event data */
+       guint data_size;
+       guint event_size;       /* event_size field of the header :
+                                  used to verify data_size from facility. */
+       uint32_t compact_data;
+
+       int count;              /* the number of overflow of cycle count */
+       gint64 overflow_nsec;   /* precalculated nsec for overflows */
+};
+
+struct LttEventPosition {
+       LttTracefile *tracefile;
+       unsigned int block;
+       unsigned int offset;
+       
+       /* Timekeeping */
+       uint64_t tsc;            /* Current timestamp counter */
+};
+
+static inline guint16 ltt_event_id(struct LttEvent *event)
+{
+       return event->event_id;
+}
+
+static inline LttTime ltt_event_time(struct LttEvent *event)
+{
+       return event->event_time;
+}
 
 /* Obtain the position of the event within the tracefile. This
    is used to seek back to this position later or to seek to another
@@ -63,62 +70,44 @@ void ltt_event_position(LttEvent *e, LttEventPosition *ep);
 
 LttEventPosition * ltt_event_position_new();
 
-void ltt_event_position_get(LttEventPosition *ep,
-    unsigned *block_number, unsigned *index_in_block, LttTracefile ** tf);
-
-void ltt_event_position_set(LttEventPosition *ep,
-    unsigned block_number, unsigned index_in_block);
-
-
-/* CPU id of the event */
-
-unsigned ltt_event_cpu_id(LttEvent *e);
-
-
-/* Pointer to the raw data for the event. This should not be used directly
-   unless prepared to do all the architecture specific conversions. */
-
-void *ltt_event_data(LttEvent *e);
+void ltt_event_position_get(LttEventPosition *ep, LttTracefile **tf,
+        guint *block, guint *offset, guint64 *tsc);
 
+void ltt_event_position_set(LttEventPosition *ep, LttTracefile *tf,
+        guint block, guint offset, guint64 tsc);
 
-/* The number of elements in a sequence field is specific to each event 
-   instance. This function returns the number of elements for an array or 
-   sequence field in an event. */
+gint ltt_event_position_compare(const LttEventPosition *ep1,
+                                const LttEventPosition *ep2);
 
-unsigned ltt_event_field_element_number(LttEvent *e, LttField *f);
-
-
-/* Set the currently selected element for a sequence or array field. */
-
-void ltt_event_field_element_select(LttEvent *e, LttField *f, unsigned i);
-
-
-/* A union is like a structure except that only a single member at a time
-   is present depending on the specific event instance. This function tells
-   the active member for a union field in an event. */
-
-unsigned ltt_event_field_union_member(LttEvent *e, LttField *f);
+void ltt_event_position_copy(LttEventPosition *dest,
+                             const LttEventPosition *src);
 
+LttTracefile *ltt_event_position_tracefile(LttEventPosition *ep);
 
 /* These functions extract data from an event after architecture specific
-   conversions. */
*    conversions. */
 
-unsigned ltt_event_get_unsigned(LttEvent *e, LttField *f);
+guint32 ltt_event_get_unsigned(LttEvent *e, struct marker_field *f);
 
-int ltt_event_get_int(LttEvent *e, LttField *f);
+gint32 ltt_event_get_int(LttEvent *e, struct marker_field *f);
 
-unsigned long ltt_event_get_long_unsigned(LttEvent *e, LttField *f);
+guint64 ltt_event_get_long_unsigned(LttEvent *e, struct marker_field *f);
 
-long int ltt_event_get_long_int(LttEvent *e, LttField *f);
+gint64 ltt_event_get_long_int(LttEvent *e, struct marker_field *f);
 
-float ltt_event_get_float(LttEvent *e, LttField *f);
+float ltt_event_get_float(LttEvent *e, struct marker_field *f);
 
-double ltt_event_get_double(LttEvent *e, LttField *f);
+double ltt_event_get_double(LttEvent *e, struct marker_field *f);
 
 
 /* The string obtained is only valid until the next read from
-   the same tracefile. */
+ *    the same tracefile. */
+
+gchar *ltt_event_get_string(LttEvent *e, struct marker_field *f);
 
-char *ltt_event_get_string(LttEvent *e, LttField *f);
+static inline LttCycleCount ltt_event_cycle_count(const LttEvent *e)
+{
+  return e->tsc;
+}
 
-#endif // EVENT_H
+#endif //_LTT_EVENT_H
This page took 0.024981 seconds and 4 git commands to generate.