Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Tomáš Jakubec
GTMesh
Commits
36116369
Commit
36116369
authored
Jan 15, 2021
by
Tomáš Jakubec
Browse files
change of the printing system
parent
fb9deba6
Pipeline
#2590
failed with stage
in 4 seconds
Changes
11
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/GTMesh/Debug/CSVLogger.h
deleted
100644 → 0
View file @
fb9deba6
#ifndef CSVLOGGER_H
#define CSVLOGGER_H
#include
<string>
#include
<fstream>
#include
"VariableExport.h"
/**
* @brief The HtmlLogger class
* has opened file to write log
* if it opens existing file overwrites it.
* in destructor it closes the file.
*/
class
CSVLogger
{
std
::
string
logFileName
=
""
;
std
::
ofstream
*
logFile
;
int
groupIndex
=
0
;
void
writeHeadder
()
{
(
*
logFile
)
<<
"Group Index;Line;File;Expression;Value
\n
"
;
}
public:
CSVLogger
(){
logFile
=
nullptr
;}
/**
* @brief HtmlLogger
* opens specified file for writing
* @param fileName
*
*/
CSVLogger
(
const
char
*
fileName
)
:
CSVLogger
(){
logFileName
=
fileName
;
}
~
CSVLogger
(){
destroy
();
}
/**
* @brief Create
* opens specified file and writes headder and script in html
* @param fileName
*/
void
create
(
const
char
*
fileName
){
if
(
logFile
){
logFile
->
close
();
delete
logFile
;
}
logFile
=
new
std
::
ofstream
(
fileName
);
writeHeadder
();
}
void
destroy
(){
if
(
logFile
){
logFile
->
close
();
delete
logFile
;
}
}
template
<
typename
VAR_NAME
,
typename
VAR
,
typename
...
REST
>
void
writeVar
(
VAR_NAME
name
,
VAR
value
,
REST
...
rest
){
// create file if not logFile is nullptr
if
(
!
logFile
)
create
(
logFileName
.
c_str
());
(
*
logFile
)
<<
name
<<
", "
<<
value
;
logFile
->
flush
();
writeVar
(
rest
...);
}
template
<
typename
VAR_NAME
,
typename
VAR
>
void
writeVar
(
VAR_NAME
name
,
VAR
value
){
// create file if not logFile is nullptr
if
(
!
logFile
)
create
(
logFileName
.
c_str
());
(
*
logFile
)
<<
name
<<
", "
<<
value
;
logFile
->
flush
();
}
template
<
typename
VAR_NAME
,
typename
VAR
,
typename
...
REST
>
void
writeVar
(
int
line
,
std
::
string
&
cppFile
,
VAR_NAME
name
,
VAR
value
,
REST
...
rest
){
// create file if not logFile is nullptr
if
(
!
logFile
)
create
(
logFileName
.
c_str
());
(
*
logFile
)
<<
groupIndex
<<
';'
<<
line
<<
";
\"
"
<<
cppFile
<<
"
\"
;
\"
"
<<
name
<<
"
\"
;"
;
VariableExport
<>::
exportVariable
(
*
logFile
,
value
);
(
*
logFile
)
<<
"
\n
"
;
writeVar
(
line
,
cppFile
,
rest
...);
}
template
<
typename
VAR_NAME
,
typename
VAR
>
void
writeVar
(
int
line
,
std
::
string
&
cppFile
,
VAR_NAME
name
,
VAR
value
){
// create file if not logFile is nullptr
if
(
!
logFile
)
create
(
logFileName
.
c_str
());
(
*
logFile
)
<<
groupIndex
<<
';'
<<
line
<<
";
\"
"
<<
cppFile
<<
"
\"
;
\"
"
<<
name
<<
"
\"
;"
;
VariableExport
<>::
exportVariable
(
*
logFile
,
value
);
(
*
logFile
)
<<
"
\n
"
;
groupIndex
++
;
}
template
<
typename
VAR_NAME
,
typename
VAR
,
typename
...
REST
>
void
writeVar
(
int
line
,
const
char
*
cppFile
,
VAR_NAME
name
,
VAR
value
,
REST
...
rest
){
std
::
string
file
;
int
i
=
0
;
while
(
cppFile
[
i
]
!=
'\0'
){
if
(
cppFile
[
i
]
==
'\\'
){
file
+=
"
\\\\
"
;
}
else
{
file
+=
cppFile
[
i
];
}
i
++
;
}
writeVar
(
line
,
file
,
name
,
value
,
rest
...);
}
template
<
typename
VAR_NAME
,
typename
VAR
>
void
writeVar
(
int
line
,
const
char
*
cppFile
,
VAR_NAME
name
,
VAR
value
){
std
::
string
file
;
int
i
=
0
;
while
(
cppFile
[
i
]
!=
'\0'
){
if
(
cppFile
[
i
]
==
'\\'
){
file
+=
"
\\\\
"
;
}
else
{
file
+=
cppFile
[
i
];
}
i
++
;
}
writeVar
(
line
,
file
,
name
,
value
);
}
};
#endif // CSVLOGGER_H
src/GTMesh/Debug/ConsoleLogger.h
View file @
36116369
...
...
@@ -3,13 +3,16 @@
#include
"VariableExport.h"
#ifdef _WIN32
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include
<windows.h>
#endif
/**
* @brief The ConsoleLogger class
*/
template
<
VARIABLE_EXPORT_METHOD
method
=
VARIABLE_EXPORT_METHOD
::
VARIABLE_EXPORT_METHOD_OSTREAM
>
class
ConsoleLogger
{
bool
mColoredOutput
=
true
;
//!< If true then the output the variable names and their values are highlighted.
bool
mOnlyFilename
=
false
;
//!< If true then the filename is exported without its path.
...
...
@@ -87,7 +90,7 @@ public:
printHeader
(
line
,
funcName
,
sourceFile
,
prefix
);
std
::
cerr
<<
"==> "
;
insertMessageColor
();
VariableExport
<>
::
exportVariable
(
std
::
cerr
,
message
);
VariableExport
::
exportVariable
(
std
::
cerr
,
message
);
resetColor
();
std
::
cerr
<<
" <=="
<<
std
::
endl
;
...
...
@@ -117,7 +120,7 @@ private:
resetColor
();
std
::
cerr
<<
" ]] ==> "
<<
std
::
flush
;
insertValueColor
();
VariableExport
<>
::
exportVariable
(
std
::
cerr
,
value
);
VariableExport
::
exportVariable
(
std
::
cerr
,
value
);
resetColor
();
std
::
cerr
<<
"
\n
"
;
...
...
@@ -189,80 +192,39 @@ private:
}
return
res
;
}
};
template
<
>
class
ConsoleLogger
<
VARIABLE_EXPORT_METHOD
::
VARIABLE_EXPORT_METHOD_STDIO
>
{
public:
template
<
typename
MSGTYPE
,
typename
...
MSGTYPES
>
static
void
writeMessage
(
const
char
*
prefix
,
int
line
,
const
char
*
sourceFile
,
const
MSGTYPE
&
message
,
const
MSGTYPES
&
...
rest
)
{
writeMessage
(
prefix
,
line
,
sourceFile
,
message
);
writeMessage
(
prefix
,
line
,
sourceFile
,
rest
...);
static
void
writeMessage
C
(
const
char
*
prefix
,
int
line
,
const
char
*
funcName
,
const
char
*
sourceFile
,
const
MSGTYPE
&
message
,
const
MSGTYPES
&
...
rest
)
{
writeMessage
C
(
prefix
,
funcName
,
line
,
sourceFile
,
message
);
writeMessage
C
(
prefix
,
funcName
,
line
,
sourceFile
,
rest
...);
}
template
<
typename
MSGTYPE
>
static
void
writeMessage
(
const
char
*
prefix
,
int
line
,
const
char
*
sourceFile
,
const
MSGTYPE
&
message
)
{
printf
(
"%s %s << %i >> ==> "
,
prefix
,
sourceFile
,
line
);
static
void
writeMessageC
(
const
char
*
prefix
,
int
line
,
const
char
*
funcName
,
const
char
*
sourceFile
,
const
MSGTYPE
&
message
)
{
printf
(
"%s %s: %i <%s> ==> "
,
prefix
,
sourceFile
,
line
,
funcName
);
VariableExport
<
VARIABLE_EXPORT_METHOD
::
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
message
);
VariableExport
::
exportVariable
(
message
);
printf
(
" <==
\n
"
);
}
template
<
typename
VAR_NAME
,
typename
VAR
,
typename
...
REST
>
static
void
writeVar
(
VAR_NAME
name
,
VAR
value
,
REST
...
rest
){
writeVar
(
name
,
value
);
writeVar
(
rest
...);
}
template
<
typename
VAR_NAME
,
typename
VAR
>
static
void
writeVar
(
VAR_NAME
name
,
VAR
value
){
std
::
cerr
<<
"variable "
<<
name
<<
" has value: "
<<
value
;
}
template
<
typename
VAR_NAME
,
typename
VAR
,
typename
...
REST
>
static
void
writeVar
(
int
line
,
const
char
*
cppFile
,
const
VAR_NAME
&
name
,
const
VAR
&
value
,
const
REST
&
...
rest
){
writeVar
(
line
,
cppFile
,
name
,
value
);
writeVar
(
line
,
cppFile
,
rest
...);
}
template
<
typename
VAR
>
static
void
writeVar
(
int
line
,
const
char
*
cppFile
,
const
char
*
name
,
const
VAR
&
value
){
static
void
writeVarC
(
int
line
,
const
char
*
funcName
,
const
char
*
cppFile
,
const
VAR_NAME
&
name
,
const
VAR
&
value
,
const
REST
&
...
rest
){
printf
(
"== %s << %i >> [[ %s ]] ==> "
,
cppFile
,
line
,
name
);
VariableExport
<
VARIABLE_EXPORT_METHOD
::
VARIABLE_EXPORT_METHOD_STDIO
>::
exportVariable
(
value
);
printf
(
"
\n
"
);
writeVarC
(
line
,
funcName
,
cppFile
,
name
,
value
);
writeVarC
(
line
,
funcName
,
cppFile
,
rest
...);
}
template
<
typename
VAR
>
static
void
writeVar
(
int
line
,
const
char
*
cppFile
,
const
char
*
name
,
const
std
::
initializer_list
<
VAR
>&
value
){
printf
(
"== %s << %i >> [[ %s ]] ==> "
,
cppFile
,
line
,
name
);
static
void
writeVarC
(
int
line
,
const
char
*
funcName
,
const
char
*
cppFile
,
const
char
*
name
,
const
VAR
&
value
){
printf
(
"== %s: %i <%s> [[ %s ]] ==> "
,
cppFile
,
line
,
funcName
,
name
);
VariableExport
<
VARIABLE_EXPORT_METHOD
::
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
value
);
VariableExport
::
exportVariable
(
value
);
printf
(
"
\n
"
);
}
...
...
src/GTMesh/Debug/Debug.h
View file @
36116369
...
...
@@ -5,7 +5,6 @@
#include
"../Macros/MacroForEach.h"
#include
<iostream>
#include
"HTMLLogger.h"
#include
"CSVLogger.h"
#include
"JSONLogger.h"
#include
"ConsoleLogger.h"
#include
"../Singleton/Singleton.h"
...
...
@@ -18,14 +17,12 @@ namespace dbg {
struct
DBGStatics
{
HtmlLogger
HDBGLog
=
HtmlLogger
(
"DBG.html"
);
CSVLogger
CSVDBGLog
=
CSVLogger
(
"DBG.csv"
);
JSONLogger
JSONDBGLog
=
JSONLogger
(
"DBG.json"
);
};
ConsoleLogger
<>
&
getDebugConsoleLogger
()
{
static
ConsoleLogger
<>
consoleLogger
=
ConsoleLogger
<>
();
inline
ConsoleLogger
&
getDebugConsoleLogger
()
{
static
ConsoleLogger
consoleLogger
=
ConsoleLogger
();
return
consoleLogger
;
}
}
...
...
@@ -36,7 +33,7 @@ namespace dbg {
#define DBGVAR(...) dbg::getDebugConsoleLogger().writeVariable(__LINE__, __func__, __FILE__, FOR_EACH(STRVAR, __VA_ARGS__))
#define DBGVARCOND(condition, ...) if(condition) DBGVAR(__VA_ARGS__)
#define DBGVAR_STDIO(...) ConsoleLogger
<VARIABLE_EXPORT_METHOD_STDIO>
::writeVar(__LINE__, __FILE__, FOR_EACH(STRVAR, __VA_ARGS__))
#define DBGVAR_STDIO(...) ConsoleLogger::writeVar
C
(__LINE__, __FILE__,
__func__,
FOR_EACH(STRVAR, __VA_ARGS__))
#define DBGVARCOND_STDIO(condition, ...) if(condition) DBGVAR_STDIO(__VA_ARGS__)
#define DBGMSG(...) dbg::getDebugConsoleLogger().writeMessage("++", __LINE__, __func__, __FILE__, __VA_ARGS__)
...
...
@@ -62,7 +59,7 @@ exit(1);}
#define DBGCHECK dbg::getDebugConsoleLogger().writeMessage("--", __LINE__, __func__, __FILE__, "check line")
#define DBGCHECK_STDIO ConsoleLogger::writeMessageC("--", __LINE__, __func__, __FILE__, "check line")
#else
...
...
src/GTMesh/Debug/HTMLLogger.h
View file @
36116369
...
...
@@ -93,7 +93,7 @@ public:
if
(
!
logFile
)
create
(
logFileName
.
c_str
());
(
*
logFile
)
<<
"["
<<
groupIndex
<<
", "
<<
line
<<
", '"
<<
cppFile
<<
"', '"
<<
name
<<
"', "
;
VariableExport
<>
::
exportVariable
(
*
logFile
,
value
);
VariableExport
::
exportVariable
(
*
logFile
,
value
);
(
*
logFile
)
<<
"],
\n
"
;
writeVar
(
line
,
cppFile
,
rest
...);
}
...
...
@@ -106,7 +106,7 @@ public:
if
(
!
logFile
)
create
(
logFileName
.
c_str
());
(
*
logFile
)
<<
"["
<<
groupIndex
<<
", "
<<
line
<<
", '"
<<
cppFile
<<
"', '"
<<
name
<<
"', "
;
VariableExport
<>
::
exportVariable
(
*
logFile
,
value
);
VariableExport
::
exportVariable
(
*
logFile
,
value
);
(
*
logFile
)
<<
"],
\n
"
;
groupIndex
++
;
...
...
src/GTMesh/Debug/JSONLogger.h
View file @
36116369
...
...
@@ -17,7 +17,6 @@ class JSONLogger {
std
::
ofstream
*
logFile
;
int
groupIndex
=
0
;
bool
firstWrite
=
true
;
public:
JSONLogger
(){
logFile
=
nullptr
;}
...
...
@@ -85,9 +84,9 @@ public:
firstWrite
=
false
;
}
(
*
logFile
)
<<
"
\t
{
\n\t\t\"
expr
\"
:
\"
"
<<
std
::
quoted
(
name
)
<<
"
\
"
,
\n\t\t\"
data
\"
: "
;
VariableExport
<>
::
exportVariable
(
*
logFile
,
value
);
(
*
logFile
)
<<
"
\t
{
\n\t\t\"
expr
\"
: "
<<
std
::
quoted
(
name
)
<<
",
\n\t\t\"
data
\"
: "
;
VariableExport
::
exportVariable
(
*
logFile
,
value
);
(
*
logFile
)
<<
"
\n
}"
;
...
...
@@ -109,9 +108,9 @@ public:
"
\n\t\t\"
gInd
\"
: "
<<
groupIndex
<<
","
<<
"
\n\t\t\"
file
\"
:
\"
"
<<
cppFile
<<
"
\"
,"
<<
"
\n\t\t\"
line
\"
: "
<<
line
<<
","
<<
"
\n\t\t\"
expr
\"
:
\"
"
<<
std
::
quoted
(
name
)
<<
"
\
"
,"
<<
"
\n\t\t\"
expr
\"
: "
<<
std
::
quoted
(
name
)
<<
","
<<
"
\n\t\t\"
data
\"
: "
;
VariableExport
<>
::
exportVariable
(
*
logFile
,
value
);
VariableExport
::
exportVariable
(
*
logFile
,
value
);
(
*
logFile
)
<<
"
\n\t
}"
;
writeVar
(
line
,
cppFile
,
rest
...);
...
...
@@ -133,9 +132,9 @@ public:
"
\n\t\t\"
gInd
\"
: "
<<
groupIndex
<<
","
<<
"
\n\t\t\"
file
\"
:
\"
"
<<
cppFile
<<
"
\"
,"
<<
"
\n\t\t\"
line
\"
: "
<<
line
<<
","
<<
"
\n\t\t\"
expr
\"
:
\"
"
<<
std
::
quoted
(
name
)
<<
"
\
"
,"
<<
"
\n\t\t\"
expr
\"
: "
<<
std
::
quoted
(
name
)
<<
","
<<
"
\n\t\t\"
data
\"
: "
;
VariableExport
<>
::
exportVariable
(
*
logFile
,
value
);
VariableExport
::
exportVariable
(
*
logFile
,
value
);
(
*
logFile
)
<<
"
\n\t
}"
;
...
...
src/GTMesh/Debug/Printers/PrintIndexable.h
View file @
36116369
...
...
@@ -19,7 +19,7 @@ struct PrintIndexable {
static
void
print
(
std
::
ostream
&
ost
,
const
Indexable
&
vec
)
{
ost
<<
"[ "
;
for
(
decltype
(
size
(
vec
))
i
=
0
;
i
<
size
(
vec
);
i
++
){
VariableExport
<>
::
exportVariable
(
ost
,
vec
[
i
]);
VariableExport
::
exportVariable
(
ost
,
vec
[
i
]);
if
(
i
<
size
(
vec
)
-
1
){
ost
<<
", "
;
}
...
...
@@ -32,7 +32,7 @@ struct PrintIndexable {
static
void
print
(
std
::
ostream
&
ost
,
const
Indexable
&
vec
,
const
std
::
tuple
<
TraitsTypes
...
>&
traitsTuple
)
{
ost
<<
"[ "
;
for
(
decltype
(
size
(
vec
))
i
=
0
;
i
<
size
(
vec
);
i
++
){
VariableExport
<>
::
exportVariable
(
ost
,
vec
[
i
],
traitsTuple
);
VariableExport
::
exportVariable
(
ost
,
vec
[
i
],
traitsTuple
);
if
(
i
<
size
(
vec
)
-
1
){
ost
<<
", "
;
}
...
...
@@ -45,7 +45,7 @@ struct PrintIndexable {
static
void
print
(
const
Indexable
&
vec
)
{
printf
(
"[ "
);
for
(
decltype
(
size
(
vec
))
i
=
0
;
i
<
size
(
vec
);
i
++
){
VariableExport
<
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
vec
[
i
]);
VariableExport
::
exportVariable
(
vec
[
i
]);
if
(
i
<
size
(
vec
)
-
1
){
printf
(
", "
);
}
...
...
@@ -58,7 +58,7 @@ struct PrintIndexable {
static
void
print
(
const
Indexable
&
vec
,
const
std
::
tuple
<
TraitsTypes
...
>&
traitsTuple
)
{
printf
(
"[ "
);
for
(
decltype
(
size
(
vec
))
i
=
0
;
i
<
size
(
vec
);
i
++
){
VariableExport
<
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
vec
[
i
],
traitsTuple
);
VariableExport
::
exportVariable
(
vec
[
i
],
traitsTuple
);
if
(
i
<
size
(
vec
)
-
1
){
printf
(
", "
);
}
...
...
src/GTMesh/Debug/Printers/PrintIterable.h
View file @
36116369
...
...
@@ -14,7 +14,7 @@ struct PrintIterable {
auto
it
=
list
.
begin
();
ost
<<
"[ "
;
while
(
it
!=
list
.
end
()){
VariableExport
<>
::
exportVariable
(
ost
,
*
it
);
VariableExport
::
exportVariable
(
ost
,
*
it
);
if
(
++
it
!=
list
.
end
()){
ost
<<
", "
;
}
...
...
@@ -29,7 +29,7 @@ struct PrintIterable {
auto
it
=
list
.
begin
();
ost
<<
"[ "
;
while
(
it
!=
list
.
end
()){
VariableExport
<>
::
exportVariable
(
ost
,
*
it
,
traitsTuple
);
VariableExport
::
exportVariable
(
ost
,
*
it
,
traitsTuple
);
if
(
++
it
!=
list
.
end
()){
ost
<<
", "
;
}
...
...
@@ -44,7 +44,7 @@ struct PrintIterable {
auto
it
=
list
.
begin
();
printf
(
"[ "
);
while
(
it
!=
list
.
end
()){
VariableExport
<
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
*
it
);
VariableExport
::
exportVariable
(
*
it
);
if
(
++
it
!=
list
.
end
()){
printf
(
", "
);
}
...
...
@@ -60,7 +60,7 @@ struct PrintIterable {
auto
it
=
list
.
begin
();
printf
(
"[ "
);
while
(
it
!=
list
.
end
()){
VariableExport
<
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
*
it
,
traitsTuple
);
VariableExport
::
exportVariable
(
*
it
,
traitsTuple
);
if
(
++
it
!=
list
.
end
()){
printf
(
", "
);
}
...
...
src/GTMesh/Debug/Printers/PrintTraitedClass.h
View file @
36116369
...
...
@@ -39,24 +39,24 @@ struct PrintTraitedClass {
static
void
print
(
std
::
ostream
&
ost
,
const
T
&
traitedClass
,
const
TraitsIO
&
traitsIO
){
ost
<<
'"'
<<
traitsIO
.
template
getName
<
Index
>()
<<
"
\"
: "
;
VariableExport
<>
::
exportVariable
(
ost
,
traitsIO
.
template
getValue
<
Index
>(
traitedClass
));
VariableExport
::
exportVariable
(
ost
,
traitsIO
.
template
getValue
<
Index
>(
traitedClass
));
}
template
<
typename
...
_Traits
,
typename
_T
=
T
>
static
void
print
(
std
::
ostream
&
ost
,
const
_T
&
traitedClass
,
const
TraitsIO
&
traitsIO
,
std
::
tuple
<
const
_Traits
&
...
>
t
)
{
ost
<<
'"'
<<
traitsIO
.
template
getName
<
Index
>()
<<
"
\"
: "
;
VariableExport
<>
::
exportVariable
(
ost
,
traitsIO
.
template
getValue
<
Index
>(
traitedClass
),
t
);
VariableExport
::
exportVariable
(
ost
,
traitsIO
.
template
getValue
<
Index
>(
traitedClass
),
t
);
}
static
void
print
(
const
T
&
traitedClass
,
const
TraitsIO
&
traitsIO
){
printf
(
"
\"
%s
\"
: "
,
traitsIO
.
template
getName
<
Index
>());
VariableExport
<
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
traitsIO
.
template
getValue
<
Index
>(
traitedClass
));
VariableExport
::
exportVariable
(
traitsIO
.
template
getValue
<
Index
>(
traitedClass
));
}
template
<
typename
...
_Traits
,
typename
_T
=
T
>
static
void
print
(
const
_T
&
traitedClass
,
const
TraitsIO
&
traitsIO
,
std
::
tuple
<
const
_Traits
&
...
>
t
)
{
printf
(
"
\"
%s
\"
: "
,
traitsIO
.
template
getName
<
Index
>());
VariableExport
<
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
traitsIO
.
template
getValue
<
Index
>(
traitedClass
),
t
);
VariableExport
::
exportVariable
(
traitsIO
.
template
getValue
<
Index
>(
traitedClass
),
t
);
}
};
...
...
@@ -75,7 +75,7 @@ struct PrintTraitedClass {
template
<
typename
Class
,
typename
PrimaryTraits
,
typename
...
SecondaryTraits
>
static
void
print
(
std
::
ostream
&
ost
,
const
TraitsBinder
<
Class
,
PrimaryTraits
,
SecondaryTraits
...
>
&
traitedClass
,
...)
{
VariableExport
<>
::
exportVariable
(
ost
,
traitedClass
.
object
,
traitedClass
.
tupTraits
);
VariableExport
::
exportVariable
(
ost
,
traitedClass
.
object
,
traitedClass
.
tupTraits
);
}
template
<
typename
Class
,
typename
PrimaryTraits
,
typename
...
SecondaryTraits
,
IsValid
<
Class
,
PrimaryTraits
,
SecondaryTraits
...>
=
true
>
...
...
@@ -100,7 +100,7 @@ struct PrintTraitedClass {
template
<
typename
Class
,
typename
PrimaryTraits
,
typename
...
SecondaryTraits
>
static
void
print
(
const
TraitsBinder
<
Class
,
PrimaryTraits
,
SecondaryTraits
...
>
&
traitedClass
,
...)
{
VariableExport
<
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
traitedClass
.
object
,
traitedClass
.
tupTraits
);
VariableExport
::
exportVariable
(
traitedClass
.
object
,
traitedClass
.
tupTraits
);
}
template
<
typename
Class
,
typename
PrimaryTraits
,
typename
...
SecondaryTraits
,
IsValid
<
Class
,
PrimaryTraits
,
SecondaryTraits
...>
=
true
>
...
...
src/GTMesh/Debug/Printers/PrintTuple.h
View file @
36116369
#ifndef PRINTTUPLE_H
#define PRINTTUPLE_H
#include
"../VariableExport.h"
#include
<GTMesh/Utils/ConstexprFor.h>
/**
* @brief Provides functions that prints std::pair and std::tuple similarly to the python.
*/
struct
PrintTuple
{
/**
* @brief Python-like print of dictionary pair of key and value.
*/
template
<
typename
T1
,
typename
T2
>
static
void
print
(
std
::
ostream
&
ost
,
const
std
::
pair
<
T1
,
T2
>&
b
,
...)
static
void
print
(
std
::
ostream
&
ost
,
const
std
::
pair
<
T1
,
T2
>&
b
)
{
ost
<<
"{ "
;
VariableExport
::
exportVariable
(
ost
,
b
.
first
);
ost
<<
": "
;
VariableExport
::
exportVariable
(
ost
,
b
.
second
);
ost
<<
"}"
;
}
template
<
typename
T1
,
typename
T2
,
typename
...
TraitsTypes
>
static
void
print
(
std
::
ostream
&
ost
,
const
std
::
pair
<
T1
,
T2
>&
b
,
const
std
::
tuple
<
TraitsTypes
...
>&
traitsTuple
)
{
ost
<<
"{ "
;
VariableExport
<
VARIABLE_EXPORT_METHOD_OSTREAM
>
::
exportVariable
(
ost
,
b
.
first
);
VariableExport
::
exportVariable
(
ost
,
b
.
first
,
traitsTuple
);
ost
<<
": "
;
VariableExport
<
VARIABLE_EXPORT_METHOD_OSTREAM
>
::
exportVariable
(
ost
,
b
.
second
);
VariableExport
::
exportVariable
(
ost
,
b
.
second
,
traitsTuple
);
ost
<<
"}"
;
}
template
<
typename
T1
,
typename
T2
>
static
void
print
(
const
std
::
pair
<
T1
,
T2
>&
b
,
...
)
static
void
print
(
const
std
::
pair
<
T1
,
T2
>&
b
)
{
printf
(
"{ "
);
VariableExport
<
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
b
.
first
);
VariableExport
::
exportVariable
(
b
.
first
);
printf
(
": "
);
VariableExport
<
VARIABLE_EXPORT_METHOD_STDIO
>
::
exportVariable
(
b
.
second
);
VariableExport
::
exportVariable
(
b
.
second
);
printf
(
"}"
);
}
template
<
unsigned
int
Index
=
0
,
bool
print
=
false
,
typename
...
Types
,
std
::
enable_if_t
<
(
Index
<
sizeof
...
(
Types
)
-
1
)
&&
!
print
,
bool
>
=
true
>
static
void
printTuple
(
std
::
ostream
&
ost
,
const
std
::
tuple
<
Types
...
>&
varTuple
)
{
printTuple
<
Index
,
true
>
(
ost
,
varTuple
);
printTuple
<
Index
+
1
>
(
ost
,
varTuple
);
template
<
typename
T1
,
typename
T2
,
typename
...
TraitsTypes
>
static
void
print
(
const
std
::
pair
<
T1
,
T2
>&
b
,
const
std
::
tuple
<
TraitsTypes
...
>&
traitsTuple
)
{
printf
(
"{ "
);
VariableExport
::
exportVariable
(
b
.
first
,
traitsTuple
);
printf
(
": "
);
VariableExport
::
exportVariable
(
b
.
second
,
traitsTuple
);
printf
(
"}"
);
}
struct
PrintTupleExec
{
template
<
unsigned
int
Index
=
0
,
typename
...
Types
>
static
void
printTuple
(
std
::
ostream
&
ost
,
const
std
::
tuple
<
Types
...
>&
varTuple
)
{
VariableExport
::
exportVariable
(
ost
,
std
::
get
<
Index
>
(
varTuple
));
if
(
Index
<
sizeof
...
(
Types
)
-
1
)
{
ost
<<
", "
;
}
}
template
<
unsigned
int
Index
=
0
,
bool
print
=
false
,
typename
...
Types
,
std
::
enable_if_t
<
(
Index
==
sizeof
...
(
Types
)
-
1
)
||
print
,
bool
>
=
true
>
static
void
printTuple
(
std
::
ostream
&
ost
,
const
std
::
tuple
<
Types
...
>&
varTuple
)
{
VariableExport
<
VARIABLE_EXPORT_METHOD_OSTREAM
>::
exportVariable
(
ost
,
std
::
get
<
Index
>
(
varTuple
));
if
(
Index
<
sizeof
...
(
Types
)
-
1
)
{
ost
<<
", "
;
template
<
unsigned
int
Index
=
0
,
typename
...
Types
,
typename
...
TraitsTypes
>
static
void
printTuple
(
std
::
ostream
&
ost
,
const
std
::
tuple
<
Types
...
>&
varTuple
,
const
std
::
tuple
<
TraitsTypes
...
>&
traitsTuple
)
{
VariableExport
::
exportVariable
(
ost
,
std
::
get
<
Index
>
(
varTuple
),
traitsTuple
);
if
(
Index
<
sizeof
...
(
Types
)
-
1
)
{
ost
<<
", "
;
}
}
}
// printf version
template
<
unsigned
int
Index
=
0
,
typename
...
Types
>
static
void
exec
(
const
std
::
tuple
<
Types
...
>&
varTuple
)
{