/* * 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_INTERFACE_MACROS_H #define META_INTERFACE_INTERFACE_MACROS_H #include #include #include #include #include #define META_READONLY_PROPERTY_TYPED_IMPL(type, name) \ META_NS::ConstProperty name() const noexcept \ { \ return META_NS::ConstProperty { this->Property##name() }; \ } #define META_PROPERTY_TYPED_IMPL(type, name) \ META_NS::Property name() noexcept \ { \ return META_NS::Property { this->Property##name() }; \ } #define META_EVENT_TYPED_IMPL(type, name) \ ::META_NS::Event name() const \ { \ return Event##name(); \ } /** * @brief Define read-only property with given type and name. * Creates only const version. */ #define META_READONLY_PROPERTY(type, name) \ virtual BASE_NS::shared_ptr Property##name() const = 0; \ META_READONLY_PROPERTY_TYPED_IMPL(type, name) /** * @brief Define property with given type and name. * Creates overloads for const and non-const versions. */ #define META_PROPERTY(type, name) \ META_READONLY_PROPERTY(type, name) \ virtual BASE_NS::shared_ptr Property##name() = 0; \ META_PROPERTY_TYPED_IMPL(type, name) #define META_READONLY_ARRAY_PROPERTY_TYPED_IMPL(type, name) \ META_NS::ConstArrayProperty name() const noexcept \ { \ return META_NS::ConstArrayProperty { this->Property##name() }; \ } #define META_ARRAY_PROPERTY_TYPED_IMPL(type, name) \ META_NS::ArrayProperty name() noexcept \ { \ return META_NS::ArrayProperty { this->Property##name() }; \ } /** * @brief Define read-only property with given type and name. * Creates only const version. */ #define META_READONLY_ARRAY_PROPERTY(type, name) \ virtual BASE_NS::shared_ptr Property##name() const = 0; \ META_READONLY_ARRAY_PROPERTY_TYPED_IMPL(type, name) /** * @brief Define property with given type and name. * Creates overloads for const and non-const versions. */ #define META_ARRAY_PROPERTY(type, name) \ META_READONLY_ARRAY_PROPERTY(type, name) \ virtual BASE_NS::shared_ptr Property##name() = 0; \ META_ARRAY_PROPERTY_TYPED_IMPL(type, name) /** * @brief Define event with given type and name. */ #define META_EVENT(type, name) \ virtual ::BASE_NS::shared_ptr<::META_NS::IEvent> Event##name() const = 0; \ META_EVENT_TYPED_IMPL(type, name) #endif