virbitmap.h 4.7 KB
Newer Older
1
/*
2
 * virbitmap.h: Simple bitmap operations
3
 *
4
 * Copyright (C) 2012-2013 Red Hat, Inc.
5 6 7 8 9 10 11 12 13 14 15 16 17
 * Copyright (C) 2010 Novell, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with this library.  If not, see
O
Osier Yang 已提交
19
 * <http://www.gnu.org/licenses/>.
20 21
 */

22 23
#ifndef LIBVIRT_VIRBITMAP_H
# define LIBVIRT_VIRBITMAP_H
24

E
Eric Blake 已提交
25
# include "internal.h"
26
# include "viralloc.h"
27

E
Eric Blake 已提交
28
# include <sys/types.h>
29 30 31 32 33 34 35 36


typedef struct _virBitmap virBitmap;
typedef virBitmap *virBitmapPtr;

/*
 * Allocate a bitmap capable of containing @size bits.
 */
37
virBitmapPtr virBitmapNewQuiet(size_t size) ATTRIBUTE_RETURN_CHECK;
38
virBitmapPtr virBitmapNew(size_t size) ATTRIBUTE_RETURN_CHECK;
39
virBitmapPtr virBitmapNewEmpty(void) ATTRIBUTE_RETURN_CHECK;
40 41 42 43 44 45

/*
 * Free previously allocated bitmap
 */
void virBitmapFree(virBitmapPtr bitmap);

D
Daniel P. Berrange 已提交
46 47 48 49 50 51
/*
 * Copy all bits from @src to @dst. The bitmap sizes
 * must be the same
 */
int virBitmapCopy(virBitmapPtr dst, virBitmapPtr src);

52 53 54 55 56 57
/*
 * Set bit position @b in @bitmap
 */
int virBitmapSetBit(virBitmapPtr bitmap, size_t b)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

58 59 60 61
int virBitmapSetBitExpand(virBitmapPtr bitmap, size_t b)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;


62 63 64 65 66 67
/*
 * Clear bit position @b in @bitmap
 */
int virBitmapClearBit(virBitmapPtr bitmap, size_t b)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

68 69 70
int virBitmapClearBitExpand(virBitmapPtr bitmap, size_t b)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

J
Ján Tomko 已提交
71 72 73 74 75
/*
 * Get bit @b in @bitmap. Returns false if b is out of range.
 */
bool virBitmapIsBitSet(virBitmapPtr bitmap, size_t b)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
76 77 78 79 80 81
/*
 * Get setting of bit position @b in @bitmap and store in @result
 */
int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;

82 83 84 85
virBitmapPtr
virBitmapNewString(const char *string)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

86
char *virBitmapToString(virBitmapPtr bitmap, bool prefix, bool trim)
87 88
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;

89
char *virBitmapFormat(virBitmapPtr bitmap);
H
Hu Tao 已提交
90 91 92 93

int virBitmapParse(const char *str,
                   virBitmapPtr *bitmap,
                   size_t bitmapSize)
94
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
J
Ján Tomko 已提交
95 96 97 98 99
int
virBitmapParseSeparator(const char *str,
                        char terminator,
                        virBitmapPtr *bitmap,
                        size_t bitmapSize);
100
virBitmapPtr
101
virBitmapParseUnlimited(const char *str);
H
Hu Tao 已提交
102 103 104

virBitmapPtr virBitmapNewCopy(virBitmapPtr src) ATTRIBUTE_NONNULL(1);

105
virBitmapPtr virBitmapNewData(const void *data, int len) ATTRIBUTE_NONNULL(1);
H
Hu Tao 已提交
106 107

int virBitmapToData(virBitmapPtr bitmap, unsigned char **data, int *dataLen)
108 109 110
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);

void virBitmapToDataBuf(virBitmapPtr bitmap, unsigned char *data, size_t len)
H
Hu Tao 已提交
111 112
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

113
bool virBitmapEqual(virBitmapPtr b1, virBitmapPtr b2);
H
Hu Tao 已提交
114 115 116 117 118 119 120 121 122 123 124 125 126

size_t virBitmapSize(virBitmapPtr bitmap)
    ATTRIBUTE_NONNULL(1);

void virBitmapSetAll(virBitmapPtr bitmap)
    ATTRIBUTE_NONNULL(1);

void virBitmapClearAll(virBitmapPtr bitmap)
    ATTRIBUTE_NONNULL(1);

bool virBitmapIsAllSet(virBitmapPtr bitmap)
    ATTRIBUTE_NONNULL(1);

127 128 129
bool virBitmapIsAllClear(virBitmapPtr bitmap)
    ATTRIBUTE_NONNULL(1);

E
Eric Blake 已提交
130 131 132
ssize_t virBitmapNextSetBit(virBitmapPtr bitmap, ssize_t pos)
    ATTRIBUTE_NONNULL(1);

133 134 135
ssize_t virBitmapLastSetBit(virBitmapPtr bitmap)
    ATTRIBUTE_NONNULL(1);

136 137 138
ssize_t virBitmapNextClearBit(virBitmapPtr bitmap, ssize_t pos)
    ATTRIBUTE_NONNULL(1);

E
Eric Blake 已提交
139
size_t virBitmapCountBits(virBitmapPtr bitmap)
H
Hu Tao 已提交
140 141
    ATTRIBUTE_NONNULL(1);

142 143
char *virBitmapDataFormat(const void *data,
                          int len)
J
Ján Tomko 已提交
144
    ATTRIBUTE_NONNULL(1);
145 146 147
bool virBitmapOverlaps(virBitmapPtr b1,
                       virBitmapPtr b2)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
J
Ján Tomko 已提交
148

149
void virBitmapIntersect(virBitmapPtr a, virBitmapPtr b)
150 151
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

152 153 154
void virBitmapSubtract(virBitmapPtr a, virBitmapPtr b)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

155
void virBitmapShrink(virBitmapPtr map, size_t b);
156

157 158
VIR_DEFINE_AUTOPTR_FUNC(virBitmap, virBitmapFree)

159
#endif /* LIBVIRT_VIRBITMAP_H */