-
-/* 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 tracefile unique integer id associated with the type of
- this event */
-
-unsigned ltt_event_eventtype_id(ltt_event *e);
-
-
-/* Facility and type for the event */
-
-ltt_facility *ltt_event_facility(ltt_event *e);
-
-ltt_eventtype *ltt_event_eventtype(ltt_event *e);
-
-ltt_field *ltt_event_field(ltt_event *e);
-
-/* Time and cycle count for the event */
-
-ltt_time ltt_event_time(ltt_event *e);
-
-ltt_cycle_count ltt_event_cycle_count(ltt_event *e);
-
-
-/* CPU id and system name of the event */
-
-unsigned ltt_event_cpu_id(ltt_event *e);
-
-char *ltt_event_system_name(ltt_event *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(ltt_event *e);
-
-
-/* The number of elements in a sequence field is specific to each event.
- This function returns the number of elements for an array or sequence
- field in an event. */
-
-unsigned ltt_event_field_element_number(ltt_event *e, ltt_field *f);
-
-
-/* Set the currently selected element for a sequence or array field. */
-
-int ltt_event_field_element_select(ltt_event *e, ltt_field *f, unsigned i);
-
+#ifndef _LTT_EVENT_H
+#define _LTT_EVENT_H
+
+#include <ltt/time.h>
+#include <glib.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <ltt/ltt.h>
+#include <endian.h>
+#include <ltt/markers.h>
+
+/*
+ * 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
+ position, computed relative to this position. The event position
+ structure is opaque and contains several fields, only two
+ of which are user accessible: block number and event index
+ within the block. */
+
+void ltt_event_position(LttEvent *e, LttEventPosition *ep);
+
+LttEventPosition * ltt_event_position_new();
+
+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);
+
+gint ltt_event_position_compare(const LttEventPosition *ep1,
+ const LttEventPosition *ep2);
+
+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(ltt_event *e, ltt_field *f);
+guint32 ltt_event_get_unsigned(LttEvent *e, struct marker_field *f);
-int ltt_event_get_int(ltt_event *e, ltt_field *f);
+gint32 ltt_event_get_int(LttEvent *e, struct marker_field *f);
-unsigned long ltt_event_get_long_unsigned(ltt_event *e, ltt_field *f);
+guint64 ltt_event_get_long_unsigned(LttEvent *e, struct marker_field *f);
-long int ltt_event_get_long_int(ltt_event *e, ltt_field *f);
+gint64 ltt_event_get_long_int(LttEvent *e, struct marker_field *f);
-float ltt_event_get_float(ltt_event *e, ltt_field *f);
+float ltt_event_get_float(LttEvent *e, struct marker_field *f);
-double ltt_event_get_double(ltt_event *e, ltt_field *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(ltt_event *e, ltt_field *f);
+#endif //_LTT_EVENT_H