* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* This file is part of the MindStudio project.
*
* MindStudio is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------*/
#include "analysis/csrc/domain/services/parser/parser_item_factory.h"
#include "analysis/csrc/infrastructure/dfx/log.h"
namespace Analysis {
namespace Domain {
using ItemFunc = std::function<int(uint8_t *, uint32_t, uint8_t *, uint16_t)>;
using ItemFuncMap = std::unordered_map<uint32_t, ItemFunc>;
ItemFunc ParserItemFactory::GetParseItem(ParserType parserType, uint32_t itemType)
{
std::unordered_map<ParserType, ItemFuncMap> parserItemFuncs = GetContainer();
auto it = parserItemFuncs.find(parserType);
if (it == parserItemFuncs.end()) {
ERROR("GetParseItem return nullptr, parserType: %", parserType);
return nullptr;
}
auto parserFunc = it->second;
auto ans = parserFunc.find(itemType);
if (ans == parserFunc.end()) {
ERROR("GetParseItemFunc return nullptr, parserType: %, itemType: %", parserType, itemType);
return nullptr;
}
return ans->second;
}
ParserItemFactory::ParserItemFactory(ParserType parserType, uint32_t itemType, ItemFunc parserItemFunc)
{
GetContainer()[parserType].emplace(itemType, parserItemFunc);
}
std::unordered_map<ParserType, ItemFuncMap>& ParserItemFactory::GetContainer()
{
static std::unordered_map<ParserType, ItemFuncMap> parserItemFuncs;
return parserItemFuncs;
}
}
}