About all my projects
Gnome::Gtk4::N-Bitset

Gnome::Gtk4::N-Bitset

Description

A Gnome::Gtk4::N-Bitset represents a set of unsigned integers.

Another name for this data structure is "bitmap".

The current implementation is based on [roaring bitmaps](https://roaringbitmap.org/).

A bitset allows adding a set of integers and provides support for set operations like unions, intersections and checks for equality or if a value is contained in the set. Gnome::Gtk4::N-Bitset also contains various functions to query metadata about the bitset, such as the minimum or maximum values or its size.

The fastest way to iterate values in a bitset is Gnome::Gtk4::N-BitsetIter .

The main use case for Gnome::Gtk4::N-Bitset is implementing complex selections for Gnome::Gtk4::R-SelectionModel.

Class initialization

new

:native-object

Create an object using a native object from elsewhere. See also Gnome::N::TopLevelSupportClass.

multi method new ( N-Object :$native-object! )

new-empty

Creates a new empty bitset.

method new-empty ( --> Gnome::Gtk4::Bitset \)

new-range

Creates a bitset with the given range set.

method new-range ( UInt() $start, UInt() $n-items --> Gnome::Gtk4::Bitset \)
  • $start; first value to add.

  • $n-items; number of consecutive values to add.

Methods

add

Adds $value to $self if it wasn't part of it before.

method add ( UInt() $value --> Bool )
  • $value; value to add.

Return value; True if $value was not part of $self and $self was changed.

add-range

Adds all values from $start (inclusive) to $start + $n-items (exclusive) in $self.

method add-range ( UInt() $start, UInt() $n-items )
  • $start; first value to add.

  • $n-items; number of consecutive values to add.

add-range-closed

Adds the closed range [ $first, $last], so $first, $last and all values in between. $first must be smaller than $last.

method add-range-closed ( UInt() $first, UInt() $last )
  • $first; first value to add.

  • $last; last value to add.

add-rectangle

Interprets the values as a 2-dimensional boolean grid with the given $stride and inside that grid, adds a rectangle with the given $width and $height.

method add-rectangle ( UInt() $start, UInt() $width, UInt() $height, UInt() $stride )
  • $start; first value to add.

  • $width; width of the rectangle.

  • $height; height of the rectangle.

  • $stride; row stride of the grid.

contains

Checks if the given $value has been added to $self

method contains ( UInt() $value --> Bool )
  • $value; the value to check.

Return value; True if $self contains $value.

copy

Creates a copy of $self.

method copy (--> N-Object )

Return value; A new bitset that contains the same values as $self.

difference

Sets $self to be the symmetric difference of $self and $other.

The symmetric difference is set $self to contain all values that were either contained in $self or in $other, but not in both. This operation is also called an XOR.

It is allowed for $self and $other to be the same bitset. The bitset will be emptied in that case.

method difference ( N-Object $other )
  • $other; the Gnome::Gtk4::N-Bitset to compute the difference from

equals

Returns True if $self and $other contain the same values.

method equals ( N-Object $other --> Bool )
  • $other; another Gnome::Gtk4::N-Bitset

Return value; True if $self and $other contain the same values.

get-maximum

Returns the largest value in $self.

If $self is empty, 0 is returned.

method get-maximum (--> UInt )

Return value; The largest value in $self.

get-minimum

Returns the smallest value in $self.

If $self is empty, G_MAXUINT is returned.

method get-minimum (--> UInt )

Return value; The smallest value in $self.

get-nth

Returns the value of the $nth item in self.

If $nth is >= the size of $self, 0 is returned.

method get-nth ( UInt() $nth --> UInt )
  • $nth; index of the item to get.

Return value; the value of the $nth item in $self.

get-size

Gets the number of values that were added to the set.

For example, if the set is empty, 0 is returned.

Note that this function returns a guint64, because when all values are set, the return value is G_MAXUINT + 1`. Unless you are sure this cannot happen (it can't with Gnome::Gio::R-ListModel), be sure to use a 64bit type.

method get-size (--> UInt )

Return value; The number of values in the set..

get-size-in-range

Gets the number of values that are part of the set from $first to $last (inclusive).

Note that this function returns a guint64, because when all values are set, the return value is G_MAXUINT + 1`. Unless you are sure this cannot happen (it can't with Gnome::Gio::R-ListModel), be sure to use a 64bit type.

method get-size-in-range ( UInt() $first, UInt() $last --> UInt )
  • $first; the first element to include.

  • $last; the last element to include.

Return value; The number of values in the set from $first to $last..

intersect

Sets $self to be the intersection of $self and $other.

In other words, remove all values from $self that are not part of $other.

It is allowed for $self and $other to be the same bitset. Nothing will happen in that case.

method intersect ( N-Object $other )
  • $other; the Gnome::Gtk4::N-Bitset to intersect with

is-empty

Check if no value is contained in bitset.

method is-empty (--> Bool )

Return value; True if $self is empty.

ref

Acquires a reference on the given Gnome::Gtk4::N-Bitset.

method ref (--> N-Object )

Return value; the Gnome::Gtk4::N-Bitset with an additional reference.

remove

Removes $value from $self if it was part of it before.

method remove ( UInt() $value --> Bool )
  • $value; value to remove.

Return value; True if $value was part of $self and $self was changed.

remove-all

Removes all values from the bitset so that it is empty again.

method remove-all ( )

remove-range

Removes all values from $start (inclusive) to $start + $n-items (exclusive) in $self.

method remove-range ( UInt() $start, UInt() $n-items )
  • $start; first value to remove.

  • $n-items; number of consecutive values to remove.

remove-range-closed

Removes the closed range [ $first, $last], so $first, $last and all values in between. $first must be smaller than $last.

method remove-range-closed ( UInt() $first, UInt() $last )
  • $first; first value to remove.

  • $last; last value to remove.

remove-rectangle

Interprets the values as a 2-dimensional boolean grid with the given $stride and inside that grid, removes a rectangle with the given $width and $height.

method remove-rectangle ( UInt() $start, UInt() $width, UInt() $height, UInt() $stride )
  • $start; first value to remove.

  • $width; width of the rectangle.

  • $height; height of the rectangle.

  • $stride; row stride of the grid.

shift-left

Shifts all values in $self to the left by $amount.

Values smaller than $amount are discarded.

method shift-left ( UInt() $amount )
  • $amount; amount to shift all values to the left.

shift-right

Shifts all values in $self to the right by $amount.

Values that end up too large to be held in a #guint are discarded.

method shift-right ( UInt() $amount )
  • $amount; amount to shift all values to the right.

splice

This is a support function for Gnome::Gio::R-ListModel handling, by mirroring the GlistModel::items-changed` signal.

First, it "cuts" the values from $position to $removed from the bitset. That is, it removes all those values and shifts all larger values to the left by $removed places.

Then, it "pastes" new room into the bitset by shifting all values larger than $position by $added spaces to the right. This frees up space that can then be filled.

method splice ( UInt() $position, UInt() $removed, UInt() $added )
  • $position; position at which to slice.

  • $removed; number of values to remove.

  • $added; number of values to add.

subtract

Sets $self to be the subtraction of $other from $self.

In other words, remove all values from $self that are part of $other.

It is allowed for $self and $other to be the same bitset. The bitset will be emptied in that case.

method subtract ( N-Object $other )
  • $other; the Gnome::Gtk4::N-Bitset to subtract

union

Sets $self to be the union of $self and $other.

That is, add all values from $other into $self that weren't part of it.

It is allowed for $self and $other to be the same bitset. Nothing will happen in that case.

method union ( N-Object $other )
  • $other; the Gnome::Gtk4::N-Bitset to union with

unref

Releases a reference on the given Gnome::Gtk4::N-Bitset.

If the reference was the last, the resources associated to the $self are freed.

method unref ( )