GCC Code Coverage Report


Directory: ./
File: pdcom5/src/msrproto/expat_wrapper.h
Date: 2023-11-12 04:06:57
Exec Total Coverage
Lines: 2 2 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 /*****************************************************************************
2 *
3 * Copyright (C) 2021 Bjarne von Horn (vh at igh dot de)
4 *
5 * This file is part of the PdCom library.
6 *
7 * The PdCom library is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * The PdCom library is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 * License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with the PdCom library. If not, see <http://www.gnu.org/licenses/>.
19 *
20 *****************************************************************************/
21
22 #ifndef MSRPROTO_EXPAT_WRAPPER_H
23 #define MSRPROTO_EXPAT_WRAPPER_H
24
25 #include <exception>
26 #include <functional>
27 #include <memory>
28
29 extern "C" {
30 struct XML_ParserStruct;
31 }
32
33 namespace PdCom { namespace impl { namespace MsrProto {
34 struct XmlParserDeleter
35 {
36 void operator()(XML_ParserStruct *) noexcept;
37 };
38
39 template <typename Handler>
40 131 class ExpatWrapper
41 {
42 public:
43 ExpatWrapper(const char *encoding = "UTF-8");
44
45 protected:
46 bool parse(const char *s, std::size_t n, bool final = false);
47 void reset(const char *encoding = "UTF-8");
48 2154 int level() const noexcept { return level_; }
49
50 private:
51 struct CallbackWrapper;
52
53 std::unique_ptr<XML_ParserStruct, XmlParserDeleter> parser_;
54 std::exception_ptr pending_exception_ = nullptr;
55 int level_ = 0;
56 };
57
58
59 }}} // namespace PdCom::impl::MsrProto
60
61
62 #endif // MSRPROTO_EXPAT_WRAPPER_H
63