libtraceevent(3)
================

NAME
----
tep_get_event, tep_get_first_event, tep_get_events_count - Access events.

SYNOPSIS
--------
[verse]
--
*#include <event-parse.h>*

struct tep_event pass:[*]*tep_get_event*(struct tep_handle pass:[*]_tep_, int _index_);
struct tep_event pass:[*]*tep_get_first_event*(struct tep_handle pass:[*]_tep_);
int *tep_get_events_count*(struct tep_handle pass:[*]_tep_);
--

DESCRIPTION
-----------
The _tep_get_event()_ function returns a pointer to event at the given _index_.
The _tep_ argument is trace event parser context, the _index_ is the index of
the requested event.

The _tep_get_first_event()_ function returns a pointer to the first event.
As events are stored in an array, this function returns the pointer to the
beginning of the array. The _tep_ argument is trace event parser context.

The _tep_get_events_count()_ function returns the number of the events
in the array. The _tep_ argument is trace event parser context.

RETURN VALUE
------------
The _tep_get_event()_ returns a pointer to the event located at _index_.
NULL is returned in case of error, in case there are no events or _index_ is
out of range.

The _tep_get_first_event()_ returns a pointer to the first event. NULL is
returned in case of error, or in case there are no events.

The _tep_get_events_count()_ returns the number of the events. 0 is
returned in case of error, or in case there are no events.

EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
...
struct tep_handle *tep = tep_alloc();
...
int i,count = tep_get_events_count(tep);
struct tep_event *event, *events = tep_get_first_event(tep);

if (events == NULL) {
	/* There are no events */
} else {
	for (i = 0; i < count; i++) {
		event = (events+i);
		/* process events[i] */
	}

	/* Get the last event */
	event = tep_get_event(tep, count-1);
}
--

FILES
-----
[verse]
--
*event-parse.h*
	Header file to include in order to have access to the library APIs.
*-ltraceevent*
	Linker switch to add when building a program that uses the library.
--

SEE ALSO
--------
_libtraceevent(3)_, _trace-cmd(1)_

AUTHOR
------
[verse]
--
*Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*.
*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, author of this man page.
--
REPORTING BUGS
--------------
Report bugs to  <linux-trace-devel@vger.kernel.org>

LICENSE
-------
libtraceevent is Free Software licensed under the GNU LGPL 2.1

RESOURCES
---------
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
