Bitcoin Core
31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
src
script
parsing.cpp
Go to the documentation of this file.
1
// Copyright (c) 2018-present The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <
script/parsing.h
>
6
7
#include <
span.h
>
8
9
#include <algorithm>
10
#include <cstddef>
11
#include <string>
12
13
namespace
script
{
14
15
bool
Const
(
const
std::string& str, std::span<const char>& sp,
bool
skip)
16
{
17
if
((
size_t
)sp.size() >= str.size() && std::equal(str.begin(), str.end(), sp.begin())) {
18
if
(skip) sp = sp.subspan(str.size());
19
return
true
;
20
}
21
return
false
;
22
}
23
24
bool
Func
(
const
std::string& str, std::span<const char>& sp)
25
{
26
if
((
size_t
)sp.size() >= str.size() + 2 && sp[str.size()] ==
'('
&& sp[sp.size() - 1] ==
')'
&& std::equal(str.begin(), str.end(), sp.begin())) {
27
sp = sp.subspan(str.size() + 1, sp.size() - str.size() - 2);
28
return
true
;
29
}
30
return
false
;
31
}
32
33
std::span<const char>
Expr
(std::span<const char>& sp)
34
{
35
int
level = 0;
36
auto
it = sp.begin();
37
while
(it != sp.end()) {
38
if
(*it ==
'('
|| *it ==
'{'
) {
39
++level;
40
}
else
if
(level && (*it ==
')'
|| *it ==
'}'
)) {
41
--level;
42
}
else
if
(level == 0 && (*it ==
')'
|| *it ==
'}'
|| *it ==
','
)) {
43
break
;
44
}
45
++it;
46
}
47
std::span<const char>
ret
= sp.first(it - sp.begin());
48
sp = sp.subspan(it - sp.begin());
49
return
ret
;
50
}
51
52
}
// namespace script
ret
int ret
Definition
bitcoin-cli.cpp:1350
script
Definition
parsing.cpp:13
script::Expr
std::span< const char > Expr(std::span< const char > &sp)
Extract the expression that sp begins with.
Definition
parsing.cpp:33
script::Func
bool Func(const std::string &str, std::span< const char > &sp)
Parse a function call.
Definition
parsing.cpp:24
script::Const
bool Const(const std::string &str, std::span< const char > &sp, bool skip)
Parse a constant.
Definition
parsing.cpp:15
parsing.h
span.h
Generated on
for Bitcoin Core by
1.16.1