72 lines
2.1 KiB
C++
72 lines
2.1 KiB
C++
/*
|
|
* 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 <iostream>
|
|
#include <cstring>
|
|
#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
|