1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "engine_value.h"
16
17 #include <core/property/intf_property_api.h>
18
19 META_BEGIN_NAMESPACE()
20
21 namespace Internal {
22
EngineValue(BASE_NS::string name,IEngineInternalValueAccess::ConstPtr access,const EnginePropertyParams & p)23 EngineValue::EngineValue(
24 BASE_NS::string name, IEngineInternalValueAccess::ConstPtr access, const EnginePropertyParams& p)
25 : params_(p), access_(BASE_NS::move(access)), name_(BASE_NS::move(name)), value_(access_->CreateAny())
26 {}
27
Sync(EngineSyncDirection dir)28 AnyReturnValue EngineValue::Sync(EngineSyncDirection dir)
29 {
30 if (!params_.handle) {
31 return AnyReturn::INVALID_ARGUMENT;
32 }
33 if (dir == EngineSyncDirection::TO_ENGINE || (dir == EngineSyncDirection::AUTO && valueChanged_)) {
34 if (valueChanged_) {
35 valueChanged_ = false;
36 return access_->SyncToEngine(*value_, params_) ? AnyReturn::NOTHING_TO_DO : AnyReturn::FAIL;
37 }
38 return AnyReturn::NOTHING_TO_DO;
39 }
40 return access_->SyncFromEngine(params_, *value_);
41 }
SetValue(const IAny & value)42 AnyReturnValue EngineValue::SetValue(const IAny& value)
43 {
44 AnyReturnValue res = value_->CopyFrom(value);
45 valueChanged_ |= static_cast<bool>(res);
46 if (params_.pushValueToEngineDirectly) {
47 if (valueChanged_) {
48 if (!params_.handle) {
49 return AnyReturn::INVALID_ARGUMENT;
50 }
51 valueChanged_ = false;
52 res = access_->SyncToEngine(*value_, params_) ? AnyReturn::NOTHING_TO_DO : AnyReturn::FAIL;
53 }
54 }
55 return res;
56 }
GetValue() const57 const IAny& EngineValue::GetValue() const
58 {
59 return *value_;
60 }
IsCompatible(const TypeId & id) const61 bool EngineValue::IsCompatible(const TypeId& id) const
62 {
63 return META_NS::IsCompatible(*value_, id);
64 }
GetName() const65 BASE_NS::string EngineValue::GetName() const
66 {
67 return name_;
68 }
Lock() const69 void EngineValue::Lock() const
70 {
71 mutex_.lock();
72 }
Unlock() const73 void EngineValue::Unlock() const
74 {
75 mutex_.unlock();
76 }
LockShared() const77 void EngineValue::LockShared() const
78 {
79 mutex_.lock_shared();
80 }
UnlockShared() const81 void EngineValue::UnlockShared() const
82 {
83 mutex_.unlock_shared();
84 }
ProcessOnReset(const IAny &)85 ResetResult EngineValue::ProcessOnReset(const IAny&)
86 {
87 return RESET_CONTINUE;
88 }
EventOnChanged() const89 BASE_NS::shared_ptr<IEvent> EngineValue::EventOnChanged() const
90 {
91 return event_;
92 }
GetPropertyParams() const93 EnginePropertyParams EngineValue::GetPropertyParams() const
94 {
95 return params_;
96 }
SetPropertyParams(const EnginePropertyParams & p)97 bool EngineValue::SetPropertyParams(const EnginePropertyParams& p)
98 {
99 params_ = p;
100 return true;
101 }
102
103 } // namespace Internal
104
105 META_END_NAMESPACE()
106