Coverage Report

Created: 2025-11-16 09:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/sc/inc/stlalgorithm.hxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 */
9
10
#pragma once
11
12
#include <limits>
13
14
#include <rtl/alloc.h>
15
16
namespace sc {
17
18
/**
19
 * Custom allocator for STL container to ensure that the base address of
20
 * allocated storage is aligned to a specified boundary.
21
 */
22
template<typename T, size_t Alignment>
23
class AlignedAllocator
24
{
25
public:
26
    typedef T value_type;
27
    typedef size_t size_type;
28
    typedef std::ptrdiff_t difference_type;
29
30
    typedef T* pointer;
31
    typedef const T* const_pointer;
32
    typedef T* void_pointer;
33
34
    typedef T& reference;
35
    typedef const T& const_reference;
36
37
    template<typename Type2>
38
    struct rebind
39
    {
40
        typedef AlignedAllocator<Type2,Alignment> other;
41
    };
42
43
0
    AlignedAllocator() {}
44
45
    template<typename Type2>
46
    AlignedAllocator(const AlignedAllocator<Type2,Alignment>&) {}
47
48
0
    static void construct(T* p, const value_type& val) { new(p) value_type(val); }
49
    static void destroy(T* p)
50
0
    {
51
0
        p->~value_type();
52
0
    }
53
54
    static size_type max_size()
55
0
    {
56
0
        return std::numeric_limits<size_type>::max() / sizeof(value_type);
57
0
    }
58
59
    bool operator== (const AlignedAllocator&) const { return true; }
60
    bool operator!= (const AlignedAllocator&) const { return false; }
61
62
    static pointer allocate(size_type n)
63
0
    {
64
0
        return static_cast<pointer>(rtl_allocateAlignedMemory(Alignment, n*sizeof(value_type)));
65
0
    }
66
67
    static void deallocate(pointer p, size_type)
68
0
    {
69
0
        rtl_freeAlignedMemory(p);
70
0
    }
71
};
72
73
}
74
75
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */