gboolean rg_table_iter_next (RgTableIter *iter) { RgTablePrivate *priv; RgTableIterImpl *impl = (RgTableIterImpl *)iter; g_return_val_if_fail (iter != NULL, FALSE); g_return_val_if_fail (impl != NULL, FALSE); g_return_val_if_fail (RG_IS_TABLE (impl->table), FALSE); priv = rg_table_get_instance_private (impl->table); if (impl->index == priv->last_index) { impl->table = NULL; impl->index = 0; impl->timestamp = 0; return FALSE; } do { impl->index = (impl->index + 1) % priv->max_samples; impl->timestamp = 0; _rg_column_get (priv->timestamps, impl->index, &impl->timestamp); if (impl->timestamp > 0) break; } while (impl->index < priv->last_index); return (impl->timestamp > 0); }
void rg_table_push (RgTable *self, RgTableIter *iter, gint64 timestamp) { RgTablePrivate *priv = rg_table_get_instance_private (self); RgTableIterImpl *impl = (RgTableIterImpl *)iter; guint pos; gsize i; g_return_if_fail (RG_IS_TABLE (self)); g_return_if_fail (iter != NULL); g_return_if_fail (timestamp > 0); for (i = 0; i < priv->columns->len; i++) { RgColumn *column; column = g_ptr_array_index (priv->columns, i); _rg_column_push (column); } pos = _rg_column_push (priv->timestamps); _rg_column_set (priv->timestamps, pos, timestamp); impl->table = self; impl->timestamp = timestamp; impl->index = pos; priv->last_index = pos; g_signal_emit (self, gSignals [CHANGED], 0); }
gboolean rg_table_get_iter_first (RgTable *self, RgTableIter *iter) { RgTablePrivate *priv = rg_table_get_instance_private (self); RgTableIterImpl *impl = (RgTableIterImpl *)iter; g_return_val_if_fail (RG_IS_TABLE (self), FALSE); g_return_val_if_fail (iter != NULL, FALSE); g_return_val_if_fail (impl != NULL, FALSE); impl->table = self; impl->index = (priv->last_index + 1) % priv->max_samples; impl->timestamp = 0; _rg_column_get (priv->timestamps, impl->index, &impl->timestamp); /* * Maybe this is our first time around the ring, and we can just * assume the 0 index is the real first entry. */ if (impl->timestamp == 0) { impl->index = 0; _rg_column_get (priv->timestamps, impl->index, &impl->timestamp); } return (impl->timestamp != 0); }
void rg_table_set_max_samples (RgTable *self, guint max_samples) { RgTablePrivate *priv = rg_table_get_instance_private (self); gsize i; g_return_if_fail (RG_IS_TABLE (self)); g_return_if_fail (max_samples > 0); if (max_samples == priv->max_samples) return; for (i = 0; i < priv->columns->len; i++) { RgColumn *column; column = g_ptr_array_index (priv->columns, i); _rg_column_set_n_rows (column, max_samples); } _rg_column_set_n_rows (priv->timestamps, max_samples); priv->max_samples = max_samples; g_object_notify_by_pspec (G_OBJECT (self), gParamSpecs [PROP_MAX_SAMPLES]); }
static void rg_graph__table_changed (RgGraph *self, RgTable *table) { g_assert (RG_IS_GRAPH (self)); g_assert (RG_IS_TABLE (table)); rg_graph_clear_surface (self); }
gint64 rg_table_get_timespan (RgTable *self) { RgTablePrivate *priv = rg_table_get_instance_private (self); g_return_val_if_fail (RG_IS_TABLE (self), 0); return priv->timespan; }
guint rg_table_get_max_samples (RgTable *self) { RgTablePrivate *priv = rg_table_get_instance_private (self); g_return_val_if_fail (RG_IS_TABLE (self), 0); return priv->max_samples; }
gint64 rg_table_get_end_time (RgTable *self) { RgTableIter iter; g_return_val_if_fail (RG_IS_TABLE (self), 0); if (rg_table_get_iter_last (self, &iter)) return rg_table_iter_get_timestamp (&iter); return g_get_monotonic_time (); }
static void rg_table_set_value_max (RgTable *self, gdouble value_max) { RgTablePrivate *priv = rg_table_get_instance_private (self); g_return_if_fail (RG_IS_TABLE (self)); if (priv->value_max != value_max) { priv->value_max = value_max; g_object_notify_by_pspec (G_OBJECT (self), gParamSpecs [PROP_VALUE_MAX]); } }
void rg_table_set_timespan (RgTable *self, GTimeSpan timespan) { RgTablePrivate *priv = rg_table_get_instance_private (self); g_return_if_fail (RG_IS_TABLE (self)); if (timespan != priv->timespan) { priv->timespan = timespan; g_object_notify_by_pspec (G_OBJECT (self), gParamSpecs [PROP_TIMESPAN]); } }
guint rg_table_add_column (RgTable *self, RgColumn *column) { RgTablePrivate *priv = rg_table_get_instance_private (self); g_return_val_if_fail (RG_IS_TABLE (self), 0); g_return_val_if_fail (RG_IS_COLUMN (column), 0); _rg_column_set_n_rows (column, priv->max_samples); g_ptr_array_add (priv->columns, g_object_ref (column)); return priv->columns->len - 1; }
void rg_graph_set_table (RgGraph *self, RgTable *table) { RgGraphPrivate *priv = rg_graph_get_instance_private (self); g_return_if_fail (RG_IS_GRAPH (self)); g_return_if_fail (!table || RG_IS_TABLE (table)); if (g_set_object (&priv->table, table)) { egg_signal_group_set_target (priv->table_signals, table); gtk_widget_queue_resize (GTK_WIDGET (self)); g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_TABLE]); } }
void rg_table_iter_get_value (RgTableIter *iter, guint column, GValue *value) { RgTableIterImpl *impl = (RgTableIterImpl *)iter; RgTablePrivate *priv; RgColumn *col; g_return_if_fail (iter != NULL); g_return_if_fail (impl != NULL); g_return_if_fail (RG_IS_TABLE (impl->table)); priv = rg_table_get_instance_private (impl->table); g_return_if_fail (column < priv->columns->len); col = g_ptr_array_index (priv->columns, column); _rg_column_get_value (col, impl->index, value); }
gboolean rg_table_get_iter_last (RgTable *self, RgTableIter *iter) { RgTablePrivate *priv = rg_table_get_instance_private (self); RgTableIterImpl *impl = (RgTableIterImpl *)iter; g_return_val_if_fail (RG_IS_TABLE (self), FALSE); g_return_val_if_fail (iter != NULL, FALSE); g_return_val_if_fail (impl != NULL, FALSE); impl->table = self; impl->index = priv->last_index; impl->timestamp = 0; _rg_column_get (priv->timestamps, impl->index, &impl->timestamp); return (impl->timestamp != 0); }
void rg_table_iter_get (RgTableIter *iter, gint first_column, ...) { RgTableIterImpl *impl = (RgTableIterImpl *)iter; RgTablePrivate *priv; gint column_id = first_column; va_list args; g_return_if_fail (iter != NULL); g_return_if_fail (impl != NULL); g_return_if_fail (RG_IS_TABLE (impl->table)); priv = rg_table_get_instance_private (impl->table); va_start (args, first_column); while (column_id >= 0) { RgColumn *column; if (column_id >= priv->columns->len) { g_critical ("No such column %d", column_id); return; } column = g_ptr_array_index (priv->columns, column_id); _rg_column_lcopy (column, impl->index, args); column_id = va_arg (args, gint); } if (column_id != -1) g_critical ("Invalid column sentinal: %d", column_id); va_end (args); }