/* * Copyright (c) 2024 Huawei Device Co., Ltd. * 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 META_INTERFACE_OBJECT_MACROS_H #define META_INTERFACE_OBJECT_MACROS_H #include #include /** * @brief Implement reference counting with ILifecycle support for destruction. */ #define META_IMPLEMENT_REF_COUNT() \ int32_t refcnt_ { 0 }; \ void Ref() override \ { \ CORE_NS::AtomicIncrement(&refcnt_); \ } \ void Unref() override \ { \ if (CORE_NS::AtomicDecrement(&refcnt_) == 0) { \ if (auto i = this->GetInterface(::META_NS::ILifecycle::UID)) { \ static_cast<::META_NS::ILifecycle*>(i)->Destroy(); \ } \ delete this; \ } \ } #endif