Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Prog2
/
eloadas_peldak
/
ea_10
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
1c066383
authored
Apr 23, 2019
by
Szeberényi Imre
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SDL2
parent
c23cec52
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
158 additions
and
80 deletions
+158
-80
SDL_bboard/appshell.cpp
+2
-2
SDL_bboard/appshell.h
+3
-3
SDL_bboard/bboard.cbp
+7
-5
SDL_bboard/circle.cpp
+5
-5
SDL_bboard/main.cpp
+20
-16
SDL_bboard/memtrace.cpp
+49
-28
SDL_bboard/memtrace.h
+65
-14
SDL_bboard/widget.cpp
+1
-1
SDL_bboard/widget.h
+6
-6
No files found.
SDL_bboard/appshell.cpp
View file @
1c066383
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
/// Az objektum eseménykezelője ettől még dönthet úgy, hogy nem kezeli.
/// Az objektum eseménykezelője ettől még dönthet úgy, hogy nem kezeli.
/// Kihasználható, hogy az eseménykezelő meghívása előtt mindig van contains hívás.
/// Kihasználható, hogy az eseménykezelő meghívása előtt mindig van contains hívás.
void
AppShell
::
mainLoop
()
{
void
AppShell
::
mainLoop
()
{
SDL_
Flip
(
sc
r
);
SDL_
RenderPresent
(
rendere
r
);
SDL_Event
ev
;
SDL_Event
ev
;
Point
cursor
;
Point
cursor
;
while
(
SDL_WaitEvent
(
&
ev
)
&&
ev
.
type
!=
SDL_QUIT
)
{
while
(
SDL_WaitEvent
(
&
ev
)
&&
ev
.
type
!=
SDL_QUIT
)
{
...
@@ -37,7 +37,7 @@ void AppShell::mainLoop() {
...
@@ -37,7 +37,7 @@ void AppShell::mainLoop() {
}
}
if
(
changed
)
{
// ha változhatott a rajz, frissíti a képernyőt
if
(
changed
)
{
// ha változhatott a rajz, frissíti a képernyőt
draw
();
draw
();
SDL_
Flip
(
sc
r
);
SDL_
RenderPresent
(
rendere
r
);
}
}
}
}
}
}
SDL_bboard/appshell.h
View file @
1c066383
...
@@ -12,9 +12,9 @@
...
@@ -12,9 +12,9 @@
/// Az eseményhurokért, valamint az SDL és az alkalmazás kapcsolatáért felelős.
/// Az eseményhurokért, valamint az SDL és az alkalmazás kapcsolatáért felelős.
/// Widget konténerként tárolja a fő widgetpéldányokat.
/// Widget konténerként tárolja a fő widgetpéldányokat.
struct
AppShell
:
public
Container
{
struct
AppShell
:
public
Container
{
/// @param
scr - SDL screen
pointere
/// @param
ren - SDL renderer
pointere
AppShell
(
SDL_
Surface
*
scr
)
{
AppShell
(
SDL_
Renderer
*
ren
)
{
Widget
::
set
Surface
(
scr
);
Widget
::
set
Renderer
(
ren
);
}
}
/// maninLoop
/// maninLoop
...
...
SDL_bboard/bboard.cbp
View file @
1c066383
...
@@ -30,20 +30,22 @@
...
@@ -30,20 +30,22 @@
</Target>
</Target>
</Build>
</Build>
<Compiler>
<Compiler>
<Add
option=
"-pedantic"
/>
<Add
option=
"-Wall"
/>
<Add
option=
"-Wall"
/>
<Add
option=
"-std=c++11"
/>
<Add
directory=
"$(#sdl.include)"
/>
<Add
directory=
"$(#sdl.include)"
/>
</Compiler>
</Compiler>
<Linker>
<Linker>
<Add
library=
"mingw32"
/>
<Add
library=
"mingw32"
/>
<Add
library=
"SDLmain"
/>
<Add
library=
"SDL
2
main"
/>
<Add
library=
"SDL
.dll
"
/>
<Add
library=
"SDL
2
"
/>
<Add
library=
"user32"
/>
<Add
library=
"user32"
/>
<Add
library=
"gdi32"
/>
<Add
library=
"gdi32"
/>
<Add
library=
"winmm"
/>
<Add
library=
"winmm"
/>
<Add
library=
"dxguid"
/>
<Add
library=
"dxguid"
/>
<Add
library=
"SDL_gfx"
/>
<Add
library=
"SDL
2
_gfx"
/>
<Add
library=
"SDL_image"
/>
<Add
library=
"SDL
2
_image"
/>
<Add
library=
"SDL_ttf"
/>
<Add
library=
"SDL
2
_ttf"
/>
<Add
directory=
"$(#sdl.lib)"
/>
<Add
directory=
"$(#sdl.lib)"
/>
</Linker>
</Linker>
<Unit
filename=
"activebg.h"
/>
<Unit
filename=
"activebg.h"
/>
...
...
SDL_bboard/circle.cpp
View file @
1c066383
...
@@ -8,11 +8,11 @@
...
@@ -8,11 +8,11 @@
/// Kört rajzoló fv.
/// Kört rajzoló fv.
void
Circle
::
draw
()
const
{
void
Circle
::
draw
()
const
{
if
(
fill
)
{
if
(
fill
)
{
filledCircleColor
(
sc
r
,
p0
.
x
,
p0
.
y
,
r
,
fg
);
filledCircleColor
(
rendere
r
,
p0
.
x
,
p0
.
y
,
r
,
fg
);
circleColor
(
sc
r
,
p0
.
x
,
p0
.
y
,
r
,
fg
);
circleColor
(
rendere
r
,
p0
.
x
,
p0
.
y
,
r
,
fg
);
}
else
{
}
else
{
filledCircleColor
(
sc
r
,
p0
.
x
,
p0
.
y
,
r
,
bg
);
filledCircleColor
(
rendere
r
,
p0
.
x
,
p0
.
y
,
r
,
bg
);
circleColor
(
sc
r
,
p0
.
x
,
p0
.
y
,
r
,
fg
);
circleColor
(
rendere
r
,
p0
.
x
,
p0
.
y
,
r
,
fg
);
}
}
}
}
...
@@ -29,7 +29,7 @@ bool Circle::eventHandler(const SDL_Event& ev) {
...
@@ -29,7 +29,7 @@ bool Circle::eventHandler(const SDL_Event& ev) {
draw
();
draw
();
}
}
return
true
;
return
true
;
}
else
if
(
ev
.
type
==
SDL_MOUSEMOTION
&&
ev
.
motion
.
state
)
{
// drag
}
else
if
(
ev
.
type
==
SDL_MOUSEMOTION
&&
ev
.
motion
.
state
!=
0
)
{
// drag
move
(
Point
(
ev
.
motion
.
xrel
,
ev
.
motion
.
yrel
));
move
(
Point
(
ev
.
motion
.
xrel
,
ev
.
motion
.
yrel
));
return
true
;
return
true
;
}
}
...
...
SDL_bboard/main.cpp
View file @
1c066383
...
@@ -44,15 +44,19 @@
...
@@ -44,15 +44,19 @@
#include "memtrace.h"
#include "memtrace.h"
/// segédfüggvény az SDL inicializálásához
/// segédfüggvény az SDL inicializálásához
/// @return surface pointer vagy 0
/// @return renderer pointer vagy 0
SDL_Surface
*
init
()
{
SDL_Renderer
*
init
()
{
if
(
SDL_Init
(
SDL_INIT_VIDEO
)
<
0
)
if
(
SDL_Init
(
SDL_INIT_EVERYTHING
)
<
0
)
{
return
NULL
;
return
0
;
/// SDL jelen változata lezárja a szabványos kimeneteteket és fájlba ír.
}
/// Ezért újra kinyitjuk
SDL_Window
*
sdlWindow
;
std
::
freopen
(
"CON"
,
"w"
,
stdout
);
SDL_Renderer
*
sdlRenderer
;
std
::
freopen
(
"CON"
,
"w"
,
stderr
);
if
(
SDL_CreateWindowAndRenderer
(
640
,
480
,
SDL_WINDOW_RESIZABLE
,
&
sdlWindow
,
&
sdlRenderer
)
<
0
)
{
return
SDL_SetVideoMode
(
1024
,
768
,
0
,
SDL_ANYFORMAT
);
return
0
;
}
SDL_RenderClear
(
sdlRenderer
);
return
sdlRenderer
;
}
}
/// Bulletinboard kezelő panelje
/// Bulletinboard kezelő panelje
...
@@ -99,14 +103,15 @@ void quit(const SDL_Event&, int) {
...
@@ -99,14 +103,15 @@ void quit(const SDL_Event&, int) {
}
}
int
main
(
int
argc
,
char
**
argv
)
{
int
main
(
int
argc
,
char
**
argv
)
{
{
SDL_
Surface
*
screen
=
init
();
SDL_
Renderer
*
renderer
=
init
();
if
(
screen
==
NULL
)
{
if
(
renderer
==
NULL
)
{
std
::
cerr
<<
"Nem sikerult az
SDL INIT:
"
<<
SDL_GetError
()
<<
std
::
endl
;
std
::
cerr
<<
"Nem sikerult az
inicializálás
"
<<
SDL_GetError
()
<<
std
::
endl
;
return
1
;
return
1
;
}
}
// Application shell létrehozása
// Application shell létrehozása
AppShell
app
(
screen
);
AppShell
app
(
renderer
);
Bboard
*
bb
=
new
Bboard
;
// Bulletinboard
Bboard
*
bb
=
new
Bboard
;
// Bulletinboard
// Bbpanel olyan osztály, ami segít a gombokat kezelni.
// Bbpanel olyan osztály, ami segít a gombokat kezelni.
Bbpanel
panel
(
*
bb
);
// ismernie kell a Bulletinboard-ot
Bbpanel
panel
(
*
bb
);
// ismernie kell a Bulletinboard-ot
...
@@ -123,6 +128,5 @@ int main(int argc, char** argv) {
...
@@ -123,6 +128,5 @@ int main(int argc, char** argv) {
// eseményhurok
// eseményhurok
app
.
mainLoop
();
app
.
mainLoop
();
SDL_Quit
();
SDL_Quit
();
}
/// memtrace miatt minden egy belső blokkban van.
return
0
;
return
memtrace
::
mem_check
();
/// SDL kilépésekor már nem tud kiírni.
}
}
SDL_bboard/memtrace.cpp
View file @
1c066383
...
@@ -3,7 +3,11 @@ Memoriaszivargas-detektor
...
@@ -3,7 +3,11 @@ Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011
Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu
petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013.
Kanari: Szeberenyi Imre, 2013.
VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016.
mem_dump: 2016.
meset felszabaditaskor: 2018.
typo: 2019.
singleton: 2019.
*********************************/
*********************************/
/*definialni kell, ha nem paracssorbol allitjuk be (-DMEMTRACE) */
/*definialni kell, ha nem paracssorbol allitjuk be (-DMEMTRACE) */
...
@@ -40,7 +44,7 @@ mem_dump: 2016.
...
@@ -40,7 +44,7 @@ mem_dump: 2016.
/* Segedfuggvenyek es egyebek */
/* Segedfuggvenyek es egyebek */
/*******************************************************************/
/*******************************************************************/
START_NAMESPACE
START_NAMESPACE
static
FILE
*
fperror
=
stderr
;
static
FILE
*
fperror
;
#ifdef MEMTRACE_TO_MEMORY
#ifdef MEMTRACE_TO_MEMORY
static
const
unsigned
int
CANARY_LEN
=
64
;
static
const
unsigned
int
CANARY_LEN
=
64
;
#else
#else
...
@@ -123,37 +127,37 @@ START_NAMESPACE
...
@@ -123,37 +127,37 @@ START_NAMESPACE
}
}
/* memoriateruletet dump */
/* memoriateruletet dump */
static
void
dump_memory
(
void
const
*
mem
,
size_t
size
,
size_t
can_len
)
{
static
void
dump_memory
(
void
const
*
mem
,
size_t
size
,
size_t
can_len
,
FILE
*
fp
)
{
unsigned
char
const
*
m
=
(
unsigned
char
const
*
)
mem
;
unsigned
char
const
*
m
=
(
unsigned
char
const
*
)
mem
;
unsigned
int
s
,
o
;
unsigned
int
s
,
o
;
if
(
can_len
>
0
)
if
(
can_len
>
0
)
fprintf
(
fp
error
,
"Dump (addr: %p kanari hossz: %d):
\n
"
,
m
+
can_len
,
can_len
);
fprintf
(
fp
,
"Dump (addr: %p kanari hossz: %d):
\n
"
,
m
+
can_len
,
(
int
)
can_len
);
else
else
fprintf
(
fp
error
,
"Dump: (addr: %p)
\n
"
,
m
);
fprintf
(
fp
,
"Dump: (addr: %p)
\n
"
,
m
);
size
+=
2
*
can_len
;
size
+=
2
*
can_len
;
for
(
s
=
0
;
s
<
(
size
+
15
)
/
16
;
s
++
)
{
for
(
s
=
0
;
s
<
(
size
+
15
)
/
16
;
s
++
)
{
fprintf
(
fp
error
,
"%04x:%c "
,
s
*
16
,
s
*
16
<
can_len
||
s
*
16
>=
size
-
can_len
?
' '
:
'*'
);
fprintf
(
fp
,
"%04x:%c "
,
s
*
16
,
s
*
16
<
can_len
||
s
*
16
>=
size
-
can_len
?
' '
:
'*'
);
for
(
o
=
0
;
o
<
16
;
o
++
)
{
for
(
o
=
0
;
o
<
16
;
o
++
)
{
if
(
o
==
8
)
fprintf
(
fp
error
,
" "
);
if
(
o
==
8
)
fprintf
(
fp
,
" "
);
if
(
s
*
16
+
o
<
size
)
if
(
s
*
16
+
o
<
size
)
fprintf
(
fp
error
,
"%02x "
,
m
[
s
*
16
+
o
]);
fprintf
(
fp
,
"%02x "
,
m
[
s
*
16
+
o
]);
else
else
fprintf
(
fp
error
,
" "
);
fprintf
(
fp
,
" "
);
}
}
fprintf
(
fp
error
,
" "
);
fprintf
(
fp
,
" "
);
for
(
o
=
0
;
o
<
16
;
o
++
)
{
for
(
o
=
0
;
o
<
16
;
o
++
)
{
if
(
s
*
16
+
o
<
size
)
if
(
s
*
16
+
o
<
size
)
fprintf
(
fp
error
,
"%c"
,
isprint
(
m
[
s
*
16
+
o
])
?
m
[
s
*
16
+
o
]
:
'.'
);
fprintf
(
fp
,
"%c"
,
isprint
(
m
[
s
*
16
+
o
])
?
m
[
s
*
16
+
o
]
:
'.'
);
else
else
fprintf
(
fp
error
,
" "
);
fprintf
(
fp
,
" "
);
}
}
fprintf
(
fp
error
,
"
\n
"
);
fprintf
(
fp
,
"
\n
"
);
}
}
}
}
void
mem_dump
(
void
const
*
mem
,
size_t
size
)
{
void
mem_dump
(
void
const
*
mem
,
size_t
size
,
FILE
*
fp
)
{
dump_memory
(
mem
,
size
,
0
);
dump_memory
(
mem
,
size
,
0
,
fp
);
}
}
static
BOOL
dying
;
static
BOOL
dying
;
...
@@ -165,12 +169,12 @@ START_NAMESPACE
...
@@ -165,12 +169,12 @@ START_NAMESPACE
fprintf
(
fperror
,
"%s
\n
"
,
msg
);
fprintf
(
fperror
,
"%s
\n
"
,
msg
);
if
(
p
)
{
if
(
p
)
{
fprintf
(
fperror
,
"
\t
Pointer:
\t
%p"
,
PU
(
p
));
fprintf
(
fperror
,
"
\t
Pointer:
\t
%p"
,
PU
(
p
));
if
(
size
)
fprintf
(
fperror
,
" (%
u byte)"
,
(
unsigned
)
size
);
if
(
size
)
fprintf
(
fperror
,
" (%
d byte)"
,
(
int
)
size
);
fprintf
(
fperror
,
"
\n
"
);
fprintf
(
fperror
,
"
\n
"
);
}
}
if
(
a
)
print_call
(
"
\t
Foglalas:
\t
"
,
*
a
);
if
(
a
)
print_call
(
"
\t
Foglalas:
\t
"
,
*
a
);
if
(
d
)
print_call
(
"
\t
Felszabaditas:
\t
"
,
*
d
);
if
(
d
)
print_call
(
"
\t
Felszabaditas:
\t
"
,
*
d
);
if
(
p
)
dump_memory
(
p
,
size
,
CANARY_LEN
);
if
(
p
)
dump_memory
(
p
,
size
,
CANARY_LEN
,
fperror
);
dying
=
TRUE
;
dying
=
TRUE
;
exit
(
120
);
exit
(
120
);
...
@@ -197,7 +201,7 @@ START_NAMESPACE
...
@@ -197,7 +201,7 @@ START_NAMESPACE
static
void
print_registry_item
(
registry_item
*
p
)
{
static
void
print_registry_item
(
registry_item
*
p
)
{
if
(
p
)
{
if
(
p
)
{
print_registry_item
(
p
->
next
);
print_registry_item
(
p
->
next
);
fprintf
(
fperror
,
"
\t
%p%5
u byte "
,
p
->
p
,
(
unsigned
)
p
->
size
);
fprintf
(
fperror
,
"
\t
%p%5
d byte "
,
p
->
p
,
(
int
)
p
->
size
);
print_call
(
NULL
,
p
->
call
);
print_call
(
NULL
,
p
->
call
);
if
(
p
->
call
.
par_txt
)
free
(
p
->
call
.
par_txt
);
if
(
p
->
call
.
par_txt
)
free
(
p
->
call
.
par_txt
);
if
(
p
->
call
.
file
)
free
(
p
->
call
.
file
);
if
(
p
->
call
.
file
)
free
(
p
->
call
.
file
);
...
@@ -205,9 +209,10 @@ START_NAMESPACE
...
@@ -205,9 +209,10 @@ START_NAMESPACE
}
}
}
}
/* ha nincs hiba, akkor 0-val tér vissza */
int
mem_check
(
void
)
{
int
mem_check
(
void
)
{
initialize
();
initialize
();
if
(
dying
)
return
2
;
if
(
dying
)
return
2
;
/* címzési hiba */
if
(
registry
.
next
)
{
if
(
registry
.
next
)
{
/*szivarog*/
/*szivarog*/
...
@@ -217,7 +222,7 @@ START_NAMESPACE
...
@@ -217,7 +222,7 @@ START_NAMESPACE
fprintf
(
fperror
,
"Szivargas:
\n
"
);
fprintf
(
fperror
,
"Szivargas:
\n
"
);
print_registry_item
(
registry
.
next
);
print_registry_item
(
registry
.
next
);
registry
.
next
=
NULL
;
registry
.
next
=
NULL
;
return
1
;
return
1
;
/* memória fogyás */
}
}
return
0
;
return
0
;
}
}
...
@@ -239,10 +244,15 @@ END_NAMESPACE
...
@@ -239,10 +244,15 @@ END_NAMESPACE
/*******************************************************************/
/*******************************************************************/
START_NAMESPACE
START_NAMESPACE
static
int
allocated_blks
;
int
allocated_blocks
()
{
return
allocated_blks
;
}
static
BOOL
register_memory
(
void
*
p
,
size_t
size
,
call_t
call
)
{
static
BOOL
register_memory
(
void
*
p
,
size_t
size
,
call_t
call
)
{
initialize
();
initialize
();
allocated_blks
++
;
#ifdef MEMTRACE_TO_FILE
#ifdef MEMTRACE_TO_FILE
fprintf
(
trace_file
,
"%p
\t
%d
\t
%s%s"
,
PU
(
p
),
size
,
pretty
[
call
.
f
],
call
.
par_txt
?
call
.
par_txt
:
"?"
);
fprintf
(
trace_file
,
"%p
\t
%d
\t
%s%s"
,
PU
(
p
),
(
int
)
size
,
pretty
[
call
.
f
],
call
.
par_txt
?
call
.
par_txt
:
"?"
);
if
(
call
.
f
<=
3
)
fprintf
(
trace_file
,
")"
);
if
(
call
.
f
<=
3
)
fprintf
(
trace_file
,
")"
);
fprintf
(
trace_file
,
"
\t
%d
\t
%s
\n
"
,
call
.
line
,
call
.
file
?
call
.
file
:
"?"
);
fprintf
(
trace_file
,
"
\t
%d
\t
%s
\n
"
,
call
.
line
,
call
.
file
?
call
.
file
:
"?"
);
fflush
(
trace_file
);
fflush
(
trace_file
);
...
@@ -282,6 +292,7 @@ START_NAMESPACE
...
@@ -282,6 +292,7 @@ START_NAMESPACE
{
/*C-blokk*/
{
/*C-blokk*/
registry_item
*
n
=
find_registry_item
(
p
);
registry_item
*
n
=
find_registry_item
(
p
);
if
(
n
->
next
)
{
if
(
n
->
next
)
{
allocated_blks
--
;
registry_item
*
r
=
n
->
next
;
registry_item
*
r
=
n
->
next
;
n
->
next
=
r
->
next
;
n
->
next
=
r
->
next
;
if
(
COMP
(
r
->
call
.
f
,
call
.
f
))
{
if
(
COMP
(
r
->
call
.
f
,
call
.
f
))
{
...
@@ -295,13 +306,15 @@ START_NAMESPACE
...
@@ -295,13 +306,15 @@ START_NAMESPACE
if
(
r
->
call
.
par_txt
)
free
(
r
->
call
.
par_txt
);
if
(
r
->
call
.
par_txt
)
free
(
r
->
call
.
par_txt
);
if
(
call
.
file
)
free
(
call
.
file
);
if
(
call
.
file
)
free
(
call
.
file
);
if
(
r
->
call
.
file
)
free
(
r
->
call
.
file
);
if
(
r
->
call
.
file
)
free
(
r
->
call
.
file
);
memset
(
PU
(
r
->
p
),
'f'
,
r
->
size
);
PU
(
r
->
p
)[
r
->
size
-
1
]
=
0
;
free
(
r
);
free
(
r
);
}
else
{
}
else
{
/*hibas felszabaditas*/
/*hibas felszabaditas*/
die
(
"Hibas felszabaditas:"
,
r
->
p
,
r
->
size
,
&
r
->
call
,
&
call
);
die
(
"Hibas felszabaditas:"
,
r
->
p
,
r
->
size
,
&
r
->
call
,
&
call
);
}
}
}
else
{
}
else
{
die
(
"Nem letezo adat felszabaditasa:"
,
p
,
0
,
NULL
,
&
call
);
die
(
"Nem letezo
, vagy mar felszabaditott
adat felszabaditasa:"
,
p
,
0
,
NULL
,
&
call
);
}
}
}
/*C-blokk*/
}
/*C-blokk*/
#endif
#endif
...
@@ -309,7 +322,7 @@ START_NAMESPACE
...
@@ -309,7 +322,7 @@ START_NAMESPACE
END_NAMESPACE
END_NAMESPACE
/*******************************************************************/
/*******************************************************************/
/* C-st
lus memriakezel
s */
/* C-st
ílusú memóriakezelé
s */
/*******************************************************************/
/*******************************************************************/
#ifdef MEMTRACE_C
#ifdef MEMTRACE_C
...
@@ -403,7 +416,7 @@ END_NAMESPACE
...
@@ -403,7 +416,7 @@ END_NAMESPACE
#endif
/*MEMTRACE_C*/
#endif
/*MEMTRACE_C*/
/*******************************************************************/
/*******************************************************************/
/* C++-st
lus memriakezel
s */
/* C++-st
ílusú memóriakezelé
s */
/*******************************************************************/
/*******************************************************************/
#ifdef MEMTRACE_CPP
#ifdef MEMTRACE_CPP
...
@@ -420,7 +433,7 @@ START_NAMESPACE
...
@@ -420,7 +433,7 @@ START_NAMESPACE
void
set_delete_call
(
int
line
,
const
char
*
file
)
{
void
set_delete_call
(
int
line
,
const
char
*
file
)
{
initialize
();
initialize
();
delete_call
=
pack
(
0
,
""
,
line
,
file
);
/*func
rtke lnyegtelen, majd fell
rjuk*/
delete_call
=
pack
(
0
,
""
,
line
,
file
);
/*func
értéke lényegtelen, majd felülí
rjuk*/
delete_called
=
TRUE
;
delete_called
=
TRUE
;
}
}
...
@@ -475,6 +488,17 @@ void operator delete(void * p) THROW_NOTHING {
...
@@ -475,6 +488,17 @@ void operator delete(void * p) THROW_NOTHING {
void
operator
delete
[](
void
*
p
)
THROW_NOTHING
{
void
operator
delete
[](
void
*
p
)
THROW_NOTHING
{
memtrace
::
traced_delete
(
p
,
FDELETEARR
);
memtrace
::
traced_delete
(
p
,
FDELETEARR
);
}
}
/* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void
operator
delete
(
void
*
p
,
int
,
const
char
*
)
THROW_NOTHING
{
memtrace
::
traced_delete
(
p
,
FDELETE
);
}
void
operator
delete
[](
void
*
p
,
int
,
const
char
*
)
THROW_NOTHING
{
memtrace
::
traced_delete
(
p
,
FDELETE
);
}
#endif
/*MEMTRACE_CPP*/
#endif
/*MEMTRACE_CPP*/
/*******************************************************************/
/*******************************************************************/
...
@@ -492,7 +516,7 @@ START_NAMESPACE
...
@@ -492,7 +516,7 @@ START_NAMESPACE
#ifdef MEMTRACE_TO_MEMORY
#ifdef MEMTRACE_TO_MEMORY
registry
.
next
=
NULL
;
registry
.
next
=
NULL
;
#if !defined(USE_ATEXIT_OBJECT) && defined(MEMTRACE_AUTO)
#if !defined(USE_ATEXIT_OBJECT) && defined(MEMTRACE_AUTO)
atexit
((
void
(
*
)())
mem_check
);
atexit
((
void
(
*
)(
void
))
mem_check
);
#endif
#endif
#endif
#endif
#ifdef MEMTRACE_TO_FILE
#ifdef MEMTRACE_TO_FILE
...
@@ -506,8 +530,5 @@ START_NAMESPACE
...
@@ -506,8 +530,5 @@ START_NAMESPACE
}
}
}
}
#if defined(MEMTRACE_TO_MEMORY) && defined(USE_ATEXIT_OBJECT)
int
atexit_class
::
counter
=
0
;
#endif
END_NAMESPACE
END_NAMESPACE
#endif
#endif
SDL_bboard/memtrace.h
View file @
1c066383
...
@@ -3,7 +3,10 @@ Memoriaszivargas-detektor
...
@@ -3,7 +3,10 @@ Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011
Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu
petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013.,
Kanari: Szeberenyi Imre, 2013.,
VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016.
mem_dump: 2016.
inclue-ok: 2017., 2018. 2019.
singleton: 2019.
*********************************/
*********************************/
#ifndef MEMTRACE_H
#ifndef MEMTRACE_H
...
@@ -11,7 +14,7 @@ mem_dump: 2016.
...
@@ -11,7 +14,7 @@ mem_dump: 2016.
#if defined(MEMTRACE)
#if defined(MEMTRACE)
/*ha defini
lva van, akkor a hibakat ebbe a fajlba rja, egy
bkent stderr-re*/
/*ha defini
álva van, akkor a hibakat ebbe a fajlba írja, egyé
bkent stderr-re*/
/*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/
/*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/
/*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/
/*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/
...
@@ -69,17 +72,34 @@ mem_dump: 2016.
...
@@ -69,17 +72,34 @@ mem_dump: 2016.
#define TRACEC(func) func
#define TRACEC(func) func
#endif
#endif
/* A Visual Studio figyelmen kivul hagyja a "throw" deklaraciokat, a gcc -pedantic pedig igenyli.*/
// THROW deklaráció változatai
#ifdef _MSC_VER
#if defined(_MSC_VER)
/* Ha studio */
// VS rosszul kezeli az __cplusplus makrot
#if _MSC_VER < 1900
// * nem biztos, hogy jó így *
#define THROW_BADALLOC
#define THROW_BADALLOC
#define THROW_NOTHING
#define THROW_NOTHING
#else
// C++11 vagy újabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#else
#else
/* Normalis forditok */
#if __cplusplus < 201103L
// C++2003 vagy régebbi
#define THROW_BADALLOC throw (std::bad_alloc)
#define THROW_BADALLOC throw (std::bad_alloc)
#define THROW_NOTHING throw ()
#define THROW_NOTHING throw ()
#else
// C++11 vagy újabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#endif
#endif
START_NAMESPACE
int
allocated_blocks
();
END_NAMESPACE
#if defined(MEMTRACE_TO_MEMORY)
#if defined(MEMTRACE_TO_MEMORY)
START_NAMESPACE
START_NAMESPACE
int
mem_check
(
void
);
int
mem_check
(
void
);
...
@@ -87,22 +107,35 @@ END_NAMESPACE
...
@@ -87,22 +107,35 @@ END_NAMESPACE
#endif
#endif
#if defined(MEMTRACE_TO_MEMORY) && defined(USE_ATEXIT_OBJECT)
#if defined(MEMTRACE_TO_MEMORY) && defined(USE_ATEXIT_OBJECT)
#include <cstdio>
START_NAMESPACE
START_NAMESPACE
class
atexit_class
{
class
atexit_class
{
private
:
private
:
static
int
counter
;
public
:
atexit_class
()
{
atexit_class
()
{
counter
++
;
#if defined(CPORTA) && !defined(CPORTA_NOSETBUF)
setbuf
(
stdout
,
0
);
setbuf
(
stderr
,
0
);
#endif
}
public
:
static
atexit_class
&
get_atexit_obj
()
{
static
atexit_class
instance
;
// singleton példány
return
instance
;
}
int
check
()
{
return
mem_check
();
}
}
~
atexit_class
()
{
~
atexit_class
()
{
if
(
--
counter
==
0
)
check
();
mem_check
();
}
}
};
};
static
atexit_class
atexit_obj
;
/// A statikus referencia minden fordítási egységben keletkezik, de
/// mindegyik egyetlen példányra fog hivatkozni a singleton minta miatt
static
atexit_class
&
atexit_obj
=
atexit_class
::
get_atexit_obj
();
END_NAMESPACE
END_NAMESPACE
#endif
/*MEMTRACE_TO_MEMORY && USE_ATEXIT_OBJECT*/
#endif
/*MEMTRACE_TO_MEMORY && USE_ATEXIT_OBJECT*/
...
@@ -111,8 +144,15 @@ END_NAMESPACE
...
@@ -111,8 +144,15 @@ END_NAMESPACE
#include <stdlib.h>
#include <stdlib.h>
#ifdef __cplusplus
#ifdef __cplusplus
#include <iostream>
#include <iostream>
/* ide gyjtjk a nemtrace-vel sszeakad headereket, hogy elbb legyenek */
/* ide gyűjtjük a nemtrace-vel összeakadó headereket, hogy előbb legyenek */
#include <fstream> // VS 2013 headerjben van deleted definici
#include <fstream> // VS 2013 headerjében van deleted definició
#include <sstream>
#include <vector>
#include <list>
#include <map>
#include <algorithm>
#include <functional>
#endif
#endif
#ifdef MEMTRACE_CPP
#ifdef MEMTRACE_CPP
namespace
std
{
namespace
std
{
...
@@ -138,7 +178,8 @@ START_NAMESPACE
...
@@ -138,7 +178,8 @@ START_NAMESPACE
#define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__)
#define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__)
void
*
traced_realloc
(
void
*
old
,
size_t
size
,
const
char
*
size_txt
,
int
line
,
const
char
*
file
);
void
*
traced_realloc
(
void
*
old
,
size_t
size
,
const
char
*
size_txt
,
int
line
,
const
char
*
file
);
void
mem_dump
(
void
const
*
mem
,
size_t
size
);
void
mem_dump
(
void
const
*
mem
,
size_t
size
,
FILE
*
fp
);
END_NAMESPACE
END_NAMESPACE
#endif
/*MEMTRACE_C*/
#endif
/*MEMTRACE_C*/
...
@@ -159,8 +200,18 @@ void * operator new[](size_t size) THROW_BADALLOC;
...
@@ -159,8 +200,18 @@ void * operator new[](size_t size) THROW_BADALLOC;
void
operator
delete
(
void
*
p
)
THROW_NOTHING
;
void
operator
delete
(
void
*
p
)
THROW_NOTHING
;
void
operator
delete
[](
void
*
p
)
THROW_NOTHING
;
void
operator
delete
[](
void
*
p
)
THROW_NOTHING
;
/* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void
operator
delete
(
void
*
p
,
int
,
const
char
*
)
THROW_NOTHING
;
void
operator
delete
[](
void
*
p
,
int
,
const
char
*
)
THROW_NOTHING
;
#define new new(__LINE__, __FILE__)
#define new new(__LINE__, __FILE__)
#define delete memtrace::set_delete_call(__LINE__, __FILE__),delete
#define delete memtrace::set_delete_call(__LINE__, __FILE__),delete
#ifdef CPORTA
#define system(...) // system(__VA_ARGS__)
#endif
#endif
/*MEMTRACE_CPP*/
#endif
/*MEMTRACE_CPP*/
#endif
/*FROM_MEMTRACE_CPP*/
#endif
/*FROM_MEMTRACE_CPP*/
...
...
SDL_bboard/widget.cpp
View file @
1c066383
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
#include "widget.h"
#include "widget.h"
#include "memtrace.h"
#include "memtrace.h"
SDL_
Surface
*
Widget
::
sc
r
;
///< statikus tag létrehozása
SDL_
Renderer
*
Widget
::
rendere
r
;
///< statikus tag létrehozása
/// move - eltolja a widget origóját
/// move - eltolja a widget origóját
/// @param d - eltolás
/// @param d - eltolás
...
...
SDL_bboard/widget.h
View file @
1c066383
...
@@ -6,8 +6,8 @@
...
@@ -6,8 +6,8 @@
#ifndef WIDGET_H
#ifndef WIDGET_H
#define WIDGET_H
#define WIDGET_H
#include <SDL.h>
#include <SDL
2/sdl
.h>
#include <SDL_gfxPrimitives.h>
#include <SDL
2/SDL2
_gfxPrimitives.h>
#include "point.h"
#include "point.h"
#include "color.h"
#include "color.h"
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
/// Nem szép megoldás, de szebb mintha globális lenne.
/// Nem szép megoldás, de szebb mintha globális lenne.
class
Widget
{
class
Widget
{
protected
:
protected
:
static
SDL_
Surface
*
scr
;
///< eldugott globális változó
static
SDL_
Renderer
*
renderer
;
///< eldugott globális változó
Point
p0
;
///< Widget origója
Point
p0
;
///< Widget origója
Color
fg
;
///< Előtér szín
Color
fg
;
///< Előtér szín
Color
bg
;
///< Háttérszín
Color
bg
;
///< Háttérszín
...
@@ -27,9 +27,9 @@ public:
...
@@ -27,9 +27,9 @@ public:
const
Color
&
fg
=
WHITE
,
const
Color
&
fg
=
WHITE
,
const
Color
&
bg
=
BLACK
)
:
p0
(
p0
),
fg
(
fg
),
bg
(
bg
)
{}
const
Color
&
bg
=
BLACK
)
:
p0
(
p0
),
fg
(
fg
),
bg
(
bg
)
{}
///
suface
beállítása
///
renderer
beállítása
/// @param
s - SDL surface
/// @param
r - SDL remderer
static
void
set
Surface
(
SDL_Surface
*
s
)
{
scr
=
s
;
}
static
void
set
Renderer
(
SDL_Renderer
*
r
)
{
renderer
=
r
;
}
/// contains
/// contains
/// Egy adott pontról eldönti, hogy a widget területére esik-e
/// Egy adott pontról eldönti, hogy a widget területére esik-e
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment