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 #ifndef META_INTERFACE_OBJECT_MACROS_H 16 #define META_INTERFACE_OBJECT_MACROS_H 17 18 #include <meta/base/interface_macros.h> 19 #include <meta/interface/intf_lifecycle.h> 20 21 /** 22 * @brief Implement reference counting with ILifecycle support for destruction. 23 */ 24 #define META_IMPLEMENT_REF_COUNT() \ 25 int32_t refcnt_ { 0 }; \ 26 void Ref() override \ 27 { \ 28 CORE_NS::AtomicIncrement(&refcnt_); \ 29 } \ 30 void Unref() override \ 31 { \ 32 if (CORE_NS::AtomicDecrement(&refcnt_) == 0) { \ 33 if (auto i = this->GetInterface(::META_NS::ILifecycle::UID)) { \ 34 static_cast<::META_NS::ILifecycle*>(i)->Destroy(); \ 35 } \ 36 delete this; \ 37 } \ 38 } 39 40 #endif 41