FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
daScript/include/daScript/misc/string_writer.h at master · albassort/daScript · GitHub
albassort
/
daScript
Public
forked from
GaijinEntertainment/daScript
Notifications
You must be signed in to change notification settings
Fork
0
Star
1
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
daScript
/
include
/
daScript
/
misc
/
string_writer.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
106 lines (100 loc) · 4.05 KB
Breadcrumbs
daScript
/
include
/
daScript
/
misc
/
string_writer.h
Copy path
File metadata and controls
106 lines (100 loc) · 4.05 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#
pragma
once
namespace
das
{
class
VectorAllocationPolicy
{
public:
string
str
()
const
{
//
todo: replace via stringview
return
string
(data.
data
(), data.
size
());
}
int
tellp
()
const
{
return
int
(data.
size
());
}
protected:
__forceinline
void
append
(
const
char
* s,
int
l) {
data.
reserve
(data.
size
() + l);
data.
insert
(data.
end
(), s, s + l);
}
__forceinline
char
*
allocate
(
int
l) {
data.
resize
(data.
size
() + l);
return
data.
data
() + data.
size
() - l;
}
virtual
void
output
() {}
vector<
char
> data;
};
//
todo: support hex
struct
StringWriterTag
{};
extern
StringWriterTag
HEX
;
extern
StringWriterTag
DEC
;
extern
StringWriterTag
FIXED
;
extern
StringWriterTag
SCIENTIFIC
;
template
<
typename
AllocationPolicy>
class
StringWriter
:
public
AllocationPolicy
{
public:
template
<
typename
TT
>
StringWriter &
write
(
const
char
* format,
TT
value) {
char
buf[
128
];
int
realL =
snprintf
(buf,
sizeof
(buf), format, value);
if
(
auto
at =
this
->
allocate
(realL) ) {
memcpy
(at, buf, realL);
this
->
output
();
}
return
*
this
;
}
StringWriter &
writeStr
(
const
char
* st,
size_t
len) {
this
->
append
(st,
int
(len));
this
->
output
();
return
*
this
;
}
StringWriter &
writeChars
(
char
ch,
size_t
len) {
if
(
auto
at =
this
->
allocate
(
int
(len)) ) {
memset
(at, ch, len);
this
->
output
();
}
return
*
this
;
}
StringWriter &
write
(
const
char
* stst) {
if
( stst ) {
return
writeStr
(stst,
strlen
(stst));
}
else
{
return
*
this
;
}
}
StringWriter &
operator
<< (
const
StringWriterTag & v ) {
if
(&v == &
HEX
) hex =
true
;
else
if
(&v == &
DEC
) hex =
false
;
else
if
(&v == &
FIXED
) fixed =
true
;
else
if
(&v == &
SCIENTIFIC
) fixed =
false
;
return
*
this
;
}
StringWriter &
operator
<< (
char
v) {
return
write
(
"
%c
"
, v); }
StringWriter &
operator
<< (
unsigned
char
v) {
return
write
(
"
%c
"
, v); }
StringWriter &
operator
<< (
bool
v) {
return
write
(v ?
"
true
"
:
"
false
"
); }
StringWriter &
operator
<< (
int
v) {
return
write
(hex ?
"
%x
"
:
"
%d
"
, v); }
StringWriter &
operator
<< (
long
v) {
return
write
(hex ?
"
%lx
"
:
"
%ld
"
, v); }
StringWriter &
operator
<< (
long
long
v) {
return
write
(hex ?
"
%llx
"
:
"
%lld
"
, v); }
StringWriter &
operator
<< (
unsigned
v) {
return
write
(hex ?
"
%x
"
:
"
%u
"
, v); }
StringWriter &
operator
<< (
unsigned
long
v) {
return
write
(hex ?
"
%lx
"
:
"
%lu
"
, v); }
StringWriter &
operator
<< (
unsigned
long
long
v) {
return
write
(hex ?
"
%llx
"
:
"
%llu
"
, v); }
StringWriter &
operator
<< (
float
v) {
return
write
(fixed ?
"
%.9f
"
:
"
%g
"
, v); }
StringWriter &
operator
<< (
double
v) {
return
write
(fixed ?
"
%.17f
"
:
"
%g
"
, v); }
StringWriter &
operator
<< (
char
* v) {
return
write
(v ? (
const
char
*)v :
"
"
); }
StringWriter &
operator
<< (
const
char
* v) {
return
write
(v ? v :
"
"
); }
StringWriter &
operator
<< (
const
string & v) {
return
v.
length
() ?
writeStr
(v.
c_str
(), v.
length
()) : *
this
; }
protected:
bool
hex =
false
;
bool
fixed =
false
;
};
typedef
StringWriter<VectorAllocationPolicy> TextWriter;
class
TextPrinter
:
public
TextWriter
{
public:
virtual
void
output
()
override
{
int
newPos =
tellp
();
if
(newPos != pos) {
string
st
(data.
data
() + pos, newPos - pos);
printf
(
"
%s
"
, st.
c_str
());
pos = newPos;
}
}
protected:
int
pos =
0
;
};
}
Back
|
FazBrowse Home
|
New Git URL