Coverage Report

Created: 2026-02-09 06:05

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/CMake/Source/cmPkgConfigParser.h
Line
Count
Source
1
/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2
   file LICENSE.rst or https://cmake.org/licensing for details.  */
3
4
#pragma once
5
6
#include "cmConfigure.h" // IWYU pragma: keep
7
8
#include <cstddef>
9
#include <vector>
10
11
#include <cm/string_view>
12
13
#include <cmllpkgc/llpkgc.h>
14
15
struct cmPkgConfigValueElement
16
{
17
18
  cmPkgConfigValueElement() = default;
19
20
  cmPkgConfigValueElement(bool isVariable, cm::string_view data);
21
22
  bool IsVariable;
23
  cm::string_view Data;
24
};
25
26
struct cmPkgConfigEntry
27
{
28
29
  cmPkgConfigEntry() = default;
30
31
  cmPkgConfigEntry(bool isVariable, cm::string_view key);
32
33
  bool IsVariable;
34
  cm::string_view Key;
35
  std::vector<cmPkgConfigValueElement> Val;
36
};
37
38
class cmPkgConfigParser : llpkgc_t
39
{
40
public:
41
  cmPkgConfigParser();
42
43
  llpkgc_errno_t Parse(char* buf, std::size_t len);
44
45
  llpkgc_errno_t Finish();
46
  llpkgc_errno_t Finish(char* buf, std::size_t len);
47
48
483
  std::vector<cmPkgConfigEntry>& Data() { return Data_; }
49
50
private:
51
  int OnSpanNext(char const*, std::size_t len);
52
  static int OnSpanNextTr(llpkgc_t* parser, char const* at, std::size_t len);
53
54
  int OnKey(char const* at, std::size_t len);
55
  static int OnKeyTr(llpkgc_t* parser, char const* at, std::size_t len);
56
57
  int OnKeywordComplete();
58
  static int OnKeywordCompleteTr(llpkgc_t* parser);
59
60
  int OnVariableComplete();
61
  static int OnVariableCompleteTr(llpkgc_t* parser);
62
63
  int OnValueLiteral(char const* at, std::size_t len);
64
  static int OnValueLiteralTr(llpkgc_t* parser, char const* at,
65
                              std::size_t len);
66
67
  int OnValueLiteralComplete();
68
  static int OnValueLiteralCompleteTr(llpkgc_t* parser);
69
70
  int OnValueVariable(char const* at, std::size_t len);
71
  static int OnValueVariableTr(llpkgc_t* parser, char const* at,
72
                               std::size_t len);
73
74
  int OnValueVariableComplete();
75
  static int OnValueVariableCompleteTr(llpkgc_t* parser);
76
77
  llpkgc_settings_t Settings_{
78
    OnKeyTr,
79
    OnValueLiteralTr,
80
    OnValueVariableTr,
81
    nullptr, // on_line_begin
82
    OnKeywordCompleteTr,
83
    OnVariableCompleteTr,
84
    OnValueLiteralCompleteTr,
85
    OnValueVariableCompleteTr,
86
    nullptr, // on_value_complete
87
    nullptr, // on_pkgc_complete
88
  };
89
90
  char const* Ptr_;
91
  std::size_t Len_;
92
  std::vector<cmPkgConfigEntry> Data_;
93
};