1/*
2 * Copyright © 2020 Benjamin Otte
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 *
17 * Authors: Benjamin Otte <otte@gnome.org>
18 */
19
20
21#ifndef __GTK_BITSET_H__
22#define __GTK_BITSET_H__
23
24#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
25#error "Only <gtk/gtk.h> can be included directly."
26#endif
27
28#include <gtk/gtktypes.h>
29
30G_BEGIN_DECLS
31
32#define GTK_TYPE_BITSET (gtk_bitset_get_type ())
33
34GDK_AVAILABLE_IN_ALL
35GType gtk_bitset_get_type (void) G_GNUC_CONST;
36
37GDK_AVAILABLE_IN_ALL
38GtkBitset * gtk_bitset_ref (GtkBitset *self);
39GDK_AVAILABLE_IN_ALL
40void gtk_bitset_unref (GtkBitset *self);
41G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkBitset, gtk_bitset_unref)
42
43GDK_AVAILABLE_IN_ALL
44gboolean gtk_bitset_contains (const GtkBitset *self,
45 guint value);
46GDK_AVAILABLE_IN_ALL
47gboolean gtk_bitset_is_empty (const GtkBitset *self);
48GDK_AVAILABLE_IN_ALL
49gboolean gtk_bitset_equals (const GtkBitset *self,
50 const GtkBitset *other);
51GDK_AVAILABLE_IN_ALL
52guint64 gtk_bitset_get_size (const GtkBitset *self);
53GDK_AVAILABLE_IN_ALL
54guint64 gtk_bitset_get_size_in_range (const GtkBitset *self,
55 guint first,
56 guint last);
57GDK_AVAILABLE_IN_ALL
58guint gtk_bitset_get_nth (const GtkBitset *self,
59 guint nth);
60GDK_AVAILABLE_IN_ALL
61guint gtk_bitset_get_minimum (const GtkBitset *self);
62GDK_AVAILABLE_IN_ALL
63guint gtk_bitset_get_maximum (const GtkBitset *self);
64
65GDK_AVAILABLE_IN_ALL
66GtkBitset * gtk_bitset_new_empty (void);
67GDK_AVAILABLE_IN_ALL
68GtkBitset * gtk_bitset_copy (const GtkBitset *self);
69GDK_AVAILABLE_IN_ALL
70GtkBitset * gtk_bitset_new_range (guint start,
71 guint n_items);
72
73GDK_AVAILABLE_IN_ALL
74void gtk_bitset_remove_all (GtkBitset *self);
75GDK_AVAILABLE_IN_ALL
76gboolean gtk_bitset_add (GtkBitset *self,
77 guint value);
78GDK_AVAILABLE_IN_ALL
79gboolean gtk_bitset_remove (GtkBitset *self,
80 guint value);
81GDK_AVAILABLE_IN_ALL
82void gtk_bitset_add_range (GtkBitset *self,
83 guint start,
84 guint n_items);
85GDK_AVAILABLE_IN_ALL
86void gtk_bitset_remove_range (GtkBitset *self,
87 guint start,
88 guint n_items);
89GDK_AVAILABLE_IN_ALL
90void gtk_bitset_add_range_closed (GtkBitset *self,
91 guint first,
92 guint last);
93GDK_AVAILABLE_IN_ALL
94void gtk_bitset_remove_range_closed (GtkBitset *self,
95 guint first,
96 guint last);
97GDK_AVAILABLE_IN_ALL
98void gtk_bitset_add_rectangle (GtkBitset *self,
99 guint start,
100 guint width,
101 guint height,
102 guint stride);
103GDK_AVAILABLE_IN_ALL
104void gtk_bitset_remove_rectangle (GtkBitset *self,
105 guint start,
106 guint width,
107 guint height,
108 guint stride);
109
110GDK_AVAILABLE_IN_ALL
111void gtk_bitset_union (GtkBitset *self,
112 const GtkBitset *other);
113GDK_AVAILABLE_IN_ALL
114void gtk_bitset_intersect (GtkBitset *self,
115 const GtkBitset *other);
116GDK_AVAILABLE_IN_ALL
117void gtk_bitset_subtract (GtkBitset *self,
118 const GtkBitset *other);
119GDK_AVAILABLE_IN_ALL
120void gtk_bitset_difference (GtkBitset *self,
121 const GtkBitset *other);
122GDK_AVAILABLE_IN_ALL
123void gtk_bitset_shift_left (GtkBitset *self,
124 guint amount);
125GDK_AVAILABLE_IN_ALL
126void gtk_bitset_shift_right (GtkBitset *self,
127 guint amount);
128GDK_AVAILABLE_IN_ALL
129void gtk_bitset_splice (GtkBitset *self,
130 guint position,
131 guint removed,
132 guint added);
133
134/**
135 * GtkBitsetIter:
136 *
137 * An opaque, stack-allocated struct for iterating
138 * over the elements of a `GtkBitset`.
139 *
140 * Before a `GtkBitsetIter` can be used, it needs to be initialized with
141 * [func@Gtk.BitsetIter.init_first], [func@Gtk.BitsetIter.init_last]
142 * or [func@Gtk.BitsetIter.init_at].
143 */
144typedef struct _GtkBitsetIter GtkBitsetIter;
145
146struct _GtkBitsetIter
147{
148 /*< private >*/
149 gpointer private_data[10];
150};
151
152GDK_AVAILABLE_IN_4_6
153GType gtk_bitset_iter_get_type (void) G_GNUC_CONST;
154
155GDK_AVAILABLE_IN_ALL
156gboolean gtk_bitset_iter_init_first (GtkBitsetIter *iter,
157 const GtkBitset *set,
158 guint *value);
159GDK_AVAILABLE_IN_ALL
160gboolean gtk_bitset_iter_init_last (GtkBitsetIter *iter,
161 const GtkBitset *set,
162 guint *value);
163GDK_AVAILABLE_IN_ALL
164gboolean gtk_bitset_iter_init_at (GtkBitsetIter *iter,
165 const GtkBitset *set,
166 guint target,
167 guint *value);
168GDK_AVAILABLE_IN_ALL
169gboolean gtk_bitset_iter_next (GtkBitsetIter *iter,
170 guint *value);
171GDK_AVAILABLE_IN_ALL
172gboolean gtk_bitset_iter_previous (GtkBitsetIter *iter,
173 guint *value);
174GDK_AVAILABLE_IN_ALL
175guint gtk_bitset_iter_get_value (const GtkBitsetIter *iter);
176GDK_AVAILABLE_IN_ALL
177gboolean gtk_bitset_iter_is_valid (const GtkBitsetIter *iter);
178
179G_END_DECLS
180
181#endif /* __GTK_BITSET_H__ */
182

source code of gtk/gtk/gtkbitset.h