Skip to content

Commit d60f5a8

Browse files
authored
Merge pull request #18 from mentebinaria/maProc-dev
Version maProc 0.2.5
2 parents 81f4d06 + d202e4a commit d60f5a8

File tree

14 files changed

+3010
-315
lines changed

14 files changed

+3010
-315
lines changed

src/arena.cpp

Lines changed: 71 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,126 +1,150 @@
11
#include "src/include/arena.hpp"
2-
32
#include <stdexcept>
43

54
/**
65
* if p_overwrite = true (default) Arena overwrite spaces alocated
76
*
87
* */
9-
Arena::Arena ( unsigned int p_size, bool p_overwrite ) : m_size ( p_size ),
10-
m_amount ( m_size ),
11-
m_overwrite ( p_overwrite )
8+
Arena::Arena(unsigned int p_size, unsigned int p_limit, bool p_overwrite) : m_size(p_size),
9+
m_amount(m_size),
10+
m_limit(p_limit),
11+
m_overwrite(p_overwrite)
1212
{
1313
m_mem = new char[m_size];
14-
m_ptr = m_mem;
14+
m_head = m_mem;
15+
}
16+
17+
Arena::Arena() : m_mem(nullptr),
18+
m_size(0),
19+
m_amount(0),
20+
m_limit(0),
21+
m_head(nullptr),
22+
m_overwrite(0)
23+
{
1524
}
1625

1726
/*
1827
* avoid copy arena, greater than the heap, but it loses performance
1928
* */
20-
Arena Arena::operator= ( const Arena &fast )
29+
Arena Arena::operator=(const Arena &fast)
2130
{
22-
delete [] m_mem;
31+
delete[] m_mem;
2332

2433
m_mem = new char[fast.m_size];
25-
memcpy ( m_mem, fast.m_mem, fast.m_size );
34+
memcpy(m_mem, fast.m_mem, fast.m_size);
2635
m_size = fast.m_size;
27-
m_ptr = fast.m_ptr;
36+
m_head = fast.m_head;
2837
m_amount = fast.m_amount;
2938
m_overwrite = fast.m_overwrite;
39+
m_limit = m_amount;
40+
3041
return *this;
3142
}
3243

33-
3444
/*
3545
* avoid copy arena, greater than the heap, but it loses performance
36-
*/
37-
Arena::Arena ( const Arena &fast )
46+
*/
47+
Arena::Arena(const Arena &fast)
3848
{
39-
delete [] m_mem;
40-
4149
m_mem = new char[fast.m_size];
42-
memcpy ( m_mem, fast.m_mem, fast.m_size );
50+
memcpy(m_mem, fast.m_mem, fast.m_size);
4351
m_size = fast.m_size;
44-
m_ptr = fast.m_ptr;
52+
m_head = fast.m_head;
4553
m_amount = fast.m_amount;
4654
m_overwrite = fast.m_overwrite;
55+
m_limit = m_amount;
4756
}
4857

4958
Arena::~Arena()
5059
{
51-
delete [] m_mem;
52-
m_ptr = m_mem;
60+
delete[] m_mem;
5361
m_mem = nullptr;
62+
m_head = m_mem;
5463
}
5564

5665
/*
5766
* requestes block in arena passing desired size
5867
* */
59-
void *Arena::req ( unsigned int p_amount )
68+
void *Arena::req(unsigned int p_amount)
6069
{
61-
char *block = nullptr;
62-
63-
if ( p_amount <= m_amount )
70+
if (p_amount <= m_amount)
6471
{
65-
block = ( char * ) m_ptr;
66-
m_ptr += p_amount;
67-
m_amount -= p_amount;
72+
if (p_amount < m_limit && m_overwrite && m_size > m_limit)
73+
{
74+
realloc(m_limit);
75+
goto new_block;
76+
}
77+
else
78+
goto new_block;
6879
}
69-
else if ( p_amount > m_size )
80+
else if (p_amount > m_size)
7081
{
71-
dell();
72-
mmem ( p_amount );
73-
block = ( char * ) m_ptr;
74-
m_ptr += p_amount;
75-
m_amount -= p_amount;
82+
realloc(p_amount);
83+
goto new_block;
7684
}
7785
else
7886
{
79-
if ( m_overwrite )
87+
if (m_overwrite)
8088
{
8189
dell();
82-
block = ( char * ) m_ptr;
83-
m_ptr += p_amount;
84-
m_amount -= p_amount;
85-
90+
goto new_block;
8691
}
8792
else
88-
throw std::runtime_error ( "Arena full" );
93+
throw std::runtime_error("Arena : Arena is full");
8994
}
9095

96+
new_block:
97+
char *block = const_cast<char*>(m_head);
98+
m_head += p_amount;
99+
m_amount -= p_amount;
100+
91101
return block;
92102
}
93103

94-
/* (m_ptr)
104+
/* (m_head)
95105
* ↓
96106
* (m_mem) -> [ ][ ][ ][ ] ...
97-
*
107+
* return pointer head for initial memory
98108
* */
99109
void Arena::dell()
100110
{
101-
m_ptr = m_mem;
111+
m_head = m_mem;
102112
m_amount = m_size;
103113
}
104114

115+
/*
116+
* Delete memory
117+
* */
118+
void Arena::erase()
119+
{
120+
delete[] m_mem;
121+
m_mem = nullptr;
122+
m_head = m_mem;
123+
m_size = 0;
124+
m_amount = m_size;
125+
m_overwrite = true;
126+
}
127+
105128
/*
106129
* return amount free space in arena
107130
* */
108-
unsigned int Arena::afree()
131+
unsigned int Arena::fquantity()
109132
{
110133
return m_amount;
111134
}
112135

113136
/*
114-
* ... [ ][ ][ ] <- [del] - [alocate] -> [ ][ ][ ][ ] +++
137+
* ... [ ][ ][ ] <- [delete] - [alocate more] -> [ ][ ][ ][ ] +++
115138
* */
116-
void Arena::mmem ( unsigned int p_amount )
139+
void Arena::realloc(unsigned int p_amount)
117140
{
118-
if ( m_mem == nullptr )
141+
if (m_mem != nullptr)
142+
delete[] m_mem;
143+
else if(p_amount == 0 || p_amount == m_size)
119144
return;
120145

121-
delete [] m_mem;
122146
m_mem = new char[p_amount];
123-
m_ptr = m_mem;
147+
m_head = m_mem;
124148
m_size = p_amount;
125149
m_amount = m_size;
126-
}
150+
}

src/gui/about.ui

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@
5454
<rect>
5555
<x>0</x>
5656
<y>0</y>
57-
<width>347</width>
58-
<height>298</height>
57+
<width>353</width>
58+
<height>296</height>
5959
</rect>
6060
</property>
6161
<layout class="QVBoxLayout" name="verticalLayout_4">
@@ -68,7 +68,7 @@
6868
</size>
6969
</property>
7070
<property name="text">
71-
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; font-style:italic; color:#54932a;&quot;&gt;maProc v0.2.0&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
71+
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; font-style:italic; color:#54932a;&quot;&gt;maProc v0.2.5&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
7272
</property>
7373
</widget>
7474
</item>
@@ -160,8 +160,8 @@
160160
<rect>
161161
<x>0</x>
162162
<y>0</y>
163-
<width>346</width>
164-
<height>298</height>
163+
<width>339</width>
164+
<height>296</height>
165165
</rect>
166166
</property>
167167
<layout class="QVBoxLayout" name="verticalLayout_2">

0 commit comments

Comments
 (0)