Add iterator and source implementations
[babeltrace.git] / include / babeltrace / plugin / notification / iterator.h
index baf62f0475ccf54a2954fa4a5ef0adc41d6553a1..22807e41ab6f509c0660f7f2e7aea0603f5f98e6 100644 (file)
@@ -36,16 +36,113 @@ extern "C" {
 struct bt_notification;
 struct bt_notification_iterator;
 
-int bt_notification_iterator_next(struct bt_notification_iterator *iterator);
+/**
+ * Status code. Errors are always negative.
+ */
+enum bt_notification_iterator_status {
+       /** Invalid arguments. */
+       /* -22 for compatibility with -EINVAL */
+       BT_NOTIFICATION_ITERATOR_STATUS_INVAL = -22,
+
+       /** End of trace. */
+       BT_NOTIFICATION_ITERATOR_STATUS_EOT = -3,
+
+       /** General error. */
+       BT_NOTIFICATION_ITERATOR_STATUS_ERROR = -2,
+
+       /** Unsupported iterator feature. */
+       BT_NOTIFICATION_ITERATOR_STATUS_UNSUPPORTED = -1,
+
+       /** No error, okay. */
+       BT_NOTIFICATION_ITERATOR_STATUS_OK = 0,
+};
+
+/**
+ * Notification iterator seek reference.
+ */
+enum bt_notification_iterator_seek_type {
+       /** Seek at a time relative to the beginning of the trace. */
+       BT_NOTIFICATION_ITERATOR_SEEK_TYPE_BEGIN = 0,
+
+       /** Seek at a time relative to the current position. */
+       BT_NOTIFICATION_ITERATOR_SEEK_TYPE_CURRENT = 1,
+
+       /** Seek at a time relative to the end of the trace. */
+       BT_NOTIFICATION_ITERATOR_SEEK_TYPE_END = 1,
+};
+
+/**
+ * Get current notification at iterator's position.
+ *
+ * This functions will <b>not</b> advance the cursor's position.
+ * The returned notification's reference count is already incremented.
+ *
+ * @param iterator     Iterator instance
+ * @returns            Returns a bt_notification instance
+ *
+ * @see bt_notification_put()
+ */
+extern struct bt_notification *bt_notification_iterator_get_notification(
+               struct bt_notification_iterator *iterator);
+
+/**
+ * Advance the iterator's position forward.
+ *
+ * This function can be called repeatedly to iterate through the iterator's
+ * associated trace.
+ *
+ * @param iterator     Iterator instance
+ * @returns            Returns a bt_notification instance
+ *
+ * @see bt_notification_iterator_get_notification()
+ */
+extern enum bt_notification_iterator_status
+bt_notification_iterator_next(struct bt_notification_iterator *iterator);
+
+/**
+ * Seek iterator to position.
+ *
+ * Sets the iterator's position for the trace associated with the iterator.
+ * The new position is computed by adding \p time to the position specified
+ * by \p whence.
+ *
+ * @param iterator     Iterator instance
+ * @param whence       One of #bt_notification_iterator_seek_type values.
+ * @returns            One of #bt_notification_iterator_status values;
+ *                     if \iterator does not support seeking,
+ *                     #BT_NOTIFICATION_ITERATOR_STATUS_UNSUPPORTED is
+ *                     returned.
+ *
+ * @see bt_notification_iterator_get_notification()
+ */
+extern enum bt_notification_iterator_status *bt_notification_iterator_seek(
+               struct bt_notification_iterator *iterator,
+               int whence,
+               int64_t time);
 
-struct bt_notification *bt_notification_iterator_get_notification(
+/**
+ * Increments the reference count of \p iterator.
+ *
+ * @param iterator     Iterator of which to increment the reference count
+ *
+ * @see bt_notification_iterator_put()
+ */
+extern void bt_notification_iterator_get(
                struct bt_notification_iterator *iterator);
 
-void bt_notification_iterator_get(struct bt_notification_iterator *iterator);
-void bt_notification_iterator_put(struct bt_notification_iterator *iterator);
+/**
+ * Decrements the reference count of \p iterator, destroying it when this
+ * count reaches 0.
+ *
+ * @param iterator     Iterator of which to decrement the reference count
+ *
+ * @see bt_notification_iterator_get()
+ */
+extern void bt_notification_iterator_put(
+               struct bt_notification_iterator *iterator);
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* BABELTRACE_PLUGIN_NOTIFICATION_H */
+#endif /* BABELTRACE_PLUGIN_NOTIFICATION_ITERATOR_H */
This page took 0.032899 seconds and 4 git commands to generate.