1 /* dvdisaster: Additional error correction for optical media. 2 * Copyright (C) 2004-2015 Carsten Gnoerlich. 3 * 4 * Email: carsten@dvdisaster.org -or- cgnoerlich@fsfe.org 5 * Project homepage: http://www.dvdisaster.org 6 * 7 * This file is part of dvdisaster. 8 * 9 * dvdisaster is free software: you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation, either version 3 of the License, or 12 * (at your option) any later version. 13 * 14 * dvdisaster is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with dvdisaster. If not, see <http://www.gnu.org/licenses/>. 21 */ 22 23 #include "dvdisaster.h" 24 25 /*** 26 *** A simple bitmap structure 27 ***/ 28 29 /* 30 * Allocate the bitmap 31 */ 32 CreateBitmap0(int size)33Bitmap* CreateBitmap0(int size) 34 { Bitmap *bm = g_malloc(sizeof(Bitmap)); 35 36 bm->size = size; 37 bm->words = (size>>5)+1; 38 bm->bitmap = g_malloc0(bm->words*sizeof(guint32)); 39 40 return bm; 41 } 42 43 /* 44 * Free it 45 */ 46 FreeBitmap(Bitmap * bm)47void FreeBitmap(Bitmap *bm) 48 { if(bm->bitmap) 49 g_free(bm->bitmap); 50 51 g_free(bm); 52 } 53 54 /* 55 * Count the '1' bits in the bitmap 56 */ 57 CountBits(Bitmap * bm)58int CountBits(Bitmap *bm) 59 { int i; 60 int sum = 0; 61 62 for(i=0; i<bm->size; i++) 63 if(GetBit(bm, i)) 64 sum++; 65 66 return sum; 67 } 68