1 /* 2 * virbitmap.h: Simple bitmap operations 3 * 4 * Copyright (C) 2012-2013 Red Hat, Inc. 5 * Copyright (C) 2010 Novell, Inc. 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library. If not, see 19 * <http://www.gnu.org/licenses/>. 20 */ 21 22 #pragma once 23 24 #include "internal.h" 25 26 #include <sys/types.h> 27 28 29 typedef struct _virBitmap virBitmap; 30 31 /* 32 * Allocate a bitmap capable of containing @size bits. 33 */ 34 virBitmap *virBitmapNew(size_t size); 35 36 /* 37 * Free previously allocated bitmap 38 */ 39 void virBitmapFree(virBitmap *bitmap); 40 41 /* 42 * Set bit position @b in @bitmap 43 */ 44 int virBitmapSetBit(virBitmap *bitmap, size_t b) 45 ATTRIBUTE_NONNULL(1) G_GNUC_WARN_UNUSED_RESULT; 46 47 int virBitmapSetBitExpand(virBitmap *bitmap, size_t b) 48 ATTRIBUTE_NONNULL(1) G_GNUC_WARN_UNUSED_RESULT; 49 50 51 /* 52 * Clear bit position @b in @bitmap 53 */ 54 int virBitmapClearBit(virBitmap *bitmap, size_t b) 55 ATTRIBUTE_NONNULL(1) G_GNUC_WARN_UNUSED_RESULT; 56 57 int virBitmapClearBitExpand(virBitmap *bitmap, size_t b) 58 ATTRIBUTE_NONNULL(1) G_GNUC_WARN_UNUSED_RESULT; 59 60 /* 61 * Get bit @b in @bitmap. Returns false if b is out of range. 62 */ 63 bool virBitmapIsBitSet(virBitmap *bitmap, size_t b) 64 ATTRIBUTE_NONNULL(1) G_GNUC_WARN_UNUSED_RESULT; 65 /* 66 * Get setting of bit position @b in @bitmap and store in @result 67 */ 68 int virBitmapGetBit(virBitmap *bitmap, size_t b, bool *result) 69 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) G_GNUC_WARN_UNUSED_RESULT; 70 71 virBitmap * 72 virBitmapNewString(const char *string) 73 ATTRIBUTE_NONNULL(1) G_GNUC_WARN_UNUSED_RESULT; 74 75 char *virBitmapToString(virBitmap *bitmap) 76 ATTRIBUTE_NONNULL(1) G_GNUC_WARN_UNUSED_RESULT; 77 78 char *virBitmapFormat(virBitmap *bitmap); 79 80 int virBitmapParse(const char *str, 81 virBitmap **bitmap, 82 size_t bitmapSize) 83 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); 84 int 85 virBitmapParseSeparator(const char *str, 86 char terminator, 87 virBitmap **bitmap, 88 size_t bitmapSize); 89 virBitmap * 90 virBitmapParseUnlimited(const char *str); 91 92 virBitmap *virBitmapNewCopy(virBitmap *src) ATTRIBUTE_NONNULL(1); 93 94 virBitmap *virBitmapNewData(const void *data, int len) ATTRIBUTE_NONNULL(1); 95 96 int virBitmapToData(virBitmap *bitmap, unsigned char **data, int *dataLen) 97 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); 98 99 void virBitmapToDataBuf(virBitmap *bitmap, unsigned char *data, size_t len) 100 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); 101 102 bool virBitmapEqual(virBitmap *b1, virBitmap *b2); 103 104 size_t virBitmapSize(virBitmap *bitmap) 105 ATTRIBUTE_NONNULL(1); 106 107 void virBitmapSetAll(virBitmap *bitmap) 108 ATTRIBUTE_NONNULL(1); 109 110 void virBitmapClearAll(virBitmap *bitmap) 111 ATTRIBUTE_NONNULL(1); 112 113 bool virBitmapIsAllSet(virBitmap *bitmap) 114 ATTRIBUTE_NONNULL(1); 115 116 bool virBitmapIsAllClear(virBitmap *bitmap) 117 ATTRIBUTE_NONNULL(1); 118 119 ssize_t virBitmapNextSetBit(virBitmap *bitmap, ssize_t pos) 120 ATTRIBUTE_NONNULL(1); 121 122 ssize_t virBitmapLastSetBit(virBitmap *bitmap) 123 ATTRIBUTE_NONNULL(1); 124 125 ssize_t virBitmapNextClearBit(virBitmap *bitmap, ssize_t pos) 126 ATTRIBUTE_NONNULL(1); 127 128 size_t virBitmapCountBits(virBitmap *bitmap) 129 ATTRIBUTE_NONNULL(1); 130 131 char *virBitmapDataFormat(const void *data, 132 int len) 133 ATTRIBUTE_NONNULL(1); 134 bool virBitmapOverlaps(virBitmap *b1, 135 virBitmap *b2) 136 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); 137 138 void virBitmapIntersect(virBitmap *a, virBitmap *b) 139 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); 140 141 int virBitmapUnion(virBitmap *a, 142 const virBitmap *b) 143 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); 144 145 void virBitmapSubtract(virBitmap *a, virBitmap *b) 146 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); 147 148 void virBitmapShrink(virBitmap *map, size_t b); 149 150 G_DEFINE_AUTOPTR_CLEANUP_FUNC(virBitmap, virBitmapFree); 151