2010-11-30 14:53:31 +03:00
/*
* Copyright ( C ) 2010 Red Hat , Inc . All rights reserved .
*
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License v .2 .1 .
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
# ifndef _LVM_PERCENT_H
# define _LVM_PERCENT_H
# include <stdint.h>
/*
* A fixed - point representation of percent values . One percent equals to
* PERCENT_1 as defined below . Values that are not multiples of PERCENT_1
* represent fractions , with precision of 1 / 1000000 of a percent . See
* percent_to_float for a conversion to a floating - point representation .
*
* You should always use make_percent when building percent_t values . The
* implementation of make_percent is biased towards the middle : it ensures that
* the result is PERCENT_0 or PERCENT_100 if and only if this is the actual
* value - - it never rounds any intermediate value ( > 0 or < 100 ) to either 0
* or 100.
*/
typedef int32_t percent_t ;
2013-01-09 00:29:56 +04:00
typedef enum {
SIGN_NONE = 0 ,
SIGN_PLUS = 1 ,
SIGN_MINUS = 2
} sign_t ;
typedef enum {
PERCENT_NONE = 0 ,
PERCENT_VG ,
PERCENT_FREE ,
PERCENT_LV ,
PERCENT_PVS ,
PERCENT_ORIGIN
} percent_type_t ;
2010-11-30 14:53:31 +03:00
typedef enum {
PERCENT_0 = 0 ,
PERCENT_1 = 1000000 ,
PERCENT_100 = 100 * PERCENT_1 ,
2012-01-21 02:02:04 +04:00
PERCENT_INVALID = - 1 ,
PERCENT_MERGE_FAILED = - 2
2010-11-30 14:53:31 +03:00
} percent_range_t ;
float percent_to_float ( percent_t v ) ;
percent_t make_percent ( uint64_t numerator , uint64_t denominator ) ;
2013-01-09 00:29:56 +04:00
uint32_t percent_of_extents ( uint32_t percents , uint32_t count , int roundup ) ;
2010-11-30 14:53:31 +03:00
# endif