5#include "ProtobufMapHelpers.h"
7#include "../Text/Utf8Sanitizer.h"
9namespace Odb::Lib::ProductModel
11 Package::Package(
const std::string& name,
unsigned int index)
23 std::string Package::GetName()
const
28 const Pin::Vector& Package::GetPins()
const
33 std::unique_ptr<Odb::Lib::Protobuf::ProductModel::Package> Package::to_protobuf()
const
35 auto pPackageMsg = std::make_unique<Odb::Lib::Protobuf::ProductModel::Package>();
36 pPackageMsg->set_name(Odb::Lib::Text::ToUtf8(m_name));
37 pPackageMsg->set_index(m_index);
38 for (
const auto& pPin : m_pins)
40 pPackageMsg->add_pins()->CopyFrom(*pPin->to_protobuf());
42 FillProtobufMapWithSanitizedKeys(*pPackageMsg->mutable_pinsbyname(), m_pinsByName);
46 void Package::from_protobuf(
const Odb::Lib::Protobuf::ProductModel::Package& message)
48 m_name = message.name();
49 m_index = message.index();
50 for (
const auto& pinMsg : message.pins())
52 auto pPin = std::make_shared<Pin>(
"", 0);
53 pPin->from_protobuf(pinMsg);
54 m_pins.push_back(pPin);
56 for (
const auto& kvPinMsg : message.pinsbyname())
58 auto pPin = std::make_shared<Pin>(
"", 0);
59 pPin->from_protobuf(kvPinMsg.second);
60 m_pinsByName[kvPinMsg.first] = pPin;
64 unsigned int Package::GetIndex()
const
69 void Package::AddPin(
const std::string& name)
71 auto index =
static_cast<unsigned int>(m_pins.size());
72 auto pPin = std::make_shared<Pin>(name, index);
73 m_pins.push_back(pPin);
74 m_pinsByName[pPin->GetName()] = pPin;
77 std::shared_ptr<Pin> Package::GetPin(
const std::string& name)
const
79 auto findIt = m_pinsByName.find(name);
80 if (findIt != m_pinsByName.end())
82 return findIt->second;
87 std::shared_ptr<Pin> Package::GetPin(
unsigned int index)
const
89 if (index < m_pins.size())
96 const Pin::StringMap& Package::GetPinsByName()
const