summaryrefslogtreecommitdiffstats
blob: a7d2f51771ebb35038873e9483794c1043986dc4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#ifndef ANDROID_VINTF_VNDK_H
#define ANDROID_VINTF_VNDK_H

#include <set>
#include <string>

namespace android {
namespace vintf {

struct VndkVersionRange {

    VndkVersionRange() : VndkVersionRange(0u, 0u, 0u) {}
    VndkVersionRange(size_t s, size_t v, size_t p)
        : VndkVersionRange(s, v, p, p) {}
    VndkVersionRange(size_t s, size_t v, size_t pi, size_t pa)
        : sdk(s), vndk(v), patchMin(pi), patchMax(pa) {}

    inline bool isSingleVersion() const { return patchMin == patchMax; };

    size_t sdk;
    size_t vndk;
    size_t patchMin;
    size_t patchMax;
};

struct Vndk {

    const VndkVersionRange &versionRange() const { return mVersionRange; }
    const std::set<std::string> &libraries() const { return mLibraries; }

private:
    friend struct VndkConverter;
    friend struct HalManifestConverter;
    friend struct LibVintfTest;
    friend struct HalManifest;
    friend struct CompatibilityMatrix;
    friend bool operator==(const Vndk &, const Vndk &);
    VndkVersionRange mVersionRange;
    std::set<std::string> mLibraries;
};

inline bool operator==(const VndkVersionRange &lft, const VndkVersionRange &rgt) {
    return lft.sdk == rgt.sdk && lft.vndk == rgt.vndk &&
           lft.patchMin == rgt.patchMin && lft.patchMax == rgt.patchMax;
}
inline bool operator==(const Vndk &lft, const Vndk &rgt) {
    return lft.mVersionRange == rgt.mVersionRange &&
           lft.mLibraries == rgt.mLibraries;
}

} // namespace vintf
} // namespace android

#endif // ANDROID_VINTF_VNDK_H