1*9663SMark.Logan@Sun.COM /* 2*9663SMark.Logan@Sun.COM libparted - a library for manipulating disk partitions 3*9663SMark.Logan@Sun.COM Copyright (C) 2000, 2007 Free Software Foundation, Inc. 4*9663SMark.Logan@Sun.COM 5*9663SMark.Logan@Sun.COM This program is free software; you can redistribute it and/or modify 6*9663SMark.Logan@Sun.COM it under the terms of the GNU General Public License as published by 7*9663SMark.Logan@Sun.COM the Free Software Foundation; either version 3 of the License, or 8*9663SMark.Logan@Sun.COM (at your option) any later version. 9*9663SMark.Logan@Sun.COM 10*9663SMark.Logan@Sun.COM This program is distributed in the hope that it will be useful, 11*9663SMark.Logan@Sun.COM but WITHOUT ANY WARRANTY; without even the implied warranty of 12*9663SMark.Logan@Sun.COM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*9663SMark.Logan@Sun.COM GNU General Public License for more details. 14*9663SMark.Logan@Sun.COM 15*9663SMark.Logan@Sun.COM You should have received a copy of the GNU General Public License 16*9663SMark.Logan@Sun.COM along with this program. If not, see <http://www.gnu.org/licenses/>. 17*9663SMark.Logan@Sun.COM */ 18*9663SMark.Logan@Sun.COM 19*9663SMark.Logan@Sun.COM /** 20*9663SMark.Logan@Sun.COM * \addtogroup PedAlignment 21*9663SMark.Logan@Sun.COM * @{ 22*9663SMark.Logan@Sun.COM */ 23*9663SMark.Logan@Sun.COM 24*9663SMark.Logan@Sun.COM /** \file natmath.h */ 25*9663SMark.Logan@Sun.COM 26*9663SMark.Logan@Sun.COM #ifndef PED_NATMATH_H_INCLUDED 27*9663SMark.Logan@Sun.COM #define PED_NATMATH_H_INCLUDED 28*9663SMark.Logan@Sun.COM 29*9663SMark.Logan@Sun.COM 30*9663SMark.Logan@Sun.COM typedef struct _PedAlignment PedAlignment; 31*9663SMark.Logan@Sun.COM 32*9663SMark.Logan@Sun.COM #include <parted/disk.h> 33*9663SMark.Logan@Sun.COM 34*9663SMark.Logan@Sun.COM #define PED_MIN(a, b) ( ((a)<(b)) ? (a) : (b) ) 35*9663SMark.Logan@Sun.COM #define PED_MAX(a, b) ( ((a)>(b)) ? (a) : (b) ) 36*9663SMark.Logan@Sun.COM 37*9663SMark.Logan@Sun.COM /* this is weird (I'm still not sure I should be doing this!) 38*9663SMark.Logan@Sun.COM * 39*9663SMark.Logan@Sun.COM * For the functions: new, destroy, duplicate and merge: the following values 40*9663SMark.Logan@Sun.COM * for align are valid: 41*9663SMark.Logan@Sun.COM * * align == NULL (!) represents no solution 42*9663SMark.Logan@Sun.COM * * align->grain_size == 0 represents a single solution 43*9663SMark.Logan@Sun.COM * (align->offset) 44*9663SMark.Logan@Sun.COM * * align->grain_size > 0 represents a set of solutions 45*9663SMark.Logan@Sun.COM * 46*9663SMark.Logan@Sun.COM * These are invalid: 47*9663SMark.Logan@Sun.COM * * align->offset < 0 Note: this gets "normalized" 48*9663SMark.Logan@Sun.COM * * align->grain_size < 0 49*9663SMark.Logan@Sun.COM * 50*9663SMark.Logan@Sun.COM * For the align_* operations, there must be a solution. i.e. align != NULL 51*9663SMark.Logan@Sun.COM * All solutions must be greater than zero. 52*9663SMark.Logan@Sun.COM */ 53*9663SMark.Logan@Sun.COM 54*9663SMark.Logan@Sun.COM struct _PedAlignment { 55*9663SMark.Logan@Sun.COM PedSector offset; 56*9663SMark.Logan@Sun.COM PedSector grain_size; 57*9663SMark.Logan@Sun.COM }; 58*9663SMark.Logan@Sun.COM 59*9663SMark.Logan@Sun.COM extern PedSector ped_round_up_to (PedSector sector, PedSector grain_size); 60*9663SMark.Logan@Sun.COM extern PedSector ped_round_down_to (PedSector sector, PedSector grain_size); 61*9663SMark.Logan@Sun.COM extern PedSector ped_round_to_nearest (PedSector sector, PedSector grain_size); 62*9663SMark.Logan@Sun.COM extern PedSector ped_greatest_common_divisor (PedSector a, PedSector b); 63*9663SMark.Logan@Sun.COM 64*9663SMark.Logan@Sun.COM extern int ped_alignment_init (PedAlignment* align, PedSector offset, 65*9663SMark.Logan@Sun.COM PedSector grain_size); 66*9663SMark.Logan@Sun.COM extern PedAlignment* ped_alignment_new (PedSector offset, PedSector grain_size); 67*9663SMark.Logan@Sun.COM extern void ped_alignment_destroy (PedAlignment* align); 68*9663SMark.Logan@Sun.COM extern PedAlignment* ped_alignment_duplicate (const PedAlignment* align); 69*9663SMark.Logan@Sun.COM extern PedAlignment* ped_alignment_intersect (const PedAlignment* a, 70*9663SMark.Logan@Sun.COM const PedAlignment* b); 71*9663SMark.Logan@Sun.COM 72*9663SMark.Logan@Sun.COM extern PedSector 73*9663SMark.Logan@Sun.COM ped_alignment_align_up (const PedAlignment* align, const PedGeometry* geom, 74*9663SMark.Logan@Sun.COM PedSector sector); 75*9663SMark.Logan@Sun.COM extern PedSector 76*9663SMark.Logan@Sun.COM ped_alignment_align_down (const PedAlignment* align, const PedGeometry* geom, 77*9663SMark.Logan@Sun.COM PedSector sector); 78*9663SMark.Logan@Sun.COM extern PedSector 79*9663SMark.Logan@Sun.COM ped_alignment_align_nearest (const PedAlignment* align, const PedGeometry* geom, 80*9663SMark.Logan@Sun.COM PedSector sector); 81*9663SMark.Logan@Sun.COM 82*9663SMark.Logan@Sun.COM extern int 83*9663SMark.Logan@Sun.COM ped_alignment_is_aligned (const PedAlignment* align, const PedGeometry* geom, 84*9663SMark.Logan@Sun.COM PedSector sector); 85*9663SMark.Logan@Sun.COM 86*9663SMark.Logan@Sun.COM extern const PedAlignment* ped_alignment_any; 87*9663SMark.Logan@Sun.COM extern const PedAlignment* ped_alignment_none; 88*9663SMark.Logan@Sun.COM 89*9663SMark.Logan@Sun.COM #ifdef __sun 90*9663SMark.Logan@Sun.COM extern PedSector 91*9663SMark.Logan@Sun.COM #else 92*9663SMark.Logan@Sun.COM extern inline PedSector 93*9663SMark.Logan@Sun.COM #endif 94*9663SMark.Logan@Sun.COM ped_div_round_up (PedSector numerator, PedSector divisor); 95*9663SMark.Logan@Sun.COM 96*9663SMark.Logan@Sun.COM #ifdef __sun 97*9663SMark.Logan@Sun.COM extern PedSector 98*9663SMark.Logan@Sun.COM #else 99*9663SMark.Logan@Sun.COM extern inline PedSector 100*9663SMark.Logan@Sun.COM #endif 101*9663SMark.Logan@Sun.COM ped_div_round_to_nearest (PedSector numerator, PedSector divisor); 102*9663SMark.Logan@Sun.COM 103*9663SMark.Logan@Sun.COM #endif /* PED_NATMATH_H_INCLUDED */ 104*9663SMark.Logan@Sun.COM 105*9663SMark.Logan@Sun.COM /** 106*9663SMark.Logan@Sun.COM * @} 107*9663SMark.Logan@Sun.COM */ 108*9663SMark.Logan@Sun.COM 109