/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
 * 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 "basictypes/StringConstant.h"
StringConstant& StringConstant::getInstance()
{
    thread_local static StringConstant* instance = new StringConstant();
    return *instance;
}

StringConstant::StringConstant() = default;

StringConstant::~StringConstant()
{
    for (auto& pair : stringMap) {
        delete pair.second;
    }
    stringMap.clear();
};

String* StringConstant::get(const std::string& str)
{
    auto it = stringMap.find(str);
    if (it != stringMap.end()) {
        return it->second;
    } else {
        String* newStr = new String(str);
        stringMap[str] = newStr;
        return newStr;
    }
}