meta/SaiObject.cpp (60 lines of code) (raw):
#include "SaiObject.h"
#include "swss/logger.h"
#include "sai_serialize.h"
using namespace saimeta;
SaiObject::SaiObject(
_In_ const sai_object_meta_key_t& metaKey):
m_metaKey(metaKey)
{
SWSS_LOG_ENTER();
if (!sai_metadata_is_object_type_valid(metaKey.objecttype))
{
SWSS_LOG_THROW("invalid object type: %d", metaKey.objecttype);
}
}
sai_object_type_t SaiObject::getObjectType() const
{
SWSS_LOG_ENTER();
return m_metaKey.objecttype;
}
bool SaiObject::hasAttr(
_In_ sai_attr_id_t id) const
{
SWSS_LOG_ENTER();
return m_attrs.find(id) != m_attrs.end();
}
const sai_object_meta_key_t& SaiObject::getMetaKey() const
{
SWSS_LOG_ENTER();
return m_metaKey;
}
void SaiObject::setAttr(
_In_ const sai_attr_metadata_t* md,
_In_ const sai_attribute_t *attr)
{
SWSS_LOG_ENTER();
m_attrs[attr->id] = std::make_shared<SaiAttrWrapper>(md, *attr);
}
void SaiObject::setAttr(
_In_ std::shared_ptr<SaiAttrWrapper> attr)
{
SWSS_LOG_ENTER();
m_attrs[attr->getAttrId()] = attr;
}
std::shared_ptr<SaiAttrWrapper> SaiObject::getAttr(
_In_ sai_attr_id_t id) const
{
SWSS_LOG_ENTER();
auto it = m_attrs.find(id);
if (it != m_attrs.end())
return it->second;
return nullptr;
}
std::vector<std::shared_ptr<SaiAttrWrapper>> SaiObject::getAttributes() const
{
SWSS_LOG_ENTER();
std::vector<std::shared_ptr<SaiAttrWrapper>> values;
for (auto&kvp: m_attrs)
values.push_back(kvp.second);
return values;
}