/* * Copyright (c) CompanyNameMagicTag 2024. All rights reserved. * Description: DialBinParserManager * Author: * Create: 2024-12-03 */ #ifndef GRAPHIC_LITE_DIAL_BIN_PARSER_MANAGER_H #define GRAPHIC_LITE_DIAL_BIN_PARSER_MANAGER_H #include #include #include "graphic_types.h" #include "DialViewGroup.h" #include "DialBinTypes.h" namespace OHOS { class DialBinParserInterface { public: virtual bool UpdateDial(const std::string& file, FILE* fp, DialViewGroup* group, DisplayState state) = 0; virtual bool GetDialPreviewInfo(FILE* fp, DialPreviewInfo* info) = 0; virtual ~DialBinParserInterface() {} }; // class DialBinParserInterface class DialBinParserManager { public: static DialBinParserManager *GetInstance(void); bool UpdateDial(const std::string &file, FILE *fp, DialViewGroup *group, DisplayState state); bool GetDialPreviewInfo(FILE *fp, DialPreviewInfo *info); bool RegisterParser(const std::string &version, DialBinParserInterface *parser); uint8_t GetSupportVersionCnt() const { return cnt_; } bool GetVersionByIndex(uint8_t index, std::string &version) { if (index >= cnt_) { return false; } version = parsers_[index].version; return true; } private: DialBinParserManager(); virtual ~DialBinParserManager(); DialBinParserInterface *GetParser(FILE* fp) const; static constexpr uint8_t PARSER_MAX_NUM = 8; struct Pair { std::string version; DialBinParserInterface *parser = nullptr; }; Pair parsers_[PARSER_MAX_NUM]; uint8_t cnt_ = 0; }; // class DialBinParserManager class DialBinParserRegister { public: DialBinParserRegister(const std::string &version, DialBinParserInterface *parser) { if (!DialBinParserManager::GetInstance()->RegisterParser(version, parser)) { GRAPHIC_LOGE("failed to register %s.", version.c_str()); } } }; // class DialBinParserRegister } // namespace OHOS #define REGIST_PARSER(version, func) \ const static OHOS::DialBinParserRegister STATIC_PARSER_VAR_NAME(version, new func) #endif // GRAPHIC_LITE_DIAL_BIN_PARSER_MANAGER_H