+ * Iterator interface
+ */
+uc_iter_t *uc_get_iterator(void) {
+ uc_iter_t *iter;
+
+ iter = (uc_iter_t *)calloc(1, sizeof(*iter));
+ if (iter == NULL)
+ return (NULL);
+
+ pthread_mutex_lock(&cache_lock);
+
+ iter->iter = c_avl_get_iterator(cache_tree);
+ if (iter->iter == NULL) {
+ free(iter);
+ return (NULL);
+ }
+
+ return (iter);
+} /* uc_iter_t *uc_get_iterator */
+
+int uc_iterator_next(uc_iter_t *iter, char **ret_name) {
+ int status;
+
+ if (iter == NULL)
+ return (-1);
+
+ while ((status = c_avl_iterator_next(iter->iter, (void *)&iter->name,
+ (void *)&iter->entry)) == 0) {
+ if (iter->entry->state == STATE_MISSING)
+ continue;
+
+ break;
+ }
+ if (status != 0) {
+ iter->name = NULL;
+ iter->entry = NULL;
+ return (-1);
+ }
+
+ if (ret_name != NULL)
+ *ret_name = iter->name;
+
+ return (0);
+} /* int uc_iterator_next */
+
+void uc_iterator_destroy(uc_iter_t *iter) {
+ if (iter == NULL)
+ return;
+
+ c_avl_iterator_destroy(iter->iter);
+ pthread_mutex_unlock(&cache_lock);
+
+ free(iter);
+} /* void uc_iterator_destroy */
+
+int uc_iterator_get_time(uc_iter_t *iter, cdtime_t *ret_time) {
+ if ((iter == NULL) || (iter->entry == NULL) || (ret_time == NULL))
+ return (-1);
+
+ *ret_time = iter->entry->last_time;
+ return (0);
+} /* int uc_iterator_get_name */
+
+int uc_iterator_get_values(uc_iter_t *iter, value_t **ret_values,
+ size_t *ret_num) {
+ if ((iter == NULL) || (iter->entry == NULL) || (ret_values == NULL) ||
+ (ret_num == NULL))
+ return (-1);
+
+ *ret_values =
+ calloc(iter->entry->values_num, sizeof(*iter->entry->values_raw));
+ if (*ret_values == NULL)
+ return (-1);
+ for (size_t i = 0; i < iter->entry->values_num; ++i)
+ *ret_values[i] = iter->entry->values_raw[i];
+
+ *ret_num = iter->entry->values_num;
+
+ return (0);
+} /* int uc_iterator_get_values */
+
+int uc_iterator_get_interval(uc_iter_t *iter, cdtime_t *ret_interval) {
+ if ((iter == NULL) || (iter->entry == NULL) || (ret_interval == NULL))
+ return (-1);
+
+ *ret_interval = iter->entry->interval;
+ return (0);
+} /* int uc_iterator_get_name */
+
+/*