xref: /netbsd-src/external/bsd/openldap/dist/include/lutil_meter.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1*549b59edSchristos /*	$NetBSD: lutil_meter.h,v 1.2 2021/08/14 16:14:55 christos Exp $	*/
24e6df137Slukem 
34e6df137Slukem /* lutil_meter.h - progress meters */
4d11b170bStron /* $OpenLDAP$ */
54e6df137Slukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
64e6df137Slukem  *
7d11b170bStron  * Copyright (c) 2009 by Emily Backes, Symas Corp.
84e6df137Slukem  * All rights reserved.
94e6df137Slukem  *
104e6df137Slukem  * Redistribution and use in source and binary forms, with or without
114e6df137Slukem  * modification, are permitted only as authorized by the OpenLDAP
124e6df137Slukem  * Public License.
134e6df137Slukem  *
144e6df137Slukem  * A copy of this license is available in the file LICENSE in the
154e6df137Slukem  * top-level directory of the distribution or, alternatively, at
164e6df137Slukem  * <http://www.OpenLDAP.org/license.html>.
174e6df137Slukem  */
184e6df137Slukem /* ACKNOWLEDGEMENTS:
19d11b170bStron  * This work was initially developed by Emily Backes for inclusion
204e6df137Slukem  * in OpenLDAP software.
214e6df137Slukem  */
224e6df137Slukem 
234e6df137Slukem #ifndef _LUTIL_METER_H
244e6df137Slukem #define _LUTIL_METER_H
254e6df137Slukem 
26376af7d7Schristos #include <sys/cdefs.h>
27*549b59edSchristos __RCSID("$NetBSD: lutil_meter.h,v 1.2 2021/08/14 16:14:55 christos Exp $");
28376af7d7Schristos 
294e6df137Slukem #include "portable.h"
304e6df137Slukem 
314e6df137Slukem #include <limits.h>
324e6df137Slukem #include <stdio.h>
334e6df137Slukem #include <sys/types.h>
344e6df137Slukem 
354e6df137Slukem #include <ac/stdlib.h>
364e6df137Slukem #include <ac/time.h>
374e6df137Slukem 
384e6df137Slukem typedef struct {
394e6df137Slukem 	int (*display_open) (void **datap);
404e6df137Slukem 	int (*display_update) (void **datap, double frac, time_t remaining_time, time_t elapsed, double byte_rate);
414e6df137Slukem 	int (*display_close) (void **datap);
424e6df137Slukem } lutil_meter_display_t;
434e6df137Slukem 
444e6df137Slukem typedef struct {
454e6df137Slukem 	int (*estimator_open) (void **datap);
464e6df137Slukem 	int (*estimator_update) (void **datap, double start, double frac, time_t *remaining_time);
474e6df137Slukem 	int (*estimator_close) (void **datap);
484e6df137Slukem } lutil_meter_estimator_t;
494e6df137Slukem 
504e6df137Slukem typedef struct {
514e6df137Slukem 	const lutil_meter_display_t *display;
524e6df137Slukem 	void * display_data;
534e6df137Slukem 	const lutil_meter_estimator_t *estimator;
544e6df137Slukem 	void * estimator_data;
554e6df137Slukem 	double start_time;
564e6df137Slukem 	double last_update;
57376af7d7Schristos 	size_t goal_value;
58376af7d7Schristos 	size_t last_position;
594e6df137Slukem } lutil_meter_t;
604e6df137Slukem 
614e6df137Slukem extern const lutil_meter_display_t lutil_meter_text_display;
624e6df137Slukem extern const lutil_meter_estimator_t lutil_meter_linear_estimator;
634e6df137Slukem 
644e6df137Slukem extern int lutil_meter_open (
654e6df137Slukem 	lutil_meter_t *lutil_meter,
664e6df137Slukem 	const lutil_meter_display_t *display,
674e6df137Slukem 	const lutil_meter_estimator_t *estimator,
68376af7d7Schristos 	size_t goal_value);
694e6df137Slukem extern int lutil_meter_update (
704e6df137Slukem 	lutil_meter_t *lutil_meter,
71376af7d7Schristos 	size_t position,
724e6df137Slukem 	int force);
734e6df137Slukem extern int lutil_meter_close (lutil_meter_t *lutil_meter);
744e6df137Slukem 
754e6df137Slukem #endif /* _LUTIL_METER_H */
76