+stat_segment_data_t *
+stat_segment_dump_entry_r (uint32_t index, stat_client_main_t * sm)
+{
+ stat_segment_directory_entry_t *ep;
+ stat_segment_data_t *res = 0;
+ stat_segment_access_t sa;
+
+ /* Has directory been update? */
+ if (sm->shared_header->epoch != sm->current_epoch)
+ return 0;
+
+ if (stat_segment_access_start (&sa, sm))
+ return 0;
+
+ /* Collect counter */
+ ep = vec_elt_at_index (sm->directory_vector, index);
+ vec_add1 (res, copy_data (ep, ~0, 0, sm));
+
+ if (stat_segment_access_end (&sa, sm))
+ return res;
+ return 0;
+}
+
+stat_segment_data_t *
+stat_segment_dump_entry (uint32_t index)
+{
+ stat_client_main_t *sm = &stat_client_main;
+ return stat_segment_dump_entry_r (index, sm);
+}
+
+char *
+stat_segment_index_to_name_r (uint32_t index, stat_client_main_t * sm)
+{
+ stat_segment_directory_entry_t *ep;
+ stat_segment_access_t sa;
+ stat_segment_directory_entry_t *vec;
+
+ /* Has directory been update? */
+ if (sm->shared_header->epoch != sm->current_epoch)
+ return 0;
+ if (stat_segment_access_start (&sa, sm))
+ return 0;
+ vec = get_stat_vector_r (sm);
+ ep = vec_elt_at_index (vec, index);
+ if (!stat_segment_access_end (&sa, sm))
+ return 0;
+ return strdup (ep->name);
+}
+
+char *
+stat_segment_index_to_name (uint32_t index)
+{
+ stat_client_main_t *sm = &stat_client_main;
+ return stat_segment_index_to_name_r (index, sm);
+}
+
+uint64_t
+stat_segment_version_r (stat_client_main_t * sm)
+{
+ ASSERT (sm->shared_header);
+ return sm->shared_header->version;
+}
+
+uint64_t
+stat_segment_version (void)
+{
+ stat_client_main_t *sm = &stat_client_main;
+ return stat_segment_version_r (sm);
+}
+