+ if (stat_segment_access_end (&sa))
+ return res;
+
+ fprintf (stderr, "Epoch changed while reading, invalid results\n");
+ // TODO increase counter
+ return 0;
+}
+
+/* Wrapper for accessing vectors from other languages */
+int
+stat_segment_vec_len (void *vec)
+{
+ return vec_len (vec);
+}
+
+/* Create a vector from a string (or add to existing) */
+u8 **
+stat_segment_string_vector (u8 ** string_vector, char *string)
+{
+ u8 *name = 0;
+ name = vec_dup ((u8 *) string);
+ vec_add1 (string_vector, (u8 *) name);
+ return string_vector;
+}
+
+stat_segment_data_t *
+stat_segment_dump_entry (uint32_t index)
+{
+ stat_client_main_t *sm = &stat_client_main;
+ stat_segment_directory_entry_t *ep;
+ stat_segment_data_t *res = 0;
+ stat_segment_access_t sa;
+
+ stat_segment_access_start (&sa);
+
+ /* Collect counter */
+ ep = vec_elt_at_index (sm->directory_vector, index);
+ vec_add1 (res, copy_data (ep));
+
+ if (stat_segment_access_end (&sa))
+ return res;
+ return 0;
+}
+
+char *
+stat_segment_index_to_name (uint32_t index)
+{
+ char *name;
+ stat_segment_directory_entry_t *counter_vec = get_stat_vector ();
+ stat_segment_directory_entry_t *ep;
+ ep = vec_elt_at_index (counter_vec, index);
+ name = strdup (ep->name);
+ return name;