Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
Variables
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
Enumerations
a
b
c
d
e
f
g
i
l
m
n
o
p
r
s
t
u
v
Enumerator
a
b
c
d
f
g
h
i
l
m
n
o
p
r
s
t
u
v
x
y
Classes
Class List
Class Hierarchy
Class Members
All
:
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
Enumerations
a
b
c
d
e
f
g
h
i
k
l
m
o
p
r
s
t
u
w
x
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
y
Properties
a
b
c
d
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
Related Functions
:
a
b
c
d
e
f
g
i
m
o
q
r
s
v
w
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
x
z
Typedefs
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
b
c
d
e
f
h
k
l
o
p
r
s
t
u
x
z
Enumerator
b
c
d
f
h
i
k
l
n
o
p
r
s
t
u
v
w
x
z
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
plotjuggler_base
include
PlotJuggler
string_ref_sso.h
Go to the documentation of this file.
1
/*
2
* This Source Code Form is subject to the terms of the Mozilla Public
3
* License, v. 2.0. If a copy of the MPL was not distributed with this
4
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
*/
6
7
#ifndef STRING_REF_SSO_H
8
#define STRING_REF_SSO_H
9
10
#include <iostream>
11
#include <string.h>
12
13
namespace
PJ
14
{
21
class
StringRef
22
{
23
private
:
24
static
const
uint64_t
TYPE_BIT
= uint64_t(1) << (
sizeof
(
size_t
) * 8 - 1);
25
26
struct
noSSO
27
{
28
const
char
*
data
;
29
size_t
size
;
30
};
31
32
static
const
uint8_t
SSO_SIZE
=
sizeof
(
noSSO
) - 1;
33
34
struct
SSO
35
{
36
char
data
[
sizeof
(
noSSO
)];
37
};
38
39
union
40
{
41
noSSO
no_sso
;
42
SSO
sso
;
43
}
_storage
;
44
45
public
:
46
bool
isSSO
()
const
47
{
48
return
!(
_storage
.no_sso.size &
TYPE_BIT
);
49
}
50
51
StringRef
() :
StringRef
(
nullptr
, 0)
52
{
53
}
54
55
StringRef
(
const
std::string& str) :
StringRef
(str.
data
(), str.
size
())
56
{
57
}
58
59
StringRef
(
const
char
* str) :
StringRef
(str, strlen(str))
60
{
61
}
62
63
explicit
StringRef
(
const
char
* data_ptr,
size_t
length)
64
{
65
_storage
.no_sso.data =
nullptr
;
66
_storage
.no_sso.size = 0;
67
68
if
(length <=
SSO_SIZE
)
69
{
70
memcpy(
_storage
.sso.data, data_ptr, length);
71
_storage
.sso.data[
SSO_SIZE
] =
SSO_SIZE
- length;
72
}
73
else
74
{
75
_storage
.no_sso.data = data_ptr;
76
_storage
.no_sso.size = length;
77
_storage
.no_sso.size |=
TYPE_BIT
;
78
}
79
}
80
81
const
char
*
data
()
const
82
{
83
return
isSSO
() ?
_storage
.sso.data :
_storage
.no_sso.data;
84
}
85
86
size_t
size
()
const
87
{
88
return
isSSO
() ? (
SSO_SIZE
-
_storage
.sso.data[
SSO_SIZE
]) :
89
_storage
.no_sso.size & ~
TYPE_BIT
;
90
}
91
};
92
93
}
// namespace PJ
94
95
#endif // STRING_REF_SSO_H
PJ::StringRef::SSO
Definition:
string_ref_sso.h:34
PJ::StringRef::sso
SSO sso
Definition:
string_ref_sso.h:42
nonstd::span_lite::size_t
span_CONFIG_SIZE_TYPE size_t
Definition:
span.hpp:576
PJ::StringRef::SSO::data
char data[sizeof(noSSO)]
Definition:
string_ref_sso.h:36
PJ::StringRef
Super simple, unmutable, string_view with small string optimization. If the string is 15 bytes or les...
Definition:
string_ref_sso.h:21
PJ::StringRef::noSSO::size
size_t size
Definition:
string_ref_sso.h:29
PJ::StringRef::StringRef
StringRef(const char *str)
Definition:
string_ref_sso.h:59
PJ::StringRef::isSSO
bool isSSO() const
Definition:
string_ref_sso.h:46
PJ::StringRef::noSSO
Definition:
string_ref_sso.h:26
PJ::StringRef::noSSO::data
const char * data
Definition:
string_ref_sso.h:28
PJ::StringRef::SSO_SIZE
static const uint8_t SSO_SIZE
Definition:
string_ref_sso.h:32
PJ::StringRef::size
size_t size() const
Definition:
string_ref_sso.h:86
PJ::StringRef::StringRef
StringRef()
Definition:
string_ref_sso.h:51
PJ::StringRef::data
const char * data() const
Definition:
string_ref_sso.h:81
PJ::StringRef::StringRef
StringRef(const char *data_ptr, size_t length)
Definition:
string_ref_sso.h:63
PJ
Definition:
dataloader_base.h:16
PJ::StringRef::StringRef
StringRef(const std::string &str)
Definition:
string_ref_sso.h:55
PJ::StringRef::_storage
union PJ::StringRef::@56 _storage
PJ::StringRef::TYPE_BIT
static const uint64_t TYPE_BIT
Definition:
string_ref_sso.h:24
nullptr
#define nullptr
Definition:
backward.hpp:386
PJ::StringRef::no_sso
noSSO no_sso
Definition:
string_ref_sso.h:41
plotjuggler
Author(s): Davide Faconti
autogenerated on Sun Jan 26 2025 03:23:27