Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F625765
misc.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
6 KB
Referenced Files
None
Subscribers
None
misc.cpp
View Options
#include
"misc.h"
#include
<QDebug>
#include
<QPainter>
#include
<QProcess>
#include
<QWidget>
#include
<vector>
#include
"joinpath.h"
QStringList
misc::splitLines
(
QByteArray
const
&
ba
,
std
::
function
<
QString
(
char
const
*
ptr
,
size_t
len
)
>
tos
)
{
QStringList
list
;
char
const
*
begin
=
ba
.
data
();
char
const
*
end
=
begin
+
ba
.
size
();
char
const
*
ptr
=
begin
;
char
const
*
left
=
ptr
;
while
(
1
)
{
ushort
c
=
0
;
if
(
ptr
<
end
)
{
c
=
*
ptr
;
}
if
(
c
==
'\n'
||
c
==
'\r'
||
c
==
0
)
{
list
.
push_back
(
tos
(
left
,
ptr
-
left
));
if
(
c
==
0
)
break
;
if
(
c
==
'\n'
)
{
ptr
++
;
}
else
if
(
c
==
'\r'
)
{
ptr
++
;
if
(
ptr
<
end
&&
*
ptr
==
'\n'
)
{
ptr
++
;
}
}
left
=
ptr
;
}
else
{
ptr
++
;
}
}
return
list
;
}
QStringList
misc::splitLines
(
const
QString
&
text
)
{
QStringList
list
;
ushort
const
*
begin
=
text
.
utf16
();
ushort
const
*
end
=
begin
+
text
.
size
();
ushort
const
*
ptr
=
begin
;
ushort
const
*
left
=
ptr
;
while
(
1
)
{
ushort
c
=
0
;
if
(
ptr
<
end
)
{
c
=
*
ptr
;
}
if
(
c
==
'\n'
||
c
==
'\r'
||
c
==
0
)
{
list
.
push_back
(
QString
::
fromUtf16
(
left
,
ptr
-
left
));
if
(
c
==
0
)
break
;
if
(
c
==
'\n'
)
{
ptr
++
;
}
else
if
(
c
==
'\r'
)
{
ptr
++
;
if
(
ptr
<
end
&&
*
ptr
==
'\n'
)
{
ptr
++
;
}
}
left
=
ptr
;
}
else
{
ptr
++
;
}
}
return
list
;
}
void
misc::splitLines
(
char
const
*
begin
,
char
const
*
end
,
std
::
vector
<
std
::
string
>
*
out
)
{
char
const
*
ptr
=
begin
;
char
const
*
left
=
ptr
;
while
(
1
)
{
char
c
=
0
;
if
(
ptr
<
end
)
{
c
=
*
ptr
;
}
if
(
c
==
'\n'
||
c
==
'\r'
||
c
==
0
)
{
out
->
push_back
(
std
::
string
(
left
,
ptr
-
left
));
if
(
c
==
0
)
break
;
if
(
c
==
'\n'
)
{
ptr
++
;
}
else
if
(
c
==
'\r'
)
{
ptr
++
;
if
(
ptr
<
end
&&
*
ptr
==
'\n'
)
{
ptr
++
;
}
}
left
=
ptr
;
}
else
{
ptr
++
;
}
}
}
void
misc::splitLines
(
std
::
string
const
&
text
,
std
::
vector
<
std
::
string
>
*
out
)
{
char
const
*
begin
=
text
.
c_str
();
char
const
*
end
=
begin
+
text
.
size
();
splitLines
(
begin
,
end
,
out
);
}
QStringList
misc::splitWords
(
const
QString
&
text
)
{
QStringList
list
;
ushort
const
*
begin
=
text
.
utf16
();
ushort
const
*
end
=
begin
+
text
.
size
();
ushort
const
*
ptr
=
begin
;
ushort
const
*
left
=
ptr
;
while
(
1
)
{
ushort
c
=
0
;
if
(
ptr
<
end
)
{
c
=
*
ptr
;
}
if
(
QChar
::
isSpace
(
c
)
||
c
==
0
)
{
if
(
left
<
ptr
)
{
list
.
push_back
(
QString
::
fromUtf16
(
left
,
ptr
-
left
));
}
if
(
c
==
0
)
break
;
ptr
++
;
left
=
ptr
;
}
else
{
ptr
++
;
}
}
return
list
;
}
QString
misc::getFileName
(
QString
const
&
path
)
{
int
i
=
path
.
lastIndexOf
(
'/'
);
int
j
=
path
.
lastIndexOf
(
'\\'
);
if
(
i
<
j
)
i
=
j
;
if
(
i
>=
0
)
{
return
path
.
mid
(
i
+
1
);
}
return
path
;
}
QString
misc::makeDateTimeString
(
QDateTime
const
&
dt
)
{
if
(
dt
.
isValid
())
{
char
tmp
[
100
];
sprintf
(
tmp
,
"%04u-%02u-%02u %02u:%02u:%02u"
,
dt
.
date
().
year
()
,
dt
.
date
().
month
()
,
dt
.
date
().
day
()
,
dt
.
time
().
hour
()
,
dt
.
time
().
minute
()
,
dt
.
time
().
second
()
);
return
tmp
;
}
return
QString
();
}
bool
misc::starts_with
(
const
std
::
string
&
str
,
const
std
::
string
&
with
)
{
return
strncmp
(
str
.
c_str
(),
with
.
c_str
(),
with
.
size
())
==
0
;
}
std
::
string
misc::mid
(
const
std
::
string
&
str
,
int
start
,
int
length
)
{
int
size
=
(
int
)
str
.
size
();
if
(
length
<
0
)
length
=
size
;
length
+=
start
;
if
(
start
<
0
)
start
=
0
;
if
(
length
<
0
)
length
=
0
;
if
(
start
>
size
)
start
=
size
;
if
(
length
>
size
)
length
=
size
;
length
-=
start
;
return
std
::
string
(
str
.
c_str
()
+
start
,
length
);
}
#ifdef _WIN32
QString
misc::normalizePathSeparator
(
QString
const
&
str
)
{
if
(
!
str
.
isEmpty
())
{
ushort
const
*
s
=
str
.
utf16
();
size_t
n
=
str
.
size
();
std
::
vector
<
ushort
>
v
;
v
.
reserve
(
n
);
for
(
size_t
i
=
0
;
i
<
n
;
i
++
)
{
ushort
c
=
s
[
i
];
if
(
c
==
'/'
)
{
c
=
'\\'
;
}
v
.
push_back
(
c
);
}
ushort
const
*
p
=
&
v
[
0
];
return
QString
::
fromUtf16
(
p
,
n
);
}
return
QString
();
}
#else
QString
misc::normalizePathSeparator
(
QString
const
&
s
)
{
return
s
;
}
#endif
QString
misc::joinWithSlash
(
QString
const
&
left
,
QString
const
&
right
)
{
if
(
!
left
.
isEmpty
()
&&
!
right
.
isEmpty
())
{
return
joinpath
(
left
,
right
);
}
return
!
left
.
isEmpty
()
?
left
:
right
;
}
int
misc::runCommand
(
QString
const
&
cmd
,
QByteArray
*
out
)
{
out
->
clear
();
QProcess
proc
;
proc
.
start
(
cmd
);
proc
.
waitForStarted
();
proc
.
closeWriteChannel
();
proc
.
setReadChannel
(
QProcess
::
StandardOutput
);
while
(
1
)
{
QProcess
::
ProcessState
s
=
proc
.
state
();
if
(
proc
.
waitForReadyRead
(
1
))
{
while
(
1
)
{
char
tmp
[
1024
];
qint64
len
=
proc
.
read
(
tmp
,
sizeof
(
tmp
));
if
(
len
<
1
)
break
;
out
->
append
(
tmp
,
len
);
}
}
else
if
(
s
==
QProcess
::
NotRunning
)
{
break
;
}
}
return
proc
.
exitCode
();
}
int
misc::runCommand
(
QString
const
&
cmd
,
QByteArray
const
*
in
,
QByteArray
*
out
)
{
out
->
clear
();
QProcess
proc
;
proc
.
start
(
cmd
);
proc
.
waitForStarted
();
proc
.
write
(
*
in
);
proc
.
closeWriteChannel
();
proc
.
setReadChannel
(
QProcess
::
StandardOutput
);
while
(
1
)
{
QProcess
::
ProcessState
s
=
proc
.
state
();
if
(
proc
.
waitForReadyRead
(
1
))
{
while
(
1
)
{
char
tmp
[
1024
];
qint64
len
=
proc
.
read
(
tmp
,
sizeof
(
tmp
));
if
(
len
<
1
)
break
;
out
->
append
(
tmp
,
len
);
}
}
else
if
(
s
==
QProcess
::
NotRunning
)
{
break
;
}
}
return
proc
.
exitCode
();
}
void
misc::setFixedSize
(
QWidget
*
w
)
{
Qt
::
WindowFlags
flags
=
w
->
windowFlags
();
flags
&=
~
Qt
::
WindowContextHelpButtonHint
;
flags
|=
Qt
::
MSWindowsFixedSizeDialogHint
;
w
->
setWindowFlags
(
flags
);
w
->
setFixedSize
(
w
->
size
());
}
void
misc::drawFrame
(
QPainter
*
pr
,
int
x
,
int
y
,
int
w
,
int
h
,
QColor
color_topleft
,
QColor
color_bottomright
)
{
if
(
w
<
3
||
h
<
3
)
{
if
(
w
>
0
&&
h
>
0
)
{
pr
->
fillRect
(
x
,
y
,
w
,
h
,
color_topleft
);
}
}
else
{
if
(
!
color_topleft
.
isValid
())
color_topleft
=
Qt
::
black
;
if
(
!
color_bottomright
.
isValid
())
color_bottomright
=
color_topleft
;
pr
->
fillRect
(
x
,
y
,
w
-
1
,
1
,
color_topleft
);
pr
->
fillRect
(
x
,
y
+
1
,
1
,
h
-1
,
color_topleft
);
pr
->
fillRect
(
x
+
w
-
1
,
y
,
1
,
h
-1
,
color_bottomright
);
pr
->
fillRect
(
x
+
1
,
y
+
h
-
1
,
w
-
1
,
1
,
color_bottomright
);
}
}
void
misc::dump
(
uint8_t
const
*
ptr
,
size_t
len
)
{
if
(
ptr
&&
len
>
0
)
{
size_t
pos
=
0
;
while
(
pos
<
len
)
{
char
tmp
[
100
];
char
*
dst
=
tmp
;
sprintf
(
dst
,
"%08X "
,
pos
);
dst
+=
9
;
for
(
int
i
=
0
;
i
<
16
;
i
++
)
{
if
(
pos
+
i
<
len
)
{
sprintf
(
dst
,
"%02X "
,
ptr
[
pos
+
i
]
&
0xff
);
}
else
{
sprintf
(
dst
,
" "
,
ptr
[
pos
+
i
]
&
0xff
);
}
dst
+=
3
;
}
for
(
int
i
=
0
;
i
<
16
;
i
++
)
{
int
c
=
' '
;
if
(
pos
<
len
)
{
c
=
ptr
[
pos
]
&
0xff
;
if
(
!
isprint
(
c
))
{
c
=
'.'
;
}
pos
++
;
}
*
dst
=
c
;
dst
++
;
}
*
dst
=
0
;
qDebug
()
<<
tmp
;
}
}
}
void
misc::dump
(
const
QByteArray
*
in
)
{
size_t
len
=
0
;
uint8_t
const
*
ptr
=
nullptr
;
if
(
in
)
{
len
=
in
->
size
();
if
(
len
>
0
)
{
ptr
=
(
uint8_t
const
*
)
in
->
data
();
}
}
dump
(
ptr
,
len
);
}
bool
misc::isImageFile
(
const
QString
&
mimetype
)
{
if
(
mimetype
==
"image/jpeg"
)
return
true
;
if
(
mimetype
==
"image/png"
)
return
true
;
if
(
mimetype
==
"image/bmp"
)
return
true
;
if
(
mimetype
==
"image/x-ms-bmp"
)
return
true
;
return
false
;
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Sat, Nov 14, 11:53 PM (1 d, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
141553
Default Alt Text
misc.cpp (6 KB)
Attached To
Mode
R77 Guitar
Attached
Detach File
Event Timeline