OdbDesignLib
OdbDesign ODB++ Parsing Library
 
Loading...
Searching...
No Matches
Package.cpp
1#include "Package.h"
2#include <string>
3#include "package.pb.h"
4#include "Pin.h"
5#include "ProtobufMapHelpers.h"
6#include <memory>
7#include "../Text/Utf8Sanitizer.h"
8
9namespace Odb::Lib::ProductModel
10{
11 Package::Package(const std::string& name, unsigned int index)
12 : m_name(name)
13 , m_index(index)
14 {
15 }
16
17 Package::~Package()
18 {
19 m_pins.clear();
20 m_pinsByName.clear();
21 }
22
23 std::string Package::GetName() const
24 {
25 return m_name;
26 }
27
28 const Pin::Vector& Package::GetPins() const
29 {
30 return m_pins;
31 }
32
33 std::unique_ptr<Odb::Lib::Protobuf::ProductModel::Package> Package::to_protobuf() const
34 {
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)
39 {
40 pPackageMsg->add_pins()->CopyFrom(*pPin->to_protobuf());
41 }
42 FillProtobufMapWithSanitizedKeys(*pPackageMsg->mutable_pinsbyname(), m_pinsByName);
43 return pPackageMsg;
44 }
45
46 void Package::from_protobuf(const Odb::Lib::Protobuf::ProductModel::Package& message)
47 {
48 m_name = message.name();
49 m_index = message.index();
50 for (const auto& pinMsg : message.pins())
51 {
52 auto pPin = std::make_shared<Pin>("", 0);
53 pPin->from_protobuf(pinMsg);
54 m_pins.push_back(pPin);
55 }
56 for (const auto& kvPinMsg : message.pinsbyname())
57 {
58 auto pPin = std::make_shared<Pin>("", 0);
59 pPin->from_protobuf(kvPinMsg.second);
60 m_pinsByName[kvPinMsg.first] = pPin;
61 }
62 }
63
64 unsigned int Package::GetIndex() const
65 {
66 return m_index;
67 }
68
69 void Package::AddPin(const std::string& name)
70 {
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;
75 }
76
77 std::shared_ptr<Pin> Package::GetPin(const std::string& name) const
78 {
79 auto findIt = m_pinsByName.find(name);
80 if (findIt != m_pinsByName.end())
81 {
82 return findIt->second;
83 }
84 return nullptr;
85 }
86
87 std::shared_ptr<Pin> Package::GetPin(unsigned int index) const
88 {
89 if (index < m_pins.size())
90 {
91 return m_pins[index];
92 }
93 return nullptr;
94 }
95
96 const Pin::StringMap& Package::GetPinsByName() const
97 {
98 return m_pinsByName;
99 }
100
101} // namespace Odb::Lib::ProductModel