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