xref: /aosp_15_r20/system/libvintf/include/vintf/parse_string.h (revision 70a7ec852fcefd15a4fb57f8f183a8b1c3aacb08)
1*70a7ec85SAndroid Build Coastguard Worker /*
2*70a7ec85SAndroid Build Coastguard Worker  * Copyright (C) 2017 The Android Open Source Project
3*70a7ec85SAndroid Build Coastguard Worker  *
4*70a7ec85SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*70a7ec85SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*70a7ec85SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*70a7ec85SAndroid Build Coastguard Worker  *
8*70a7ec85SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*70a7ec85SAndroid Build Coastguard Worker  *
10*70a7ec85SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*70a7ec85SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*70a7ec85SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*70a7ec85SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*70a7ec85SAndroid Build Coastguard Worker  * limitations under the License.
15*70a7ec85SAndroid Build Coastguard Worker  */
16*70a7ec85SAndroid Build Coastguard Worker 
17*70a7ec85SAndroid Build Coastguard Worker #ifndef ANDROID_VINTF_PARSE_STRING_H
18*70a7ec85SAndroid Build Coastguard Worker #define ANDROID_VINTF_PARSE_STRING_H
19*70a7ec85SAndroid Build Coastguard Worker 
20*70a7ec85SAndroid Build Coastguard Worker #include <iostream>
21*70a7ec85SAndroid Build Coastguard Worker #include <sstream>
22*70a7ec85SAndroid Build Coastguard Worker #include <string>
23*70a7ec85SAndroid Build Coastguard Worker #include <string_view>
24*70a7ec85SAndroid Build Coastguard Worker 
25*70a7ec85SAndroid Build Coastguard Worker #include "CompatibilityMatrix.h"
26*70a7ec85SAndroid Build Coastguard Worker #include "RuntimeInfo.h"
27*70a7ec85SAndroid Build Coastguard Worker #include "HalManifest.h"
28*70a7ec85SAndroid Build Coastguard Worker 
29*70a7ec85SAndroid Build Coastguard Worker namespace android {
30*70a7ec85SAndroid Build Coastguard Worker namespace vintf {
31*70a7ec85SAndroid Build Coastguard Worker 
32*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, HalFormat hf);
33*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, Transport tr);
34*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, Arch ar);
35*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, KernelConfigType il);
36*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, Tristate tr);
37*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, SchemaType ksv);
38*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, XmlSchemaFormat f);
39*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, Level l);
40*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, KernelSepolicyVersion v);
41*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, ExclusiveTo e);
42*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const Version& ver);
43*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const VersionRange& vr);
44*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const SepolicyVersion& ver);
45*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const SepolicyVersionRange& vr);
46*70a7ec85SAndroid Build Coastguard Worker 
47*70a7ec85SAndroid Build Coastguard Worker #pragma clang diagnostic push
48*70a7ec85SAndroid Build Coastguard Worker #pragma clang diagnostic ignored "-Wdeprecated-declarations"
49*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const VndkVersionRange& vr);
50*70a7ec85SAndroid Build Coastguard Worker #pragma clang diagnostic pop
51*70a7ec85SAndroid Build Coastguard Worker 
52*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const KernelVersion& ver);
53*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const TransportArch& ta);
54*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const ManifestHal& hal);
55*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const KernelConfigTypedValue& kcv);
56*70a7ec85SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const FqInstance& fqInstance);
57*70a7ec85SAndroid Build Coastguard Worker 
58*70a7ec85SAndroid Build Coastguard Worker template <typename T>
to_string(const T & obj)59*70a7ec85SAndroid Build Coastguard Worker std::string to_string(const T& obj) {
60*70a7ec85SAndroid Build Coastguard Worker     std::ostringstream oss;
61*70a7ec85SAndroid Build Coastguard Worker     oss << obj;
62*70a7ec85SAndroid Build Coastguard Worker     return oss.str();
63*70a7ec85SAndroid Build Coastguard Worker }
64*70a7ec85SAndroid Build Coastguard Worker 
65*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, HalFormat* hf);
66*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, Transport* tr);
67*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, Arch* ar);
68*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, KernelConfigType* il);
69*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, KernelConfigKey* key);
70*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, Tristate* tr);
71*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, SchemaType* ver);
72*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, XmlSchemaFormat* ver);
73*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, Level* l);
74*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, KernelSepolicyVersion* ksv);
75*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, ExclusiveTo* e);
76*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, Version* ver);
77*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, VersionRange* vr);
78*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, SepolicyVersion* ver);
79*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, SepolicyVersionRange* ver);
80*70a7ec85SAndroid Build Coastguard Worker 
81*70a7ec85SAndroid Build Coastguard Worker #pragma clang diagnostic push
82*70a7ec85SAndroid Build Coastguard Worker #pragma clang diagnostic ignored "-Wdeprecated-declarations"
83*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, VndkVersionRange* vr);
84*70a7ec85SAndroid Build Coastguard Worker #pragma clang diagnostic pop
85*70a7ec85SAndroid Build Coastguard Worker 
86*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, KernelVersion* ver);
87*70a7ec85SAndroid Build Coastguard Worker bool parse(const std::string& s, FqInstance* fqInstance);
88*70a7ec85SAndroid Build Coastguard Worker 
89*70a7ec85SAndroid Build Coastguard Worker bool parseKernelConfigInt(const std::string& s, int64_t* i);
90*70a7ec85SAndroid Build Coastguard Worker bool parseKernelConfigInt(const std::string& s, uint64_t* i);
91*70a7ec85SAndroid Build Coastguard Worker bool parseRange(const std::string& s, KernelConfigRangeValue* range);
92*70a7ec85SAndroid Build Coastguard Worker 
93*70a7ec85SAndroid Build Coastguard Worker // Parse the KernelConfigValue in s, assuming type kctv->type, and store it in
94*70a7ec85SAndroid Build Coastguard Worker // kctv->value.
95*70a7ec85SAndroid Build Coastguard Worker bool parseKernelConfigValue(const std::string& s, KernelConfigTypedValue* kctv);
96*70a7ec85SAndroid Build Coastguard Worker 
97*70a7ec85SAndroid Build Coastguard Worker // Parse the KernelConfigTypedValue in s (type is guessed) and store it in kctv.
98*70a7ec85SAndroid Build Coastguard Worker // Do not expect quotes in strings.
99*70a7ec85SAndroid Build Coastguard Worker bool parseKernelConfigTypedValue(const std::string& s, KernelConfigTypedValue* kctv);
100*70a7ec85SAndroid Build Coastguard Worker 
101*70a7ec85SAndroid Build Coastguard Worker // "100" <=> Version{kFakeAidlMajorVersion, 100}
102*70a7ec85SAndroid Build Coastguard Worker std::string aidlVersionToString(const Version& v);
103*70a7ec85SAndroid Build Coastguard Worker bool parseAidlVersion(const std::string& s, Version* version);
104*70a7ec85SAndroid Build Coastguard Worker 
105*70a7ec85SAndroid Build Coastguard Worker // "100" <=> VersionRange{kFakeAidlMajorVersion, 100}
106*70a7ec85SAndroid Build Coastguard Worker // "100-105" <=> VersionRange{kFakeAidlMajorVersion, 100, 105}
107*70a7ec85SAndroid Build Coastguard Worker std::string aidlVersionRangeToString(const VersionRange& vr);
108*70a7ec85SAndroid Build Coastguard Worker bool parseAidlVersionRange(const std::string& s, VersionRange* vr);
109*70a7ec85SAndroid Build Coastguard Worker 
110*70a7ec85SAndroid Build Coastguard Worker // A string that describes the whole object, with versions of all
111*70a7ec85SAndroid Build Coastguard Worker // its components. For debugging and testing purposes only. This is not
112*70a7ec85SAndroid Build Coastguard Worker // the XML string.
113*70a7ec85SAndroid Build Coastguard Worker std::string dump(const HalManifest& vm);
114*70a7ec85SAndroid Build Coastguard Worker 
115*70a7ec85SAndroid Build Coastguard Worker std::string dump(const RuntimeInfo& ki, bool verbose = true);
116*70a7ec85SAndroid Build Coastguard Worker 
117*70a7ec85SAndroid Build Coastguard Worker std::vector<std::string> expandInstances(const MatrixHal& req);
118*70a7ec85SAndroid Build Coastguard Worker 
119*70a7ec85SAndroid Build Coastguard Worker std::string toFQNameString(const std::string& package, const Version& version,
120*70a7ec85SAndroid Build Coastguard Worker                            const std::string& intf = "", const std::string& instance = "");
121*70a7ec85SAndroid Build Coastguard Worker 
122*70a7ec85SAndroid Build Coastguard Worker std::string toFQNameString(const Version& version, const std::string& intf,
123*70a7ec85SAndroid Build Coastguard Worker                            const std::string& instance);
124*70a7ec85SAndroid Build Coastguard Worker 
125*70a7ec85SAndroid Build Coastguard Worker // [email protected]::IFoo/default.
126*70a7ec85SAndroid Build Coastguard Worker // Note that the format is extended to support a range of versions.
127*70a7ec85SAndroid Build Coastguard Worker std::string toFQNameString(const std::string& package, const VersionRange& range,
128*70a7ec85SAndroid Build Coastguard Worker                            const std::string& interface, const std::string& instance);
129*70a7ec85SAndroid Build Coastguard Worker 
130*70a7ec85SAndroid Build Coastguard Worker std::string toFQNameString(const VersionRange& range, const std::string& interface,
131*70a7ec85SAndroid Build Coastguard Worker                            const std::string& instance);
132*70a7ec85SAndroid Build Coastguard Worker 
133*70a7ec85SAndroid Build Coastguard Worker std::string toFQNameString(const std::string& interface, const std::string& instance);
134*70a7ec85SAndroid Build Coastguard Worker 
135*70a7ec85SAndroid Build Coastguard Worker std::string toAidlFqnameString(const std::string& package, const std::string& interface,
136*70a7ec85SAndroid Build Coastguard Worker                                const std::string& instance = "");
137*70a7ec85SAndroid Build Coastguard Worker 
138*70a7ec85SAndroid Build Coastguard Worker std::string_view parseApexName(std::string_view path);
139*70a7ec85SAndroid Build Coastguard Worker 
140*70a7ec85SAndroid Build Coastguard Worker } // namespace vintf
141*70a7ec85SAndroid Build Coastguard Worker } // namespace android
142*70a7ec85SAndroid Build Coastguard Worker 
143*70a7ec85SAndroid Build Coastguard Worker #endif // ANDROID_VINTF_PARSE_STRING_H
144