Coverage Report

Created: 2026-07-30 07:08

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
720k
{
8
720k
  bottom = first_free->data;
9
720k
  align_bottom(min_align);
10
720k
  top    = (byte *)first_free + chunk_size;
11
720k
  align_top(min_align);
12
720k
}
13
14
15
ObjStack::ObjStack(size_t chunk_s, size_t align)
16
62.6k
  : chunk_size(chunk_s), min_align(align), temp_end(0)
17
62.6k
{
18
62.6k
  first_free = first = (Node *)malloc(chunk_size);
19
62.6k
  first->next = 0;
20
62.6k
  reserve = 0;
21
62.6k
  setup_chunk();
22
62.6k
}
23
24
ObjStack::~ObjStack()
25
62.4k
{
26
123k
  while (first) {
27
61.5k
    Node * tmp = first->next;
28
61.5k
    free(first);
29
61.5k
    first = tmp;
30
61.5k
  }
31
62.4k
  trim();
32
62.4k
}
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
208k
{
44
208k
  if (reserve) {
45
43.6k
    first_free->next = reserve;
46
43.6k
    reserve = reserve->next;
47
43.6k
    first_free = first_free->next;
48
43.6k
    first_free->next = 0;
49
165k
  } else {
50
165k
    first_free->next = (Node *)malloc(chunk_size);
51
165k
    first_free = first_free->next;
52
165k
  }
53
208k
  first_free->next = 0;
54
208k
  setup_chunk();
55
208k
}
56
57
void ObjStack::reset()
58
448k
{
59
448k
  assert(first_free->next == 0);
60
448k
  if (first->next) {
61
5.11k
    first_free->next = reserve;
62
5.11k
    reserve = first->next;
63
5.11k
    first->next = 0;
64
5.11k
  } 
65
448k
  first_free = first;
66
448k
  setup_chunk();
67
448k
}
68
69
void ObjStack::trim()
70
77.7k
{
71
87.1k
  while (reserve) {
72
9.42k
    Node * tmp = reserve->next;
73
9.42k
    free(reserve);
74
9.42k
    reserve = tmp;
75
9.42k
  }
76
77.7k
}
77
78
15.2k
ObjStack::Memory * ObjStack::freeze() {
79
15.2k
  trim();
80
15.2k
  Node * tmp = first;
81
15.2k
  first = 0;
82
15.2k
  first_free = 0;
83
15.2k
  top = 0;
84
15.2k
  bottom = 0;
85
15.2k
  temp_end = 0;
86
15.2k
  return tmp;
87
15.2k
}
88
  
89
15.2k
void ObjStack::dealloc(Memory * ptr) {
90
171k
  while (ptr) {
91
156k
    Node * tmp = ptr->next;
92
156k
    free(ptr);
93
156k
    ptr = tmp;
94
156k
  }
95
15.2k
}
96
97
}