Coverage Report

Created: 2026-05-16 06:26

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