Coverage Report

Created: 2025-11-09 07:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/aspell/common/objstack.cpp
Line
Count
Source
1
2
#include "objstack.hpp"
3
4
namespace acommon {
5
6
void ObjStack::setup_chunk()
7
727k
{
8
727k
  bottom = first_free->data;
9
727k
  align_bottom(min_align);
10
727k
  top    = (byte *)first_free + chunk_size;
11
727k
  align_top(min_align);
12
727k
}
13
14
15
ObjStack::ObjStack(size_t chunk_s, size_t align)
16
74.7k
  : chunk_size(chunk_s), min_align(align), temp_end(0)
17
74.7k
{
18
74.7k
  first_free = first = (Node *)malloc(chunk_size);
19
74.7k
  first->next = 0;
20
74.7k
  reserve = 0;
21
74.7k
  setup_chunk();
22
74.7k
}
23
24
ObjStack::~ObjStack()
25
74.5k
{
26
149k
  while (first) {
27
74.4k
    Node * tmp = first->next;
28
74.4k
    free(first);
29
74.4k
    first = tmp;
30
74.4k
  }
31
74.5k
  trim();
32
74.5k
}
33
34
size_t ObjStack::calc_size()
35
0
{
36
0
  size_t size = 0;
37
0
  for (Node * p = first; p; p = p->next)
38
0
    size += chunk_size;
39
0
  return size;
40
0
}
41
42
void ObjStack::new_chunk()
43
219k
{
44
219k
  if (reserve) {
45
40.8k
    first_free->next = reserve;
46
40.8k
    reserve = reserve->next;
47
40.8k
    first_free = first_free->next;
48
40.8k
    first_free->next = 0;
49
178k
  } else {
50
178k
    first_free->next = (Node *)malloc(chunk_size);
51
178k
    first_free = first_free->next;
52
178k
  }
53
219k
  first_free->next = 0;
54
219k
  setup_chunk();
55
219k
}
56
57
void ObjStack::reset()
58
432k
{
59
432k
  assert(first_free->next == 0);
60
432k
  if (first->next) {
61
4.44k
    first_free->next = reserve;
62
4.44k
    reserve = first->next;
63
4.44k
    first->next = 0;
64
4.44k
  } 
65
432k
  first_free = first;
66
432k
  setup_chunk();
67
432k
}
68
69
void ObjStack::trim()
70
92.7k
{
71
100k
  while (reserve) {
72
7.91k
    Node * tmp = reserve->next;
73
7.91k
    free(reserve);
74
7.91k
    reserve = tmp;
75
7.91k
  }
76
92.7k
}
77
78
18.2k
ObjStack::Memory * ObjStack::freeze() {
79
18.2k
  trim();
80
18.2k
  Node * tmp = first;
81
18.2k
  first = 0;
82
18.2k
  first_free = 0;
83
18.2k
  top = 0;
84
18.2k
  bottom = 0;
85
18.2k
  temp_end = 0;
86
18.2k
  return tmp;
87
18.2k
}
88
  
89
18.2k
void ObjStack::dealloc(Memory * ptr) {
90
189k
  while (ptr) {
91
170k
    Node * tmp = ptr->next;
92
170k
    free(ptr);
93
170k
    ptr = tmp;
94
170k
  }
95
18.2k
}
96
97
}