1d590543dSopenharmony_ci/* 2d590543dSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3d590543dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d590543dSopenharmony_ci * you may not use this file except in compliance with the License. 5d590543dSopenharmony_ci * You may obtain a copy of the License at 6d590543dSopenharmony_ci * 7d590543dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d590543dSopenharmony_ci * 9d590543dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d590543dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d590543dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d590543dSopenharmony_ci * See the License for the specific language governing permissions and 13d590543dSopenharmony_ci * limitations under the License. 14d590543dSopenharmony_ci */ 15d590543dSopenharmony_ci 16d590543dSopenharmony_ci#ifndef STATS_COMMON_H 17d590543dSopenharmony_ci#define STATS_COMMON_H 18d590543dSopenharmony_ci 19d590543dSopenharmony_ci#include <cstdint> 20d590543dSopenharmony_ci#include <type_traits> 21d590543dSopenharmony_ci 22d590543dSopenharmony_ci#include "stats_errors.h" 23d590543dSopenharmony_ci#include "stats_log.h" 24d590543dSopenharmony_ci 25d590543dSopenharmony_cinamespace OHOS { 26d590543dSopenharmony_cinamespace PowerMgr { 27d590543dSopenharmony_ci#define STATS_RETURN_IF_WITH_RET(cond, retval) if (cond) { return (retval); } 28d590543dSopenharmony_ci#define STATS_RETURN_IF(cond) if (cond) { return; } 29d590543dSopenharmony_ci#define STATS_RETURN_IF_WITH_LOG(loglabel, cond, loginfo) \ 30d590543dSopenharmony_ci do { \ 31d590543dSopenharmony_ci if (cond) { \ 32d590543dSopenharmony_ci STATS_HILOGE(loglabel, ""#loginfo""); \ 33d590543dSopenharmony_ci return; \ 34d590543dSopenharmony_ci } \ 35d590543dSopenharmony_ci } while (0) \ 36d590543dSopenharmony_ci 37d590543dSopenharmony_ci#define STATS_RETURN_IF_READ_PARCEL_FAILED_NO_RET(loglabel, parcel, type, out) \ 38d590543dSopenharmony_ci do { \ 39d590543dSopenharmony_ci if (!(parcel).Read##type(out)) { \ 40d590543dSopenharmony_ci STATS_HILOGE(loglabel, "Read "#out" failed"); \ 41d590543dSopenharmony_ci return; \ 42d590543dSopenharmony_ci } \ 43d590543dSopenharmony_ci } while (0) \ 44d590543dSopenharmony_ci 45d590543dSopenharmony_ci#define STATS_RETURN_IF_WRITE_PARCEL_FAILED_NO_RET(loglabel, parcel, type, data) \ 46d590543dSopenharmony_ci do { \ 47d590543dSopenharmony_ci if (!(parcel).Write##type(data)) { \ 48d590543dSopenharmony_ci STATS_HILOGE(loglabel, "Write "#data" failed"); \ 49d590543dSopenharmony_ci return; \ 50d590543dSopenharmony_ci } \ 51d590543dSopenharmony_ci } while (0) \ 52d590543dSopenharmony_ci 53d590543dSopenharmony_ci#define STATS_RETURN_IF_READ_PARCEL_FAILED_WITH_RET(loglabel, parcel, type, out, retval) \ 54d590543dSopenharmony_ci do { \ 55d590543dSopenharmony_ci if (!(parcel).Read##type(out)) { \ 56d590543dSopenharmony_ci STATS_HILOGE(loglabel, "Read "#out" failed"); \ 57d590543dSopenharmony_ci return (retval); \ 58d590543dSopenharmony_ci } \ 59d590543dSopenharmony_ci } while (0) \ 60d590543dSopenharmony_ci 61d590543dSopenharmony_ci#define STATS_RETURN_IF_WRITE_PARCEL_FAILED_WITH_RET(loglabel, parcel, type, data, retval) \ 62d590543dSopenharmony_ci do { \ 63d590543dSopenharmony_ci if (!(parcel).Write##type(data)) { \ 64d590543dSopenharmony_ci STATS_HILOGE(loglabel, "Write "#data" failed"); \ 65d590543dSopenharmony_ci return (retval); \ 66d590543dSopenharmony_ci } \ 67d590543dSopenharmony_ci } while (0) 68d590543dSopenharmony_ci 69d590543dSopenharmony_citemplate<typename E> 70d590543dSopenharmony_ciconstexpr auto StatsToUnderlying(E e) noexcept 71d590543dSopenharmony_ci{ 72d590543dSopenharmony_ci return static_cast<std::underlying_type_t<E>>(e); 73d590543dSopenharmony_ci} 74d590543dSopenharmony_ci} // namespace PowerMgr 75d590543dSopenharmony_ci} // namespace OHOS 76d590543dSopenharmony_ci 77d590543dSopenharmony_ci#endif // STATS_COMMON_H 78