C++程序  |  78行  |  2.36 KB

/*
 * 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 {

// deprecated. Kept here for libvintf backwards compatibility.
struct [[deprecated]] 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;
};

// deprecated. Kept here for libvintf backwards compatibility.
struct [[deprecated]] 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;
};

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
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;
}
#pragma clang diagnostic pop

} // namespace vintf
} // namespace android

#endif // ANDROID_VINTF_VNDK_H