18bf80f4bSopenharmony_ci/* 28bf80f4bSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 38bf80f4bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 48bf80f4bSopenharmony_ci * you may not use this file except in compliance with the License. 58bf80f4bSopenharmony_ci * You may obtain a copy of the License at 68bf80f4bSopenharmony_ci * 78bf80f4bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 88bf80f4bSopenharmony_ci * 98bf80f4bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 108bf80f4bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 118bf80f4bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 128bf80f4bSopenharmony_ci * See the License for the specific language governing permissions and 138bf80f4bSopenharmony_ci * limitations under the License. 148bf80f4bSopenharmony_ci */ 158bf80f4bSopenharmony_ci#include "engine_value.h" 168bf80f4bSopenharmony_ci 178bf80f4bSopenharmony_ci#include <core/property/intf_property_api.h> 188bf80f4bSopenharmony_ci 198bf80f4bSopenharmony_ciMETA_BEGIN_NAMESPACE() 208bf80f4bSopenharmony_ci 218bf80f4bSopenharmony_cinamespace Internal { 228bf80f4bSopenharmony_ci 238bf80f4bSopenharmony_ciEngineValue::EngineValue( 248bf80f4bSopenharmony_ci BASE_NS::string name, IEngineInternalValueAccess::ConstPtr access, const EnginePropertyParams& p) 258bf80f4bSopenharmony_ci : params_(p), access_(BASE_NS::move(access)), name_(BASE_NS::move(name)), value_(access_->CreateAny()) 268bf80f4bSopenharmony_ci{} 278bf80f4bSopenharmony_ci 288bf80f4bSopenharmony_ciAnyReturnValue EngineValue::Sync(EngineSyncDirection dir) 298bf80f4bSopenharmony_ci{ 308bf80f4bSopenharmony_ci if (!params_.handle) { 318bf80f4bSopenharmony_ci return AnyReturn::INVALID_ARGUMENT; 328bf80f4bSopenharmony_ci } 338bf80f4bSopenharmony_ci if (dir == EngineSyncDirection::TO_ENGINE || (dir == EngineSyncDirection::AUTO && valueChanged_)) { 348bf80f4bSopenharmony_ci if (valueChanged_) { 358bf80f4bSopenharmony_ci valueChanged_ = false; 368bf80f4bSopenharmony_ci return access_->SyncToEngine(*value_, params_) ? AnyReturn::NOTHING_TO_DO : AnyReturn::FAIL; 378bf80f4bSopenharmony_ci } 388bf80f4bSopenharmony_ci return AnyReturn::NOTHING_TO_DO; 398bf80f4bSopenharmony_ci } 408bf80f4bSopenharmony_ci return access_->SyncFromEngine(params_, *value_); 418bf80f4bSopenharmony_ci} 428bf80f4bSopenharmony_ciAnyReturnValue EngineValue::SetValue(const IAny& value) 438bf80f4bSopenharmony_ci{ 448bf80f4bSopenharmony_ci AnyReturnValue res = value_->CopyFrom(value); 458bf80f4bSopenharmony_ci valueChanged_ |= static_cast<bool>(res); 468bf80f4bSopenharmony_ci if (params_.pushValueToEngineDirectly) { 478bf80f4bSopenharmony_ci if (valueChanged_) { 488bf80f4bSopenharmony_ci if (!params_.handle) { 498bf80f4bSopenharmony_ci return AnyReturn::INVALID_ARGUMENT; 508bf80f4bSopenharmony_ci } 518bf80f4bSopenharmony_ci valueChanged_ = false; 528bf80f4bSopenharmony_ci res = access_->SyncToEngine(*value_, params_) ? AnyReturn::NOTHING_TO_DO : AnyReturn::FAIL; 538bf80f4bSopenharmony_ci } 548bf80f4bSopenharmony_ci } 558bf80f4bSopenharmony_ci return res; 568bf80f4bSopenharmony_ci} 578bf80f4bSopenharmony_ciconst IAny& EngineValue::GetValue() const 588bf80f4bSopenharmony_ci{ 598bf80f4bSopenharmony_ci return *value_; 608bf80f4bSopenharmony_ci} 618bf80f4bSopenharmony_cibool EngineValue::IsCompatible(const TypeId& id) const 628bf80f4bSopenharmony_ci{ 638bf80f4bSopenharmony_ci return META_NS::IsCompatible(*value_, id); 648bf80f4bSopenharmony_ci} 658bf80f4bSopenharmony_ciBASE_NS::string EngineValue::GetName() const 668bf80f4bSopenharmony_ci{ 678bf80f4bSopenharmony_ci return name_; 688bf80f4bSopenharmony_ci} 698bf80f4bSopenharmony_civoid EngineValue::Lock() const 708bf80f4bSopenharmony_ci{ 718bf80f4bSopenharmony_ci mutex_.lock(); 728bf80f4bSopenharmony_ci} 738bf80f4bSopenharmony_civoid EngineValue::Unlock() const 748bf80f4bSopenharmony_ci{ 758bf80f4bSopenharmony_ci mutex_.unlock(); 768bf80f4bSopenharmony_ci} 778bf80f4bSopenharmony_civoid EngineValue::LockShared() const 788bf80f4bSopenharmony_ci{ 798bf80f4bSopenharmony_ci mutex_.lock_shared(); 808bf80f4bSopenharmony_ci} 818bf80f4bSopenharmony_civoid EngineValue::UnlockShared() const 828bf80f4bSopenharmony_ci{ 838bf80f4bSopenharmony_ci mutex_.unlock_shared(); 848bf80f4bSopenharmony_ci} 858bf80f4bSopenharmony_ciResetResult EngineValue::ProcessOnReset(const IAny&) 868bf80f4bSopenharmony_ci{ 878bf80f4bSopenharmony_ci return RESET_CONTINUE; 888bf80f4bSopenharmony_ci} 898bf80f4bSopenharmony_ciBASE_NS::shared_ptr<IEvent> EngineValue::EventOnChanged() const 908bf80f4bSopenharmony_ci{ 918bf80f4bSopenharmony_ci return event_; 928bf80f4bSopenharmony_ci} 938bf80f4bSopenharmony_ciEnginePropertyParams EngineValue::GetPropertyParams() const 948bf80f4bSopenharmony_ci{ 958bf80f4bSopenharmony_ci return params_; 968bf80f4bSopenharmony_ci} 978bf80f4bSopenharmony_cibool EngineValue::SetPropertyParams(const EnginePropertyParams& p) 988bf80f4bSopenharmony_ci{ 998bf80f4bSopenharmony_ci params_ = p; 1008bf80f4bSopenharmony_ci return true; 1018bf80f4bSopenharmony_ci} 1028bf80f4bSopenharmony_ci 1038bf80f4bSopenharmony_ci} // namespace Internal 1048bf80f4bSopenharmony_ci 1058bf80f4bSopenharmony_ciMETA_END_NAMESPACE() 106