Coverage Report

Created: 2026-06-10 06:10

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
524k
{
8
524k
  bottom = first_free->data;
9
524k
  align_bottom(min_align);
10
524k
  top    = (byte *)first_free + chunk_size;
11
524k
  align_top(min_align);
12
524k
}
13
14
15
ObjStack::ObjStack(size_t chunk_s, size_t align)
16
51.1k
  : chunk_size(chunk_s), min_align(align), temp_end(0)
17
51.1k
{
18
51.1k
  first_free = first = (Node *)malloc(chunk_size);
19
51.1k
  first->next = 0;
20
51.1k
  reserve = 0;
21
51.1k
  setup_chunk();
22
51.1k
}
23
24
ObjStack::~ObjStack()
25
50.9k
{
26
104k
  while (first) {
27
53.8k
    Node * tmp = first->next;
28
53.8k
    free(first);
29
53.8k
    first = tmp;
30
53.8k
  }
31
50.9k
  trim();
32
50.9k
}
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
176k
{
44
176k
  if (reserve) {
45
45.2k
    first_free->next = reserve;
46
45.2k
    reserve = reserve->next;
47
45.2k
    first_free = first_free->next;
48
45.2k
    first_free->next = 0;
49
130k
  } else {
50
130k
    first_free->next = (Node *)malloc(chunk_size);
51
130k
    first_free = first_free->next;
52
130k
  }
53
176k
  first_free->next = 0;
54
176k
  setup_chunk();
55
176k
}
56
57
void ObjStack::reset()
58
296k
{
59
296k
  assert(first_free->next == 0);
60
296k
  if (first->next) {
61
3.80k
    first_free->next = reserve;
62
3.80k
    reserve = first->next;
63
3.80k
    first->next = 0;
64
3.80k
  } 
65
296k
  first_free = first;
66
296k
  setup_chunk();
67
296k
}
68
69
void ObjStack::trim()
70
62.2k
{
71
70.9k
  while (reserve) {
72
8.63k
    Node * tmp = reserve->next;
73
8.63k
    free(reserve);
74
8.63k
    reserve = tmp;
75
8.63k
  }
76
62.2k
}
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
130k
  while (ptr) {
91
119k
    Node * tmp = ptr->next;
92
119k
    free(ptr);
93
119k
    ptr = tmp;
94
119k
  }
95
11.3k
}
96
97
}