1/* lutil_meter.h - progress meters */
2/* $OpenLDAP$ */
3/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 *
5 * Copyright (c) 2009 by Matthew Backes, Symas Corp.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted only as authorized by the OpenLDAP
10 * Public License.
11 *
12 * A copy of this license is available in the file LICENSE in the
13 * top-level directory of the distribution or, alternatively, at
14 * <http://www.OpenLDAP.org/license.html>.
15 */
16/* ACKNOWLEDGEMENTS:
17 * This work was initially developed by Matthew Backes for inclusion
18 * in OpenLDAP software.
19 */
20
21#ifndef _LUTIL_METER_H
22#define _LUTIL_METER_H
23
24#include "portable.h"
25
26#include <limits.h>
27#include <stdio.h>
28#include <sys/types.h>
29
30#include <ac/stdlib.h>
31#include <ac/time.h>
32
33typedef struct {
34	int (*display_open) (void **datap);
35	int (*display_update) (void **datap, double frac, time_t remaining_time, time_t elapsed, double byte_rate);
36	int (*display_close) (void **datap);
37} lutil_meter_display_t;
38
39typedef struct {
40	int (*estimator_open) (void **datap);
41	int (*estimator_update) (void **datap, double start, double frac, time_t *remaining_time);
42	int (*estimator_close) (void **datap);
43} lutil_meter_estimator_t;
44
45typedef struct {
46	const lutil_meter_display_t *display;
47	void * display_data;
48	const lutil_meter_estimator_t *estimator;
49	void * estimator_data;
50	double start_time;
51	double last_update;
52	unsigned long goal_value;
53	unsigned long last_position;
54} lutil_meter_t;
55
56extern const lutil_meter_display_t lutil_meter_text_display;
57extern const lutil_meter_estimator_t lutil_meter_linear_estimator;
58
59extern int lutil_meter_open (
60	lutil_meter_t *lutil_meter,
61	const lutil_meter_display_t *display,
62	const lutil_meter_estimator_t *estimator,
63	unsigned long goal_value);
64extern int lutil_meter_update (
65	lutil_meter_t *lutil_meter,
66	unsigned long position,
67	int force);
68extern int lutil_meter_close (lutil_meter_t *lutil_meter);
69
70#endif /* _LUTIL_METER_H */
71