Coverage Report

Created: 2025-08-29 06:09

/src/aspell/common/objstack.cpp
Line
Count
Source (jump to first uncovered line)
1
2
#include "objstack.hpp"
3
4
namespace acommon {
5
6
void ObjStack::setup_chunk()
7
592k
{
8
592k
  bottom = first_free->data;
9
592k
  align_bottom(min_align);
10
592k
  top    = (byte *)first_free + chunk_size;
11
592k
  align_top(min_align);
12
592k
}
13
14
15
ObjStack::ObjStack(size_t chunk_s, size_t align)
16
25.5k
  : chunk_size(chunk_s), min_align(align), temp_end(0)
17
25.5k
{
18
25.5k
  first_free = first = (Node *)malloc(chunk_size);
19
25.5k
  first->next = 0;
20
25.5k
  reserve = 0;
21
25.5k
  setup_chunk();
22
25.5k
}
23
24
ObjStack::~ObjStack()
25
25.4k
{
26
45.2k
  while (first) {
27
19.8k
    Node * tmp = first->next;
28
19.8k
    free(first);
29
19.8k
    first = tmp;
30
19.8k
  }
31
25.4k
  trim();
32
25.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
194k
{
44
194k
  if (reserve) {
45
52.9k
    first_free->next = reserve;
46
52.9k
    reserve = reserve->next;
47
52.9k
    first_free = first_free->next;
48
52.9k
    first_free->next = 0;
49
141k
  } else {
50
141k
    first_free->next = (Node *)malloc(chunk_size);
51
141k
    first_free = first_free->next;
52
141k
  }
53
194k
  first_free->next = 0;
54
194k
  setup_chunk();
55
194k
}
56
57
void ObjStack::reset()
58
371k
{
59
371k
  assert(first_free->next == 0);
60
371k
  if (first->next) {
61
4.75k
    first_free->next = reserve;
62
4.75k
    reserve = first->next;
63
4.75k
    first->next = 0;
64
4.75k
  } 
65
371k
  first_free = first;
66
371k
  setup_chunk();
67
371k
}
68
69
void ObjStack::trim()
70
34.6k
{
71
43.1k
  while (reserve) {
72
8.56k
    Node * tmp = reserve->next;
73
8.56k
    free(reserve);
74
8.56k
    reserve = tmp;
75
8.56k
  }
76
34.6k
}
77
78
9.15k
ObjStack::Memory * ObjStack::freeze() {
79
9.15k
  trim();
80
9.15k
  Node * tmp = first;
81
9.15k
  first = 0;
82
9.15k
  first_free = 0;
83
9.15k
  top = 0;
84
9.15k
  bottom = 0;
85
9.15k
  temp_end = 0;
86
9.15k
  return tmp;
87
9.15k
}
88
  
89
9.15k
void ObjStack::dealloc(Memory * ptr) {
90
148k
  while (ptr) {
91
138k
    Node * tmp = ptr->next;
92
138k
    free(ptr);
93
138k
    ptr = tmp;
94
138k
  }
95
9.15k
}
96
97
}