Imported Upstream version 2.02.79
[platform/upstream/device-mapper.git] / lib / misc / lvm-percent.h
1 /*
2  * Copyright (C) 2010 Red Hat, Inc. All rights reserved.
3  *
4  * This file is part of LVM2.
5  *
6  * This copyrighted material is made available to anyone wishing to use,
7  * modify, copy, or redistribute it subject to the terms and conditions
8  * of the GNU Lesser General Public License v.2.1.
9  *
10  * You should have received a copy of the GNU Lesser General Public License
11  * along with this program; if not, write to the Free Software Foundation,
12  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
13  */
14
15 #ifndef _LVM_PERCENT_H
16 #define _LVM_PERCENT_H
17 #include <stdint.h>
18
19 /*
20  * A fixed-point representation of percent values. One percent equals to
21  * PERCENT_1 as defined below. Values that are not multiples of PERCENT_1
22  * represent fractions, with precision of 1/1000000 of a percent. See
23  * percent_to_float for a conversion to a floating-point representation.
24  *
25  * You should always use make_percent when building percent_t values. The
26  * implementation of make_percent is biased towards the middle: it ensures that
27  * the result is PERCENT_0 or PERCENT_100 if and only if this is the actual
28  * value -- it never rounds any intermediate value (> 0 or < 100) to either 0
29  * or 100.
30  */
31 typedef int32_t percent_t;
32
33 typedef enum {
34         PERCENT_0 = 0,
35         PERCENT_1 = 1000000,
36         PERCENT_100 = 100 * PERCENT_1,
37         PERCENT_INVALID = -1
38 } percent_range_t;
39
40 float percent_to_float(percent_t v);
41 percent_t make_percent(uint64_t numerator, uint64_t denominator);
42
43 #endif