core_foundation_sys/
bit_vector.rs

1// Copyright 2023 The Servo Project Developers. See the COPYRIGHT
2// file at the top-level directory of this distribution.
3//
4// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
5// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
7// option. This file may not be copied, modified, or distributed
8// except according to those terms.
9
10use std::os::raw::c_void;
11
12use crate::base::{Boolean, CFAllocatorRef, CFIndex, CFRange, CFTypeID, UInt32, UInt8};
13
14#[repr(C)]
15pub struct __CFBitVector(c_void);
16
17pub type CFBitVectorRef = *const __CFBitVector;
18pub type CFMutableBitVectorRef = *mut __CFBitVector;
19pub type CFBit = UInt32;
20
21extern "C" {
22    /*
23     * CFBitVector.h
24     */
25
26    /* CFBitVector */
27    /* Creating a Bit Vector */
28    pub fn CFBitVectorCreate(
29        allocator: CFAllocatorRef,
30        bytes: *const UInt8,
31        numBits: CFIndex,
32    ) -> CFBitVectorRef;
33    pub fn CFBitVectorCreateCopy(allocator: CFAllocatorRef, bv: CFBitVectorRef) -> CFBitVectorRef;
34
35    /* Getting Information About a Bit Vector */
36    pub fn CFBitVectorContainsBit(bv: CFBitVectorRef, range: CFRange, value: CFBit) -> Boolean;
37    pub fn CFBitVectorGetBitAtIndex(bv: CFBitVectorRef, idx: CFIndex) -> CFBit;
38    pub fn CFBitVectorGetBits(bv: CFBitVectorRef, range: CFRange, bytes: *mut UInt8);
39    pub fn CFBitVectorGetCount(bv: CFBitVectorRef) -> CFIndex;
40    pub fn CFBitVectorGetCountOfBit(bv: CFBitVectorRef, range: CFRange, value: CFBit) -> CFIndex;
41    pub fn CFBitVectorGetFirstIndexOfBit(
42        bv: CFBitVectorRef,
43        range: CFRange,
44        value: CFBit,
45    ) -> CFIndex;
46    pub fn CFBitVectorGetLastIndexOfBit(
47        bv: CFBitVectorRef,
48        range: CFRange,
49        value: CFBit,
50    ) -> CFIndex;
51
52    /* Getting the CFBitVector Type ID */
53    pub fn CFBitVectorGetTypeID() -> CFTypeID;
54
55    /* CFMutableBitVector */
56    /* Creating a CFMutableBitVector Object */
57    pub fn CFBitVectorCreateMutable(
58        allocator: CFAllocatorRef,
59        capacity: CFIndex,
60    ) -> CFMutableBitVectorRef;
61    pub fn CFBitVectorCreateMutableCopy(
62        allocator: CFAllocatorRef,
63        capacity: CFIndex,
64        bv: CFBitVectorRef,
65    ) -> CFMutableBitVectorRef;
66
67    /* Modifying a Bit Vector */
68    pub fn CFBitVectorFlipBitAtIndex(bv: CFMutableBitVectorRef, idx: CFIndex);
69    pub fn CFBitVectorFlipBits(bv: CFMutableBitVectorRef, range: CFRange);
70    pub fn CFBitVectorSetAllBits(bv: CFMutableBitVectorRef, value: CFBit);
71    pub fn CFBitVectorSetBitAtIndex(bv: CFMutableBitVectorRef, idx: CFIndex, value: CFBit);
72    pub fn CFBitVectorSetBits(bv: CFMutableBitVectorRef, range: CFRange, value: CFBit);
73    pub fn CFBitVectorSetCount(bv: CFMutableBitVectorRef, count: CFIndex);
74}