You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.9 KiB
67 lines
1.9 KiB
//
|
|
// Copyright (C) 2020 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.
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <optional>
|
|
#include <string>
|
|
#include <tuple>
|
|
|
|
namespace android::kver {
|
|
|
|
// KMI version describes the version of the stable kernel module interface.
|
|
// Example: 5.4-android12-0
|
|
class KmiVersion {
|
|
public:
|
|
// Parse a string like "5.4-android12-0" to a KmiVersion object.
|
|
// Return nullopt if any error.
|
|
static std::optional<KmiVersion> Parse(const std::string& s);
|
|
|
|
// String representation of the KMI version object.
|
|
// e.g. "5.4-android12-0"
|
|
std::string string() const;
|
|
|
|
// Getters of each field.
|
|
uint64_t version() const { return version_; }
|
|
uint64_t patch_level() const { return patch_level_; }
|
|
uint64_t android_release() const { return release_; }
|
|
uint64_t generation() const { return gen_; }
|
|
|
|
// Let a KMI version be w.x-androidz-k.
|
|
// Returns (w, x, z, k).
|
|
std::tuple<uint64_t, uint64_t, uint64_t, uint64_t> tuple() const;
|
|
|
|
private:
|
|
friend class KernelRelease;
|
|
KmiVersion() = default;
|
|
uint64_t version_ = 0;
|
|
uint64_t patch_level_ = 0;
|
|
uint64_t release_ = 0;
|
|
uint64_t gen_ = 0;
|
|
};
|
|
|
|
inline bool operator==(const KmiVersion& left, const KmiVersion& right) {
|
|
return left.tuple() == right.tuple();
|
|
}
|
|
|
|
inline bool operator!=(const KmiVersion& left, const KmiVersion& right) {
|
|
return left.tuple() != right.tuple();
|
|
}
|
|
|
|
} // namespace android::kver
|