stv_rs/types/
util.rs

1// Copyright 2023 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15//! Utilities for election types.
16
17use std::collections::BTreeMap;
18
19pub fn count_vec_allocations<T>(allocations: &mut BTreeMap<usize, usize>, v: &Vec<T>) {
20    let size = v.capacity() * std::mem::size_of::<T>();
21    *allocations.entry(size).or_insert(0) += 1;
22}
23
24pub fn count_slice_allocations<T>(allocations: &mut BTreeMap<usize, usize>, v: &[T]) {
25    let size = std::mem::size_of_val(v);
26    // Heuristic: allocator aligns to 32 bytes.
27    let size = (size + 31) & !31;
28    *allocations.entry(size).or_insert(0) += 1;
29}
30
31/// Returns the address of the beginning of the slice, or none if the slice is
32/// empty.
33pub fn address_of_slice<T>(v: &[T]) -> Option<usize> {
34    if v.is_empty() {
35        None
36    } else {
37        Some(v.as_ptr() as usize)
38    }
39}