From 53e6b766f2329d29ba581279e185118709282f9f Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/On-Device=20Lab=28SR=29/Staff?= =?utf8?q?=20Engineer/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Wed, 26 Jun 2019 13:26:36 +0900 Subject: [PATCH] [hermes] Extract SourceSetting class (#3976) * [hermes] Extract SourceSetting class This commit extracts SourceSetting class from Source as the first step toward generic (reusable) Config support. Signed-off-by: Jonghyun Park * Fix a typo --- contrib/hermes/include/hermes/core/Source.h | 83 +--------------- contrib/hermes/include/hermes/core/SourceSetting.h | 108 +++++++++++++++++++++ 2 files changed, 112 insertions(+), 79 deletions(-) create mode 100644 contrib/hermes/include/hermes/core/SourceSetting.h diff --git a/contrib/hermes/include/hermes/core/Source.h b/contrib/hermes/include/hermes/core/Source.h index 2dceee5..b408b4a 100644 --- a/contrib/hermes/include/hermes/core/Source.h +++ b/contrib/hermes/include/hermes/core/Source.h @@ -21,6 +21,7 @@ #include "hermes/core/Severity.h" #include "hermes/core/MessageBus.h" #include "hermes/core/MessageBuffer.h" +#include "hermes/core/SourceSetting.h" namespace hermes { @@ -42,85 +43,9 @@ public: virtual void detach(Source *) = 0; }; - class Filter final - { - public: - Filter(int32_t *ptr) : _ptr{ptr} - { - // DO NOTHING - } - - public: - inline void reject_all(void) { *_ptr = -1; } - inline void accept_upto(uint16_t lv) { *_ptr = static_cast(lv); } - inline void accept_all(void) { *_ptr = 65536; } - - private: - int32_t *_ptr; - }; - - class Limit final - { - public: - Limit(const int32_t *ptr) : _ptr{ptr} - { - // DO NOTHING - } - - public: - inline int32_t level(void) const { return *_ptr; } - - private: - const int32_t *_ptr; - }; - - class Setting final - { - public: - Setting() - { - // Reject all the messages by default - reject_all(); - } - - public: - void reject_all(void) - { - filter(FATAL).reject_all(); - filter(ERROR).reject_all(); - filter(WARN).reject_all(); - filter(INFO).reject_all(); - filter(VERBOSE).reject_all(); - } - - void accept_all(void) - { - filter(FATAL).accept_all(); - filter(ERROR).accept_all(); - filter(WARN).accept_all(); - filter(INFO).accept_all(); - filter(VERBOSE).accept_all(); - } - - inline Filter filter(const SeverityCategory &cat) - { - return _ulimits.data() + static_cast(cat); - } - - inline Limit limit(const SeverityCategory &cat) const - { - return _ulimits.data() + static_cast(cat); - } - - private: - /** - * @brief Allowed message level for each category - * - * This source will accept all the messages whose level belongs to [0, ulimit) - * where ulimit corresdpons to "limit(cat).value()" - */ - std::array _ulimits; - }; + // NOTE This using statement is introduced for backward compatibility + // TODO Remove this using declaration after migration + using Setting = SourceSetting; protected: Source(); diff --git a/contrib/hermes/include/hermes/core/SourceSetting.h b/contrib/hermes/include/hermes/core/SourceSetting.h new file mode 100644 index 0000000..3beaaa1 --- /dev/null +++ b/contrib/hermes/include/hermes/core/SourceSetting.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved + * + * 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 __HERMES_SOURCE_SETTING_H__ +#define __HERMES_SOURCE_SETTING_H__ + +#include +#include + +namespace hermes +{ + +class Filter final +{ +public: + Filter(int32_t *ptr) : _ptr{ptr} + { + // DO NOTHING + } + +public: + inline void reject_all(void) { *_ptr = -1; } + inline void accept_upto(uint16_t lv) { *_ptr = static_cast(lv); } + inline void accept_all(void) { *_ptr = 65536; } + +private: + int32_t *_ptr; +}; + +class Limit final +{ +public: + Limit(const int32_t *ptr) : _ptr{ptr} + { + // DO NOTHING + } + +public: + inline int32_t level(void) const { return *_ptr; } + +private: + const int32_t *_ptr; +}; + +class SourceSetting final +{ +public: + SourceSetting() + { + // Reject all the messages by default + reject_all(); + } + +public: + void reject_all(void) + { + filter(FATAL).reject_all(); + filter(ERROR).reject_all(); + filter(WARN).reject_all(); + filter(INFO).reject_all(); + filter(VERBOSE).reject_all(); + } + + void accept_all(void) + { + filter(FATAL).accept_all(); + filter(ERROR).accept_all(); + filter(WARN).accept_all(); + filter(INFO).accept_all(); + filter(VERBOSE).accept_all(); + } + + inline Filter filter(const SeverityCategory &cat) + { + return _ulimits.data() + static_cast(cat); + } + + inline Limit limit(const SeverityCategory &cat) const + { + return _ulimits.data() + static_cast(cat); + } + +private: + /** + * @brief Allowed message level for each category + * + * This source will accept all the messages whose level belongs to [0, ulimit) + * where ulimit corresdpons to "limit(cat).value()" + */ + std::array _ulimits; +}; + +} // namespace hermes + +#endif // __HERMES_SOURCE_SETTING_H__ -- 2.7.4