123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /*
- * Copyright (C) 2018 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 <memory>
- #include "SchemaType.h"
- #include "VintfObject.h"
- namespace android {
- namespace vintf {
- namespace details {
- /**
- * Simulate the state of VintfObject after an update.
- *
- * - Old metadata is stored in parent VintfObject.
- * - New (updated) metadata is stored in this VintfObjectAfterUpdate
- * - Dependencies are from the given VintfObject (dep) before construction.
- */
- class VintfObjectAfterUpdate : public VintfObject {
- public:
- /* Use dependencies from the object dep. */
- VintfObjectAfterUpdate(VintfObject* dep) : mDependency(dep) {}
- std::shared_ptr<const HalManifest> getDeviceHalManifest(bool skipCache = false) override {
- if (mDeviceManifest != nullptr) return mDeviceManifest;
- return VintfObject::getDeviceHalManifest(skipCache);
- }
- std::shared_ptr<const HalManifest> getFrameworkHalManifest(bool skipCache = false) override {
- if (mFrameworkManifest != nullptr) return mFrameworkManifest;
- return VintfObject::getFrameworkHalManifest(skipCache);
- }
- std::shared_ptr<const CompatibilityMatrix> getDeviceCompatibilityMatrix(
- bool skipCache = false) override {
- if (mDeviceMatrix != nullptr) return mDeviceMatrix;
- return VintfObject::getDeviceCompatibilityMatrix(skipCache);
- }
- std::shared_ptr<const CompatibilityMatrix> getFrameworkCompatibilityMatrix(
- bool skipCache = false) override {
- if (mFrameworkMatrix != nullptr) return mFrameworkMatrix;
- return VintfObject::getFrameworkCompatibilityMatrix(skipCache);
- }
- const std::unique_ptr<FileSystem>& getFileSystem() override {
- return mDependency->getFileSystem();
- }
- const std::unique_ptr<PropertyFetcher>& getPropertyFetcher() override {
- return mDependency->getPropertyFetcher();
- }
- const std::unique_ptr<ObjectFactory<RuntimeInfo>>& getRuntimeInfoFactory() override {
- return mDependency->getRuntimeInfoFactory();
- }
- bool set(const std::shared_ptr<HalManifest>& o) {
- return set(o, &mDeviceManifest, &mFrameworkManifest);
- }
- bool set(const std::shared_ptr<CompatibilityMatrix>& o) {
- return set(o, &mDeviceMatrix, &mFrameworkMatrix);
- }
- private:
- VintfObject* mDependency = nullptr;
- std::shared_ptr<HalManifest> mDeviceManifest;
- std::shared_ptr<HalManifest> mFrameworkManifest;
- std::shared_ptr<CompatibilityMatrix> mDeviceMatrix;
- std::shared_ptr<CompatibilityMatrix> mFrameworkMatrix;
- template <typename T>
- bool set(const std::shared_ptr<T>& o, std::shared_ptr<T>* dev, std::shared_ptr<T>* fwk) {
- if (o->type() == SchemaType::DEVICE) {
- if (*dev != nullptr) return false;
- *dev = o;
- return true;
- } else if (o->type() == SchemaType::FRAMEWORK) {
- if (*fwk != nullptr) return false;
- *fwk = o;
- return true;
- }
- return false;
- }
- };
- } // namespace details
- } // namespace vintf
- } // namespace android
|