#include "mtms.hpp"

namespace openpower
{
namespace pels
{

MTMS::MTMS()
{
    memset(_machineTypeAndModel.data(), 0, mtmSize);
    memset(_serialNumber.data(), 0, snSize);
}

MTMS::MTMS(const std::string& typeModel, const std::string& serialNumber)
{
    memset(_machineTypeAndModel.data(), 0, mtmSize);
    memset(_serialNumber.data(), 0, snSize);

    // Copy in as much as the fields as possible
    for (size_t i = 0; i < mtmSize; i++)
    {
        if (typeModel.size() > i)
        {
            _machineTypeAndModel[i] = typeModel[i];
        }
    }

    for (size_t i = 0; i < snSize; i++)
    {
        if (serialNumber.size() > i)
        {
            _serialNumber[i] = serialNumber[i];
        }
    }
}

MTMS::MTMS(Stream& stream)
{
    for (size_t i = 0; i < mtmSize; i++)
    {
        stream >> _machineTypeAndModel[i];
    }

    for (size_t i = 0; i < snSize; i++)
    {
        stream >> _serialNumber[i];
    }
}

Stream& operator<<(Stream& s, MTMS& mtms)
{
    for (size_t i = 0; i < MTMS::mtmSize; i++)
    {
        s << mtms.machineTypeAndModel()[i];
    }

    for (size_t i = 0; i < MTMS::snSize; i++)
    {
        s << mtms.machineSerialNumber()[i];
    }

    return s;
}

Stream& operator>>(Stream& s, MTMS& mtms)
{
    for (size_t i = 0; i < MTMS::mtmSize; i++)
    {
        s >> mtms.machineTypeAndModel()[i];
    }

    for (size_t i = 0; i < MTMS::snSize; i++)
    {
        s >> mtms.machineSerialNumber()[i];
    }

    return s;
}
} // namespace pels
} // namespace openpower
