1010typedef struct {
1111 ml_type_t * Type ;
1212 roaring_bitmap_t * Value ;
13- } bitset_t ;
13+ } ml_bitset_t ;
1414
1515ML_TYPE (MLBitsetT , (MLSequenceT ), "bitset" );
1616
1717static void bitset_finalize (void * Bitset , void * Data ) {
18- roaring_bitmap_free (((bitset_t * )Bitset )-> Value );
18+ roaring_bitmap_free (((ml_bitset_t * )Bitset )-> Value );
1919}
2020
2121ML_METHOD (MLBitsetT ) {
2222//>bitset
23- bitset_t * Bitset = new (bitset_t );
23+ ml_bitset_t * Bitset = new (ml_bitset_t );
2424 Bitset -> Type = MLBitsetT ;
2525 Bitset -> Value = roaring_bitmap_create ();
2626 GC_register_finalizer (Bitset , bitset_finalize , NULL , NULL , NULL );
2727 return (ml_value_t * )Bitset ;
2828}
2929
3030ML_METHOD ("set" , MLBitsetT , MLIntegerT ) {
31- bitset_t * Bitset = (bitset_t * )Args [0 ];
31+ ml_bitset_t * Bitset = (ml_bitset_t * )Args [0 ];
3232 roaring_bitmap_add (Bitset -> Value , ml_integer_value (Args [1 ]));
3333 return (ml_value_t * )Bitset ;
3434}
3535
3636ML_METHOD ("set" , MLBitsetT , MLIntegerRangeT ) {
37- bitset_t * Bitset = (bitset_t * )Args [0 ];
37+ ml_bitset_t * Bitset = (ml_bitset_t * )Args [0 ];
3838 ml_integer_range_t * Range = (ml_integer_range_t * )Args [1 ];
3939 roaring_bitmap_add_range_closed (Bitset -> Value , Range -> Start , Range -> Limit );
4040 return (ml_value_t * )Bitset ;
4141}
4242
4343ML_METHOD ("unset" , MLBitsetT , MLIntegerT ) {
44- bitset_t * Bitset = (bitset_t * )Args [0 ];
44+ ml_bitset_t * Bitset = (ml_bitset_t * )Args [0 ];
4545 roaring_bitmap_remove (Bitset -> Value , ml_integer_value (Args [1 ]));
4646 return (ml_value_t * )Bitset ;
4747}
4848
4949ML_METHOD ("unset" , MLBitsetT , MLIntegerRangeT ) {
50- bitset_t * Bitset = (bitset_t * )Args [0 ];
50+ ml_bitset_t * Bitset = (ml_bitset_t * )Args [0 ];
5151 ml_integer_range_t * Range = (ml_integer_range_t * )Args [1 ];
5252 roaring_bitmap_remove_range_closed (Bitset -> Value , Range -> Start , Range -> Limit );
5353 return (ml_value_t * )Bitset ;
5454}
5555
56+ ML_METHOD ("count" , MLBitsetT ) {
57+ ml_bitset_t * Bitset = (ml_bitset_t * )Args [0 ];
58+ return ml_integer (roaring_bitmap_get_cardinality (Bitset -> Value ));
59+ }
60+
61+ ML_METHOD ("size" , MLBitsetT ) {
62+ ml_bitset_t * Bitset = (ml_bitset_t * )Args [0 ];
63+ return ml_integer (roaring_bitmap_get_cardinality (Bitset -> Value ));
64+ }
65+
5666ML_METHOD ("append" , MLStringBufferT , MLBitsetT ) {
5767 ml_stringbuffer_t * Buffer = (ml_stringbuffer_t * )Args [0 ];
58- bitset_t * Bitset = (bitset_t * )Args [1 ];
68+ ml_bitset_t * Bitset = (ml_bitset_t * )Args [1 ];
5969 roaring_uint32_iterator_t Iter [1 ];
6070 roaring_init_iterator (Bitset -> Value , Iter );
6171 if (!Iter -> has_value ) {
@@ -96,7 +106,7 @@ typedef struct {
96106ML_TYPE (BitsetIterT , ( ), "bitset::iter" );
97107//!internal
98108
99- static void ML_TYPED_FN (ml_iterate , MLBitsetT , ml_state_t * Caller , bitset_t * Bitset ) {
109+ static void ML_TYPED_FN (ml_iterate , MLBitsetT , ml_state_t * Caller , ml_bitset_t * Bitset ) {
100110 if (!roaring_bitmap_get_cardinality (Bitset -> Value )) ML_RETURN (MLNil );
101111 bitset_iter_t * Iter = new (bitset_iter_t );
102112 Iter -> Type = BitsetIterT ;
@@ -120,7 +130,7 @@ static void ML_TYPED_FN(ml_iter_value, BitsetIterT, ml_state_t *Caller, bitset_i
120130 ML_RETURN (ml_integer (Iter -> Iter -> current_value ));
121131}
122132
123- static void ML_TYPED_FN (ml_cbor_write , MLBitsetT , ml_cbor_writer_t * Writer , bitset_t * Bitset ) {
133+ static void ML_TYPED_FN (ml_cbor_write , MLBitsetT , ml_cbor_writer_t * Writer , ml_bitset_t * Bitset ) {
124134 ml_cbor_write_tag (Writer , ML_CBOR_TAG_OBJECT );
125135 ml_cbor_write_array (Writer , 2 );
126136 ml_cbor_write_string (Writer , strlen ("bitset" ));
@@ -137,7 +147,7 @@ static ml_value_t *decode_bitset(ml_cbor_reader_t *Reader, int Count, ml_value_t
137147 ML_CHECK_ARG_TYPE (0 , MLAddressT );
138148 roaring_bitmap_t * Value = roaring_bitmap_portable_deserialize_safe (ml_address_value (Args [0 ]), ml_address_length (Args [0 ]));
139149 if (!Value ) return ml_error ("DecodeError" , "Error decoding bitmap data" );
140- bitset_t * Bitset = new (bitset_t );
150+ ml_bitset_t * Bitset = new (ml_bitset_t );
141151 Bitset -> Type = MLBitsetT ;
142152 Bitset -> Value = Value ;
143153 return (ml_value_t * )Bitset ;
0 commit comments